X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Fsolver_git.t;h=8faa7309fcd5f0152ab7561582fc5e32598fd6ab;hb=16f317f32bd5306d852b7d079b20cd0e4f2b4ff9;hp=71b9554a1ba3e0017a306f7dece4befa4de83509;hpb=f35d722d38e571458fc413b9f0d7ddd788ec4b98;p=public-inbox.git diff --git a/t/solver_git.t b/t/solver_git.t index 71b9554a..8faa7309 100644 --- a/t/solver_git.t +++ b/t/solver_git.t @@ -247,6 +247,8 @@ SKIP: { my $cfgpath = "$tmpdir/httpd-config"; open my $cfgfh, '>', $cfgpath or die; print $cfgfh <{-primary_address} inboxdir = $ibx->{inboxdir} @@ -261,6 +263,16 @@ SKIP: { cgiturl = http://example.com/binfoo EOF close $cfgfh or die; + my $exp_digest; + { + my $exp = xqx([qw(git archive --format=tar.gz + --prefix=public-inbox-1.0.0/ v1.0.0)], + { GIT_DIR => $git_dir }); + is($?, 0, 'no error from git archive'); + ok(length($exp) > 1024, 'expected archive generated'); + $exp_digest = git_sha(256, \$exp)->hexdigest; + }; + my $cfg = PublicInbox::Config->new($cfgpath); my $www = PublicInbox::WWW->new($cfg); my $client = sub { @@ -339,18 +351,51 @@ EOF is($res->header('Content-Disposition'), qq'inline; filename="$fn"', 'c-d header'); is($res->header('ETag'), qq'"$v1_0_0_rev"', 'etag header'); - my $exp = xqx([qw(git archive --format=tar.gz - --prefix=public-inbox-1.0.0/ v1.0.0)], - { GIT_DIR => $git_dir }); + my $got = $res->content; - is(length($got), length($exp), - "length matches installed `git archive' output") and - is(git_sha(1, \$got)->hexdigest, git_sha(1, \$exp)->hexdigest, + is(git_sha(256, \$got)->hexdigest, $exp_digest, "content matches installed `git archive' output"); + undef $got; $fn = 'public-inbox-1.0.2.tar.gz'; $res = $cb->(GET("/public-inbox/snapshot/$fn")); is($res->code, 404, '404 on non-existent tag'); + + $fn = 'public-inbox-1.0.0.tar.bz2'; + $res = $cb->(GET("/public-inbox/snapshot/$fn")); + is($res->code, 404, '404 on unconfigured snapshot format'); + + $res = $cb->(GET('/public-inbox/atom/')); + is($res->code, 200, 'Atom feed'); + SKIP: { + require_mods('XML::TreePP', 1); + my $t = XML::TreePP->new->parse($res->content); + is(scalar @{$t->{feed}->{entry}}, 50, + 'got 50 entries'); + + $res = $cb->(GET('/public-inbox/atom/COPYING')); + is($res->code, 200, 'file Atom feed'); + $t = XML::TreePP->new->parse($res->content); + ok($t->{feed}->{entry}, 'got entry'); + + $res = $cb->(GET('/public-inbox/atom/README.md')); + is($res->code, 404, '404 on non-existent file Atom feed'); + } + + $res = $cb->(GET('/public-inbox/tree/')); + is($res->code, 200, 'got 200 for root listing'); + $got = $res->content; + like($got, qr/\bgit ls-tree\b/, 'ls-tree help shown'); + + $res = $cb->(GET('/public-inbox/tree/README')); + is($res->code, 200, 'got 200 for regular file'); + $got = $res->content; + like($got, qr/\bgit show\b/, 'git show help shown'); + + $res = $cb->(GET('/public-inbox/tree/Documentation')); + is($res->code, 200, 'got 200 for a directory'); + $got = $res->content; + like($got, qr/\bgit ls-tree\b/, 'ls-tree help shown'); }; test_psgi(sub { $www->call(@_) }, $client); my $env = { PI_CONFIG => $cfgpath, TMPDIR => $tmpdir };