207 lines
4.5 KiB
Bash
Executable File
207 lines
4.5 KiB
Bash
Executable File
#!/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
|