]> wimlib.net Git - wimlib/blobdiff - tests/test-imagex
Update version-info
[wimlib] / tests / test-imagex
index 33c58dbf3048f7837fd0ae922dc1814478d8ba27..fe931321a760476b63d0d89c3b5793c46f089a02 100755 (executable)
@@ -1,30 +1,24 @@
-#!/bin/sh
+#!/usr/bin/env bash
 
 
-# This script does some sanity testing of the 'imagex' program.  It by no means
-# tests every aspect of wimlib comprehensively.
+# This script does some sanity testing of the 'wimlib-imagex' program.  It by no
+# means tests every aspect of wimlib comprehensively.
 
 
-# Assume an in-tree build.
 set -e
 cd tests
 set -e
 cd tests
+srcdir="${srcdir:-.}/.."
+srcdir="$(cd $srcdir; pwd)"
+. "$srcdir/tests/tests-common.sh"
 
 
-imagex() {
-       echo "imagex $@"
-       ../imagex $@
-}
+TEST_SUBDIR=tmpdir_test-imagex
 
 
-cleanup() {
-       if [ -d tmp ] && mountpoint tmp > /dev/null; then
-               fusermount -u tmp > /dev/null;
-       fi
-       rm -rf dir* tmp* *.wim *.swm
-}
-trap cleanup exit
-fusermount -u tmp || true
-rm -rf tmp || true
+# Execute the tests in a subdirectory to avoid conflicts with concurrent tests
+default_cleanup
+mkdir $TEST_SUBDIR
+cd $TEST_SUBDIR
 
 # Make test directory
 mkdir dir
 
 # Make test directory
 mkdir dir
