Source: exfatprogs
Severity: normal

Dear Maintainer,

We want to include exfatprogs in Ubuntu Main and that requires the package having non-trivial build-time tests and autopkgtests.

The upstream project in GitHub has a test suite for fsck.exfat under `./tests` but it is currently not included in the dist tarball so I've had to modify the tarball myself to include those tests. This might be a maintenance burden because for every new release you'd have to modify the tarball. We also lose the tarball signing verification... If you have better ideas on how to pull upstream tests into our build, please let me know! I've proposed that upstream includes those tests in the dist tarball: https://github.com/exfatprogs/exfatprogs/pull/264

Upstream also has a test that verifies creating/mounting an exfat filesystem and creating files/dirs inside it, that they're running in GitHub CI: I've duplicated that script under debian/tests to be run as an autopkgtest. Because this requires root, it is only suitable for an autopkgtest and not for a build-time test.

Because you're maintaining the package with gbp, I've pushed my gbp branches to the git repository at g...@salsa.debian.org:aleasto/exfatprogs.git for you to pull.

You'll also find a debdiff below for convenience:


*** ../exfatprogs_1.2.4+tests-1.debdiff
diff -Nru exfatprogs-1.2.4/debian/changelog exfatprogs-1.2.4+tests/debian/changelog
--- exfatprogs-1.2.4/debian/changelog 2024-06-17 11:45:31.000000000 +0200
+++ exfatprogs-1.2.4+tests/debian/changelog 2024-07-22 11:46:51.000000000 +0200
@@ -1,3 +1,11 @@
+exfatprogs (1.2.4+tests-1) UNRELEASED; urgency=medium
+
+ * New upstream version 1.2.4+tests
+ * Add upstream tests both as build-time tests and autopkgtests
+ * Add autopkgtest from upstream CI
+
+ -- Alessandro Astone <alessandro.ast...@canonical.com> Mon, 22 Jul 2024 11:46:51 +0200
+
exfatprogs (1.2.4-1) unstable; urgency=medium

* New upstream release.
diff -Nru exfatprogs-1.2.4/debian/rules exfatprogs-1.2.4+tests/debian/rules
--- exfatprogs-1.2.4/debian/rules 2024-06-17 11:44:08.000000000 +0200
+++ exfatprogs-1.2.4+tests/debian/rules 2024-07-22 11:39:57.000000000 +0200
@@ -7,5 +7,10 @@
%:
dh $@

