aboutsummaryrefslogtreecommitdiff
diff options
from:
to:
context:
space:
mode:
authorGravatar Saya Andy <saya.andy@posteo.com> 2026-07-30 12:27:47 +0700
committerGravatar Saya Andy <saya.andy@posteo.com> 2026-07-30 12:27:47 +0700
commit1614f25c38d5dd1817cf7651b2fc5e07503fc454 (patch)
tree0e0d0340c2782bcc58bc6c49cb920e50392f958c
parent7162aef3344a4f4f2d7edd2f214d805bd744c20c (diff)
downloadcgitext-1614f25c38d5dd1817cf7651b2fc5e07503fc454.tar.gz
cgitext-1614f25c38d5dd1817cf7651b2fc5e07503fc454.zip
tests: check that a misconfigured repo.path is reported
Check that a repo.path which does not exist or is not a repository is reported, for the summary page, for an unknown page name and for the ci page. cgit used to hang on these requests rather than fail, so the helper puts a deadline on each one: a regression should fail the test instead of wedging the suite. Signed-off-by: Saya Andy <saya.andy@posteo.com>
-rw-r--r--tests/t0114-broken-repo.sh71
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/t0114-broken-repo.sh b/tests/t0114-broken-repo.sh
new file mode 100644
index 0000000..61367e6
--- /dev/null
+++ b/tests/t0114-broken-repo.sh
@@ -0,0 +1,71 @@
+#!/bin/sh
+
+test_description='Check that a misconfigured repo.path is reported'
+. ./setup.sh
+
+mkdir -p plaindir
+
+cat >cgitrc.broken <<EOF
+virtual-root=/
+cache-root=$PWD/cache
+cache-size=0
+
+ci-branch-url=https://ci.example.org/job/\$slug/job/\$ref
+
+repo.url=missing
+repo.path=$PWD/no/such/repo.git
+
+repo.url=notarepo
+repo.path=$PWD/plaindir
+EOF
+
+# cgit used to spin forever on these requests, so give it a deadline and
+# report a failure rather than hanging the test suite.
+cgit_broken()
+{
+ CGIT_CONFIG="$PWD/cgitrc.broken" QUERY_STRING="url=$1" perl -e '
+ my $pid = fork();
+ if ($pid == 0) {
+ exec("cgit") or die "exec: $!";
+ }
+ eval {
+ local $SIG{ALRM} = sub { die "timeout\n" };
+ alarm(20);
+ waitpid($pid, 0);
+ alarm(0);
+ };
+ if ($@) {
+ kill "KILL", $pid;
+ print STDERR "cgit did not terminate\n";
+ exit 1;
+ }
+ ' </dev/null
+}
+
+test_expect_success 'report a repo.path that does not exist' '
+ cgit_broken "missing/&h=master" >tmp &&
+ grep "Failed to open missing" tmp
+'
+
+test_expect_success 'report a repo.path that is not a repository' '
+ cgit_broken "notarepo/&h=master" >tmp &&
+ grep "Failed to open notarepo" tmp
+'
+
+test_expect_success 'report an unknown page for a broken repo' '
+ cgit_broken "missing/nosuchpage/&h=master" >tmp &&
+ grep "^Status: 404 Not found$" tmp &&
+ grep "Invalid request" tmp
+'
+
+test_expect_success 'no ci tab for a broken repo' '
+ cgit_broken "missing/nosuchpage/&h=master" >tmp &&
+ ! grep ">ci</a>" tmp
+'
+
+test_expect_success 'report a broken repo on the ci page' '
+ cgit_broken "missing/ci/&h=master" >tmp &&
+ grep "Failed to open missing" tmp
+'
+
+test_done