-cp ../src/*.c ../src/*.h dir
+cp $srcdir/src/*.c dir
 mkdir dir/subdir
 echo 'hello' > dir/subdir/hello
 echo 'hello' > dir/subdir/hello2
 mkdir dir/subdir
 echo 'hello' > dir/subdir/hello
 echo 'hello' > dir/subdir/hello2
@@ -36,37 +30,29 @@ mkdir dir2
 echo 'testing' > dir2/file
 dd if=/dev/zero of=dir2/zeroes bs=4096 count=5
 
 echo 'testing' > dir2/file
 dd if=/dev/zero of=dir2/zeroes bs=4096 count=5
 
-error() {
-       echo "**********************************************"
-       echo "                  Test failure                "
-       echo $*
-       echo "**********************************************"
-       exit 1
-}
-
 # Capturing and applying WIM with None, LZX, and XPRESS compression
 
 for comp_type in None LZX XPRESS; do
        echo "Testing capture and application of $comp_type-compressed WIM"
 # Capturing and applying WIM with None, LZX, and XPRESS compression
 
 for comp_type in None LZX XPRESS; do
        echo "Testing capture and application of $comp_type-compressed WIM"
-       if ! imagex capture dir dir.wim --compress=$comp_type; then
-               error "'imagex capture' failed"
+       if ! wimcapture dir dir.wim --compress=$comp_type; then
+               error "'wimcapture' failed"
        fi
        fi
-       if ! imagex apply dir.wim tmp; then
-               error "'imagex apply' failed"
+       if ! wimapply dir.wim tmp; then
+               error "'wimapply' failed"
        fi
        fi
-       if ! test "`imagex info dir.wim | grep Compression | awk '{print $2}'`" = "$comp_type"; then
-               error "'imagex info' didn't report the compression type correctly"
+       if ! test `wim_ctype dir.wim` = "$comp_type"; then
+               error "'wiminfo' didn't report the compression type correctly"
        fi
        if ! diff -q -r dir tmp; then
                error "Recursive diff of extracted directory with original failed"
        fi
        fi
        if ! diff -q -r dir tmp; then
                error "Recursive diff of extracted directory with original failed"
        fi
-       if ! test `stat -c %h tmp/subdir/hello` = 2; then
+       if ! test `get_link_count tmp/subdir/hello` = 2; then
                error "Incorrect number of hard links in extracted file"
        fi
                error "Incorrect number of hard links in extracted file"
        fi
-       if ! test `stat -c %i tmp/subdir/hello` != `stat -c %i tmp/subdir/hello2`; then
+       if ! test `get_inode_number tmp/subdir/hello` != `get_inode_number tmp/subdir/hello2`; then
                error "Expected different inode numbers in files not hard-linked"
        fi
                error "Expected different inode numbers in files not hard-linked"
        fi
-       if ! test "`stat -c %i tmp/subdir/hello`" = "`stat -c %i tmp/subdir/hellolink`"; then
+       if ! test "`get_inode_number tmp/subdir/hello`" = "`get_inode_number tmp/subdir/hellolink`"; then
                error "Expected same inode numbers in hard-linked files"
        fi
        if ! test -L tmp/subdir/rel_symlink; then
                error "Expected same inode numbers in hard-linked files"
        fi
        if ! test -L tmp/subdir/rel_symlink; then
@@ -75,87 +61,87 @@ for comp_type in None LZX XPRESS; do
        if ! test "`readlink tmp/subdir/rel_symlink`" = "hello"; then
                error "Symlink target not correct"
        fi
        if ! test "`readlink tmp/subdir/rel_symlink`" = "hello"; then
                error "Symlink target not correct"
        fi
-       
+
        rm -rf dir.wim tmp
 done
 
 # Capturing and modifying name, description, and bootable flag
 
 echo "Testing capture of WIM with default name and description"
        rm -rf dir.wim tmp
 done
 
 # Capturing and modifying name, description, and bootable flag
 
 echo "Testing capture of WIM with default name and description"
-imagex capture dir dir.wim
-if ! test "`imagex info dir.wim | grep Name | awk '{print $2}'`" = "dir"; then
+wimcapture dir dir.wim
+if ! test "`wiminfo dir.wim | grep Name | awk '{print $2}'`" = "dir"; then
        error "WIM name not set correctly"
 fi
        error "WIM name not set correctly"
 fi
-if ! test "`imagex info dir.wim | grep Description | awk '{print $2}'`" = ""; then
+if ! test "`wiminfo dir.wim | grep Description | awk '{print $2}'`" = ""; then
        error "WIM description not set correctly"
 fi
 
 echo "Testing capture of WIM with default boot flag"
        error "WIM description not set correctly"
 fi
 
 echo "Testing capture of WIM with default boot flag"
-imagex capture dir dir.wim
-if ! test "`imagex info dir.wim | grep Boot | awk '{print $3}'`" = "0"; then
+wimcapture dir dir.wim
+if ! test "`wiminfo dir.wim | grep '^Boot Index' | awk '{print $3}'`" = "0"; then
        error "WIM boot flag not set correctly"
 fi
 
 echo "Testing changing image bootable flag"
        error "WIM boot flag not set correctly"
 fi
 
 echo "Testing changing image bootable flag"
-if ! imagex info dir.wim 1 --boot; then
+if ! wiminfo dir.wim 1 --boot; then
        error "Failed to change bootable image"
 fi
        error "Failed to change bootable image"
 fi
-if ! test "`imagex info dir.wim | grep Boot | awk '{print $3}'`" = "1"; then
+if ! test "`wiminfo dir.wim | grep '^Boot Index' | awk '{print $3}'`" = "1"; then
        error "Bootable image not changed correctly"
 fi
 echo "Testing changing image bootable flag"
        error "Bootable image not changed correctly"
 fi
 echo "Testing changing image bootable flag"
-if ! imagex info dir.wim 0 --boot; then
+if ! wiminfo dir.wim 0 --boot; then
        error "Failed to reset bootable image"
 fi
        error "Failed to reset bootable image"
 fi
-if ! test "`imagex info dir.wim | grep Boot | awk '{print $3}'`" = "0"; then
+if ! test "`wiminfo dir.wim | grep '^Boot Index' | awk '{print $3}'`" = "0"; then
        error "Bootable image not reset correctly"
 fi
 echo "Testing changing image bootable flag to invalid image (this should generate errors)"
        error "Bootable image not reset correctly"
 fi
 echo "Testing changing image bootable flag to invalid image (this should generate errors)"
-if imagex info dir.wim 2 --boot; then
+if wiminfo dir.wim 2 --boot; then
        error "Succeeded in changing bootable image to invalid number"
 fi
        error "Succeeded in changing bootable image to invalid number"
 fi
-if ! test "`imagex info dir.wim | grep Boot | awk '{print $3}'`" = "0"; then
+if ! test "`wiminfo dir.wim | grep '^Boot Index' | awk '{print $3}'`" = "0"; then
        error "Boot flag was changed even though the change command was supposed to fail"
 fi
 rm -rf dir.wim tmp
 
 echo "Testing capture of WIM with name and description"
        error "Boot flag was changed even though the change command was supposed to fail"
 fi
 rm -rf dir.wim tmp
 
 echo "Testing capture of WIM with name and description"
-if ! imagex capture dir dir.wim "myname" "mydesc"; then
+if ! wimcapture dir dir.wim "myname" "mydesc"; then
        error "Failed to capture WIM with specified name and description"
 fi
        error "Failed to capture WIM with specified name and description"
 fi
-if ! test "`imagex info dir.wim | grep Name | awk '{print $2}'`" = "myname"; then
+if ! test "`wiminfo dir.wim | grep Name | awk '{print $2}'`" = "myname"; then
        error "WIM name not set correctly"
 fi
        error "WIM name not set correctly"
 fi
-if ! test "`imagex info dir.wim | grep Description | awk '{print $2}'`" = "mydesc"; then
+if ! test "`wiminfo dir.wim | grep Description | awk '{print $2}'`" = "mydesc"; then
        error "WIM name not set correctly"
 fi
 echo "Testing printing WIM lookup table"
        error "WIM name not set correctly"
 fi
 echo "Testing printing WIM lookup table"
-if ! imagex info --lookup-table dir.wim > /dev/null; then
+if ! wiminfo --lookup-table dir.wim > /dev/null; then
        error "Failed to print WIM lookup table"
 fi
 echo "Testing printing WIM header"
        error "Failed to print WIM lookup table"
 fi
 echo "Testing printing WIM header"
-if ! imagex info --header dir.wim > /dev/null; then
+if ! wiminfo --header dir.wim > /dev/null; then
        error "Failed to print WIM header"
 fi
 echo "Testing printing WIM XML info"
        error "Failed to print WIM header"
 fi
 echo "Testing printing WIM XML info"
-if ! imagex info --xml dir.wim > /dev/null; then
+if ! wiminfo --xml dir.wim > /dev/null; then
        error "Failed to print WIM XML data"
 fi
 echo "Testing extracting WIM XML info"
        error "Failed to print WIM XML data"
 fi
 echo "Testing extracting WIM XML info"
-if ! imagex info --extract-xml=dir.xml dir.wim; then
+if ! wiminfo --extract-xml=dir.xml dir.wim; then
        error "Failed to extract WIM XML data"
 fi
 echo "Testing printing WIM metadata"
        error "Failed to extract WIM XML data"
 fi
 echo "Testing printing WIM metadata"
-if ! imagex info --metadata dir.wim > /dev/null; then
+if ! wimdir --detailed dir.wim > /dev/null; then
        error "Failed to print WIM metadata"
 fi
 rm -rf dir.wim tmp dir.xml
 
 echo "Testing capture of bootable WIM"
        error "Failed to print WIM metadata"
 fi
 rm -rf dir.wim tmp dir.xml
 
 echo "Testing capture of bootable WIM"
-if ! imagex capture dir dir.wim --boot; then
+if ! wimcapture dir dir.wim --boot; then
        error "Failed to capture bootable WIM"
 fi
        error "Failed to capture bootable WIM"
 fi
-if ! test "`imagex info dir.wim | grep Boot | awk '{print $3}'`" = "1"; then
+if ! test "`wiminfo dir.wim | grep '^Boot Index' | awk '{print $3}'`" = "1"; then
        error "Boot flag on bootable WIM not set correctly"
 fi
 rm -rf dir.wim tmp
        error "Boot flag on bootable WIM not set correctly"
 fi
 rm -rf dir.wim tmp
@@ -163,13 +149,13 @@ rm -rf dir.wim tmp
 # Integrity table
 
 echo "Testing capture of WIM with integrity table"
 # Integrity table
 
 echo "Testing capture of WIM with integrity table"
-if ! imagex capture dir dir.wim --check; then
+if ! wimcapture dir dir.wim --check; then
        error "Failed to capture WIM with integrity table"
 fi
        error "Failed to capture WIM with integrity table"
 fi
-if ! test "`imagex info dir.wim | grep Integrity | awk '{print $3}'`" = "yes"; then
+if ! wiminfo dir.wim | grep -q Integrity; then
        error "Integrity table on WIM not made"
 fi
        error "Integrity table on WIM not made"
 fi
-if ! imagex apply --check dir.wim tmp; then
+if ! wimapply --check dir.wim tmp; then
        error "Integrity table on WIM not made correctly"
 fi
 if ! diff -q -r dir tmp; then
        error "Integrity table on WIM not made correctly"
 fi
 if ! diff -q -r dir tmp; then
@@ -180,84 +166,84 @@ rm -rf dir.wim tmp
 # Appending and deleting images
 
 echo "Testing appending WIM image"
 # Appending and deleting images
 
 echo "Testing appending WIM image"
-imagex capture dir dir.wim
-if ! imagex append dir2 dir.wim; then
+wimcapture dir dir.wim
+if ! wimappend dir2 dir.wim; then
        error "Appending WIM image failed"
 fi
        error "Appending WIM image failed"
 fi
-if ! test "`imagex info dir.wim | grep 'Image Count' | awk '{print $3}'`" = 2; then
+if ! test "`wiminfo dir.wim | grep 'Image Count' | awk '{print $3}'`" = 2; then
        error "WIM image count not correct"
 fi
 
 echo "Testing appending WIM image with existing name (this should generate errors)"
        error "WIM image count not correct"
 fi
 
 echo "Testing appending WIM image with existing name (this should generate errors)"
-if imagex append dir2 dir.wim; then
+if wimappend dir2 dir.wim "dir"; then
        error "Adding duplicate image name didn't fail"
 fi
 echo "Testing appending WIM image with new name"
        error "Adding duplicate image name didn't fail"
 fi
 echo "Testing appending WIM image with new name"
-if ! imagex append dir2 dir.wim "newname"; then
+if ! wimappend dir2 dir.wim "newname"; then
        error "Appending WIM image failed"
 fi
 echo "Testing appending WIM image with integrity check"
        error "Appending WIM image failed"
 fi
 echo "Testing appending WIM image with integrity check"
-if ! imagex append dir2 dir.wim "newname2" --check; then
+if ! wimappend dir2 dir.wim "newname2" --check; then
        error "Appending WIM image failed"
 fi
        error "Appending WIM image failed"
 fi
-if ! test "`imagex info dir.wim | grep Integrity | awk '{print $3}'`" = "yes"; then
+if ! wiminfo dir.wim | grep -q Integrity; then
        error "Integrity table not set correctly on image append"
 fi
 echo "Testing appending WIM image with no integrity check"
        error "Integrity table not set correctly on image append"
 fi
 echo "Testing appending WIM image with no integrity check"
-if ! imagex append dir2 dir.wim "newname3"; then
+if ! wimappend dir2 dir.wim "newname3" --nocheck; then
        error "Appending WIM image failed"
 fi
        error "Appending WIM image failed"
 fi
-if ! test "`imagex info dir.wim | grep Integrity | awk '{print $3}'`" = "no"; then
+if wiminfo dir.wim | grep -q Integrity; then
        error "WIM integrity table not removed"
 fi
 # 5 images at this point
        error "WIM integrity table not removed"
 fi
 # 5 images at this point
-if ! test "`imagex info dir.wim | grep 'Image Count' | awk '{print $3}'`" = 5; then
+if ! test "`wiminfo dir.wim | grep 'Image Count' | awk '{print $3}'`" = 5; then
        error "WIM does not contain the expected 5 images"
 fi
 echo "Testing deleting first WIM image"
        error "WIM does not contain the expected 5 images"
 fi
 echo "Testing deleting first WIM image"
-if ! imagex delete dir.wim 1; then
+if ! wimdelete dir.wim 1; then
        error "Failed to delete WIM image"
 fi
        error "Failed to delete WIM image"
 fi
-if ! test "`imagex info dir.wim | grep 'Image Count' | awk '{print $3}'`" = 4; then
+if ! test "`wiminfo dir.wim | grep 'Image Count' | awk '{print $3}'`" = 4; then
        error "WIM image not deleted correctly"
 fi
 echo "Testing deleting last WIM image"
        error "WIM image not deleted correctly"
 fi
 echo "Testing deleting last WIM image"
-if ! imagex delete dir.wim 4; then
+if ! wimdelete dir.wim 4; then
        error "Failed to delete WIM image"
 fi
        error "Failed to delete WIM image"
 fi
-if ! test "`imagex info dir.wim | grep 'Image Count' | awk '{print $3}'`" = 3; then
+if ! test "`wiminfo dir.wim | grep 'Image Count' | awk '{print $3}'`" = 3; then
        error "WIM image not deleted correctly"
 fi
 echo "Testing deleting invalid WIM image (this should generate errors)"
        error "WIM image not deleted correctly"
 fi
 echo "Testing deleting invalid WIM image (this should generate errors)"
-if imagex delete dir.wim 4; then
+if wimdelete dir.wim 4; then
        error "Expected to fail to delete non-existent WIM image"
 fi
        error "Expected to fail to delete non-existent WIM image"
 fi
-if ! test "`imagex info dir.wim | grep 'Image Count' | awk '{print $3}'`" = 3; then
+if ! test "`wiminfo dir.wim | grep 'Image Count' | awk '{print $3}'`" = 3; then
        error "Image count changed even though we intentionally failed to delete an image"
 fi
 echo "Testing deleting all WIM images"
        error "Image count changed even though we intentionally failed to delete an image"
 fi
 echo "Testing deleting all WIM images"
-if ! imagex delete dir.wim all; then
+if ! wimdelete dir.wim all; then
        error "Failed to delete all images from WIM"
 fi
        error "Failed to delete all images from WIM"
 fi
-if ! test "`imagex info dir.wim | grep 'Image Count' | awk '{print $3}'`" = 0; then
+if ! test "`wiminfo dir.wim | grep 'Image Count' | awk '{print $3}'`" = 0; then
        error "Couldn't delete all WIM images correctly"
 fi
 echo "Testing appending directory to empty WIM and making it bootable"
        error "Couldn't delete all WIM images correctly"
 fi
 echo "Testing appending directory to empty WIM and making it bootable"
-if ! imagex append dir dir.wim "myname" "mydesc" --check --boot; then
+if ! wimappend dir dir.wim "myname" "mydesc" --check --boot; then
        error "Couldn't append named, described, bootable image to empty WIM with integrity check"
 fi
        error "Couldn't append named, described, bootable image to empty WIM with integrity check"
 fi
-if ! test "`imagex info dir.wim | grep Integrity | awk '{print $3}'`" = "yes"; then
+if ! wiminfo dir.wim | grep -q Integrity; then
        error "Integrity check not found"
 fi
        error "Integrity check not found"
 fi
-if ! test "`imagex info dir.wim | grep Boot | awk '{print $3}'`" = "1"; then
+if ! test "`wiminfo dir.wim | grep '^Boot Index' | awk '{print $3}'`" = "1"; then
        error "Bootable image not set correctly"
 fi
 echo "Testing appending non-directory (should generate errors)"
        error "Bootable image not set correctly"
 fi
 echo "Testing appending non-directory (should generate errors)"
-if imagex append dir.wim dir.wim; then
+if wimappend dir.wim dir.wim; then
        error "Incorrectly succeeded to append non-directory to WIM"
 fi
 echo "Testing appending non-existent file (should generate errors)"
        error "Incorrectly succeeded to append non-directory to WIM"
 fi
 echo "Testing appending non-existent file (should generate errors)"
-if imagex append SOME_NONEXISTENT_FILE dir.wim; then
+if wimappend SOME_NONEXISTENT_FILE dir.wim; then
        error "Incorrectly succeeded to append non-existent file to WIM"
 fi
 if [ `id -u` != 0 ]; then
        error "Incorrectly succeeded to append non-existent file to WIM"
 fi
 if [ `id -u` != 0 ]; then
@@ -265,7 +251,7 @@ if [ `id -u` != 0 ]; then
        mkdir -p dir3
        echo 1 > dir3/file
        chmod -r dir3/file
        mkdir -p dir3
        echo 1 > dir3/file
        chmod -r dir3/file
-       if imagex append dir3 dir.wim; then
+       if wimappend dir3 dir.wim; then
                error "Incorrectly succeeded in capturing directory with unreadable file"
        fi
 fi
                error "Incorrectly succeeded in capturing directory with unreadable file"
        fi
 fi
@@ -274,272 +260,89 @@ rm -rf dir3 dir.wim
 # Applying multiple images, applying with hardlinks/symlinks
 
 echo "Testing application of multiple images"
 # Applying multiple images, applying with hardlinks/symlinks
 
 echo "Testing application of multiple images"
-if ! imagex capture dir dir.wim; then
+if ! wimcapture dir dir.wim; then
        error "Failed to prepare test WIM"
 fi
        error "Failed to prepare test WIM"
 fi
-if ! imagex append dir dir.wim "myname"; then
+if ! wimappend dir dir.wim "myname"; then
        error "Failed to append image to test WIM"
 fi
        error "Failed to append image to test WIM"
 fi
-if ! imagex apply dir.wim all tmp; then
+if ! wimapply dir.wim all tmp; then
        error "Applying multiple images failed"
 fi
 if ! diff -q -r tmp/dir tmp/myname || ! diff -q -r dir tmp/dir; then
        error "Recursive diff of applied WIM with original directory failed"
 fi
        error "Applying multiple images failed"
 fi
 if ! diff -q -r tmp/dir tmp/myname || ! diff -q -r dir tmp/dir; then
        error "Recursive diff of applied WIM with original directory failed"
 fi
-if test "`stat -c %h tmp/dir/lz.c`" != 1; then
+if test "`get_link_count tmp/dir/write.c`" != 1; then
        error "Incorrect link count on extracted file"
 fi
        error "Incorrect link count on extracted file"
 fi
-if test "`stat -c %h tmp/myname/lz.c`" != 1; then
+if test "`get_link_count tmp/myname/write.c`" != 1; then
        error "Incorrect link count on extracted file"
 fi
        error "Incorrect link count on extracted file"
 fi
-if test "`stat -c %i tmp/myname/lz.c`" = "`stat -c %i tmp/dir/lz.c`"; then
-       error "Incorrect inode number"
-fi
-rm -rf tmp
-echo "Testing application of multiple images with hardlinks"
-if ! imagex apply dir.wim all tmp --hardlink; then
-       error "Failed to apply multiple images with cross-image hardlinks"
-fi
-if ! diff -q -r tmp/dir tmp/myname || ! diff -q -r dir tmp/dir; then
-       error "Recursive diff of applied WIM with original directory failed"
-fi
-if test "`stat -c %h tmp/dir/lz.c`" != 2; then
-       error "Incorrect link count on extracted file"
-fi
-if test "`stat -c %h tmp/myname/lz.c`" != 2; then
-       error "Incorrect link count on extracted file"
-fi
-if test "`stat -c %i tmp/myname/lz.c`" != "`stat -c %i tmp/dir/lz.c`"; then
+if test "`get_inode_number tmp/myname/write.c`" = "`get_inode_number tmp/dir/write.c`"; then
        error "Incorrect inode number"
 fi
 rm -rf tmp
 
 echo "Testing application of single image containing identical files"
        error "Incorrect inode number"
 fi
 rm -rf tmp
 
 echo "Testing application of single image containing identical files"
-if ! imagex apply dir.wim 1 tmp; then
+if ! wimapply dir.wim 1 tmp; then
        error "Failed to apply WIM"
 fi
        error "Failed to apply WIM"
 fi
-if test "`stat -c %h tmp/subdir/hello`" != 2; then
+if test "`get_link_count tmp/subdir/hello`" != 2; then
        error "Incorrect link count on extracted file"
 fi
        error "Incorrect link count on extracted file"
 fi
-if test "`stat -c %h tmp/subdir/hello2`" != 1; then
+if test "`get_link_count tmp/subdir/hello2`" != 1; then
        error "Incorrect link count on extracted file"
 fi
        error "Incorrect link count on extracted file"
 fi
-if test "`stat -c %i tmp/subdir/hello`" = "`stat -c %i tmp/subdir/hello2`"; then
+if test "`get_inode_number tmp/subdir/hello`" = "`get_inode_number tmp/subdir/hello2`"; then
        error "Inode numbers on non-hard-linked files are the same"
 fi
        error "Inode numbers on non-hard-linked files are the same"
 fi
-if test "`stat -c %i tmp/subdir/hello`" != "`stat -c %i tmp/subdir/hellolink`"; then
+if test "`get_inode_number tmp/subdir/hello`" != "`get_inode_number tmp/subdir/hellolink`"; then
        error "Inode numbers on hard-linked files are different"
 fi
 rm -rf tmp
 
        error "Inode numbers on hard-linked files are different"
 fi
 rm -rf tmp
 
-echo "Testing application of single image containing identical files with hardlinks"
-if ! imagex apply dir.wim 1 tmp --hardlink; then
-       error "Failed to apply WIM"
-fi
-if test "`stat -c %h tmp/subdir/hello`" != 3; then
-       error "Incorrect link count on extracted file"
-fi
-if test "`stat -c %h tmp/subdir/hello2`" != 3; then
-       error "Incorrect link count on extracted file"
-fi
-if test "`stat -c %i tmp/subdir/hello`" != "`stat -c %i tmp/subdir/hello2`"; then
-       error "Hard link set does not share inode number"
-fi
-if test "`stat -c %i tmp/subdir/hello`" != "`stat -c %i tmp/subdir/hellolink`"; then
-       error "Hard link set does not share inode number"
-fi
-rm -rf tmp
-
-echo "Testing application of single image containing identical files with symlinks"
-if ! imagex apply dir.wim 1 tmp --symlink; then
-       error "Failed to apply WIM"
-fi
-if test "`stat -c %h tmp/subdir/hello`" != 1; then
-       error "Incorrect link count on extracted file"
-fi
-if test "`stat -c %h tmp/subdir/hello2`" != 1; then
-       error "Incorrect link count on extracted file"
-fi
-if test "`stat -c %i tmp/subdir/hello`" = "`stat -c %i tmp/subdir/hello2`"; then
-       error "Incorrect inode number"
-fi
-if ! test -L tmp/subdir/hello -o -L tmp/subdir/hello2 -o -L tmp/subdir/hellolink; then
-       error "Expected symlinks, but found non-symlinks"
-fi
-rm -rf dir.wim tmp
-
-# imagex mount
-
-for flag in "--compress=none" "--compress=maximum" "--compress=fast"; do
-       echo "Using flag $flag"
-       echo "Testing mounting WIM read-only"
-       if ! imagex capture dir dir.wim $flag; then
-               error "Failed to capture WIM"
-       fi
-       mkdir tmp
-       if ! imagex mount dir.wim dir tmp; then
-               error "Failde to mount test WIM read-only"
-       fi
-       echo "Testing extracting file from mounted read-only WIM"
-       if ! cp tmp/lz.c lz.c; then
-               error "Failed to extract file from read-only mounted WIM"
-       fi
-       if ! diff -q dir/lz.c lz.c; then
-               error "Extracted file does not match copy in mounted WIM"
-       fi
-       if ! diff -q tmp/lz.c dir/lz.c; then
-               error "Extractef file does not match original"
-       fi
-       rm -f lz.c
-       echo "Testing modifying mounted read-only WIM (should fail)"
-       if rm tmp/lz.c; then
-               error "Removing file from read-only mounted WIM didn't fail"
-       fi
-       if touch tmp/newfile; then
-               error "Creating file on read-only mounted WIM didn't fail"
-       fi
-       if echo 3 > tmp/lz.c; then
-               error "Writing to file on read-only mounted WIM didn't fail"
-       fi
-       echo "Testing diff of mounted read-only WIM with original directory"
-       if ! diff -q -r tmp dir; then
-               error "Recursive diff of read-only mounted WIM with original directory failed"
-       fi
-       echo "Testing unmount of read-only filesystem"
-       if ! imagex unmount tmp; then
-               error "Unmounting read-only WIM failed"
-       fi
-       echo "Testing unmount of read-only filesystem with --commit given"
-       if ! imagex mount dir.wim dir tmp; then
-               error "Failed to re-mount WIM read-only"
-       fi
-       if ! imagex unmount tmp --commit; then
-               error "Failed to unmount read-only WIM with --commit flag (should be ignored)"
-       fi
-       rm -rf tmp dir.wim
-done
-
-# imagex mountrw
-echo "Testing mounting WIM read-write"
-if ! imagex capture dir dir.wim; then
-       error "Failed to capture WIM"
-fi
-mkdir tmp
-if ! imagex mountrw dir.wim dir tmp; then
-       error "Failed to mount test WIM read-write"
-fi
-echo "Testing unmounting WIM unmodified"
-if ! imagex unmount tmp; then
-       error "Failed to unmount test WIM unmodified"
-fi
-echo "Testing unmounting WIM unmodified with --commit and --check"
-if ! imagex mountrw dir.wim dir tmp; then
-       error "Failed to re-mount test WIM read-write"
-fi
-if ! imagex unmount tmp --commit --check; then
-       error "Failed to unmount read-write mounted WIM with changes commited (no changes made)"
-fi
-echo "Testing removing file from mounted WIM"
-if ! imagex mountrw dir.wim dir tmp; then
-       error "Failed to re-mount test WIM read-write"
-fi
-if ! rm tmp/lz.c; then
-       error "Failed to remove file from read-write mounted WIM"
-fi
-if test -f tmp/lz.c; then
-       error "Removing file from read-write mounted WIM failed"
-fi
-echo "Testing making directory in mounted WIM"
-if ! mkdir tmp/newdir; then
-       error "Failed to make directory in read-write mounted WIM"
-fi
-if ! test -d tmp/newdir; then
-       error "Making directory in read-write mounted WIM failed"
-fi
-echo "Testing making new empty file in mounted WIM"
-if ! touch tmp/newdir/empty_file; then
-       error "Could not create new empty file in read-write mounted WIM"
-fi
-if ! test -f tmp/newdir/empty_file; then
-       error "New empty file not created correctly in read-write mounted WIM"
-fi
-if ! test "`stat -c %s tmp/newdir/empty_file`" = 0; then
-       error "New empty file in read-write mounted WIM is not empty"
-fi
-echo "Testing making new non-empty file in mounted WIM"
-if ! dd if=/dev/zero of=tmp/newdir/zeroes1 bs=1 count=4096; then
-       error "Failed to make new non-empty file in mounted WIM"
-fi
-if ! dd if=/dev/zero of=tmp/newdir/zeroes2 bs=4096 count=1; then
-       error "Failed to make new non-empty file in mounted WIM"
-fi
-if ! diff -q tmp/newdir/zeroes1 tmp/newdir/zeroes2; then
-       error "New files in mounted WIM not made correctly"
-fi
-echo "Unmounting WIM with changes committed and --check"
-if ! imagex unmount tmp --commit --check; then
-       error "Failed to unmount read-write mounted WIM"
-fi
-if test "`imagex info dir.wim | grep Integrity | awk '{print $3}'`" != "yes"; then
-       error "Integrity information was not included"
-fi
-rm -rf tmp
-if ! imagex apply dir.wim tmp; then
-       error "Failed to apply WIM we had previously mounted read-write"
-fi
-if ! diff -q tmp/newdir/zeroes1 tmp/newdir/zeroes2; then
-       error "The new non-empty files we made in the read-write mounted WIM were not extracted correctly"
-fi
-if test `stat -c %s tmp/newdir/empty_file` != 0; then
-       error "The new empty file we made in the read-write mounted WIM was not extracted correctly"
-fi
-if test `stat -c %s tmp/newdir/zeroes1` != 4096; then
-       error "The new non-empty files we made in the read-write mounted WIM were not extracted correctly"
-fi
-rm -rf tmp dir.wim
-
-# imagex split, imagex join
+# wimsplit, wimjoin
 
 echo "Creating random files to test WIM splitting on"
 mkdir tmp
 
 echo "Creating random files to test WIM splitting on"
 mkdir tmp
-for i in `seq 1 100`; do
+for ((i = 0; i < 100; i++)); do
        dd if=/dev/urandom of=tmp/file$i bs=4096 count=10 &> /dev/null
 done
 for flag in "--compress=none" "--compress=maximum" "--compress=fast"; do
        echo "Using flag $flag"
        dd if=/dev/urandom of=tmp/file$i bs=4096 count=10 &> /dev/null
 done
 for flag in "--compress=none" "--compress=maximum" "--compress=fast"; do
        echo "Using flag $flag"
-       if ! imagex capture tmp tmp.wim $flag; then
+       if ! wimcapture tmp tmp.wim $flag; then
                error "Failed to capture test WIM"
        fi
        echo "Splitting WIM into 1 MiB chunks"
                error "Failed to capture test WIM"
        fi
        echo "Splitting WIM into 1 MiB chunks"
-       if ! imagex split tmp.wim tmp.swm 1; then
+       if ! wimsplit tmp.wim tmp.swm 1; then
                error "Failed to split WIM"
        fi
        echo "Verifying the split WIMs (some errors expected)"
                error "Failed to split WIM"
        fi
        echo "Verifying the split WIMs (some errors expected)"
-       if test "`imagex info tmp.swm | grep 'Part Number' | awk '{print $3}'`" != "1/4"; then
+       if test "`wiminfo tmp.swm | grep 'Part Number' | awk '{print $3}'`" != "1/4"; then
                error "Part number of split WIM not correct"
        fi
                error "Part number of split WIM not correct"
        fi
-       if ! imagex dir tmp.swm > /dev/null; then
+       if ! wimdir tmp.swm > /dev/null; then
                error "Failed to list files in split WIM"
        fi
        if ! test -e tmp2.swm; then
                error "Could not find split-WIM part 2"
        fi
                error "Failed to list files in split WIM"
        fi
        if ! test -e tmp2.swm; then
                error "Could not find split-WIM part 2"
        fi
-       if imagex dir tmp2.swm > /dev/null; then
+       if wimdir tmp2.swm > /dev/null; then
                error "Listed files in part 2 of split WIM (this should have failed)"
        fi
 
        # Unsupported, should fail
                error "Listed files in part 2 of split WIM (this should have failed)"
        fi
 
        # Unsupported, should fail
-       if imagex info tmp.swm --boot 0; then
+       if wiminfo tmp.swm --boot 1; then
                error "Should not have been able to change boot index of split WIM"
        fi
        echo "Joining the split WIMs and applying the result"
                error "Should not have been able to change boot index of split WIM"
        fi
        echo "Joining the split WIMs and applying the result"
-       if ! imagex join tmp2.wim tmp*.wim; then
+       if ! wimjoin tmp2.wim tmp*.wim; then
                error "Failed to join split WIMs"
        fi
                error "Failed to join split WIMs"
        fi
-       if ! imagex apply tmp2.wim tmp2; then
+       if ! wimapply tmp2.wim tmp2; then
                error "Failed to apply joined split WIM"
        fi
                error "Failed to apply joined split WIM"
        fi
-       if ! imagex apply tmp.wim tmp3; then
+       if ! wimapply tmp.wim tmp3; then
                error "Failed to apply test WIM"
        fi
        if ! diff -q -r tmp tmp2 || ! diff -q -r tmp tmp3; then
                error "Failed to apply test WIM"
        fi
        if ! diff -q -r tmp tmp2 || ! diff -q -r tmp tmp3; then
@@ -550,67 +353,111 @@ for flag in "--compress=none" "--compress=maximum" "--compress=fast"; do
 done
 rm -rf tmp
 
 done
 rm -rf tmp
 
-# imagex export
+# wimexport
 echo "Testing export of single image to new WIM"
 echo "Testing export of single image to new WIM"
-if ! imagex capture dir dir.wim; then
+if ! wimcapture dir dir.wim; then
        error "Failed to capture test WIM"
 fi
        error "Failed to capture test WIM"
 fi
-if ! imagex append dir2 dir.wim; then
+if ! wimappend dir2 dir.wim; then
        error "Failed to append image to test WIM"
 fi
        error "Failed to append image to test WIM"
 fi
-if ! imagex export dir.wim dir new.wim; then
+if ! wimexport dir.wim dir new.wim; then
        error "Failed to export single image to new WIM"
 fi
        error "Failed to export single image to new WIM"
 fi
-if test "`imagex info new.wim | grep 'Image Count' | awk '{print $3}'`" != 1; then
+if test "`wiminfo new.wim | grep 'Image Count' | awk '{print $3}'`" != 1; then
        error "Exporting single image to new WIM wasn't done correctly"
 fi
 echo "Testing export of single image to existing WIM"
        error "Exporting single image to new WIM wasn't done correctly"
 fi
 echo "Testing export of single image to existing WIM"
-if ! imagex export dir.wim dir2 new.wim; then
+if ! wimexport dir.wim dir2 new.wim; then
        error "Failed to export single image to existing WIM"
 fi
        error "Failed to export single image to existing WIM"
 fi
-if test "`imagex info new.wim | grep 'Image Count' | awk '{print $3}'`" != 2; then
+if test "`wiminfo new.wim | grep 'Image Count' | awk '{print $3}'`" != 2; then
        error "Exporting single image to existing WIM wasn't done correctly"
 fi
 echo "Testing export of single image to existing WIM using wrong compression type"
        error "Exporting single image to existing WIM wasn't done correctly"
 fi
 echo "Testing export of single image to existing WIM using wrong compression type"
-if imagex export dir.wim dir2 new.wim newname --compress=maximum; then
+if wimexport dir.wim dir2 new.wim newname --compress=xpress; then
        error "Successfully exported image using wrong compression type"
 fi
 rm -f new.wim
 echo "Testing export of multiple images to new WIM"
        error "Successfully exported image using wrong compression type"
 fi
 rm -f new.wim
 echo "Testing export of multiple images to new WIM"
-if ! imagex export dir.wim all new.wim; then
+if ! wimexport dir.wim all new.wim; then
        error "Failed to export multiple images to new WIM"
 fi
        error "Failed to export multiple images to new WIM"
 fi
-if test "`imagex info new.wim | grep 'Image Count' | awk '{print $3}'`" != 2; then
+if test "`wiminfo new.wim | grep 'Image Count' | awk '{print $3}'`" != 2; then
        error "Exporting multiple images to new WIM wasn't done correctly"
 fi
        error "Exporting multiple images to new WIM wasn't done correctly"
 fi
-if ! imagex capture dir2 new.wim newname; then
+if ! wimcapture dir2 new.wim newname; then
        error "Failed to capture test WIM"
 fi
 echo "Testing export of multiple images to existing WIM"
        error "Failed to capture test WIM"
 fi
 echo "Testing export of multiple images to existing WIM"
-if ! imagex export dir.wim all new.wim; then
+if ! wimexport dir.wim all new.wim; then
        error "Failed to export multiple images to existing WIM"
 fi
 echo "Testing export of multiple images to existing WIM with --boot"
        error "Failed to export multiple images to existing WIM"
 fi
 echo "Testing export of multiple images to existing WIM with --boot"
-if ! imagex capture dir2 new.wim newname; then
+if ! wimcapture dir2 new.wim newname; then
        error "Failed to capture test WIM"
 fi
        error "Failed to capture test WIM"
 fi
-if ! imagex info dir.wim --boot 1; then
+if ! wiminfo dir.wim --boot 1; then
        error "Failed to set boot index on test WIM"
 fi
        error "Failed to set boot index on test WIM"
 fi
-if ! imagex export dir.wim all new.wim --boot; then
+if ! wimexport dir.wim all new.wim --boot; then
        error "Failed to export multiple images to existing WIM with bootable image"
 fi
 echo "Testing export of multiple images to existing WIM with --boot, but no bootable image (errors expected)"
        error "Failed to export multiple images to existing WIM with bootable image"
 fi
 echo "Testing export of multiple images to existing WIM with --boot, but no bootable image (errors expected)"
-if ! imagex capture dir2 new.wim newname; then
+if ! wimcapture dir2 new.wim newname; then
        error "Failed to capture test WIM"
 fi
        error "Failed to capture test WIM"
 fi
-if ! imagex info dir.wim --boot 0; then
+if ! wiminfo dir.wim --boot 0; then
        error "Failed to clear boot index on test WIM"
 fi
        error "Failed to clear boot index on test WIM"
 fi
-if imagex export dir.wim all new.wim --boot; then
+if wimexport dir.wim all new.wim --boot; then
        error "Successfully exported multiple images with --boot but with no bootable images"
 fi
 
        error "Successfully exported multiple images with --boot but with no bootable images"
 fi
 
+# Test exporting an image to another WIM, then applying it.
+# We try with 5 different combinations of compression types to make sure we go
+# through all paths in the resource-handling code.
+for i in 1 2 3 4 5; do
+       case $i in
+       1)
+               cflag1="--compress=none";
+               cflag2="--compress=none";
+               ;;
+       2)
+               cflag1="--compress=xpress";
+               cflag2="--compress=xpress";
+               ;;
+       3)
+               cflag1="--compress=xpress"
+               cflag2="--compress=lzx"
+               ;;
+       4)
+               cflag1="--compress=none"
+               cflag2="--compress=xpress"
+               ;;
+       5)
+               cflag1="--compress=xpress"
+               cflag2="--compress=none"
+               ;;
+       esac
+       echo "Testing exporting then applying an image (\"$cflag1\" => \"$cflag2\")"
+       rm -rf dir.wim new.wim tmp tmp2
+       wimcapture dir dir.wim $cflag1
+       wimcapture dir2 dir2.wim $cflag2
+       wimexport dir.wim dir dir2.wim
+       wimapply dir.wim dir tmp
+       if ! wimapply dir2.wim dir tmp2; then
+               error "Failed to apply image that was exported to a WIM"
+       fi
+       if ! diff -r tmp tmp2; then
+               error "Image that was exported to a WIM was not applied correctly"
+       fi
+done
+
 echo "**********************************************************"
 echo "**********************************************************"
-echo "                 Basic imagex tests passed                "
+echo "             Basic wimlib-imagex tests passed             "
 echo "**********************************************************"
 echo "**********************************************************"
+
+# Leave test subdirectory and cleanup
+cd ..
+default_cleanup