author | Lars Hjemli <hjemli@gmail.com> | 2008-02-24 14:27:33 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2008-02-24 14:27:33 (UTC) |
commit | 19134112bf942c0492f2095b668ea31c1a498f1a (patch) (unidiff) | |
tree | b41e1a3a1a80b82b62fa7c5355526dd4b309cae4 | |
parent | e0572c39f78b4f88c706a49a60e211302b8e015c (diff) | |
download | cgit-19134112bf942c0492f2095b668ea31c1a498f1a.zip cgit-19134112bf942c0492f2095b668ea31c1a498f1a.tar.gz cgit-19134112bf942c0492f2095b668ea31c1a498f1a.tar.bz2 |
Add regression-test for description-less repos
The segfault fixed in commit eacde43d7184452e1fdc90b982b531f1f5239923 was
triggered when the html-functions manipulated string literals. One callpatch
which could trigger the bug is in ui-repolist.c when repo descriptions are
passed to html_ntxt(): if a repo is lacking a description, the literal
string "[no description]" is used.
This patch changes test/setup.sh such that the first repo has no description,
and adds tests for both "[no description]" and "the bar repo" (description
of the other repo) to tests/t0101-index.sh, which should be enought to catch
regressions in these functions.
Noticed-by: Hiroki Hattori <seagull.kamome@gmail.com>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rwxr-xr-x | tests/setup.sh | 4 | ||||
-rwxr-xr-x | tests/t0101-index.sh | 2 |
2 files changed, 5 insertions, 1 deletions
diff --git a/tests/setup.sh b/tests/setup.sh index 51d5a75..9bb1f12 100755 --- a/tests/setup.sh +++ b/tests/setup.sh | |||
@@ -1,108 +1,110 @@ | |||
1 | # This file should be sourced by all test-scripts | 1 | # This file should be sourced by all test-scripts |
2 | # | 2 | # |
3 | # Main functions: | 3 | # Main functions: |
4 | # prepare_tests(description) - setup for testing, i.e. create repos+config | 4 | # prepare_tests(description) - setup for testing, i.e. create repos+config |
5 | # run_test(description, script) - run one test, i.e. eval script | 5 | # run_test(description, script) - run one test, i.e. eval script |
6 | # | 6 | # |
7 | # Helper functions | 7 | # Helper functions |
8 | # cgit_query(querystring) - call cgit with the specified querystring | 8 | # cgit_query(querystring) - call cgit with the specified querystring |
9 | # cgit_url(url) - call cgit with the specified virtual url | 9 | # cgit_url(url) - call cgit with the specified virtual url |
10 | # | 10 | # |
11 | # Example script: | 11 | # Example script: |
12 | # | 12 | # |
13 | # . setup.sh | 13 | # . setup.sh |
14 | # prepare_tests "html validation" | 14 | # prepare_tests "html validation" |
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 | 18 | ||
19 | mkrepo() { | 19 | mkrepo() { |
20 | name=$1 | 20 | name=$1 |
21 | count=$2 | 21 | count=$2 |
22 | dir=$PWD | 22 | dir=$PWD |
23 | test -d $name && return | 23 | test -d $name && return |
24 | printf "Creating testrepo %s\n" $name | 24 | printf "Creating testrepo %s\n" $name |
25 | mkdir -p $name | 25 | mkdir -p $name |
26 | cd $name | 26 | cd $name |
27 | git init | 27 | git init |
28 | for ((n=1; n<=count; n++)) | 28 | for ((n=1; n<=count; n++)) |
29 | do | 29 | do |
30 | echo $n >file-$n | 30 | echo $n >file-$n |
31 | git add file-$n | 31 | git add file-$n |
32 | git commit -m "commit $n" | 32 | git commit -m "commit $n" |
33 | done | 33 | done |
34 | cd $dir | 34 | cd $dir |
35 | } | 35 | } |
36 | 36 | ||
37 | setup_repos() | 37 | setup_repos() |
38 | { | 38 | { |
39 | rm -rf trash/cache | 39 | rm -rf trash/cache |
40 | mkdir -p trash/cache | 40 | mkdir -p trash/cache |
41 | mkrepo trash/repos/foo 5 >/dev/null | 41 | mkrepo trash/repos/foo 5 >/dev/null |
42 | mkrepo trash/repos/bar 50 >/dev/null | 42 | mkrepo trash/repos/bar 50 >/dev/null |
43 | cat >trash/cgitrc <<EOF | 43 | cat >trash/cgitrc <<EOF |
44 | virtual-root=/ | 44 | virtual-root=/ |
45 | cache-root=$PWD/trash/cache | 45 | cache-root=$PWD/trash/cache |
46 | 46 | ||
47 | nocache=0 | 47 | nocache=0 |
48 | snapshots=tar.gz tar.bz zip | 48 | snapshots=tar.gz tar.bz zip |
49 | enable-log-filecount=1 | 49 | enable-log-filecount=1 |
50 | enable-log-linecount=1 | 50 | enable-log-linecount=1 |
51 | summary-log=5 | 51 | summary-log=5 |
52 | summary-branches=5 | 52 | summary-branches=5 |
53 | summary-tags=5 | 53 | summary-tags=5 |
54 | 54 | ||
55 | repo.url=foo | 55 | repo.url=foo |
56 | repo.path=$PWD/trash/repos/foo/.git | 56 | repo.path=$PWD/trash/repos/foo/.git |
57 | repo.desc=the foo repo | 57 | # Do not specify a description for this repo, as it then will be assigned |
58 | # the constant value "[no description]" (which actually used to cause a | ||
59 | # segfault). | ||
58 | 60 | ||
59 | repo.url=bar | 61 | repo.url=bar |
60 | repo.path=$PWD/trash/repos/bar/.git | 62 | repo.path=$PWD/trash/repos/bar/.git |
61 | repo.desc=the bar repo | 63 | repo.desc=the bar repo |
62 | EOF | 64 | EOF |
63 | } | 65 | } |
64 | 66 | ||
65 | prepare_tests() | 67 | prepare_tests() |
66 | { | 68 | { |
67 | setup_repos | 69 | setup_repos |
68 | test_count=0 | 70 | test_count=0 |
69 | test_failed=0 | 71 | test_failed=0 |
70 | echo "$@" "($0)" | 72 | echo "$@" "($0)" |
71 | } | 73 | } |
72 | 74 | ||
73 | tests_done() | 75 | tests_done() |
74 | { | 76 | { |
75 | printf "\n" | 77 | printf "\n" |
76 | if test $test_failed -gt 0 | 78 | if test $test_failed -gt 0 |
77 | then | 79 | then |
78 | printf "[%s of %s tests failed]\n" $test_failed $test_count | 80 | printf "[%s of %s tests failed]\n" $test_failed $test_count |
79 | false | 81 | false |
80 | fi | 82 | fi |
81 | } | 83 | } |
82 | 84 | ||
83 | run_test() | 85 | run_test() |
84 | { | 86 | { |
85 | desc=$1 | 87 | desc=$1 |
86 | script=$2 | 88 | script=$2 |
87 | ((test_count++)) | 89 | ((test_count++)) |
88 | eval "$2" >test-output.log | 90 | eval "$2" >test-output.log |
89 | res=$? | 91 | res=$? |
90 | if test $res = 0 | 92 | if test $res = 0 |
91 | then | 93 | then |
92 | printf " %s: ok - %s\n" $test_count "$desc" | 94 | printf " %s: ok - %s\n" $test_count "$desc" |
93 | else | 95 | else |
94 | ((test_failed++)) | 96 | ((test_failed++)) |
95 | printf " %s: fail - %s\n" $test_count "$desc" | 97 | printf " %s: fail - %s\n" $test_count "$desc" |
96 | fi | 98 | fi |
97 | } | 99 | } |
98 | 100 | ||
99 | cgit_query() | 101 | cgit_query() |
100 | { | 102 | { |
101 | CGIT_CONFIG="$PWD/trash/cgitrc" QUERY_STRING="$1" "$PWD/../cgit" | 103 | CGIT_CONFIG="$PWD/trash/cgitrc" QUERY_STRING="$1" "$PWD/../cgit" |
102 | } | 104 | } |
103 | 105 | ||
104 | cgit_url() | 106 | cgit_url() |
105 | { | 107 | { |
106 | CGIT_CONFIG="$PWD/trash/cgitrc" QUERY_STRING="url=$1" "$PWD/../cgit" | 108 | CGIT_CONFIG="$PWD/trash/cgitrc" QUERY_STRING="url=$1" "$PWD/../cgit" |
107 | } | 109 | } |
108 | 110 | ||
diff --git a/tests/t0101-index.sh b/tests/t0101-index.sh index 12ed00c..59edc59 100755 --- a/tests/t0101-index.sh +++ b/tests/t0101-index.sh | |||
@@ -1,13 +1,15 @@ | |||
1 | #!/bin/sh | 1 | #!/bin/sh |
2 | 2 | ||
3 | . ./setup.sh | 3 | . ./setup.sh |
4 | 4 | ||
5 | prepare_tests "Check content on index page" | 5 | prepare_tests "Check content on index page" |
6 | 6 | ||
7 | run_test 'generate index page' 'cgit_url "" >trash/tmp' | 7 | run_test 'generate index page' 'cgit_url "" >trash/tmp' |
8 | run_test 'find foo repo' 'grep -e "foo" trash/tmp' | 8 | run_test 'find foo repo' 'grep -e "foo" trash/tmp' |
9 | run_test 'find foo description' 'grep -e "\[no description\]" trash/tmp' | ||
9 | run_test 'find bar repo' 'grep -e "bar" trash/tmp' | 10 | run_test 'find bar repo' 'grep -e "bar" trash/tmp' |
11 | run_test 'find bar description' 'grep -e "the bar repo" trash/tmp' | ||
10 | run_test 'no tree-link' 'grep -ve "foo/tree" trash/tmp' | 12 | run_test 'no tree-link' 'grep -ve "foo/tree" trash/tmp' |
11 | run_test 'no log-link' 'grep -ve "foo/log" trash/tmp' | 13 | run_test 'no log-link' 'grep -ve "foo/log" trash/tmp' |
12 | 14 | ||
13 | tests_done | 15 | tests_done |