diff options
| author | Bryce Kwon <bryce@brycekwon.com> | |
|---|---|---|
| committer | Bryce Kwon <bryce@brycekwon.com> | |
| commit | ||
| parent | ||
| tree | ||
| download | ||
Rewrite the snapshot test around one helper
| -rwxr-xr-x | tests/setup.sh | 2 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| -rwxr-xr-x | tests/t0110-snapshot.sh | 253 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 ' |
