[PATCH] erofs-utils: tests: add test for negative GNU tar mtimes
Vansh Choudhary <[email protected]>
| Newsgroups | org.ozlabs.lists.linux-erofs |
|---|---|
| Message-ID | <[email protected]> |
Add a regression test for negative GNU tar mtimes. It creates a tarball with a file whose mtime is -1, checks that the mtime field is encoded in GNU base-256 format, and verifies that the timestamp is preserved after building and extracting the image. Signed-off-by: Vansh Choudhary <[email protected]> --- tests/Makefile.am | 3 +++ tests/erofs/030 | 57 +++++++++++++++++++++++++++++++++++++++++++++ tests/erofs/030.out | 2 ++ 3 files changed, 62 insertions(+) create mode 100755 tests/erofs/030 create mode 100644 tests/erofs/030.out diff --git a/tests/Makefile.am b/tests/Makefile.am index d8ac067..28edc0d 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 - regression test for negative GNU tar mtimes +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 0000000..6d57225 --- /dev/null +++ b/tests/erofs/030 @@ -0,0 +1,57 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0+ +# +# 030 - regression test for negative GNU tar mtimes +# +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.* +} + +# 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 + +localdir="$tmp/$seq" +rm -rf $localdir +mkdir -p $localdir/src + +: > $localdir/src/foo +touch -d @-1 $localdir/src/foo >> $seqres.full 2>&1 || \ + _notrun "touch -d @-1 is not supported" +tar --format=gnu -C $localdir/src -cf $localdir/foo.tar foo >> $seqres.full 2>&1 || \ + _fail "failed to create tarball" + +mtime=$(od -An -t x1 -j 136 -N 12 $localdir/foo.tar | tr -d '[:space:]') +[ "$mtime" = "ffffffffffffffffffffffff" ] || \ + _notrun "tar did not encode a negative GNU mtime" + +rm -f $SCRATCH_DEV +$MKFS_EROFS_PROG --tar=f $SCRATCH_DEV $localdir/foo.tar \ + >> $seqres.full 2>&1 || _fail "failed to mkfs tarball" + +rm -rf $localdir/out +mkdir -p $localdir/out +$FSCK_EROFS_PROG --extract=$localdir/out $SCRATCH_DEV >> $seqres.full 2>&1 || \ + _fail "failed to extract image" + +mtime=$(stat -c '%Y' $localdir/out/foo) +[ "$mtime" = "-1" ] || _fail "negative GNU mtime was not preserved" + +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 0000000..06a1c8f --- /dev/null +++ b/tests/erofs/030.out @@ -0,0 +1,2 @@ +QA output created by 030 +Silence is golden -- 2.43.0