X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=tests%2Ftest-imagex-capture_and_apply;h=65c7061dc390f27745765e056f1ced8308df0e39;hp=1dfc9431568662f92613753be8ba9e58b1bd30a4;hb=d85424218ef1148204aac3289bbf4ba2c0da9255;hpb=4b249654b4e9a339f96c426749c281db66088dcd diff --git a/tests/test-imagex-capture_and_apply b/tests/test-imagex-capture_and_apply index 1dfc9431..65c7061d 100755 --- a/tests/test-imagex-capture_and_apply +++ b/tests/test-imagex-capture_and_apply @@ -14,39 +14,10 @@ srcdir="${srcdir:-.}/.." srcdir="$(cd $srcdir; pwd)" . "$srcdir/tests/tests-common.sh" - -imagex() { - echo "imagex $@" - ../imagex "$@" > /dev/null -} - -imagex_info() { - echo "imagex info $@" - ../imagex info "$@" -} - -init() { - mkdir in.dir out.dir -} - -cleanup() { - rm -rf in.dir out.dir test*.wim test*.swm -} - -error() { - echo "****************************************************************" - echo " Test failure " - echo $* - echo "****************************************************************" - exit 1 -} - -wim_ctype() { - ../imagex info $1 | grep Compression | awk '{print $2}' -} +TEST_SUBDIR=tmpdir_test-imagex-capture_and_apply do_tree_cmp() { - if ! ./tree-cmp in.dir out.dir; then + if ! ../tree-cmp in.dir out.dir; then if [ -x /usr/bin/tree ]; then echo "Dumping tree of applied image" echo "(Note: compression type was $ctype)" @@ -59,7 +30,7 @@ do_tree_cmp() { image_name=0 do_test() { - for ctype in None LZX XPRESS; do + for ctype in None XPRESS LZX; do # Can we capture the WIM, apply it, and get the same result? cd in.dir @@ -68,32 +39,35 @@ do_test() { if [ -x /usr/bin/tree -a "$ctype" = "None" ]; then tree in.dir --inodes -F -s --noreport fi - if ! imagex capture in.dir test.wim --compress=$ctype; then + if ! wimcapture in.dir test.wim --compress=$ctype --norpfix; then error "Failed to capture directory tree into a WIM" fi - if ! imagex apply test.wim 1 out.dir; then + if ! wimapply test.wim 1 out.dir; then error "Failed to apply WIM to directory" fi if [ `wim_ctype test.wim` != $ctype ]; then - error "'imagex info' didn't report the compression type on the captured WIM correctly" + error "'wiminfo' didn't report the compression type on the captured WIM correctly" fi do_tree_cmp rm -rf out.dir/* # Can we split the WIM, apply the split WIM, join the split WIM, # and apply the joined WIM, and get the same results every time? - if ! imagex split test.wim test.swm 0.01; then + # + # LC_ALL=C avoids locale-dependent floating point number + # parsing. + if ! LC_ALL=C wimsplit test.wim test.swm 0.01; then error "Failed to split WIM" fi - if ! imagex apply test.swm 1 out.dir --ref "test*.swm" ; then + if ! wimapply test.swm 1 out.dir --ref "test*.swm" ; then error "Failed to apply split WIM" fi do_tree_cmp rm -rf out.dir/* test.wim - if ! imagex join test.wim test*.swm; then + if ! wimjoin test.wim test*.swm; then error "Failed to join split WIM" fi - if ! imagex apply test.wim out.dir; then + if ! wimapply test.wim out.dir; then error "Failed to apply joined WIM" fi do_tree_cmp @@ -102,14 +76,49 @@ do_test() { # Can we export the image to another WIM, apply it, and get the # same results? (( image_name++ )) || true - if ! imagex export test.wim 1 test2.wim "$image_name"; then + if ! wimexport test.wim 1 test2.wim "$image_name"; then error "Failed to export WIM image" fi - if ! imagex apply test2.wim "$image_name" out.dir; then + if ! wimapply test2.wim "$image_name" out.dir; then error "Failed to apply exported WIM image" fi do_tree_cmp + rm -rf out.dir/* + + # Try pipable WIM (don't bother testing all compression types + # though, it shouldn't make a difference). + if [ "$ctype" = "None" ]; then + # Capture pipable WIM (not writing to pipe) + if ! wimcapture in.dir test.wim \ + --compress=$ctype --norpfix --pipable; then + error "Failed to capture directory tree into a pipable WIM" + fi + + # Apply pipable WIM (reading from pipe) + if ! cat test.wim | wimapply - 1 out.dir; then + error "Failed to apply pipable WIM to directory (from pipe)" + fi + do_tree_cmp + rm -rf out.dir/* + + # Apply pipable WIM (not reading from pipe) + if ! wimapply test.wim 1 out.dir; then + error "Failed to apply pipable WIM to directory (not from pipe)" + fi + do_tree_cmp + rm -rf out.dir/* + + # Capture pipable WIM (writing to pipe) and read pipable + # WIM (reading from pipe) + if ! wimlib_imagex capture --pipable --compress=$ctype \ + --norpfix --pipable \ + in.dir - | wimapply - 1 out.dir; then + error "Failed to capture directory tree into a pipable WIM" + fi + do_tree_cmp + rm -rf out.dir/* + fi rm -rf out.dir/* in.dir/* test.wim test*.swm @@ -126,8 +135,10 @@ msg() { __msg "Testing image capture and application of directory containing $1" } -cleanup -init +default_cleanup +mkdir $TEST_SUBDIR +cd $TEST_SUBDIR +mkdir in.dir out.dir . $srcdir/tests/common_tests.sh @@ -135,15 +146,125 @@ init __msg "Testing default capture configuration file" touch in.dir/hiberfil.sys mkdir -p "in.dir/System Volume Information/subdir" -imagex capture in.dir test.wim -imagex apply test.wim out.dir +wimcapture in.dir test.wim +wimapply test.wim out.dir if [ -e out.dir/hiberfil.sys -o -e "out.dir/System Volume Information" ]; then error "Files were not excluded from capture as expected" fi -rm -rf out.dir/* in.dir/* -cleanup +# Make sure reparse point fixups are working as expected +__msg "Testing --rpfix" +rm -r in.dir out.dir +mkdir in.dir +ln -s $PWD/in.dir in.dir/absrootlink +ln -s $PWD/in.dir//// in.dir/absrootlinkslashes +ln -s /___NONEXISTENT___ in.dir/absnonexistent +ln -s /usr/bin/env in.dir/absoutoftree +ln -s file in.dir/relalink +ln -s $PWD/in.dir/file in.dir/abslink +ln -s $PWD/in.dir/file/// in.dir/abslinkslashes +wimcapture --rpfix in.dir test.wim +wimapply --norpfix test.wim out.dir +if [[ `readlink out.dir/absrootlink` != "/" ]] || + [[ `readlink out.dir/absrootlinkslashes` != "////" ]]; then + error "wimcapture --rpfix failed to fix absolute link to capture root" +fi + +if [[ ! -L out.dir/absnonexistent ]] || + [[ ! -L out.dir/absoutoftree ]]; then + error "wimcapture --rpfix failed to also capture out of tree absolute links" +fi +if [[ `readlink out.dir/relalink` != "file" ]]; then + error "wimcapture --rpfix failed to capture relative symlink" +fi +if [[ `readlink out.dir/abslink` != "/file" ]] || + [[ `readlink out.dir/abslinkslashes` != "/file///" ]]; then + error "wimcapture --rpfix did fix absolute link properly" +fi +rm -rf out.dir + +wimapply test.wim out.dir +if [[ $(get_inode_number $(readlink out.dir/absrootlink)) != \ + $(get_inode_number out.dir) ]]; +then + error "wimapply failed to apply fixed absolute symlinks" +fi + +# Make sure source list mode is working as expected +__msg "Testing source list capture mode" +rm -rf in.dir out.dir +mkdir in.dir +echo 1 > in.dir/1 +ln in.dir/1 in.dir/1link +echo 5 > 5 +mkdir otherdir +cp $srcdir/src/add_image.c otherdir +cat > srclist << EOF +in.dir / +5 /5 +otherdir /otherdir +EOF +wimcapture srclist --source-list test.wim +wimapply test.wim out.dir +if [[ ! -f out.dir/5 || ! -f out.dir/1 || ! -f out.dir/1link || \ + ! -d out.dir/otherdir ]]; then + error "source list capture failed to work as expected" +fi + +# Still testing source list capture: add quoted name, and try overlay +rm -rf out.dir +cat > srclist << EOF +in.dir / +5 /5 +otherdir /otherdir + "overlay dir 1" 'otherdir' + "overlay dir 2" 'otherdir' +EOF +mkdir "overlay dir 1" +mkdir "overlay dir 2" +echo A > "overlay dir 1"/A +echo B > "overlay dir 2"/B +wimcapture srclist --source-list test.wim +wimapply test.wim out.dir +if [[ ! -f out.dir/5 || ! -f out.dir/1 || ! -f out.dir/1link || \ + ! -f out.dir/otherdir/A || ! -f out.dir/otherdir/B ]]; then + error "source list capture (with quoted names and basic overlay) failed to work as expected" +fi + +# Try deep overlay +rm -rf in.dir out.dir "overlay dir 1" "overlay dir 2" +mkdir -p in.dir.1/subdir/subdir2 in.dir.2/subdir/subdir2 +cat > srclist << EOF +in.dir.1 / +in.dir.2 / +EOF +echo 1 > in.dir.1/subdir/1 +echo 2 > in.dir.2/subdir/2 +echo 3 > in.dir.1/subdir/subdir2/3 +echo 4 > in.dir.2/subdir/subdir2/4 +wimcapture srclist --source-list test.wim +wimapply test.wim out.dir +if [[ ! -f out.dir/subdir/1 || ! -f out.dir/subdir/2 || \ + ! -f out.dir/subdir/subdir2/3 || ! -f out.dir/subdir/subdir2/4 ]]; then + error "source list capture (with deep overlay) failed to work as expected" +fi + +# Try bad overlay +__msg "Testing bad overlay (errors expected)" +rm -rf out.dir +echo 5 > 5 +cat > srclist << EOF +in.dir.1 / +in.dir.2 / +5 /subdir +EOF +if wimcapture srclist --source-list test.wim; then + error "unexpected success in bad overlay with --source-list!" +fi echo "**********************************************************" -echo " imagex capture/apply tests passed " +echo " wimcapture/apply tests passed " echo "**********************************************************" + +cd .. +default_cleanup