about summary refs log tree commit diff stats
path: root/tests/setup.sh
diff options
context:
space:
mode:
authorJohn Keeping2013-04-01 15:09:05 +0100
committerJason A. Donenfeld2013-04-08 22:27:11 +0200
commitc95cc5ec56dbb7394015eb18201403be6d80f69b (patch)
tree7014b96a1a1408b5291532c0c442082aba693a80 /tests/setup.sh
parentDo not load user or system gitconfig and gitattributes (diff)
downloadcgit-c95cc5ec56dbb7394015eb18201403be6d80f69b.tar.gz
cgit-c95cc5ec56dbb7394015eb18201403be6d80f69b.zip
tests: use Git's test framework
This allows tests to run in parallel as well as letting us use "prove"
or another TAP harness to run the tests.

Git's test framework requires Git to be fully built before letting any
tests run, so add a new target to the top-level Makefile which builds
all of Git instead of just libgit.a and make the "test" target depend on
that.

Signed-off-by: John Keeping <john@keeping.me.uk>
Diffstat (limited to 'tests/setup.sh')
-rwxr-xr-xtests/setup.sh130
1 files changed, 41 insertions, 89 deletions
diff --git a/tests/setup.sh b/tests/setup.sh index e3c6c17..81e7220 100755 --- a/tests/setup.sh +++ b/tests/setup.sh
@@ -15,46 +15,48 @@
15# run_test 'repo index' 'cgit_url "/" | tidy -e' 15# run_test 'repo index' 'cgit_url "/" | tidy -e'
16# run_test 'repo summary' 'cgit_url "/foo" | tidy -e' 16# run_test 'repo summary' 'cgit_url "/foo" | tidy -e'
17 17
18unset CDPATH 18: ${TEST_DIRECTORY=$(pwd)/../git/t}
19TEST_NO_CREATE_REPO=YesPlease
20. "$TEST_DIRECTORY"/test-lib.sh
21
22# Prepend the directory containing cgit to PATH.
23PATH="$(pwd)/../..:$PATH"
19 24
20mkrepo() { 25mkrepo() {
21 name=$1 26 name=$1
22 count=$2 27 count=$2
23 dir=$PWD 28 test_create_repo "$name"
24 test -d "$name" && return 29 (
25 printf "Creating testrepo %s\n" "$name" 30 cd "$name"
26 mkdir -p "$name" 31 n=1
27 cd "$name" 32 while test $n -le $count
28 git init 33 do
29 n=1 34 echo $n >file-$n
30 while test $n -le $count 35 git add file-$n
31 do 36 git commit -m "commit $n"
32 echo $n >file-$n 37 n=$(expr $n + 1)
33 git add file-$n 38 done
34 git commit -m "commit $n" 39 if test "$3" = "testplus"
35 n=$(expr $n + 1) 40 then
36 done 41 echo "hello" >a+b
37 if test "$3" = "testplus" 42 git add a+b
38 then 43 git commit -m "add a+b"
39 echo "hello" >a+b 44 git branch "1+2"
40 git add a+b 45 fi
41 git commit -m "add a+b" 46 )
42 git branch "1+2"
43 fi
44 cd "$dir"
45} 47}
46 48
47setup_repos() 49setup_repos()
48{ 50{
49 rm -rf trash/cache 51 rm -rf cache
50 mkdir -p trash/cache 52 mkdir -p cache
51 mkrepo trash/repos/foo 5 >/dev/null 53 mkrepo repos/foo 5 >/dev/null
52 mkrepo trash/repos/bar 50 >/dev/null 54 mkrepo repos/bar 50 >/dev/null
53 mkrepo trash/repos/foo+bar 10 testplus >/dev/null 55 mkrepo repos/foo+bar 10 testplus >/dev/null
54 mkrepo "trash/repos/with space" 2 >/dev/null 56 mkrepo "repos/with space" 2 >/dev/null
55 cat >trash/cgitrc <<EOF 57 cat >cgitrc <<EOF
56virtual-root=/ 58virtual-root=/
57cache-root=$PWD/trash/cache 59cache-root=$PWD/cache
58 60
59cache-size=1021 61cache-size=1021
60snapshots=tar.gz tar.bz zip 62snapshots=tar.gz tar.bz zip
@@ -66,83 +68,33 @@ summary-tags=5
66clone-url=git://example.org/\$CGIT_REPO_URL.git 68clone-url=git://example.org/\$CGIT_REPO_URL.git
67 69
68repo.url=foo 70repo.url=foo
69repo.path=$PWD/trash/repos/foo/.git 71repo.path=$PWD/repos/foo/.git
70# Do not specify a description for this repo, as it then will be assigned 72# Do not specify a description for this repo, as it then will be assigned
71# the constant value "[no description]" (which actually used to cause a 73# the constant value "[no description]" (which actually used to cause a
72# segfault). 74# segfault).
73 75
74repo.url=bar 76repo.url=bar
75repo.path=$PWD/trash/repos/bar/.git 77repo.path=$PWD/repos/bar/.git
76repo.desc=the bar repo 78repo.desc=the bar repo
77 79
78repo.url=foo+bar 80repo.url=foo+bar
79repo.path=$PWD/trash/repos/foo+bar/.git 81repo.path=$PWD/repos/foo+bar/.git
80repo.desc=the foo+bar repo 82repo.desc=the foo+bar repo
81 83
82repo.url=with space 84repo.url=with space
83repo.path=$PWD/trash/repos/with space/.git 85repo.path=$PWD/repos/with space/.git
84repo.desc=spaced repo 86repo.desc=spaced repo
85EOF 87EOF
86} 88}
87 89
88prepare_tests()
89{
90 setup_repos
91 rm -f test-output.log 2>/dev/null
92 test_count=0
93 test_failed=0
94 echo "[$0]" "$@" >test-output.log
95 echo "$@" "($0)"
96}
97
98tests_done()
99{
100 printf "\n"
101 if test $test_failed -gt 0
102 then
103 printf "test: *** %s failure(s), logfile=%s\n" \
104 $test_failed "$(pwd)/test-output.log"
105 false
106 fi
107}
108
109run_test()
110{
111 bug=0
112 if test "$1" = "BUG"
113 then
114 bug=1
115 shift
116 fi
117 desc=$1
118 script=$2
119 test_count=$(expr $test_count + 1)
120 printf "\ntest %d: name='%s'\n" $test_count "$desc" >>test-output.log
121 printf "test %d: eval='%s'\n" $test_count "$2" >>test-output.log
122 eval "$2" >>test-output.log 2>>test-output.log
123 res=$?
124 printf "test %d: exitcode=%d\n" $test_count $res >>test-output.log
125 if test $res = 0 -a $bug = 0
126 then
127 printf " %2d) %-60s [ok]\n" $test_count "$desc"
128 elif test $res = 0 -a $bug = 1
129 then
130 printf " %2d) %-60s [BUG FIXED]\n" $test_count "$desc"
131 elif test $bug = 1
132 then
133 printf " %2d) %-60s [KNOWN BUG]\n" $test_count "$desc"
134 else
135 test_failed=$(expr $test_failed + 1)
136 printf " %2d) %-60s [failed]\n" $test_count "$desc"
137 fi
138}
139
140cgit_query() 90cgit_query()
141{ 91{
142 CGIT_CONFIG="$PWD/trash/cgitrc" QUERY_STRING="$1" "$PWD/../cgit" 92 CGIT_CONFIG="$PWD/cgitrc" QUERY_STRING="$1" cgit
143} 93}
144 94
145cgit_url() 95cgit_url()
146{ 96{
147 CGIT_CONFIG="$PWD/trash/cgitrc" QUERY_STRING="url=$1" "$PWD/../cgit" 97 CGIT_CONFIG="$PWD/cgitrc" QUERY_STRING="url=$1" cgit
148} 98}
99
100test -z "$CGIT_TEST_NO_CREATE_REPOS" && setup_repos