From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 7A5A31F8C6; Mon, 28 Jun 2021 21:59:06 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Cc: Kyle Meyer Subject: [PATCH] www: fix manifest.js.gz for default publicInbox.grokManifest Date: Mon, 28 Jun 2021 21:59:06 +0000 Message-Id: <20210628215906.26944-1-e@80x24.org> In-Reply-To: <87fsx3128a.fsf@kyleam.com> References: <87fsx3128a.fsf@kyleam.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: ManifestJsGz->response was not invoking the new "url_filter" method properly. Furthermore, fix url_filter for returning 404 responses. Reported-by: Kyle Meyer Link: https://public-inbox.org/meta/87fsx3128a.fsf@kyleam.com/ Fixes: 520be116e8a686cb ("www_listing: start updating for pagination + search") --- lib/PublicInbox/ManifestJsGz.pm | 4 +-- lib/PublicInbox/WwwListing.pm | 2 +- t/www_listing.t | 53 ++++++++++++++++++++------------- 3 files changed, 35 insertions(+), 24 deletions(-) diff --git a/lib/PublicInbox/ManifestJsGz.pm b/lib/PublicInbox/ManifestJsGz.pm index 9dc10791..7fee78dd 100644 --- a/lib/PublicInbox/ManifestJsGz.pm +++ b/lib/PublicInbox/ManifestJsGz.pm @@ -13,11 +13,11 @@ use HTTP::Date qw(time2str); my $json = PublicInbox::Config::json(); -sub url_regexp { +sub url_filter { my ($ctx) = @_; # grokmirror uses relative paths, so it's domain-dependent # SUPER calls PublicInbox::WwwListing::url_filter - ($ctx->url_filter('publicInbox.grokManifest', 'match=domain'))[0]; + $ctx->SUPER::url_filter('publicInbox.grokManifest', 'match=domain'); } sub inject_entry ($$$;$) { diff --git a/lib/PublicInbox/WwwListing.pm b/lib/PublicInbox/WwwListing.pm index 76c76663..98a69986 100644 --- a/lib/PublicInbox/WwwListing.pm +++ b/lib/PublicInbox/WwwListing.pm @@ -55,7 +55,7 @@ again: } elsif ($v eq 'all') { (qr/./, undef); } elsif ($v eq '404') { - undef; + (undef, undef); } else { warn < # License: AGPL-3.0+ # manifest.js.gz generation and grok-pull integration test use strict; -use warnings; +use v5.10.1; use Test::More; use PublicInbox::Spawn qw(which); use PublicInbox::TestCommon; use PublicInbox::Import; -require_mods(qw(json URI::Escape Plack::Builder Digest::SHA - IO::Compress::Gzip IO::Uncompress::Gunzip HTTP::Tiny)); +use IO::Uncompress::Gunzip qw(gunzip); +require_mods(qw(json URI::Escape Plack::Builder Digest::SHA HTTP::Tiny)); require PublicInbox::WwwListing; require PublicInbox::ManifestJsGz; use PublicInbox::Config; @@ -32,21 +33,23 @@ like($bare->manifest_entry->{fingerprint}, qr/\A[a-f0-9]{40}\z/, 'got fingerprint with non-empty repo'); sub tiny_test { - my ($json, $host, $port) = @_; - my $tmp; + my ($json, $host, $port, $html) = @_; + my ($tmp, $res); my $http = HTTP::Tiny->new; - my $res = $http->get("http://$host:$port/"); - is($res->{status}, 200, 'got HTML listing'); - like($res->{content}, qr!!si, 'listing looks like HTML'); - - $res = $http->get("http://$host:$port/", {'Accept-Encoding'=>'gzip'}); - is($res->{status}, 200, 'got gzipped HTML listing'); - IO::Uncompress::Gunzip::gunzip(\(delete $res->{content}) => \$tmp); - like($tmp, qr!!si, 'unzipped listing looks like HTML'); - + if ($html) { + $res = $http->get("http://$host:$port/"); + is($res->{status}, 200, 'got HTML listing'); + like($res->{content}, qr!!si, 'listing looks like HTML'); + + $res = $http->get("http://$host:$port/", + {'Accept-Encoding'=>'gzip'}); + is($res->{status}, 200, 'got gzipped HTML listing'); + gunzip(\(delete $res->{content}) => \$tmp); + like($tmp, qr!!si, 'unzipped listing looks like HTML'); + } $res = $http->get("http://$host:$port/manifest.js.gz"); is($res->{status}, 200, 'got manifest'); - IO::Uncompress::Gunzip::gunzip(\(delete $res->{content}) => \$tmp); + gunzip(\(delete $res->{content}) => \$tmp); unlike($tmp, qr/"modified":\s*"/, 'modified is an integer'); my $manifest = $json->decode($tmp); ok(my $clone = $manifest->{'/alt'}, '/alt in manifest'); @@ -95,10 +98,9 @@ SKIP: { "lorelei \xc4\x80"), 0, 'set gitweb user'); ok(unlink("$bare->{git_dir}/description"), 'removed bare/description'); - open $fh, '>', $cfgfile or die; - print $fh <<"" or die; -[publicinbox] - wwwlisting = all + open $fh, '>', $cfgfile or xbail "open $cfgfile: $!"; + $fh->autoflush(1); + print $fh <<"" or xbail "print $!"; [publicinbox "bare"] inboxdir = $bare->{git_dir} url = http://$host/bare @@ -112,13 +114,22 @@ SKIP: { url = http://$host/v2 address = v2\@example.com - close $fh or die; my $env = { PI_CONFIG => $cfgfile }; my $cmd = [ '-httpd', '-W0', "--stdout=$out", "--stderr=$err" ]; $td = start_script($cmd, $env, { 3 => $sock }); - $sock = undef; + # default publicinboxGrokManifest match=domain default tiny_test($json, $host, $port); + undef $td; + + print $fh <<"" or xbail "print $!"; +[publicinbox] + wwwlisting = all + + close $fh or xbail "close $!"; + $td = start_script($cmd, $env, { 3 => $sock }); + tiny_test($json, $host, $port, 1); + undef $sock; my $grok_pull = which('grok-pull') or skip('grok-pull not available', 12);