aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar John Keeping <john@keeping.me.uk>2013-04-01 23:09:05 (JST)
committerGravatar Jason A. Donenfeld <Jason@zx2c4.com>2013-04-09 05:27:11 (JST)
commitc95cc5ec56dbb7394015eb18201403be6d80f69b (patch)
tree7014b96a1a1408b5291532c0c442082aba693a80
parent8a92df033e974af6338b530a0d78d1bdb0b0f918 (diff)
downloadcgit-c95cc5ec56dbb7394015eb18201403be6d80f69b.zip
cgit-c95cc5ec56dbb7394015eb18201403be6d80f69b.tar.gz
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>
-rw-r--r--Makefile7
-rwxr-xr-xtests/setup.sh130
-rwxr-xr-xtests/t0001-validate-git-versions.sh28
-rwxr-xr-xtests/t0010-validate-html.sh31
-rwxr-xr-xtests/t0020-validate-cache.sh32
-rwxr-xr-xtests/t0101-index.sh25
-rwxr-xr-xtests/t0102-summary.sh35
-rwxr-xr-xtests/t0103-log.sh33
-rwxr-xr-xtests/t0104-tree.sh33
-rwxr-xr-xtests/t0105-commit.sh41
-rwxr-xr-xtests/t0106-diff.sh21
-rwxr-xr-xtests/t0107-snapshot.sh77
-rwxr-xr-xtests/t0108-patch.sh37
13 files changed, 239 insertions, 291 deletions
diff --git a/Makefile b/Makefile
index 59edab0..ed29b3a 100644
--- a/Makefile
+++ b/Makefile
@@ -66,7 +66,10 @@ all:: cgit
66cgit: 66cgit:
67 $(QUIET_SUBDIR0)git $(QUIET_SUBDIR1) -f ../cgit.mk ../cgit NO_CURL=1 67 $(QUIET_SUBDIR0)git $(QUIET_SUBDIR1) -f ../cgit.mk ../cgit NO_CURL=1
68 68
69test: all 69git:
70 $(QUIET_SUBDIR0)git $(QUIET_SUBDIR1) NO_CURL=1
71
72test: all git
70 $(QUIET_SUBDIR0)tests $(QUIET_SUBDIR1) all 73 $(QUIET_SUBDIR0)tests $(QUIET_SUBDIR1) all
71 74
72install: all 75install: all
@@ -145,7 +148,7 @@ get-git:
145tags: 148tags:
146 $(QUIET_TAGS)find . -name '*.[ch]' | xargs ctags 149 $(QUIET_TAGS)find . -name '*.[ch]' | xargs ctags
147 150
148.PHONY: all cgit get-git 151.PHONY: all cgit git get-git
149.PHONY: clean clean-doc cleanall 152.PHONY: clean clean-doc cleanall
150.PHONY: doc doc-html doc-man doc-pdf 153.PHONY: doc doc-html doc-man doc-pdf
151.PHONY: install install-doc install-html install-man install-pdf 154.PHONY: install install-doc install-html install-man install-pdf
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
diff --git a/tests/t0001-validate-git-versions.sh b/tests/t0001-validate-git-versions.sh
index 3378358..754046e 100755
--- a/tests/t0001-validate-git-versions.sh
+++ b/tests/t0001-validate-git-versions.sh
@@ -1,36 +1,36 @@
1#!/bin/sh 1#!/bin/sh
2 2
3test_description='Check Git version is correct'
4CGIT_TEST_NO_CREATE_REPOS=YesPlease
3. ./setup.sh 5. ./setup.sh
4 6
5prepare_tests 'Check Git version is correct' 7test_expect_success 'extract Git version from Makefile' '
6
7run_test 'extract Git version from Makefile' '
8 sed -n -e "/^GIT_VER[ ]*=/ { 8 sed -n -e "/^GIT_VER[ ]*=/ {
9 s/^GIT_VER[ ]*=[ ]*// 9 s/^GIT_VER[ ]*=[ ]*//
10 p 10 p
11 }" ../Makefile >trash/makefile_version 11 }" ../../Makefile >makefile_version
12' 12'
13 13
14run_test 'test Git version matches Makefile' ' 14test_expect_success 'test Git version matches Makefile' '
15 ( cat ../git/GIT-VERSION-FILE || echo "No GIT-VERSION-FILE" ) | 15 ( cat ../../git/GIT-VERSION-FILE || echo "No GIT-VERSION-FILE" ) |
16 sed -e "s/GIT_VERSION[ ]*=[ ]*//" >trash/git_version && 16 sed -e "s/GIT_VERSION[ ]*=[ ]*//" >git_version &&
17 diff -u trash/git_version trash/makefile_version 17 test_cmp git_version makefile_version
18' 18'
19 19
20run_test 'test submodule version matches Makefile' ' 20test_expect_success 'test submodule version matches Makefile' '
21 if ! test -e ../git/.git 21 if ! test -e ../../git/.git
22 then 22 then
23 echo "git/ is not a Git repository" >&2 23 echo "git/ is not a Git repository" >&2
24 else 24 else
25 ( 25 (
26 cd .. && 26 cd ../.. &&
27 sm_sha1=$(git ls-files --stage -- git | 27 sm_sha1=$(git ls-files --stage -- git |
28 sed -e "s/^[0-9]* \\([0-9a-f]*\\) [0-9] .*$/\\1/") && 28 sed -e "s/^[0-9]* \\([0-9a-f]*\\) [0-9] .*$/\\1/") &&
29 cd git && 29 cd git &&
30 git describe --match "v[0-9]*" $sm_sha1 30 git describe --match "v[0-9]*" $sm_sha1
31 ) | sed -e "s/^v//" >trash/sm_version && 31 ) | sed -e "s/^v//" >sm_version &&
32 diff -u trash/sm_version trash/makefile_version 32 test_cmp sm_version makefile_version
33 fi 33 fi
34' 34'
35 35
36tests_done 36test_done
diff --git a/tests/t0010-validate-html.sh b/tests/t0010-validate-html.sh
index 3fe4800..5bd0a25 100755
--- a/tests/t0010-validate-html.sh
+++ b/tests/t0010-validate-html.sh
@@ -1,5 +1,6 @@
1#!/bin/sh 1#!/bin/sh
2 2
3test_description='Validate html with tidy'
3. ./setup.sh 4. ./setup.sh
4 5
5 6
@@ -7,9 +8,9 @@ test_url()
7{ 8{
8 tidy_opt="-eq" 9 tidy_opt="-eq"
9 test -z "$NO_TIDY_WARNINGS" || tidy_opt+=" --show-warnings no" 10 test -z "$NO_TIDY_WARNINGS" || tidy_opt+=" --show-warnings no"
10 cgit_url "$1" >trash/tidy-$test_count || return 11 cgit_url "$1" >tidy-$test_count || return
11 sed -ie "1,4d" trash/tidy-$test_count || return 12 sed -ie "1,4d" tidy-$test_count || return
12 "$tidy" $tidy_opt trash/tidy-$test_count 13 "$tidy" $tidy_opt tidy-$test_count
13 rc=$? 14 rc=$?
14 15
15 # tidy returns with exitcode 1 on warnings, 2 on error 16 # tidy returns with exitcode 1 on warnings, 2 on error
@@ -21,21 +22,19 @@ test_url()
21 fi 22 fi
22} 23}
23 24
24prepare_tests 'Validate html with tidy' 25tidy=`which tidy 2>/dev/null`
25
26tidy=`which tidy`
27test -n "$tidy" || { 26test -n "$tidy" || {
28 echo "Skipping tests: tidy not found" 27 skip_all='Skipping html validation tests: tidy not found'
29 tests_done 28 test_done
30 exit 29 exit
31} 30}
32 31
33run_test 'index page' 'test_url ""' 32test_expect_success 'index page' 'test_url ""'
34run_test 'foo' 'test_url "foo"' 33test_expect_success 'foo' 'test_url "foo"'
35run_test 'foo/log' 'test_url "foo/log"' 34test_expect_success 'foo/log' 'test_url "foo/log"'
36run_test 'foo/tree' 'test_url "foo/tree"' 35test_expect_success 'foo/tree' 'test_url "foo/tree"'
37run_test 'foo/tree/file-1' 'test_url "foo/tree/file-1"' 36test_expect_success 'foo/tree/file-1' 'test_url "foo/tree/file-1"'
38run_test 'foo/commit' 'test_url "foo/commit"' 37test_expect_success 'foo/commit' 'test_url "foo/commit"'
39run_test 'foo/diff' 'test_url "foo/diff"' 38test_expect_success 'foo/diff' 'test_url "foo/diff"'
40 39
41tests_done 40test_done
diff --git a/tests/t0020-validate-cache.sh b/tests/t0020-validate-cache.sh
index 53ec2eb..1910b47 100755
--- a/tests/t0020-validate-cache.sh
+++ b/tests/t0020-validate-cache.sh
@@ -1,13 +1,12 @@
1#!/bin/sh 1#!/bin/sh
2 2
3test_description='Validate cache'
3. ./setup.sh 4. ./setup.sh
4 5
5prepare_tests 'Validate cache' 6test_expect_success 'verify cache-size=0' '
6 7
7run_test 'verify cache-size=0' ' 8 rm -f cache/* &&
8 9 sed -i -e "s/cache-size=1021$/cache-size=0/" cgitrc &&
9 rm -f trash/cache/* &&
10 sed -i -e "s/cache-size=1021$/cache-size=0/" trash/cgitrc &&
11 cgit_url "" &&