[PATCH v2] erofs-utils: tests: add test for negative GNU tar mtimes
Gao Xiang <[email protected]>
| Newsgroups | org.ozlabs.lists.linux-erofs |
|---|---|
| Message-ID | <[email protected]> |
From: Vansh Choudhary <[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]> Signed-off-by: Gao Xiang <[email protected]> --- v2: - use dump.erofs instead of fsck.erofs; - switch to MIT license. tests/Makefile.am | 3 +++ tests/erofs/030 | 55 +++++++++++++++++++++++++++++++++++++++++++++ tests/erofs/030.out | 2 ++ 3 files changed, 60 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 d8ac067805e8..28edc0d744d1 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 000000000000..72765cb19aee --- /dev/null +++ b/tests/erofs/030 @@ -0,0 +1,55 @@ +#!/bin/sh +# SPDX-License-Identifier: MIT +# +# 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 + +touch -d @-1 $localdir/src/testfile >> $seqres.full 2>&1 || \ + _notrun "touch -d @-1 is not supported" +tar --format=gnu -C $localdir/src -cf $localdir/foo.tar testfile >> $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" + +$MKFS_EROFS_PROG --tar=f $SCRATCH_DEV $localdir/foo.tar \ + >> $seqres.full 2>&1 || _fail "failed to mkfs tarball" + +output=$($DUMP_EROFS_PROG --path=/testfile $SCRATCH_DEV 2>&1) +[ $? -eq 0 ] || _fail "failed to dump testfile" +echo "$output" >> $seqres.full + +mtime=$(grep '^Timestamp:' <<< $output | sed 's/^.*: //') +[ "x$mtime" = "x1970-01-01 07:59:59.000000000" ] || \ + _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 000000000000..06a1c8fe02bb --- /dev/null +++ b/tests/erofs/030.out @@ -0,0 +1,2 @@ +QA output created by 030 +Silence is golden -- 2.43.5