Diff options
Diffstat (limited to '')
-rwxr-xr-xtests/setup.sh80
1 file changed, 64 insertions, 16 deletions
diff --git a/tests/setup.sh b/tests/setup.sh
index a1f2d15..92451b7 100755
--- a/tests/setup.sh
+++ b/tests/setup.sh
@@ -1,13 +1,11 @@
# Shared groundwork sourced by every test script. It builds a handful of small
# repositories under repos/ and writes a cgitrc pointing at them, then offers
-# the helpers that ask cgit for a page so a test only has to look at what comes
-# back. Sourcing it also brings in the test library from the bundled Git tree,
-# which is where test_expect_success and the trash directory come from. Set
-# CGIT_TEST_NO_CREATE_REPOS to get the helpers without paying for the fixtures.
+# the helpers that write a config of a test's own and ask cgit for a page, so
+# a test only has to look at what comes back. Sourcing it also brings in the
+# test library from the bundled Git tree, which is where test_expect_success
+# and the trash directory come from. Set CGIT_TEST_NO_CREATE_REPOS to get the
+# helpers without paying for the fixtures.
-# The Git test library would run every Git command under Valgrind if it saw
-# --valgrind, and only cgit is worth watching, so the option is taken out
-# here and acted on further down.
LF='
'
# Trash directories are collected under one trash/, which keeps the ignore
@@ -15,6 +13,9 @@ LF='
# one given on the command line still wins.
test_argv="${LF}--root=trash"
+# The Git test library would run every Git command under Valgrind if it saw
+# --valgrind, and only cgit is worth watching, so the option is taken out
+# here and acted on further down.
while test $# != 0
do
case "$1" in
@@ -43,11 +44,10 @@ TEST_NO_CREATE_REPO=YesPlease
# The library spells its results directory test-results and derives these
# variables before it can be told otherwise, so they are re-pointed at the
-# plainer results/. The --tee and --stress raw logs write earlier and keep
-# the library's name.
+# plainer results/. The --tee and --stress raw logs and the leak logs write
+# earlier and keep the library's name.
TEST_RESULTS_DIR="$TEST_OUTPUT_DIRECTORY/results"
TEST_RESULTS_BASE="$TEST_RESULTS_DIR/$TEST_NAME$TEST_STRESS_JOB_SFX"
-TEST_RESULTS_SAN_DIR="$TEST_RESULTS_BASE.$TEST_RESULTS_SAN_DIR_SFX"
# The library has moved into the trash directory by now, so paths outside it
# are anchored to TEST_OUTPUT_DIRECTORY. The tests run cgit by name, so the
@@ -69,9 +69,10 @@ FILTER_DIRECTORY=$(cd "$TEST_OUTPUT_DIRECTORY/filters" && pwd)
# them have to ask the binary rather than assume.
if cgit --version | grep -F -q "[+] Lua scripting"
then
- export CGIT_HAS_LUA=1
+ CGIT_HAS_LUA=1
+ test_set_prereq CGIT_LUA
else
- export CGIT_HAS_LUA=0
+ CGIT_HAS_LUA=0
fi
# Creates a repository holding the given number of one file commits. A third
@@ -107,8 +108,7 @@ mkrepo() {
}
setup_repos() {
- rm -rf cache
- mkdir -p cache
+ mkdir cache
mkrepo repos/foo 5 >/dev/null
mkrepo repos/bar 50 commit-graph >/dev/null
mkrepo repos/foo+bar 10 testplus >/dev/null
@@ -169,12 +169,60 @@ EOF
fi
}
+# Writes a config to the file named first that serves repos/<url> under the
+# url named second, with the cache off and links rooted at /, and takes the
+# rest as settings. A repository copies its defaults from the global settings
+# read before its repo.url, so whatever order they come in, the repo.* ones
+# go after the repository and all others ahead of it. A repo.path setting
+# names a repository kept somewhere else.
+cgitrc_repo() {
+ cgitrc_file=$1
+ cgitrc_url=$2
+ shift 2
+ cgitrc_path="repo.path=$PWD/repos/$cgitrc_url/.git"
+ cgitrc_before=
+ cgitrc_after=
+ for cgitrc_setting
+ do
+ case "$cgitrc_setting" in
+ repo.path=*)
+ cgitrc_path=$cgitrc_setting
+ ;;
+ repo.*)
+ cgitrc_after="$cgitrc_after$cgitrc_setting$LF"
+ ;;
+ *)
+ cgitrc_before="$cgitrc_before$cgitrc_setting$LF"
+ ;;
+ esac
+ done
+ printf '%s' "virtual-root=/$LF" "cache-size=0$LF" "$cgitrc_before" \
+ "repo.url=$cgitrc_url$LF" "$cgitrc_path$LF" "$cgitrc_after" >"$cgitrc_file"
+}
+
+# Writes the global settings named after the file ahead of a copy of the
+# shared cgitrc. The copy turns the cache off, because a page is cached under
+# its request alone and would otherwise come back as the shared config made
+# it.
+cgitrc_copy() {
+ cgitrc_file=$1
+ shift
+ {
+ test $# = 0 || printf '%s\n' "$@"
+ sed "s/^cache-size=.*/cache-size=0/" cgitrc
+ } >"$cgitrc_file"
+}
+
+cgit_rc() {
+ CGIT_CONFIG="$PWD/$1" QUERY_STRING="$2" cgit
+}
+
cgit_query() {
- CGIT_CONFIG="$PWD/cgitrc" QUERY_STRING="$1" cgit
+ cgit_rc cgitrc "$1"
}
cgit_url() {
- CGIT_CONFIG="$PWD/cgitrc" QUERY_STRING="url=$1" cgit
+ cgit_rc cgitrc "url=$1"
}
# The response headers run down to the first empty line, and a test comparing