#!/bin/bash # Copyright 2011 George Danchev # Copyright 2011 Thomas Schmitt # 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