diff options
| author | 2026-07-30 12:27:47 +0700 | |
|---|---|---|
| committer | 2026-07-30 12:27:47 +0700 | |
| commit | 1614f25c38d5dd1817cf7651b2fc5e07503fc454 (patch) | |
| tree | 0e0d0340c2782bcc58bc6c49cb920e50392f958c /tests/t0114-broken-repo.sh | |
| parent | 7162aef3344a4f4f2d7edd2f214d805bd744c20c (diff) | |
| download | cgitext-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>
Diffstat (limited to 'tests/t0114-broken-repo.sh')
| -rw-r--r-- | tests/t0114-broken-repo.sh | 71 |
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 |