From: Eric Wong <e@80x24.org>
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 [thread overview]
Message-ID: <20190614164730.6042-1-e@80x24.org> (raw)
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
reply other threads:[~2019-06-14 16:47 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://public-inbox.org/README
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190614164730.6042-1-e@80x24.org \
--to=e@80x24.org \
--cc=meta@public-inbox.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/public-inbox.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).