diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rwxr-xr-xtests/setup.sh2
-rwxr-xr-xtests/t0110-snapshot.sh253
2 files changed, 73 insertions, 182 deletions
diff --git a/tests/setup.sh b/tests/setup.sh
index aac498c..44751b4 100755
--- a/tests/setup.sh
+++ b/tests/setup.sh
@@ -110,7 +110,7 @@ cache-root=$PWD/cache
cache-size=1021
enable-cache-list=1
-snapshots=tar.gz tar.bz tar.lz tar.xz tar.zst zip
+snapshots=tar tar.gz tar.bz2 tar.lz tar.xz tar.zst zip
enable-log-filecount=1
enable-log-linecount=1
summary-log=5
diff --git a/tests/t0110-snapshot.sh b/tests/t0110-snapshot.sh
index 6f5f588..d6c3265 100755
--- a/tests/t0110-snapshot.sh
+++ b/tests/t0110-snapshot.sh
@@ -1,225 +1,116 @@
#!/bin/sh
-# The snapshot page hands a branch back as a compressed archive. Most of the
-# formats the shared setup enables are fetched here, then their headers are
-# read, their bodies unpacked and the files inside compared against the
-# repository that setup built. A format needing a helper program that is not
-# always installed sits behind a prerequisite, so a machine without lzip, xz,
-# zstd or unzip skips those checks instead of failing them.
+# The snapshot page hands a branch back as an archive. Every tar based format
+# goes through the same motions, fetch the archive, read its headers, prove
+# the compression is genuine, then unpack it and compare the files inside
+# against the repository the shared setup built, so one function below
+# registers those checks per format. cgit pipes each format through the
+# matching compressor on the server and this test needs the same program to
+# unpack, so one missing tool skips that format on both grounds at once. The
+# zip format follows at the end, since unzip shares no flags with the rest.
test_description='Verify snapshot'
. ./setup.sh
-test_expect_success 'get foo/snapshot/master.tar.gz' '
- cgit_url "foo/snapshot/master.tar.gz" >tmp
-'
+# Registers the checks for one tar based format. Takes the archive suffix,
+# the content type the response must carry, the compressor to unpack with and
+# the name of the prerequisite guarding the checks.
+test_tar_snapshot() {
+ ext=$1
+ type=$2
+ tool=$3
+ prereq=$4
-test_expect_success 'check html headers' '
- head -n 1 tmp |
- grep "Status: 200 OK" &&
+ if command -v "$tool" >/dev/null 2>&1
+ then
+ test_set_prereq $prereq
+ else
+ say "Skipping $ext validation tests: $tool not found"
+ fi
- head -n 2 tmp |
- grep "Content-Type: application/x-gzip" &&
+ test_expect_success $prereq "get foo/snapshot/master.$ext" "
+ cgit_url 'foo/snapshot/master.$ext' >tmp
+ "
- head -n 3 tmp |
- grep "Content-Disposition: inline; filename=.master.tar.gz."
-'
+ test_expect_success $prereq "check $ext response headers" "
+ head -n 1 tmp | grep 'Status: 200 OK' &&
+ head -n 2 tmp | grep 'Content-Type: $type' &&
+ head -n 3 tmp | grep 'Content-Disposition: inline; filename=.master.$ext.'
+ "
-test_expect_success 'strip off the header lines' '
- strip_headers <tmp >master.tar.gz
-'
+ test_expect_success $prereq "verify $ext format" "
+ strip_headers <tmp >master.$ext &&
+ '$tool' -t 'master.$ext'
+ "
-test_expect_success 'verify gzip format' '
- gunzip --test master.tar.gz
-'
+ test_expect_success $prereq "untar $ext and verify the content" "
+ rm -rf master &&
+ '$tool' -dc 'master.$ext' | tar -xf - &&
+ ls master/ >output &&
+ test_line_count = 5 output &&
+ grep '^5\$' master/file-5 &&
+ test_line_count = 1 master/file-5
+ "
+}
-test_expect_success 'untar' '
- rm -rf master &&
- gzip -dc master.tar.gz | tar -xf -
+# The uncompressed tar comes straight out of git's archive writer, so tar
+# itself both proves the format and unpacks it.
+test_expect_success 'get foo/snapshot/master.tar' '
+ cgit_url "foo/snapshot/master.tar" >tmp
'
-test_expect_success 'count files' '
- ls master/ >output &&
- test_line_count = 5 output
-'
-
-test_expect_success 'verify untarred file-5' '
- grep "^5$" master/file-5 &&
- test_line_count = 1 master/file-5
+test_expect_success 'check tar response headers' '
+ head -n 1 tmp | grep "Status: 200 OK" &&
+ head -n 2 tmp | grep "Content-Type: application/x-tar" &&
+ head -n 3 tmp | grep "Content-Disposition: inline; filename=.master.tar."
'
-if test -n "$(which lzip 2>/dev/null)"; then
- test_set_prereq LZIP
-else
- say 'Skipping LZIP validation tests: lzip not found'
-fi
-
-test_expect_success LZIP 'get foo/snapshot/master.tar.lz' '
- cgit_url "foo/snapshot/master.tar.lz" >tmp
-'
-
-test_expect_success LZIP 'check html headers' '
- head -n 1 tmp |
- grep "Status: 200 OK" &&
-
- head -n 2 tmp |
- grep "Content-Type: application/x-lzip" &&
-
- head -n 3 tmp |
- grep "Content-Disposition: inline; filename=.master.tar.lz."
-'
-
-test_expect_success LZIP 'strip off the header lines' '
- strip_headers <tmp >master.tar.lz
-'
-
-test_expect_success LZIP 'verify lzip format' '
- lzip --test master.tar.lz
-'
-
-test_expect_success LZIP 'untar' '
+test_expect_success 'untar and verify the content' '
+ strip_headers <tmp >master.tar &&
rm -rf master &&
- lzip -dc master.tar.lz | tar -xf -
-'
-
-test_expect_success LZIP 'count files' '
+ tar -xf master.tar &&
ls master/ >output &&
- test_line_count = 5 output
-'
-
-test_expect_success LZIP 'verify untarred file-5' '
+ test_line_count = 5 output &&
grep "^5$" master/file-5 &&
test_line_count = 1 master/file-5
'
-if test -n "$(which xz 2>/dev/null)"; then
- test_set_prereq XZ
-else
- say 'Skipping XZ validation tests: xz not found'
-fi
-
-test_expect_success XZ 'get foo/snapshot/master.tar.xz' '
- cgit_url "foo/snapshot/master.tar.xz" >tmp
-'
-
-test_expect_success XZ 'check html headers' '
- head -n 1 tmp |
- grep "Status: 200 OK" &&
-
- head -n 2 tmp |
- grep "Content-Type: application/x-xz" &&
-
- head -n 3 tmp |
- grep "Content-Disposition: inline; filename=.master.tar.xz."
-'
-
-test_expect_success XZ 'strip off the header lines' '
- strip_headers <tmp >master.tar.xz
-'
-
-test_expect_success XZ 'verify xz format' '
- xz --test master.tar.xz
-'
-
-test_expect_success XZ 'untar' '
- rm -rf master &&
- xz -dc master.tar.xz | tar -xf -
-'
-
-test_expect_success XZ 'count files' '
- ls master/ >output &&
- test_line_count = 5 output
-'
+test_tar_snapshot tar.gz application/x-gzip gzip GZIP
+test_tar_snapshot tar.bz2 application/x-bzip2 bzip2 BZIP2
+test_tar_snapshot tar.lz application/x-lzip lzip LZIP
+test_tar_snapshot tar.xz application/x-xz xz XZ
+test_tar_snapshot tar.zst application/x-zstd zstd ZSTD
-test_expect_success XZ 'verify untarred file-5' '
- grep "^5$" master/file-5 &&
- test_line_count = 1 master/file-5
-'
-
-if test -n "$(which zstd 2>/dev/null)"; then
- test_set_prereq ZSTD
+if command -v unzip >/dev/null 2>&1
+then
+ test_set_prereq UNZIP
else
- say 'Skipping ZSTD validation tests: zstd not found'
+ say 'Skipping zip validation tests: unzip not found'
fi
-test_expect_success ZSTD 'get foo/snapshot/master.tar.zst' '
- cgit_url "foo/snapshot/master.tar.zst" >tmp
-'
-
-test_expect_success ZSTD 'check html headers' '
- head -n 1 tmp |
- grep "Status: 200 OK" &&
-
- head -n 2 tmp |
- grep "Content-Type: application/x-zstd" &&
-
- head -n 3 tmp |
- grep "Content-Disposition: inline; filename=.master.tar.zst."
-'
-
-test_expect_success ZSTD 'strip off the header lines' '
- strip_headers <tmp >master.tar.zst
-'
-
-test_expect_success ZSTD 'verify zstd format' '
- zstd --test master.tar.zst
-'
-
-test_expect_success ZSTD 'untar' '
- rm -rf master &&
- zstd -dc master.tar.zst | tar -xf -
-'
-
-test_expect_success ZSTD 'count files' '
- ls master/ >output &&
- test_line_count = 5 output
-'
-
-test_expect_success ZSTD 'verify untarred file-5' '
- grep "^5$" master/file-5 &&
- test_line_count = 1 master/file-5
-'
-
test_expect_success 'get foo/snapshot/master.zip' '
cgit_url "foo/snapshot/master.zip" >tmp
'
-test_expect_success 'check HTML headers (zip)' '
- head -n 1 tmp |
- grep "Status: 200 OK" &&
-
- head -n 2 tmp |
- grep "Content-Type: application/x-zip" &&
-
- head -n 3 tmp |
- grep "Content-Disposition: inline; filename=.master.zip."
+test_expect_success 'check zip response headers' '
+ head -n 1 tmp | grep "Status: 200 OK" &&
+ head -n 2 tmp | grep "Content-Type: application/x-zip" &&
+ head -n 3 tmp | grep "Content-Disposition: inline; filename=.master.zip."
'
-test_expect_success 'strip off the header lines (zip)' '
+test_expect_success 'strip off the header lines' '
strip_headers <tmp >master.zip
'
-if test -n "$(which unzip 2>/dev/null)"; then
- test_set_prereq UNZIP
-else
- say 'Skipping ZIP validation tests: unzip not found'
-fi
-
test_expect_success UNZIP 'verify zip format' '
unzip -t master.zip
'
-test_expect_success UNZIP 'unzip' '
+test_expect_success UNZIP 'unzip and verify the content' '
rm -rf master &&
- unzip master.zip
-'
-
-test_expect_success UNZIP 'count files (zip)' '
+ unzip master.zip &&
ls master/ >output &&
- test_line_count = 5 output
-'
-
-test_expect_success UNZIP 'verify unzipped file-5' '
+ test_line_count = 5 output &&
grep "^5$" master/file-5 &&
test_line_count = 1 master/file-5
'