[PATCH experimental-tests] erofs-utils: tests: add test for rebuild fulldata
Lucas Karpinski
lkarpinski at nvidia.com
Sat Apr 18 06:06:43 AEST 2026
Add a regression test for building a self-contained image out of two other
erofs images.
1. Create img1 & img2 with various file types and sizes.
2. Rebuild a new self-contained image of img1 & img2.
3. Delete img1 & img2 to prove that this isn't use the blob based rebuild
path.
4. Mount the new self-contained image and compare the checksum to the
original folders.
Signed-off-by: Lucas Karpinski <lkarpinski at nvidia.com>
---
tests/Makefile.am | 3 ++
tests/erofs/030 | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++
tests/erofs/030.out | 2 ++
3 files changed, 93 insertions(+)
diff --git a/tests/Makefile.am b/tests/Makefile.am
index d8ac0678..125aa8f6 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -126,6 +126,9 @@ TESTS += erofs/028
# 029 - test FUSE daemon and kernel error handling on corrupted inodes
TESTS += erofs/029
+# 030 - verify multi-source fulldata rebuild
+TESTS += erofs/030
+
# NEW TEST CASE HERE
# TESTS += erofs/999
diff --git a/tests/erofs/030 b/tests/erofs/030
new file mode 100755
index 00000000..8111be10
--- /dev/null
+++ b/tests/erofs/030
@@ -0,0 +1,88 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0+
+#
+# verify multi-source fulldata rebuild merges multiple EROFS images into
+# a single self-contained image
+#
+seq=`basename $0`
+seqres=$RESULT_DIR/$(echo $0 | awk '{print $((NF-1))"/"$NF}' FS="/")
+
+# get standard environment, filters and checks
+. "${srcdir}/common/rc"
+
+cleanup()
+{
+ cd /
+ rm -rf $tmp.*
+}
+
+_require_erofs
+_require_fssum
+
+# remove previous $seqres.full before test
+rm -f $seqres.full
+
+# real QA test starts here
+echo "QA output created by $seq"
+
+if [ -z "$SCRATCH_DEV" ]; then
+ SCRATCH_DEV=$tmp/erofs_$seq.img
+ rm -f $SCRATCH_DEV
+fi
+
+src1dir="$tmp/$seq.src1"
+src2dir="$tmp/$seq.src2"
+combdir="$tmp/$seq.combined"
+img1="$tmp/$seq.img1"
+img2="$tmp/$seq.img2"
+
+rm -rf $src1dir $src2dir $combdir
+rm -f $img1 $img2
+
+# Two source trees that share a top-level `common/` directory so the
+# rebuild must merge directories, with otherwise disjoint contents.
+mkdir -p $src1dir/tree1 $src1dir/common/only1
+printf "image 1 small file\n" > $src1dir/tree1/small
+printf "image 1 common\n" > $src1dir/common/only1/a.txt
+yes "image 1 payload" | head -c 65536 > $src1dir/tree1/big1
+ln $src1dir/tree1/small $src1dir/tree1/hardlink
+ln -s small $src1dir/tree1/symlink
+
+mkdir -p $src2dir/tree2 $src2dir/common/only2
+printf "image 2 file\n" > $src2dir/tree2/file2.txt
+printf "image 2 common\n" > $src2dir/common/only2/b.txt
+yes "image 2 payload" | head -c 32768 > $src2dir/tree2/big2
+
+# combined reference tree
+mkdir -p $combdir
+cp -a $src1dir/. $combdir/
+cp -a $src2dir/. $combdir/
+
+# build two source EROFS images
+$MKFS_EROFS_PROG $img1 $src1dir >> $seqres.full 2>&1 || _fail "failed to create $img1"
+$MKFS_EROFS_PROG $img2 $src2dir >> $seqres.full 2>&1 || _fail "failed to create $img2"
+
+# multi-source fulldata rebuild
+$MKFS_EROFS_PROG --clean=data $SCRATCH_DEV $img1 $img2 >> $seqres.full 2>&1 || \
+ _fail "failed to rebuild merged image with --clean=data"
+$FSCK_EROFS_PROG --extract $SCRATCH_DEV >> $seqres.full 2>&1 || \
+ _fail "merged image failed integrity check"
+
+# remove both source images: the merged image must be self-contained
+rm -f $img1 $img2
+
+FSSUM_OPTS="-MAC"
+[ $FSTYP = "erofsfuse" ] && FSSUM_OPTS="${FSSUM_OPTS}T"
+
+_scratch_mount 2>>$seqres.full
+sum1=`$FSSUM_PROG $FSSUM_OPTS $combdir`
+sum2=`$FSSUM_PROG $FSSUM_OPTS $SCRATCH_MNT`
+echo "combined source checksum: $sum1" >>$seqres.full
+echo "merged image checksum: $sum2" >>$seqres.full
+_scratch_unmount
+
+[ "x$sum1" = "x$sum2" ] || _fail "multi-source fulldata rebuild mismatch"
+
+echo Silence is golden
+status=0
+exit 0
diff --git a/tests/erofs/030.out b/tests/erofs/030.out
new file mode 100644
index 00000000..06a1c8fe
--- /dev/null
+++ b/tests/erofs/030.out
@@ -0,0 +1,2 @@
+QA output created by 030
+Silence is golden
---
base-commit: feadb09fcfa1b05ca930cfce871d0e56f6bd3a95
change-id: 20260417-b4-fulldata-test-b8e15272bc59
Best regards,
--
Lucas Karpinski <lkarpinski at nvidia.com>
More information about the Linux-erofs
mailing list