148 lines
2.6 KiB
Bash
Executable File
148 lines
2.6 KiB
Bash
Executable File
#!/bin/sh
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
# Copyright (c) International Business Machines Corp., 2001
|
|
# Copyright (c) 2016 Cyril Hrubis <chrubis@suse.cz>
|
|
# Author: Manoj Iyer <manjo@mail.utexas.edu>
|
|
#
|
|
# 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
|