+override_dh_auto_test:
+ dh_auto_test
+ export PATH="$(shell pwd)/fsck:$$PATH"; cd tests; ./test_fsck.sh
+ rm tests/exfat.img
+
override_dh_installchangelogs:
dh_installchangelogs NEWS
diff -Nru exfatprogs-1.2.4/debian/tests/control exfatprogs-1.2.4+tests/debian/tests/control --- exfatprogs-1.2.4/debian/tests/control 1970-01-01 01:00:00.000000000 +0100 +++ exfatprogs-1.2.4+tests/debian/tests/control 2024-07-22 11:41:55.000000000 +0200
@@ -0,0 +1,7 @@
+Tests: fsck
+Depends: @
+Restrictions: allow-stderr
+
+Tests: create-files
+Depends: @
+Restrictions: isolation-machine, needs-root
diff -Nru exfatprogs-1.2.4/debian/tests/create-files exfatprogs-1.2.4+tests/debian/tests/create-files --- exfatprogs-1.2.4/debian/tests/create-files 1970-01-01 01:00:00.000000000 +0100 +++ exfatprogs-1.2.4+tests/debian/tests/create-files 2024-07-22 11:41:30.000000000 +0200
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+# Original source:
+# https://github.com/exfatprogs/exfatprogs/blob/1.2.4/.github/workflows/c-cpp.yml#L37
+
+set -e
+
+mkdir "${AUTOPKGTEST_TMP}/mnt"
+truncate -s 10G "${AUTOPKGTEST_TMP}/test.img"
+
+dev=$(losetup --show -f "${AUTOPKGTEST_TMP}/test.img")
+mkfs.exfat ${dev}
+
+mount -t exfat ${dev} "${AUTOPKGTEST_TMP}/mnt"
+cd "${AUTOPKGTEST_TMP}/mnt"
+
+i=1;while [ $i -le 10000 ];do touch file$i;if [ $? != 0 ]; then exit 1; fi; i=$(($i + 1));done
+sync
+rm -rf *
+
+i=1;while [ $i -le 10000 ];do mkdir dir$i;if [ $? != 0 ]; then exit 1; fi; i=$(($i + 1));done
+sync
+rm -rf *
+
+i=1;while [ $i -le 10000 ];do touch file$i;if [ $? != 0 ]; then exit 1; fi; i=$(($i + 1));done +i=1;while [ $i -le 10000 ];do mkdir dir$i;if [ $? != 0 ]; then exit 1; fi; i=$(($i + 1));done
+sync
+
+fsck.exfat ${dev}
+find . -delete
+fsck.exfat ${dev}
+
+cd -
+umount ${dev}
+losetup -d ${dev}
diff -Nru exfatprogs-1.2.4/debian/tests/fsck exfatprogs-1.2.4+tests/debian/tests/fsck
--- exfatprogs-1.2.4/debian/tests/fsck 1970-01-01 01:00:00.000000000 +0100
+++ exfatprogs-1.2.4+tests/debian/tests/fsck 2024-07-22 11:39:57.000000000 +0200
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+set -e
+
+export TESTDIR="${AUTOPKGTEST_TMP}/fsck_tests"
+
+cp -r ./tests "$TESTDIR"
+cd "$TESTDIR"
+
+./test_fsck.sh
Binary files /tmp/PwXOhicayr/exfatprogs-1.2.4/tests/2tb_disk/exfat.img.tar.xz and /tmp/oXgAbPLX4n/exfatprogs-1.2.4+tests/tests/2tb_disk/exfat.img.tar.xz differ Binary files /tmp/PwXOhicayr/exfatprogs-1.2.4/tests/bad_bitmap/exfat.img.tar.xz and /tmp/oXgAbPLX4n/exfatprogs-1.2.4+tests/tests/bad_bitmap/exfat.img.tar.xz differ Binary files /tmp/PwXOhicayr/exfatprogs-1.2.4/tests/bad_dentries/exfat.img.tar.xz and /tmp/oXgAbPLX4n/exfatprogs-1.2.4+tests/tests/bad_dentries/exfat.img.tar.xz differ Binary files /tmp/PwXOhicayr/exfatprogs-1.2.4/tests/bad_dentries2/exfat.img.tar.xz and /tmp/oXgAbPLX4n/exfatprogs-1.2.4+tests/tests/bad_dentries2/exfat.img.tar.xz differ Binary files /tmp/PwXOhicayr/exfatprogs-1.2.4/tests/bad_file_size/exfat.img.tar.xz and /tmp/oXgAbPLX4n/exfatprogs-1.2.4+tests/tests/bad_file_size/exfat.img.tar.xz differ Binary files /tmp/PwXOhicayr/exfatprogs-1.2.4/tests/bad_first_clu/exfat.img.tar.xz and /tmp/oXgAbPLX4n/exfatprogs-1.2.4+tests/tests/bad_first_clu/exfat.img.tar.xz differ diff -Nru exfatprogs-1.2.4/tests/bad_num_chain/config exfatprogs-1.2.4+tests/tests/bad_num_chain/config --- exfatprogs-1.2.4/tests/bad_num_chain/config 1970-01-01 01:00:00.000000000 +0100 +++ exfatprogs-1.2.4+tests/tests/bad_num_chain/config 2024-07-19 17:52:13.000000000 +0200
@@ -0,0 +1 @@
+#OPTS: -s
Binary files /tmp/PwXOhicayr/exfatprogs-1.2.4/tests/bad_num_chain/exfat.img.tar.xz and /tmp/oXgAbPLX4n/exfatprogs-1.2.4+tests/tests/bad_num_chain/exfat.img.tar.xz differ Binary files /tmp/PwXOhicayr/exfatprogs-1.2.4/tests/bad_root/exfat.img.tar.xz and /tmp/oXgAbPLX4n/exfatprogs-1.2.4+tests/tests/bad_root/exfat.img.tar.xz differ Binary files /tmp/PwXOhicayr/exfatprogs-1.2.4/tests/bs_bad_csum/exfat.img.tar.xz and /tmp/oXgAbPLX4n/exfatprogs-1.2.4+tests/tests/bs_bad_csum/exfat.img.tar.xz differ Binary files /tmp/PwXOhicayr/exfatprogs-1.2.4/tests/de_bad_csum/exfat.img.tar.xz and /tmp/oXgAbPLX4n/exfatprogs-1.2.4+tests/tests/de_bad_csum/exfat.img.tar.xz differ Binary files /tmp/PwXOhicayr/exfatprogs-1.2.4/tests/duplicate_clu/exfat.img.tar.xz and /tmp/oXgAbPLX4n/exfatprogs-1.2.4+tests/tests/duplicate_clu/exfat.img.tar.xz differ Binary files /tmp/PwXOhicayr/exfatprogs-1.2.4/tests/duplicated_name/exfat.img.tar.xz and /tmp/oXgAbPLX4n/exfatprogs-1.2.4+tests/tests/duplicated_name/exfat.img.tar.xz differ Binary files /tmp/PwXOhicayr/exfatprogs-1.2.4/tests/file_invalid_clus/exfat.img.tar.xz and /tmp/oXgAbPLX4n/exfatprogs-1.2.4+tests/tests/file_invalid_clus/exfat.img.tar.xz differ Binary files /tmp/PwXOhicayr/exfatprogs-1.2.4/tests/large_file_invalid_clus/exfat.img.tar.xz and /tmp/oXgAbPLX4n/exfatprogs-1.2.4+tests/tests/large_file_invalid_clus/exfat.img.tar.xz differ diff -Nru exfatprogs-1.2.4/tests/loop_chain/config exfatprogs-1.2.4+tests/tests/loop_chain/config --- exfatprogs-1.2.4/tests/loop_chain/config 1970-01-01 01:00:00.000000000 +0100 +++ exfatprogs-1.2.4+tests/tests/loop_chain/config 2024-07-19 17:52:13.000000000 +0200
@@ -0,0 +1 @@
+#OPTS: -s
Binary files /tmp/PwXOhicayr/exfatprogs-1.2.4/tests/loop_chain/exfat.img.tar.xz and /tmp/oXgAbPLX4n/exfatprogs-1.2.4+tests/tests/loop_chain/exfat.img.tar.xz differ Binary files /tmp/PwXOhicayr/exfatprogs-1.2.4/tests/rename_dot_entry/exfat.img.tar.xz and /tmp/oXgAbPLX4n/exfatprogs-1.2.4+tests/tests/rename_dot_entry/exfat.img.tar.xz differ diff -Nru exfatprogs-1.2.4/tests/test_fsck.sh exfatprogs-1.2.4+tests/tests/test_fsck.sh
--- exfatprogs-1.2.4/tests/test_fsck.sh 1970-01-01 01:00:00.000000000 +0100
+++ exfatprogs-1.2.4+tests/tests/test_fsck.sh 2024-07-19 17:52:13.000000000 +0200
@@ -0,0 +1,88 @@
+#!/usr/bin/env bash
+
+TESTCASE_DIR=$1
+NEED_LOOPDEV=$2
+IMAGE_FILE=exfat.img
+FSCK_PROG=fsck.exfat
+FSCK_PROG_2=fsck.exfat
+FSCK_OPTS="-y -s"
+PASS_COUNT=0
+
+cleanup() {
+ echo ""
+ echo "Passed ${PASS_COUNT} of ${TEST_COUNT}"
+ if [ ${PASS_COUNT} -ne ${TEST_COUNT} ]; then
+ exit 1
+ else
+ exit 0
+ fi
+}
+
+if [ $# -eq 0 ]; then
+ TESTCASE_DIRS=$(find . -mindepth 1 -maxdepth 1 -type d)
+ TEST_COUNT=$(find . -mindepth 1 -maxdepth 1 -type d | wc -l)
+else
+ TESTCASE_DIRS=$@
+ TEST_COUNT=$#
+fi
+
+for TESTCASE_DIR in $TESTCASE_DIRS; do
+ if [ ! -e "${TESTCASE_DIR}/${IMAGE_FILE}.tar.xz" ]; then
+ TEST_COUNT=$((TEST_COUNT - 1))
+ continue
+ fi
+
+ echo "Running ${TESTCASE_DIR}"
+ echo "-----------------------------------"
+
+ # Set up image file as loop device
+ tar -C . -xf "${TESTCASE_DIR}/${IMAGE_FILE}.tar.xz"
+ if [ $NEED_LOOPDEV ]; then
+ DEV_FILE=$(losetup -f "${IMAGE_FILE}" --show)
+ else
+ DEV_FILE=$IMAGE_FILE
+ fi
+
+ # Run fsck to detect corruptions
+ $FSCK_PROG "$DEV_FILE" | grep -q "ERROR:\|corrupted"
+ if [ $? -ne 0 ]; then
+ echo ""
+ echo "Failed to detect corruption for ${TESTCASE_DIR}"
+ if [ $NEED_LOOPDEV ]; then
+ losetup -d "${DEV_FILE}"
+ fi
+ cleanup
+ fi
+
+ # Run fsck for repair
+ $FSCK_PROG $FSCK_OPTS "$DEV_FILE"
+ if [ $? -ne 1 ] && [ $? -ne 0 ]; then
+ echo ""
+ echo "Failed to repair ${TESTCASE_DIR}"
+ if [ $NEED_LOOPDEV ]; then
+ losetup -d "${DEV_FILE}"
+ fi
+ cleanup
+ fi
+
+ echo ""
+ # Run fsck again
+ $FSCK_PROG_2 "$DEV_FILE"
+ if [ $? -ne 0 ]; then
+ echo ""
+ echo "Failed, corrupted ${TESTCASE_DIR}"
+ if [ $NEED_LOOPDEV ]; then
+ losetup -d "${DEV_FILE}"
+ fi
+ cleanup
+ fi
+
+ echo ""
+ echo "Passed ${TESTCASE_DIR}"
+ PASS_COUNT=$((PASS_COUNT + 1))
+
+ if [ $NEED_LOOPDEV ]; then
+ losetup -d "${DEV_FILE}"
+ fi
+done
+cleanup


-- System Information:
Debian Release: trixie/sid
APT prefers noble-updates
APT policy: (500, 'noble-updates'), (500, 'noble-security'), (500, 'noble'), (100, 'noble-proposed'), (100, 'noble-backports')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 6.8.0-40-generic (SMP w/16 CPU threads; PREEMPT)
Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_OOT_MODULE
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Reply via email to