#!/bin/sh
################################################################################
## ##
## Copyright (c) International Business Machines Corp., 2001 ##
## Author: Manoj Iyer, manjo@mail.utexas.edu ##
## Copyright (c) 2016 Cyril Hrubis <chrubis@suse.cz> ##
## ##
## 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