#!/bin/bash # ts 2011.06.27 # Test the correct handling of hardlinks by xorriso options # -update_r , -hardlinks perform_update , and -extract export prog=$(basename "$0") export xorriso=xorriso export image_file=/tmp/xorriso_hardlinks.iso export on_disk=/tmp/xorriso_hardlinks_test_dir export in_iso="$on_disk" export copy_on_disk=/tmp/xorriso_hardlinks_copy_dir export keep=0 export failure=0 export next_is_xorriso=0 export bad=0 clean_up() { if test "$keep" = 1 then echo "=== Kept test area because of option -keep" >&2 echo "$on_disk" "$copy_on_disk" "$image_file" >&2 else echo "=== Removing test area" >&2 rm -r "$on_disk" "$copy_on_disk" "$image_file" fi } skip=0 for i in "$@" do if test "$next_is_xorriso" = 1 then xorriso="$i" next_is_xorriso=0 elif test "$skip" -gt 0 then skip=$(expr $skip - 1) elif test x"$i" = x"-rc" then # No configuration yet skip=1 elif test x"$i" = x"-keep" then keep=1 elif test x"$i" = x"-clean_up" then keep=0 clean_up exit 0 elif test x"$i" = x"-xorriso" then next_is_xorriso=1 else echo "Usage: $0 [-rc FILE] [-keep] [-clean_up] [-xorriso PATH]" >&2 exit 2 fi done if test -e "$image_file" then echo "TEST ENVIRONMENT ERROR: $prog : Existing image_file target:" >&2 ls -ld "$image_file" >&2 bad=1 fi if test -e "$on_disk" then echo "TEST ENVIRONMENT ERROR: $prog : Existing on_disk target:" >&2 ls -ld "$on_disk" >&2 bad=1 fi if test -e "$copy_on_disk" then echo "TEST ENVIRONMENT ERROR: $prog : Existing copy_on_disk target:" >&2 ls -ld "$copy_on_disk" >&2 bad=1 fi if test "$bad" = 1 then exit 1 fi echo "=== Setting up $on_disk with several hardlinks" >&2 mkdir "$on_disk" || exit 1 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"/* echo "=== Producing simple image" >&2 "$xorriso" \ -for_backup \ -outdev "$image_file" \ -update_r "$on_disk" "$in_iso" \ -hardlinks perform_update echo "=== Copying from image to temporary disk tree" >&2 "$xorriso" \ -for_backup \ -indev "$image_file" \ -osirrox on \ -find "$in_iso" -exec lsdl -- \ -extract "$in_iso" "$copy_on_disk" ## For testing the test: Let it fail deliberately ## rm "$copy_on_disk"/file_1_link_b echo "=== Comparing original disk tree and temporary one" >&2 diff -r "$on_disk" "$copy_on_disk" if test "$?" -ne 0 then echo "WRONG: diff -r $on_disk $copy_on_disk reports differences" >&2 failure=1 else echo "=== OK" >&2 fi echo "=== Checking for hardlinks being siblings" >&2 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 echo "=== OK" >&2 else echo "WRONG: Link count of extracted files is not as expected." >&2 echo "Expected: $expected" >&2 echo "Got : $x" >&2 failure=1 fi clean_up # Report result echo if test "$failure" = 1 then echo "======== $prog :" 'FAILURE !!!' else echo "======== $prog :" "Success." fi echo