Diff options
Diffstat (limited to '')
| -rwxr-xr-x | tests/setup.sh | 80 |
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 |
