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,AWL,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 9FEA11F462 for ; Fri, 14 Jun 2019 16:47:30 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] t/www_listing: favor HTTP::Tiny over Net::HTTP Date: Fri, 14 Jun 2019 16:47:30 +0000 Message-Id: <20190614164730.6042-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: More testers are likely to have HTTP::Tiny than Net::HTTP, since HTTP::Tiny is a dual-life module and distributed with Perl since Perl 5.14 (2011-05-14), whereas Net::HTTP will likely live in a separate package forever. --- t/www_listing.t | 68 ++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/t/www_listing.t b/t/www_listing.t index 1f29298..d82a4a4 100644 --- a/t/www_listing.t +++ b/t/www_listing.t @@ -7,12 +7,16 @@ use Test::More; use PublicInbox::Spawn qw(which); use File::Temp qw/tempdir/; require './t/common.perl'; -my @mods = qw(URI::Escape Plack::Builder IPC::Run Digest::SHA HTTP::Tiny - IO::Compress::Gzip IO::Uncompress::Gunzip Net::HTTP); +my @mods = qw(URI::Escape Plack::Builder IPC::Run Digest::SHA + IO::Compress::Gzip IO::Uncompress::Gunzip HTTP::Tiny); foreach my $mod (@mods) { eval("require $mod") or plan skip_all => "$mod missing for $0"; } -use_ok 'PublicInbox::WwwListing'; + +require PublicInbox::WwwListing; +my $json = eval { PublicInbox::WwwListing::_json() }; +plan skip_all => "JSON module missing: $@" if $@; + use_ok 'PublicInbox::Git'; my $fi_data = './t/git.fast-import-data'; @@ -28,11 +32,35 @@ ok(IPC::Run::run($cmd, '<', $fi_data), 'fast-import'); like(PublicInbox::WwwListing::fingerprint($bare), qr/\A[a-f0-9]{40}\z/, 'got fingerprint with non-empty repo'); +sub tiny_test { + my ($host, $port) = @_; + my $http = HTTP::Tiny->new; + my $res = $http->get("http://$host:$port/manifest.js.gz"); + is($res->{status}, 200, 'got manifest'); + my $tmp; + IO::Uncompress::Gunzip::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'); + is($clone->{owner}, 'lorelei', 'owner set'); + is($clone->{reference}, '/bare', 'reference detected'); + is($clone->{description}, "we're all clones", 'description read'); + ok(my $bare = $manifest->{'/bare'}, '/bare in manifest'); + is($bare->{description}, 'Unnamed repository', + 'missing $GIT_DIR/description fallback'); + + like($bare->{fingerprint}, qr/\A[a-f0-9]{40}\z/, 'fingerprint'); + is($clone->{fingerprint}, $bare->{fingerprint}, 'fingerprint matches'); + is(HTTP::Date::time2str($bare->{modified}), + $res->{headers}->{'last-modified'}, + 'modified field and Last-Modified header match'); + + ok($manifest->{'/v2/git/0.git'}, 'v2 epoch appeared'); +} + my $pid; END { kill 'TERM', $pid if defined $pid }; SKIP: { - my $json = eval { PublicInbox::WwwListing::_json() }; - skip "JSON module missing: $@", 1 if $@; my $err = "$tmpdir/stderr.log"; my $out = "$tmpdir/stdout.log"; my $alt = "$tmpdir/alt.git"; @@ -83,36 +111,8 @@ SKIP: { my $cmd = [ $httpd, "--stdout=$out", "--stderr=$err" ]; $pid = spawn_listener($env, $cmd, [$sock]); $sock = undef; - my $http = Net::HTTP->new(Host => "$host:$port"); - $http->write_request(GET => '/manifest.js.gz'); - my ($code, undef, %h) = $http->read_response_headers; - is($code, 200, 'got manifest'); - my $tmp; - my $body = ''; - while (1) { - my $n = $http->read_entity_body(my $buf, 65536); - die unless defined $n; - last if $n == 0; - $body .= $buf; - } - IO::Uncompress::Gunzip::gunzip(\$body => \$tmp); - unlike($tmp, qr/"modified":\s*"/, 'modified is an integer'); - my $manifest = $json->decode($tmp); - ok(my $clone = $manifest->{'/alt'}, '/alt in manifest'); - is($clone->{owner}, 'lorelei', 'owner set'); - is($clone->{reference}, '/bare', 'reference detected'); - is($clone->{description}, "we're all clones", 'description read'); - ok(my $bare = $manifest->{'/bare'}, '/bare in manifest'); - is($bare->{description}, 'Unnamed repository', - 'missing $GIT_DIR/description fallback'); - like($bare->{fingerprint}, qr/\A[a-f0-9]{40}\z/, 'fingerprint'); - is($clone->{fingerprint}, $bare->{fingerprint}, 'fingerprint matches'); - - is(HTTP::Date::time2str($bare->{modified}), $h{'Last-Modified'}, - 'modified field and Last-Modified header match'); - - ok($manifest->{'/v2/git/0.git'}, 'v2 epoch appeared'); + tiny_test($host, $port); skip 'skipping grok-pull integration test', 2 if !which('grok-pull'); -- EW