git: 8502144d7a09 - main - makefs tests: Add test cases for handling of multiple staging dirs

From: Mark Johnston <markj_at_FreeBSD.org>
Date: Wed, 17 Aug 2022 21:29:03 UTC
The branch main has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=8502144d7a09c503b3b438924bfc0fd7cad19885

commit 8502144d7a09c503b3b438924bfc0fd7cad19885
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2022-08-17 21:27:06 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2022-08-17 21:28:01 +0000

    makefs tests: Add test cases for handling of multiple staging dirs
    
    Sponsored by:   The FreeBSD Foundation
---
 usr.sbin/makefs/tests/makefs_zfs_tests.sh | 84 +++++++++++++++++++++++++++++++
 1 file changed, 84 insertions(+)

diff --git a/usr.sbin/makefs/tests/makefs_zfs_tests.sh b/usr.sbin/makefs/tests/makefs_zfs_tests.sh
index cefeed637ac7..a0e81bbd9a52 100644
--- a/usr.sbin/makefs/tests/makefs_zfs_tests.sh
+++ b/usr.sbin/makefs/tests/makefs_zfs_tests.sh
@@ -497,6 +497,88 @@ multi_dataset_4_cleanup()
 	common_cleanup
 }
 
+#
+# Validate handling of multiple staging directories.
+#
+atf_test_case multi_staging_1 cleanup
+multi_staging_1_body()
+{
+	local tmpdir
+
+	create_test_dirs
+	cd $TEST_INPUTS_DIR
+
+	mkdir dir1
+	echo a > a
+	echo a > dir1/a
+	echo z > z
+
+	cd -
+
+	tmpdir=$(mktemp -d)
+	cd $tmpdir
+
+	mkdir dir2 dir2/dir3
+	echo b > dir2/b
+	echo c > dir2/dir3/c
+	ln -s dir2/dir3c s
+
+	cd -
+
+	atf_check $MAKEFS -s 1g -o rootpath=/ -o poolname=$ZFS_POOL_NAME \
+	    $TEST_IMAGE ${TEST_INPUTS_DIR} $tmpdir
+
+	import_image
+
+	check_image_contents -d $tmpdir
+}
+multi_staging_1_cleanup()
+{
+	common_cleanup
+}
+
+atf_test_case multi_staging_2 cleanup
+multi_staging_2_body()
+{
+	local tmpdir
+
+	create_test_dirs
+	cd $TEST_INPUTS_DIR
+
+	mkdir dir
+	echo a > dir/foo
+	echo b > dir/bar
+
+	cd -
+
+	tmpdir=$(mktemp -d)
+	cd $tmpdir
+
+	mkdir dir
+	echo c > dir/baz
+
+	cd -
+
+	atf_check $MAKEFS -s 1g -o rootpath=/ -o poolname=$ZFS_POOL_NAME \
+	    $TEST_IMAGE ${TEST_INPUTS_DIR} $tmpdir
+
+	import_image
+
+	# check_image_contents can't easily handle merged directories, so
+	# just check that the merged directory contains the files we expect.
+	atf_check -o not-empty stat ${TEST_MOUNT_DIR}/dir/foo
+	atf_check -o not-empty stat ${TEST_MOUNT_DIR}/dir/bar
+	atf_check -o not-empty stat ${TEST_MOUNT_DIR}/dir/baz
+
+	if [ "$(ls ${TEST_MOUNT_DIR}/dir | wc -l)" -ne 3 ]; then
+		atf_fail "Expected 3 files in ${TEST_MOUNT_DIR}/dir"
+	fi
+}
+multi_staging_2_cleanup()
+{
+	common_cleanup
+}
+
 #
 # Rudimentary test to verify that two ZFS images created using the same
 # parameters and input hierarchy are byte-identical.  In particular, makefs(1)
@@ -623,6 +705,8 @@ atf_init_test_cases()
 	atf_add_test_case multi_dataset_2
 	atf_add_test_case multi_dataset_3
 	atf_add_test_case multi_dataset_4
+	atf_add_test_case multi_staging_1
+	atf_add_test_case multi_staging_2
 	atf_add_test_case reproducible
 	atf_add_test_case snapshot
 	atf_add_test_case soft_links