libisoburn/releng/test_hardlinks

251 lines
6.0 KiB
Plaintext
Raw Normal View History

2011-06-27 10:59:57 +00:00
#!/bin/bash
# ts 2011.06.27
# Test the correct handling of hardlinks by xorriso options
2011-06-27 12:33:25 +00:00
# -update_r , -hardlinks perform_update , and -extract
export prog=$(basename "$0")
2011-06-27 10:59:57 +00:00
export xorriso=xorriso
export workdir=./tmp/"$prog".result
export image_file="$workdir"/xorriso_hardlinks.iso
export on_disk="$workdir"/xorriso_hardlinks_test_dir
2011-06-27 14:28:18 +00:00
export in_iso=""
export copy_on_disk="$workdir"/xorriso_hardlinks_copy_dir
2011-06-27 10:59:57 +00:00
export keep=0
export failure=0
export simulate_failure=0
2011-06-27 10:59:57 +00:00
export next_is_xorriso=0
2011-06-27 14:28:18 +00:00
export next_is_rc=0
2011-06-27 12:33:25 +00:00
export bad=0
2011-06-27 16:55:37 +00:00
export report_about="-report_about UPDATE"
2011-06-27 14:28:18 +00:00
config_by_var() {
# This is called once before option interpretation, and once for each
# option -rc.
# Variables get set to empty content to keep them from being applied
# more than once and thus overriding settings of higher precedence.
# >>> The short names are not good.
# >>> Environment variables should have a common prefix. Like RELENG_
# >>> In general, the names should be a bit more expressive.
# >>> Like RELENG_XORRISO
test -n "$XOR" && xorriso="$XOR" && XOR=
test -n "$RELENG_XORRISO" && xorriso="$RELENG_XORRISO" && RELENG_XORRISO=
test -n "$IMG" && image_file="$IMG" && IMG=
test -n "$RELENG_WORKIMAGE" && image_file="$RELENG_WORKIMAGE" \
&& RELENG_WORKIMAGE=
2011-06-27 14:28:18 +00:00
# This is not $DIR, which would exist before and after the test,
# but a temporary directory which may not exist before.
test -n "$RELENG_WORKDIR" && on_disk="$RELENG_WORKDIR" && RELENG_WORKDIR=
2011-06-27 14:28:18 +00:00
test -n "$RELENG_ISODIR" && in_iso="$RELENG_ISODIR" && RELENG_ISODIR=
test -n "$RELENG_WORKCOPYDIR" && copy_on_disk="$RELENG_WORKCOPYDIR" \
&& RELENG_WORKCOPYDIR=
2011-06-27 14:28:18 +00:00
}
2011-06-27 10:59:57 +00:00
clean_up() {
if test "$keep" = 1
then
2011-06-27 12:33:25 +00:00
echo "=== Kept test area because of option -keep" >&2
echo "$on_disk" "$copy_on_disk" "$image_file" "$workdir" >&2
2011-06-27 10:59:57 +00:00
else
2011-06-27 12:33:25 +00:00
echo "=== Removing test area" >&2
2011-06-27 10:59:57 +00:00
rm -r "$on_disk" "$copy_on_disk" "$image_file"
rm -r "$workdir"
2011-06-27 10:59:57 +00:00
fi
}
2011-06-27 14:28:18 +00:00
# Setup
2011-06-27 14:28:18 +00:00
# Interpret a default configuration file here, if the test has one.
# This one has none.
# >>> Best would be if the configuration file would not override env variables.
# Process env variables and default configfile variables together
config_by_var
# Now interpret program arguments and possibly given config files
2011-06-27 10:59:57 +00:00
for i in "$@"
do
if test "$next_is_xorriso" = 1
then
xorriso="$i"
next_is_xorriso=0
2011-06-27 14:28:18 +00:00
elif test "$next_is_rc" = 1
2011-06-27 10:59:57 +00:00
then
2011-06-27 14:28:18 +00:00
# >>> This looks darn dangerous. We need a trustworthy config interpreter.
# >>> http://www.netjeff.com/humor/item.cgi?file=ShootInFoot-OS
. "$i"
config_by_var
next_is_rc=0
2011-06-27 10:59:57 +00:00
elif test x"$i" = x"-rc"
then
2011-06-27 14:28:18 +00:00
next_is_rc=1
2011-06-27 10:59:57 +00:00
elif test x"$i" = x"-keep"
then
keep=1
2011-06-27 15:21:14 +00:00
elif test x"$i" = x"-cleanup"
2011-06-27 10:59:57 +00:00
then
keep=0
clean_up
exit 0
elif test x"$i" = x"-xorriso"
then
next_is_xorriso=1
2011-06-27 16:55:37 +00:00
elif test x"$i" = x"-v"
then
report_about="-report_about ALL"
elif test x"$i" = x"-fail"
then
simulate_failure=1
2011-06-27 10:59:57 +00:00
else
echo "Usage: $0 [-rc FILE] [-keep] [-cleanup] [-fail] [-xorriso PATH] [-v]" >&2
2011-06-27 10:59:57 +00:00
exit 2
fi
done
2011-06-27 14:28:18 +00:00
test -z "$in_iso" && in_iso="$on_disk"
if test -d ./tmp
then
dummy=dummy
else
echo "=== TEST ENVIRONMENT ERROR: $prog : No ./tmp directory existing" >&2
echo "FAIL : $prog : Test environment error : No ./tmp directory"
exit 3
fi
if test -e "$workdir"
then
echo "=== TEST ENVIRONMENT ERROR: $prog : Existing work directory:" >&2
ls -ld "$workdir" >&2
bad=1
fi
2011-06-27 10:59:57 +00:00
if test -e "$image_file"
then
2011-06-27 14:28:18 +00:00
echo "=== TEST ENVIRONMENT ERROR: $prog : Existing image_file target:" >&2
2011-06-27 10:59:57 +00:00
ls -ld "$image_file" >&2
2011-06-27 12:33:25 +00:00
bad=1
2011-06-27 10:59:57 +00:00
fi
if test -e "$on_disk"
then
2011-06-27 14:28:18 +00:00
echo "=== TEST ENVIRONMENT ERROR: $prog : Existing on_disk target:" >&2
2011-06-27 10:59:57 +00:00
ls -ld "$on_disk" >&2
2011-06-27 12:33:25 +00:00
bad=1
2011-06-27 10:59:57 +00:00
fi
if test -e "$copy_on_disk"
then
2011-06-27 14:28:18 +00:00
echo "=== TEST ENVIRONMENT ERROR: $prog : Existing copy_on_disk target:" >&2
2011-06-27 10:59:57 +00:00
ls -ld "$copy_on_disk" >&2
2011-06-27 12:33:25 +00:00
bad=1
fi
if test "$bad" = 1
then
echo "FAIL : $prog : Test environment error : Existing work files"
2011-06-27 15:21:14 +00:00
exit 3
2011-06-27 10:59:57 +00:00
fi
bad=0
mkdir "$workdir" || bad=1
mkdir "$on_disk" || bad=1
if test "$bad" = 1
then
echo "FAIL : $prog : Test environment error : Cannot make directories"
exit 3
fi
2011-06-27 12:33:25 +00:00
echo "=== Setting up $on_disk with several hardlinks" >&2
2011-06-27 10:59:57 +00:00
echo test_content >"$on_disk"/file_1 || exit 1
echo test_content >"$on_disk"/file_2 || exit 1
ln "$on_disk"/file_1 "$on_disk"/file_1_link_a || exit 1
ln "$on_disk"/file_1 "$on_disk"/file_1_link_b || exit 1
ln "$on_disk"/file_2 "$on_disk"/file_2_link_a || exit 1
ls -l "$on_disk"/*
2011-06-27 12:33:25 +00:00
echo "=== Producing simple image" >&2
2011-06-27 10:59:57 +00:00
"$xorriso" \
2011-06-27 16:55:37 +00:00
$report_about \
2011-06-27 14:28:18 +00:00
-version \
2011-06-27 10:59:57 +00:00
-for_backup \
2011-06-27 14:28:18 +00:00
-padding 0 \
2011-06-27 10:59:57 +00:00
-outdev "$image_file" \
-update_r "$on_disk" "$in_iso" \
-hardlinks perform_update
2011-06-27 12:33:25 +00:00
echo "=== Copying from image to temporary disk tree" >&2
2011-06-27 10:59:57 +00:00
"$xorriso" \
2011-06-27 16:55:37 +00:00
$report_about \
2011-06-27 10:59:57 +00:00
-for_backup \
-indev "$image_file" \
-osirrox on \
-find "$in_iso" -exec lsdl -- \
-extract "$in_iso" "$copy_on_disk"
2011-06-27 12:33:25 +00:00
if test "$simulate_failure" = 1
then
echo "===" >&2
echo "=== SIMULATING FAILURE BY REMOVING AN EXTRACTED FILE" >&2
echo "===" >&2
echo "FAIL : $prog : Simulated failure caused by option -fail"
rm "$copy_on_disk"/file_1_link_b
fi
2011-06-27 12:33:25 +00:00
2011-06-27 14:28:18 +00:00
2011-06-27 12:33:25 +00:00
echo "=== Comparing original disk tree and temporary one" >&2
2011-06-27 10:59:57 +00:00
diff -r "$on_disk" "$copy_on_disk"
if test "$?" -ne 0
then
2011-06-27 14:28:18 +00:00
echo "=== WRONG: diff -r $on_disk $copy_on_disk reports differences" >&2
echo "FAIL : $prog : diff -r reports differences"
2011-06-27 10:59:57 +00:00
failure=1
2011-06-27 12:33:25 +00:00
else
echo "=== OK" >&2
2011-06-27 10:59:57 +00:00
fi
2011-06-27 12:33:25 +00:00
echo "=== Checking for hardlinks being siblings" >&2
2011-06-27 10:59:57 +00:00
ls -l "$copy_on_disk"/*
x=$(echo $(ls -l "$copy_on_disk"/* | awk '{print $2}'))
expected="3 3 3 2 2"
if test x"$x" = x"$expected"
then
2011-06-27 12:33:25 +00:00
echo "=== OK" >&2
2011-06-27 10:59:57 +00:00
else
2011-06-27 14:28:18 +00:00
echo "=== WRONG: Link count of extracted files is not as expected." >&2
echo "=== Expected: $expected" >&2
echo "=== Got : $x" >&2
echo "FAIL : $prog : Link count of extracted files is not as expected."
2011-06-27 10:59:57 +00:00
failure=1
fi
clean_up
# Report result
echo
if test "$failure" = 1
then
2011-06-27 14:28:18 +00:00
echo "======== $prog :" 'FAILED'
echo
2011-06-27 15:21:14 +00:00
exit 1
2011-06-27 10:59:57 +00:00
else
2011-06-27 14:28:18 +00:00
echo "======== $prog :" "Passed"
2011-06-27 15:21:14 +00:00
echo
2011-06-27 10:59:57 +00:00
fi
2011-06-27 15:21:14 +00:00
exit 0