1 changed files with 206 additions and 0 deletions
@ -0,0 +1,206 @@
|
||||
#!/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 |
||||
# set -x |
||||
|
||||
print_specific_help() { |
||||
cat << HLP |
||||
Specific options: |
||||
--dev path use path as drive address. Default: /dev/cdrw |
||||
--what path use path as address of the directory which shall |
||||
be copied into an ISO 9660 filesystem on media. |
||||
--any_media allow non re-usable MMC media, like CD-R or DVD+R. |
||||
Allow paths to non-existing files, but disallow paths |
||||
to existing regular files. |
||||
Overview: |
||||
Test burning to re-usable media CD-RW, DVD-RW, DVD-RAM, DVD+RW, BD-RE. |
||||
One time usable media will be rejected deliberately. |
||||
HLP |
||||
} |
||||
|
||||
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 29 |
||||
fi |
||||
|
||||
# Set default values for specific option variables. |
||||
dev=/dev/cdrw |
||||
what=../xorriso |
||||
any_media=0 |
||||
# Interpret specific options, they begin after the first --. |
||||
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" = "what" |
||||
then |
||||
what="$i" |
||||
next_is="" |
||||
elif test "$i" = "--dev" |
||||
then |
||||
next_is="dev" |
||||
elif test "$i" = "--what" |
||||
then |
||||
next_is="what" |
||||
elif test "$i" = "--any_media" |
||||
then |
||||
any_media=1 |
||||
else |
||||
echo >&2 |
||||
echo "Unknown test specific option: $i" >&2 |
||||
print_help |
||||
print_specific_help |
||||
exit 31 |
||||
fi |
||||
done |
||||
|
||||
|
||||
check_for_xorriso -x |
||||
|
||||
|
||||
# check data dir, if any and after checking -x xorriso |
||||
if [ -d "${GEN_DATA_DIR}" ]; then |
||||
printf "\n${SELF}: directory %s exists!" ${GEN_DATA_DIR} |
||||
printf "\n${SELF}: use '${SELF} -c' to remove.\n" |
||||
exit 30 |
||||
else |
||||
mkdir "${GEN_DATA_DIR}" |
||||
fi |
||||
|
||||
|
||||
##################################################################### |
||||
|
||||
# Inspect drive address |
||||
if test -e "$dev" |
||||
then |
||||
if test "$any_media" = 1 -a -f "$dev" |
||||
then |
||||
echo "FAIL: --dev $dev leads to an existing regular file" |
||||
echo |
||||
cleanup |
||||
exit 31 |
||||
fi |
||||
else |
||||
if test "$any_media" = "0" |
||||
then |
||||
echo "FAIL: --dev $dev does not lead to an existing file" |
||||
echo |
||||
cleanup |
||||
exit 31 |
||||
fi |
||||
fi |
||||
|
||||
# Inspect media |
||||
set +e |
||||
res=$("$RELENG_XORRISO" -outdev "$dev" 2>&1) |
||||
ret=$? |
||||
set -e |
||||
if test "$ret" -ne 0 |
||||
then |
||||
echo "$res" >&2 |
||||
echo "FAIL: Non-zero exit value $ret with: $RELENG_XORRISO -outdev $dev" |
||||
echo |
||||
cleanup |
||||
exit 1 |
||||
elif echo "$res" | grep '^Media current:' >/dev/null 2>&1 |
||||
then |
||||
media=$(echo "$res" | grep '^Media current:' | \ |
||||
sed -e 's/^Media current: //') |
||||
echo "Detected media: '$media'" |
||||
if test "$media" = "CD-RW" -o "$media" = "DVD-RW sequential recording" -o \ |
||||
"$media" = "DVD-RW restricted overwrite" -o "$media" = "DVD-RAM" -o \ |
||||
"$media" = "DVD+RW" -o "$media" = "BD-RE" |
||||
then |
||||
echo "Recognized as re-usable." |
||||
elif test "$media" = "is not recognizable" |
||||
then |
||||
echo "FAIL: No recognizable media detected in: '$dev'" |
||||
echo |
||||
cleanup |
||||
exit 2 |
||||
elif test "$any_media" = 1 |
||||
then |
||||
echo "Accepted media only because of option --any_media : '$media'" |
||||
else |
||||
echo "FAIL: No re-usable media detected, but: '$media'" |
||||
echo |
||||
cleanup |
||||
exit 2 |
||||
fi |
||||
fi |
||||
|
||||
# Perform burn run |
||||
echo "$RELENG_XORRISO" -for_backup -outdev "$dev" -blank as_needed -map "$what" /test |
||||
set +e |
||||
"$RELENG_XORRISO" \ |
||||
-for_backup \ |
||||
-outdev "$dev" \ |
||||
-blank as_needed \ |
||||
-map "$what" /test |
||||
ret=$? |
||||
set -e |
||||
if test "$ret" -ne 0 |
||||
then |
||||
echo "FAIL: Non-zero exit value with burn run: $ret" |
||||
echo |
||||
cleanup |
||||
exit 1 |
||||
fi |
||||
|
||||
# >>> simulate failure |
||||
# >>> if test -f "$dev" |
||||
# >>> then |
||||
# >>> ... alter image ... |
||||
# >>> fi |
||||
|
||||
# Check read |
||||
echo "$RELENG_XORRISO" -for_backup -indev "$dev" \ |
||||
-check_media event=FATAL -- \ -check_md5_r FATAL / -- |
||||
set +e |
||||
"$RELENG_XORRISO" \ |
||||
-for_backup \ |
||||
-indev "$dev" \ |
||||
-print '---check_media:' -check_media event=FATAL -- \ |
||||
-print '---check_md5_r:' -check_md5_r FATAL / -- \ |
||||
-print '---compare_r:' -md5 off -compare_r "$what" /test |
||||
ret=$? |
||||
set -e |
||||
if test "$ret" -ne 0 |
||||
then |
||||
echo "FAIL: Non-zero exit value with checkread run: $ret" |
||||
echo |
||||
cleanup |
||||
exit 1 |
||||
fi |
||||
|
||||
echo "Ok. Burn test passed." |
||||
echo |
||||
cleanup |
||||
exit 0 |
Loading…
Reference in new issue