[PATCH 8/9] archive tests: test for "gzip -cn" and "git archive gzip" stability

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



If our test suite is instrumented to run the first "test_cmp_bin" in
"test_done" it'll mostly pass, but fail on a few tests, such as
"t5319-multi-pack-index.sh". Those tests reveal edge cases where the
output of "gzip -cn" is different than that of "git archive gzip" for
the same input.

Let's extract a minimal version of the part of
"t5319-multi-pack-index.sh" which triggers it, and add a test for
archival stability.

Whatever we ultimately decide to promise when it comes to this
stability (see [1]) it'll be better to go into any behavior difference
knowing that's what we're about to do, rather than discover widespread
breakage due to already released Git versions.

The "GZIP_TRIVIALLY_STABLE" code here is added because on OSX even a
trivial *.tgz generated by the two methods will be different.

1. https://lore.kernel.org/git/a812a664-67ea-c0ba-599f-cb79e2d96694@xxxxxxxxx/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx>
---
 t/t5005-archive-stability.sh | 70 ++++++++++++++++++++++++++++++++++++
 1 file changed, 70 insertions(+)
 create mode 100755 t/t5005-archive-stability.sh

diff --git a/t/t5005-archive-stability.sh b/t/t5005-archive-stability.sh
new file mode 100755
index 00000000000..c7532886920
--- /dev/null
+++ b/t/t5005-archive-stability.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+
+test_description='git archive stabilty'
+
+TEST_PASSES_SANITIZE_LEAK=true
+. ./test-lib.sh
+
+create_archive_file_with_config () {
+	local file="$1" &&
+	local config="$2" &&
+	shift 2 &&
+
+	test_when_finished "rm -rf \"$file\"" &&
+	git -c tar.tgz.command="$config" archive -o "$file" HEAD
+}
+
+setup_gzip_vs_git_archive_gzip () {
+	create_archive_file_with_config "expect.tgz" "gzip -cn" &&
+	create_archive_file_with_config "actual.tgz" "git archive gzip"
+}
+
+test_lazy_prereq GZIP_TRIVIALLY_STABLE '
+	git clone "$TRASH_DIRECTORY" . &&
+	test_commit P &&
+	setup_gzip_vs_git_archive_gzip &&
+	test_cmp_bin expect.tgz actual.tgz
+'
+
+if ! test_have_prereq GZIP_TRIVIALLY_STABLE
+then
+	skip_all='skipping gzip v.s. git archive gzip tests, even trivial content differs'
+	test_done
+fi
+
+# The first test_expect_success is after the "skip_all" so we'll get
+# the skip summary in prove(1) output.
+test_expect_success 'setup' '
+	test_commit A
+'
+
+test_expect_success GZIP '"gzip -cn" and v.s. "git archive gzip" produce the same output still' '
+	setup_gzip_vs_git_archive_gzip &&
+	test_cmp_bin expect.tgz actual.tgz
+'
+
+generate_objects () {
+	i=$1
+	iii=$(printf '%03i' $i)
+	{
+		echo $iii &&
+		test-tool genrandom "$iii" 8192
+	} >file_$iii &&
+	git update-index --add file_$iii
+}
+
+test_expect_success 'create objects with (stable) random data' '
+	test_commit initial &&
+	for i in $(test_seq 1 5)
+	do
+		generate_objects $i || return 1
+	done &&
+	git commit -m"add objects"
+'
+
+test_expect_success GZIP '"gzip -cn" and v.s. "git archive gzip" have differing output' '
+	setup_gzip_vs_git_archive_gzip &&
+	! test_cmp_bin expect.tgz actual.tgz
+'
+
+test_done
-- 
2.39.1.1392.g63e6d408230




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux