summaryrefslogtreecommitdiffabout
authorLars Hjemli <hjemli@gmail.com>2008-02-24 14:27:33 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2008-02-24 14:27:33 (UTC)
commit19134112bf942c0492f2095b668ea31c1a498f1a (patch) (unidiff)
treeb41e1a3a1a80b82b62fa7c5355526dd4b309cae4
parente0572c39f78b4f88c706a49a60e211302b8e015c (diff)
downloadcgit-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>
Diffstat (more/less context) (ignore whitespace changes)
-rwxr-xr-xtests/setup.sh4
-rwxr-xr-xtests/t0101-index.sh2
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
19mkrepo() { 19mkrepo() {
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
37setup_repos() 37setup_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
44virtual-root=/ 44virtual-root=/
45cache-root=$PWD/trash/cache 45cache-root=$PWD/trash/cache
46 46
47nocache=0 47nocache=0
48snapshots=tar.gz tar.bz zip 48snapshots=tar.gz tar.bz zip
49enable-log-filecount=1 49enable-log-filecount=1
50enable-log-linecount=1 50enable-log-linecount=1
51summary-log=5 51summary-log=5
52summary-branches=5 52summary-branches=5
53summary-tags=5 53summary-tags=5
54 54
55repo.url=foo 55repo.url=foo
56repo.path=$PWD/trash/repos/foo/.git 56repo.path=$PWD/trash/repos/foo/.git
57repo.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
59repo.url=bar 61repo.url=bar
60repo.path=$PWD/trash/repos/bar/.git 62repo.path=$PWD/trash/repos/bar/.git
61repo.desc=the bar repo 63repo.desc=the bar repo
62EOF 64EOF
63} 65}
64 66
65prepare_tests() 67prepare_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
73tests_done() 75tests_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
83run_test() 85run_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
99cgit_query() 101cgit_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
104cgit_url() 106cgit_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
5prepare_tests "Check content on index page" 5prepare_tests "Check content on index page"
6 6
7run_test 'generate index page' 'cgit_url "" >trash/tmp' 7run_test 'generate index page' 'cgit_url "" >trash/tmp'
8run_test 'find foo repo' 'grep -e "foo" trash/tmp' 8run_test 'find foo repo' 'grep -e "foo" trash/tmp'
9run_test 'find foo description' 'grep -e "\[no description\]" trash/tmp'
9run_test 'find bar repo' 'grep -e "bar" trash/tmp' 10run_test 'find bar repo' 'grep -e "bar" trash/tmp'
11run_test 'find bar description' 'grep -e "the bar repo" trash/tmp'
10run_test 'no tree-link' 'grep -ve "foo/tree" trash/tmp' 12run_test 'no tree-link' 'grep -ve "foo/tree" trash/tmp'
11run_test 'no log-link' 'grep -ve "foo/log" trash/tmp' 13run_test 'no log-link' 'grep -ve "foo/log" trash/tmp'
12 14
13tests_done 15tests_done