diff options
author | John Keeping <john@keeping.me.uk> | 2013-04-01 23:09:05 (JST) |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2013-04-09 05:27:11 (JST) |
commit | c95cc5ec56dbb7394015eb18201403be6d80f69b (patch) | |
tree | 7014b96a1a1408b5291532c0c442082aba693a80 | |
parent | 8a92df033e974af6338b530a0d78d1bdb0b0f918 (diff) | |
download | cgit-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-- | Makefile | 7 | ||||
-rwxr-xr-x | tests/setup.sh | 130 | ||||
-rwxr-xr-x | tests/t0001-validate-git-versions.sh | 28 | ||||
-rwxr-xr-x | tests/t0010-validate-html.sh | 31 | ||||
-rwxr-xr-x | tests/t0020-validate-cache.sh | 32 | ||||
-rwxr-xr-x | tests/t0101-index.sh | 25 | ||||
-rwxr-xr-x | tests/t0102-summary.sh | 35 | ||||
-rwxr-xr-x | tests/t0103-log.sh | 33 | ||||
-rwxr-xr-x | tests/t0104-tree.sh | 33 | ||||
-rwxr-xr-x | tests/t0105-commit.sh | 41 | ||||
-rwxr-xr-x | tests/t0106-diff.sh | 21 | ||||
-rwxr-xr-x | tests/t0107-snapshot.sh | 77 | ||||
-rwxr-xr-x | tests/t0108-patch.sh | 37 |
13 files changed, 239 insertions, 291 deletions
@@ -66,7 +66,10 @@ all:: cgit | |||
66 | cgit: | 66 | cgit: |
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 | ||
69 | test: all | 69 | git: |
70 | $(QUIET_SUBDIR0)git $(QUIET_SUBDIR1) NO_CURL=1 | ||
71 | |||
72 | test: all git | ||
70 | $(QUIET_SUBDIR0)tests $(QUIET_SUBDIR1) all | 73 | $(QUIET_SUBDIR0)tests $(QUIET_SUBDIR1) all |
71 | 74 | ||
72 | install: all | 75 | install: all |
@@ -145,7 +148,7 @@ get-git: | |||
145 | tags: | 148 | tags: |
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 | ||
18 | unset CDPATH | 18 | : ${TEST_DIRECTORY=$(pwd)/../git/t} |
19 | TEST_NO_CREATE_REPO=YesPlease | ||
20 | . "$TEST_DIRECTORY"/test-lib.sh | ||
21 | |||
22 | # Prepend the directory containing cgit to PATH. | ||
23 | PATH="$(pwd)/../..:$PATH" | ||
19 | 24 | ||
20 | mkrepo() { | 25 | mkrepo() { |
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 | ||
47 | setup_repos() | 49 | setup_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 |
56 | virtual-root=/ | 58 | virtual-root=/ |
57 | cache-root=$PWD/trash/cache | 59 | cache-root=$PWD/cache |
58 | 60 | ||
59 | cache-size=1021 | 61 | cache-size=1021 |
60 | snapshots=tar.gz tar.bz zip | 62 | snapshots=tar.gz tar.bz zip |
@@ -66,83 +68,33 @@ summary-tags=5 | |||
66 | clone-url=git://example.org/\$CGIT_REPO_URL.git | 68 | clone-url=git://example.org/\$CGIT_REPO_URL.git |
67 | 69 | ||
68 | repo.url=foo | 70 | repo.url=foo |
69 | repo.path=$PWD/trash/repos/foo/.git | 71 | repo.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 | ||
74 | repo.url=bar | 76 | repo.url=bar |
75 | repo.path=$PWD/trash/repos/bar/.git | 77 | repo.path=$PWD/repos/bar/.git |
76 | repo.desc=the bar repo | 78 | repo.desc=the bar repo |
77 | 79 | ||
78 | repo.url=foo+bar | 80 | repo.url=foo+bar |
79 | repo.path=$PWD/trash/repos/foo+bar/.git | 81 | repo.path=$PWD/repos/foo+bar/.git |
80 | repo.desc=the foo+bar repo | 82 | repo.desc=the foo+bar repo |
81 | 83 | ||
82 | repo.url=with space | 84 | repo.url=with space |
83 | repo.path=$PWD/trash/repos/with space/.git | 85 | repo.path=$PWD/repos/with space/.git |
84 | repo.desc=spaced repo | 86 | repo.desc=spaced repo |
85 | EOF | 87 | EOF |
86 | } | 88 | } |
87 | 89 | ||
88 | prepare_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 | |||
98 | tests_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 | |||
109 | run_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 | |||
140 | cgit_query() | 90 | cgit_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 | ||
145 | cgit_url() | 95 | cgit_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 | |||
100 | test -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 | ||
3 | test_description='Check Git version is correct' | ||
4 | CGIT_TEST_NO_CREATE_REPOS=YesPlease | ||
3 | . ./setup.sh | 5 | . ./setup.sh |
4 | 6 | ||
5 | prepare_tests 'Check Git version is correct' | 7 | test_expect_success 'extract Git version from Makefile' ' |
6 | |||
7 | run_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 | ||
14 | run_test 'test Git version matches Makefile' ' | 14 | test_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 | ||
20 | run_test 'test submodule version matches Makefile' ' | 20 | test_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 | ||
36 | tests_done | 36 | test_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 | ||
3 | test_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 | ||
24 | prepare_tests 'Validate html with tidy' | 25 | tidy=`which tidy 2>/dev/null` |
25 | |||
26 | tidy=`which tidy` | ||
27 | test -n "$tidy" || { | 26 | test -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 | ||
33 | run_test 'index page' 'test_url ""' | 32 | test_expect_success 'index page' 'test_url ""' |
34 | run_test 'foo' 'test_url "foo"' | 33 | test_expect_success 'foo' 'test_url "foo"' |
35 | run_test 'foo/log' 'test_url "foo/log"' | 34 | test_expect_success 'foo/log' 'test_url "foo/log"' |
36 | run_test 'foo/tree' 'test_url "foo/tree"' | 35 | test_expect_success 'foo/tree' 'test_url "foo/tree"' |
37 | run_test 'foo/tree/file-1' 'test_url "foo/tree/file-1"' | 36 | test_expect_success 'foo/tree/file-1' 'test_url "foo/tree/file-1"' |
38 | run_test 'foo/commit' 'test_url "foo/commit"' | 37 | test_expect_success 'foo/commit' 'test_url "foo/commit"' |
39 | run_test 'foo/diff' 'test_url "foo/diff"' | 38 | test_expect_success 'foo/diff' 'test_url "foo/diff"' |
40 | 39 | ||
41 | tests_done | 40 | test_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 | ||
3 | test_description='Validate cache' | ||
3 | . ./setup.sh | 4 | . ./setup.sh |
4 | 5 | ||
5 | prepare_tests 'Validate cache' | 6 | test_expect_success 'verify cache-size=0' ' |
6 | 7 | ||
7 | run_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 "" && |