#!/bin/sh ################################################################################ ## ## ## Copyright (c) International Business Machines Corp., 2001 ## ## Author: Manoj Iyer, manjo@mail.utexas.edu ## ## Copyright (c) 2016 Cyril Hrubis ## ## ## ## This program is free software; you can redistribute it and#or modify ## ## it under the terms of the GNU General Public License as published by ## ## the Free Software Foundation; either version 2 of the License, or ## ## (at your option) any later version. ## ## ## ## This program is distributed in the hope that it will be useful, but ## ## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ## ## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ## ## for more details. ## ## ## ## You should have received a copy of the GNU General Public License ## ## along with this program; if not, write to the Free Software Foundation, ## ## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ## ## ## ################################################################################ # # Tests basic functionality of eject command. # TST_CNT=4 TST_SETUP=setup TST_CLEANUP=cleanup TST_TESTFUNC=test TST_NEEDS_TMPDIR=1 TST_NEEDS_ROOT=1 TST_NEEDS_CMDS="eject" . tst_test.sh setup() { CD_DRIVE="/dev/cdrom" if ! [ -e "$CD_DRIVE" ]; then tst_brk TCONF "There is no "$CD_DRIVE"" fi if grep -q "$CD_DRIVE" /proc/mounts; then tst_brk TCONF "$CD_DRIVE is already mounted" fi ROD mkdir "cdrom" } cleanup() { # We have to use the mount point since /dev/cdrom may be link to # /dev/sr0 and because of that /dev/cdrom is not listed in /proc/mounts tst_umount "$PWD/cdrom" } test1() { EXPECT_PASS eject -d \> eject.out if grep -q "eject: default device:" eject.out; then tst_res TPASS "Eject listed default device" else tst_res TFAIL "Eject failed to list default device" cat eject.out fi } test2() { EXPECT_PASS eject -v $CD_DRIVE \> eject.out if grep -q "CD-ROM eject command succeeded" eject.out; then # Close the tray if it is supported. eject -t $CD_DRIVE > /dev/null 2>&1 tst_res TPASS "Drive successfully ejected" else tst_res TFAIL "Eject failed" cat eject.out fi } mount_cdrom() { local tries=100 # Wait for the drive to spin up the disk while [ $tries -gt 0 ]; do eject_check_tray $CD_DRIVE if [ $? -eq 4 ]; then break fi tst_sleep 100ms tries=$((tries-1)) done mount "$CD_DRIVE" cdrom/ > mount.out 2>&1 if [ $? -eq 32 ]; then tst_res TCONF "Failed to mount $CD_DRIVE, no disk in drive?" cat mount.out return 0 fi tst_res TINFO "$CD_DRIVE mounted sucessfully" return 1 } test3() { if mount_cdrom; then return fi test2 if grep -q "$CD_DRIVE" /proc/mounts; then tst_res TFAIL "$CD_DRIVE is stil moutned" else tst_res TPASS "$CD_DRIVE umounted succesfully" fi } test4() { if mount_cdrom; then return fi EXPECT_PASS eject -a on $CD_DRIVE eject_check_tray $CD_DRIVE if [ $? -eq 2 ]; then tst_brk TBROK "$CD_DRIVE is mounted but tray is open" fi EXPECT_PASS umount $CD_DRIVE eject_check_tray $CD_DRIVE if [ $? -eq 2 ]; then tst_res TPASS "$CD_DRIVE was auto-ejected" else tst_res TFAIL "$CD_DRIVE was not auto-ejected" fi EXPECT_PASS eject -a off $CD_DRIVE eject -t $CD_DRIVE > /dev/null 2>&1 if mount_cdrom; then return fi EXPECT_PASS umount $CD_DRIVE eject_check_tray $CD_DRIVE if [ $? -eq 2 ]; then tst_res TFAIL "$CD_DRIVE was auto-ejected" else tst_res TPASS "$CD_DRIVE was not auto-ejected" fi } tst_run