You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
4.7 KiB
188 lines
4.7 KiB
#!/bin/bash |
|
|
|
# Copyright 2011 George Danchev <danchev@spnet.net> |
|
# Copyright 2011 Thomas Schmitt <scdbackup@gmx.net> |
|
# Licensed under GNU GPL version 2 or later |
|
|
|
# set -e |
|
|
|
print_specific_help() { |
|
cat << HLP |
|
Specific options: |
|
--dev path Suppress dialog and use path as drive address. |
|
--priv_cmd 'command [arg [arg ...]]' |
|
With drive operations execute xorriso as argument |
|
of the given command (e.g. pfexec, sudo) with the |
|
optionally given arguments: command arg arg xorriso ... |
|
Command and arguments must be single words. |
|
Overview: |
|
Test device scanning and list of speeds. |
|
HLP |
|
} |
|
|
|
# Include common bits and interpret general options |
|
getopts_inc=inc/releng_getopts.inc |
|
if test -e "$getopts_inc" |
|
then |
|
. "$getopts_inc" |
|
|
|
if test "$SPECIFIC_HELP" = 1 |
|
then |
|
print_specific_help |
|
exit 0 |
|
fi |
|
else |
|
echo >&2 |
|
echo "File not found: $getopts_inc" >&2 |
|
echo "Are we in the ./releng directory of a libisoburn SVN checkout ?" >&2 |
|
echo "(Please execute the tests from that ./releng directory.)" >&2 |
|
echo >&2 |
|
exit 2 |
|
fi |
|
|
|
# Interpret private options, they begin after the first --. |
|
dev= |
|
priv_cmd= |
|
next_is=ignore |
|
for i in "$@" |
|
do |
|
if test "$next_is" = "ignore" |
|
then |
|
if test "$i" = "--" |
|
then |
|
next_is="" |
|
fi |
|
elif test "$next_is" = "dev" |
|
then |
|
dev="$i" |
|
next_is="" |
|
elif test "$next_is" = "priv_cmd" |
|
then |
|
priv_cmd="$i" |
|
next_is="" |
|
elif test "$i" = "--dev" |
|
then |
|
next_is="dev" |
|
elif test "$i" = "--priv_cmd" |
|
then |
|
next_is="priv_cmd" |
|
else |
|
echo >&2 |
|
echo "Unknown test specific option: $i" >&2 |
|
print_help |
|
print_specific_help |
|
exit 31 |
|
fi |
|
done |
|
|
|
# Insist in having a xorriso |
|
check_for_xorriso -x |
|
|
|
has_device_links=$("$RELENG_XORRISO" -help 2>/dev/null | fgrep ' -device_links') |
|
if test -n "$has_device_links" |
|
then |
|
devices_opt="-device_links" |
|
else |
|
devices_opt="-devices" |
|
fi |
|
|
|
# |
|
get_speeds() { |
|
echo -e "\n${SELF}: Running: ${priv_cmd} ${RELENG_XORRISO} -report_about WARNING -outdev ${1} -toc -list_formats -list_profiles out -list_speeds" |
|
${priv_cmd} "$RELENG_XORRISO" -report_about WARNING -outdev "$1" \ |
|
-print '---toc :' -toc \ |
|
-print '---list_formats :' -list_formats \ |
|
-print '---list_profiles :' -list_profiles out \ |
|
-print '---list_speeds :' -list_speeds |
|
} |
|
|
|
cat_var() { |
|
# $1 = variable to put out with line feeds |
|
cat <<+ |
|
$1 |
|
+ |
|
} |
|
|
|
get_devices() { |
|
# $1 = if not empty: device lines from xorriso -devices or -device_links |
|
# $2 = if not empty: suppress dialog and use $2 as input |
|
|
|
if test -n "$1" |
|
then |
|
DEVICES="$1" |
|
else |
|
DEVICES=$( ${priv_cmd} "$RELENG_XORRISO" $devices_opt 2>/dev/null | grep "\-dev") |
|
fi |
|
NUM_DEV=$(cat_var "$DEVICES" | wc -l) |
|
case "${NUM_DEV}" in |
|
0) |
|
echo -e "\n${SELF}: No drives found." |
|
exit 1 |
|
;; |
|
1) |
|
echo -e "\n${SELF}: 1 drive found:\n" |
|
;; |
|
*) |
|
echo -e "\n${SELF}: ${NUM_DEV} drives found:\n" |
|
;; |
|
esac |
|
echo ================================================================= |
|
echo "$DEVICES" |
|
echo ================================================================= |
|
|
|
OUTDEV=$( cat_var "$DEVICES" | head -1 | \ |
|
sed -e "s/[0-9] *-dev '\//\//" -e "s/'.*$//" ) |
|
if test -n "$2" |
|
then |
|
x="$2" |
|
else |
|
echo >&2 |
|
echo "WARNING: The following tests might pull in the drive tray." >&2 |
|
echo " Best is if you now put in a suitable media and" >&2 |
|
echo " load it manually, so nobody gets surprised. :))" >&2 |
|
echo >&2 |
|
echo "Which drive to examine ? (Empty input = ${OUTDEV})" >&2 |
|
read x |
|
fi |
|
if test -n "$x" |
|
then |
|
OUTDEV="$x" |
|
fi |
|
|
|
get_speeds "$OUTDEV" |
|
} |
|
|
|
# main |
|
"$RELENG_XORRISO" -version |
|
echo -e "\n${SELF}: Running: $RELENG_XORRISO $devices_opt ..." |
|
devices=$( ${priv_cmd} "$RELENG_XORRISO" -report_about WARNING $devices_opt | grep "\-dev") |
|
RET="$?" |
|
if test "$SIMULATE_FAILURE" = 1 |
|
then |
|
echo "===" >&2 |
|
echo "=== SIMULATING FAILURE BY OVERRIDING EXIT VALUE OF XORRISO" >&2 |
|
echo "===" >&2 |
|
echo "FAIL : ${SELF} : Simulated failure caused by option -f" |
|
RET=1 |
|
fi |
|
case ${RET} in |
|
0) |
|
get_devices "$devices" "$dev" |
|
RET="$?" |
|
if test "$RET" = 0 |
|
then : |
|
else |
|
echo "FAIL : ${SELF} : Device scan or single drive listing failed" |
|
exit "$RET" |
|
fi |
|
;; |
|
*) |
|
boldify |
|
echo -ne "\n${SELF}: ${priv_cmd} ${RELENG_XORRISO} $devices_opt returned ${RET}." |
|
unboldify |
|
echo -e "\n${SELF}: Already mounted?" |
|
df -kh |
|
exit 1 |
|
esac |
|
|
|
exit 0
|
|
|