diff options
context:
space:
mode:
Diffstat (limited to 'tests/t0020-validate-cache.sh')
-rwxr-xr-xtests/t0020-validate-cache.sh49
1 file changed, 49 insertions, 0 deletions
diff --git a/tests/t0020-validate-cache.sh b/tests/t0020-validate-cache.sh
index 657765d..7e6334c 100755
--- a/tests/t0020-validate-cache.sh
+++ b/tests/t0020-validate-cache.sh
@@ -75,4 +75,53 @@ test_expect_success 'verify cache-size=1021' '
test_cmp output.full output.second
'
+# --- A cached page must hold everything the uncached one produced -----------
+# Page output is buffered, so the slot is only complete if the buffer is
+# emptied before the generated content is measured. The blob here is larger
+# than one buffer, so a missing flush would truncate the cached copy.
+test_expect_success 'set up a repo with a page larger than the output buffer' '
+ mkrepo repos/bigpage 1 &&
+ (
+ cd repos/bigpage &&
+ awk "BEGIN{for(i=0;i<20000;i++) print \"line \" i \" of the big file\"}" >big.txt &&
+ git add big.txt &&
+ git commit -m "add big.txt"
+ ) &&
+ {
+ echo "virtual-root=/" &&
+ echo "cache-root=$PWD/cache2" &&
+ echo "cache-size=64" &&
+ echo "enable-tree-linenumbers=1" &&
+ echo "repo.url=bigpage" &&
+ echo "repo.path=$PWD/repos/bigpage/.git"
+ } >bigrc &&
+ rm -rf cache2 && mkdir cache2
+'
+
+bigq() { CGIT_CONFIG="$PWD/bigrc" QUERY_STRING="$1" cgit; }
+
+test_expect_success 'the first request fills the slot and the second replays it' '
+ bigq "url=bigpage/tree/big.txt" >big.first &&
+ test $(wc -c <big.first) -gt 65536 &&
+ bigq "url=bigpage/tree/big.txt" >big.second &&
+ strip_headers <big.first >big.first.body &&
+ strip_headers <big.second >big.second.body &&
+ test_cmp big.first.body big.second.body
+'
+
+test_expect_success 'the cached body matches one generated with the cache off' '
+ sed -e "s/^cache-size=64$/cache-size=0/" bigrc >bignocache &&
+ CGIT_CONFIG="$PWD/bignocache" QUERY_STRING="url=bigpage/tree/big.txt" cgit >big.nocache &&
+ strip_headers <big.nocache >big.nocache.body &&
+ # The footer carries the time the page was generated, which differs
+ # between the two runs by construction.
+ sed -e "s/generated by .*//" big.nocache.body >big.a &&
+ sed -e "s/generated by .*//" big.second.body >big.b &&
+ test_cmp big.a big.b
+'
+
+test_expect_success 'the page ends where it should, so nothing was dropped' '
+ tail -c 200 big.second.body | grep "</html>"
+'
+
test_done