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-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 48ECA1F9FF for ; Tue, 9 Feb 2021 08:09:38 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 03/11] t/cgi.t: modernizations and style updates Date: Tue, 9 Feb 2021 07:09:29 -0100 Message-Id: <20210209080937.4678-4-e@80x24.org> In-Reply-To: <20210209080937.4678-1-e@80x24.org> References: <20210209080937.4678-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: We prefer BAIL_OUT or fail to die in tests (I didn't know BAIL_OUT existed when I started the project). We can also depend on IO::Uncompress::Gunzip being available, We'll keep the cgi_run wrapper since the .cgi could use some coverage and remove the FIXME note. run_script makes tests fast enough. --- t/cgi.t | 84 ++++++++++++++++++++++++--------------------------------- 1 file changed, 35 insertions(+), 49 deletions(-) diff --git a/t/cgi.t b/t/cgi.t index 3818b991..567c2ee0 100644 --- a/t/cgi.t +++ b/t/cgi.t @@ -1,42 +1,36 @@ +#!perl -w # Copyright (C) 2014-2021 all contributors # License: AGPL-3.0+ -# FIXME: this test is too slow and most non-CGI-requirements -# should be moved over to things which use test_psgi use strict; -use warnings; -use Test::More; -use PublicInbox::Eml; +use v5.10.1; use PublicInbox::TestCommon; -use PublicInbox::Import; +use IO::Uncompress::Gunzip qw(gunzip); require_mods(qw(Plack::Handler::CGI Plack::Util)); +require PublicInbox::Eml; +require PublicInbox::Import; +require PublicInbox::Inbox; +require PublicInbox::InboxWritable; +require PublicInbox::Config; my ($tmpdir, $for_destroy) = tmpdir(); my $home = "$tmpdir/pi-home"; my $pi_home = "$home/.public-inbox"; my $pi_config = "$pi_home/config"; my $maindir = "$tmpdir/main.git"; my $addr = 'test-public@example.com'; - +PublicInbox::Import::init_bare($maindir); { - is(1, mkdir($home, 0755), "setup ~/ for testing"); - is(1, mkdir($pi_home, 0755), "setup ~/.public-inbox"); - PublicInbox::Import::init_bare($maindir); - - open my $fh, '>', "$maindir/description" or die "open: $!\n"; - print $fh "test for public-inbox\n"; - close $fh or die "close: $!\n"; - open $fh, '>>', $pi_config or die; - print $fh <>', $pi_config or BAIL_OUT $!; + print $fh <new($pi_config); my $ibx = $cfg->lookup_name('test'); my $im = PublicInbox::InboxWritable->new($ibx)->importer(0); @@ -58,7 +52,7 @@ EOF ok($im->add($mime), 'added initial message'); $mime->header_set('Message-ID', ''); - $mime->body_str_set("z\n" x 1024); + $mime->body_set("z\n" x 1024); ok($im->add($mime), 'added big message'); # deliver a reply, too @@ -98,7 +92,7 @@ EOF } # retrieve thread as an mbox -{ +SKIP: { local $ENV{HOME} = $home; my $path = "/test/blahblah\@example.com/t.mbox.gz"; my $res = cgi_run($path); @@ -109,13 +103,10 @@ EOF if ($indexed) { $res = cgi_run($path); like($res->{head}, qr/^Status: 200 /, "search returned mbox"); - eval { - require IO::Uncompress::Gunzip; - my $in = $res->{body}; - my $out; - IO::Uncompress::Gunzip::gunzip(\$in => \$out); - like($out, qr/^From /m, "From lines in mbox"); - }; + my $in = $res->{body}; + my $out; + gunzip(\$in => \$out); + like($out, qr/^From /m, "From lines in mbox"); $res = cgi_run('/test/toobig@example.com/'); like($res->{head}, qr/^Status: 300 /, 'did not index or return >max-size message'); @@ -123,29 +114,24 @@ EOF 'warned about skipping large OID'); } else { like($res->{head}, qr/^Status: 501 /, "search not available"); - SKIP: { skip 'DBD::SQLite not available', 4 }; - } - - my $have_xml_treepp = eval { require XML::TreePP; 1 } if $indexed; - if ($have_xml_treepp) { - $path = "/test/blahblah\@example.com/t.atom"; - $res = cgi_run($path); - like($res->{head}, qr/^Status: 200 /, "atom returned 200"); - like($res->{head}, qr!^Content-Type: application/atom\+xml!m, - "search returned atom"); - my $t = XML::TreePP->new->parse($res->{body}); - is(scalar @{$t->{feed}->{entry}}, 3, "parsed three entries"); - like($t->{feed}->{-xmlns}, qr/\bAtom\b/, - 'looks like an an Atom feed'); - } else { - SKIP: { skip 'DBD::SQLite or XML::TreePP missing', 2 }; + skip('DBD::SQLite not available', 7); # (4 - 1) above, 4 below } + require_mods('XML::TreePP', 4); + $path = "/test/blahblah\@example.com/t.atom"; + $res = cgi_run($path); + like($res->{head}, qr/^Status: 200 /, "atom returned 200"); + like($res->{head}, qr!^Content-Type: application/atom\+xml!m, + "search returned atom"); + my $t = XML::TreePP->new->parse($res->{body}); + is(scalar @{$t->{feed}->{entry}}, 3, "parsed three entries"); + like($t->{feed}->{-xmlns}, qr/\bAtom\b/, + 'looks like an an Atom feed'); } done_testing(); sub cgi_run { - my %env = ( + my $env = { PATH_INFO => $_[0], QUERY_STRING => $_[1] || "", SCRIPT_NAME => '', @@ -154,11 +140,11 @@ sub cgi_run { GATEWAY_INTERFACE => 'CGI/1.1', HTTP_ACCEPT => '*/*', HTTP_HOST => 'test.example.com', - ); + }; my ($in, $out, $err) = ("", "", ""); my $rdr = { 0 => \$in, 1 => \$out, 2 => \$err }; - run_script(['.cgi'], \%env, $rdr); - die "unexpected error: \$?=$? ($err)" if $?; + run_script(['.cgi'], $env, $rdr); + fail "unexpected error: \$?=$? ($err)" if $?; my ($head, $body) = split(/\r\n\r\n/, $out, 2); { head => $head, body => $body, err => $err } }