diff options
Diffstat (limited to 'tests')
| -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 |