X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Fplack.t;h=f0dc4bbb515777299d437d13ec801f6494fdf94f;hb=a09f678d8254064af7ca6dcfb3c3f84b5ae37b51;hp=7eb7d7f2814fda2c4977e4bb268c366d39a8952a;hpb=cfb8d16578e7f2f2e300f9f436205e4a8fc7f322;p=public-inbox.git diff --git a/t/plack.t b/t/plack.t index 7eb7d7f2..f0dc4bbb 100644 --- a/t/plack.t +++ b/t/plack.t @@ -1,21 +1,18 @@ -# Copyright (C) 2014-2018 all contributors +# Copyright (C) 2014-2019 all contributors # License: AGPL-3.0+ use strict; use warnings; use Test::More; use Email::MIME; -use File::Temp qw/tempdir/; +use PublicInbox::TestCommon; my $psgi = "./examples/public-inbox.psgi"; -my $tmpdir = tempdir('pi-plack-XXXXXX', TMPDIR => 1, CLEANUP => 1); +my ($tmpdir, $for_destroy) = tmpdir(); my $pi_config = "$tmpdir/config"; my $maindir = "$tmpdir/main.git"; my $addr = 'test-public@example.com'; my $cfgpfx = "publicinbox.test"; my @mods = qw(HTTP::Request::Common Plack::Test URI::Escape); -foreach my $mod (@mods) { - eval "require $mod"; - plan skip_all => "$mod missing for plack.t" if $@; -} +require_mods(@mods); use_ok 'PublicInbox::Import'; use_ok 'PublicInbox::Git'; my @ls; @@ -29,7 +26,7 @@ foreach my $mod (@mods) { use_ok $mod; } close $fh or die "close: $!\n"; my %cfg = ( "$cfgpfx.address" => $addr, - "$cfgpfx.mainrepo" => $maindir, + "$cfgpfx.inboxdir" => $maindir, "$cfgpfx.url" => 'http://example.com/test/', "$cfgpfx.newsgroup" => 'inbox.test', ); @@ -46,7 +43,7 @@ To: You Cc: $addr Message-Id: Subject: hihi -Date: Thu, 01 Jan 1970 00:00:00 +0000 +Date: Fri, 02 Oct 1993 00:00:00 +0000 zzzzzz EOF @@ -54,9 +51,9 @@ EOF my $im = PublicInbox::Import->new($git, 'test', $addr); $im->add($mime); $im->done; - my $rev = `git --git-dir="$maindir" rev-list HEAD`; + my $rev = $git->qx(qw(rev-list HEAD)); like($rev, qr/\A[a-f0-9]{40}/, "good revision committed"); - @ls = `git --git-dir="$maindir" ls-tree -r --name-only HEAD`; + @ls = $git->qx(qw(ls-tree -r --name-only HEAD)); chomp @ls; } my $app = eval { @@ -92,7 +89,8 @@ EOF my $to = "$from/"; my $res = $cb->(GET($from)); is(301, $res->code, 'is permanent redirect'); - is($to, $res->header('Location'), 'redirect location matches'); + is($to, $res->header('Location'), + 'redirect location matches with trailing slash'); }); my $pfx = 'http://example.com/test'; @@ -128,15 +126,19 @@ EOF 'atom URL generated'); like($res->content, qr!href="blah\@example\.com/"!, 'index generated'); + like($res->content, qr!1993-10-02!, 'date set'); }); test_psgi($app, sub { my ($cb) = @_; my $res = $cb->(GET($pfx . '/atom.xml')); is(200, $res->code, 'success response received for atom'); - like($res->content, - qr!link\s+href="\Q$pfx\E/blah\@example\.com/"!s, + my $body = $res->content; + like($body, qr!link\s+href="\Q$pfx\E/blah\@example\.com/"!s, 'atom feed generated correct URL'); + like($body, qr/test for public-inbox/, + "set title in XML feed"); + like($body, qr/zzzzzz/, 'body included'); }); test_psgi($app, sub { @@ -216,6 +218,39 @@ EOF 'redirect from x40 MIDs works'); } }); + + # dumb HTTP clone/fetch support + test_psgi($app, sub { + my ($cb) = @_; + my $path = '/test/info/refs'; + my $req = HTTP::Request->new('GET' => $path); + my $res = $cb->($req); + is(200, $res->code, 'refs readable'); + my $orig = $res->content; + + $req->header('Range', 'bytes=5-10'); + $res = $cb->($req); + is(206, $res->code, 'got partial response'); + is($res->content, substr($orig, 5, 6), 'partial body OK'); + + $req->header('Range', 'bytes=5-'); + $res = $cb->($req); + is(206, $res->code, 'got partial another response'); + is($res->content, substr($orig, 5), 'partial body OK past end'); + }); + + # things which should fail + test_psgi($app, sub { + my ($cb) = @_; + + my $res = $cb->(PUT('/')); + is(405, $res->code, 'no PUT to / allowed'); + $res = $cb->(PUT('/test/')); + is(405, $res->code, 'no PUT /$INBOX allowed'); + + # TODO + # $res = $cb->(GET('/')); + }); } done_testing();