libisoburn/releng/releng_isocontent

151 lines
4.2 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
2011-07-08 12:42:05 +00:00
. inc/releng_getopts.inc
2011-06-27 10:59:57 +00:00
2011-07-08 12:42:05 +00:00
if [ ! -x $RELENG_XORRISO ]; then
print_help
printf "\n${SELF}: -x absolute or relative path to binary to be run.\n\n"
exit 31
fi
2011-07-08 13:05:21 +00:00
# check data dir, if any and after checking -x xorriso
2011-07-09 15:57:52 +00:00
if [ -d "${GEN_DATA_DIR}" ]; then
printf "\n${SELF}: directory %s exists!" ${GEN_DATA_DIR}
printf "\n${SELF}: use '${SELF} -c1' to remove.\n"
exit 8
else
mkdir "${GEN_DATA_DIR}"
fi
2011-07-08 13:05:21 +00:00
2011-07-08 12:42:05 +00:00
export xorriso=${RELENG_XORRISO}
export workdir=${GEN_DATA_DIR}
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 failure=0
2011-07-08 12:42:05 +00:00
export simulate_failure=${SIMULATE_FAILURE}
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
test -z "$in_iso" && in_iso="$on_disk"
2011-07-09 15:57:52 +00:00
# mkdir "$workdir" || bad=1
mkdir "$on_disk" || bad=1
if test "$bad" = 1
then
2011-07-09 15:57:52 +00:00
echo -e "\n${SELF}: FAIL : Test environment error : Cannot make directories"
exit 3
fi
2011-07-09 15:57:52 +00:00
# All must be set at this point
2011-07-10 07:06:30 +00:00
printf "\n${SELF}: Setting up $on_disk with several hardlinks\n" >&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-07-09 15:57:52 +00:00
# trivial ISO 9660 image validation routine
2011-07-07 14:11:12 +00:00
is_valid_iso9660() {
ISOfile="$1"
if [ ! -f ${ISOfile} ]; then
failure=1
2011-07-09 15:57:52 +00:00
printf "\n${SELF}: FAIL: Not found: ${ISOfile}\n"
2011-07-07 14:11:12 +00:00
fi
if file ${ISOfile} | grep -P "ISO\s+9660\s+CD-ROM\s+filesystem\s+data" >/dev/null 2>&1; then
2011-07-09 15:57:52 +00:00
printf "\n${SELF}: Resulting ${ISOfile} OK. Looks like ISO 9660 filesystem.\n"
2011-07-07 14:11:12 +00:00
else
failure=1
2011-07-09 15:57:52 +00:00
printf "\n${SELF}: FAIL: ${ISOfile} DOES NOT look like ISO 9660 filesystem data.\n"
2011-07-07 14:11:12 +00:00
fi
}
2011-07-09 15:57:52 +00:00
echo -e "\n${SELF}: Producing simple image via -o" >&2
2011-07-07 14:11:12 +00:00
"$xorriso" -as mkisofs "$on_disk" -o "$workdir"/image_minus_o.iso
is_valid_iso9660 "$workdir"/image_minus_o.iso
2011-07-09 15:57:52 +00:00
echo -e "\n${SELF}: Producing simple image via redirect" >&2
2011-07-07 14:11:12 +00:00
"$xorriso" -as mkisofs "$on_disk" > "$workdir"/image_redirected.iso
is_valid_iso9660 "$workdir"/image_redirected.iso
2011-07-09 15:57:52 +00:00
echo -e "\n${SELF}: Producing simple image via pipe" >&2
2011-07-07 14:11:12 +00:00
"$xorriso" -as mkisofs "$on_disk" | cat > "$workdir"/image_piped.iso
is_valid_iso9660 "$workdir"/image_piped.iso
2011-07-09 15:57:52 +00:00
echo -e "\n${SELF}: Producing simple image with for_backup/update_r/hardlinks" >&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-07-09 09:13:06 +00:00
is_valid_iso9660 "$image_file"
2011-06-27 10:59:57 +00:00
2011-07-09 15:57:52 +00:00
echo -e "\n${SELF}: 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
2011-07-09 15:57:52 +00:00
echo -e "\n${SELF}: SIMULATING FAILURE BY REMOVING AN EXTRACTED FILE" >&2
echo -e "\n${SELF}: FAIL : 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-07-09 15:57:52 +00:00
printf "\n${SELF}: 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-07-09 15:57:52 +00:00
echo -e "\n${SELF}: FAIL : diff -r $on_disk $copy_on_disk reports differences" >&2
echo -e "\n${SELF}: FAIL : diff -r reports differences"
2011-06-27 10:59:57 +00:00
failure=1
2011-06-27 12:33:25 +00:00
else
2011-07-09 15:57:52 +00:00
printf "OK" >&2
2011-06-27 10:59:57 +00:00
fi
2011-07-09 15:57:52 +00:00
printf "\n${SELF}: Checking for hardlinks being siblings...\n"
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-07-09 15:57:52 +00:00
printf "\n${SELF}: Checking for hardlinks being siblings. Done. OK.\n" >&2
2011-06-27 10:59:57 +00:00
else
2011-07-09 15:57:52 +00:00
printf "\n${SELF}: FAIL : Link count of extracted files is not as expected." >&2
printf "\n${SELF}: Expected: $expected" >&2
printf "\n${SELF}: Got : $x\n" >&2
2011-06-27 10:59:57 +00:00
failure=1
fi
2011-07-09 15:57:52 +00:00
#
2011-07-08 12:42:05 +00:00
cleanup
2011-06-27 10:59:57 +00:00
# Report result
echo
if test "$failure" = 1
then
2011-07-09 15:57:52 +00:00
printf "${SELF}: FAILED"
echo
2011-06-27 15:21:14 +00:00
exit 1
2011-06-27 10:59:57 +00:00
else
2011-07-09 15:57:52 +00:00
printf "${SELF}: 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