user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
From: Eric Wong <e@80x24.org>
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> (raw)
In-Reply-To: <20210209080937.4678-1-e@80x24.org>

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 <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
-# 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 <<EOF or die;
+	mkdir($home, 0755) or BAIL_OUT $!;
+	mkdir($pi_home, 0755) or BAIL_OUT $!;
+	open my $fh, '>>', $pi_config or BAIL_OUT $!;
+	print $fh <<EOF or BAIL_OUT $!;
 [publicinbox "test"]
 	address = $addr
 	inboxdir = $maindir
 	indexlevel = basic
 EOF
-	close $fh or die "close: $!\n";
+	close $fh or BAIL_OUT $!;
 }
 
-use_ok 'PublicInbox::Inbox';
-use_ok 'PublicInbox::InboxWritable';
-use_ok 'PublicInbox::Config';
 my $cfg = PublicInbox::Config->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', '<toobig@example.com>');
-	$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 }
 }

  parent reply	other threads:[~2021-02-09  8:09 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-09  8:09 [PATCH 00/11] Maildir code consolidation, test updates Eric Wong
2021-02-09  8:09 ` [PATCH 01/11] t/thread-index-gap.t: avoid unnecessary map Eric Wong
2021-02-09  8:09 ` [PATCH 02/11] test_common: disable fsync on the CLI where possible Eric Wong
2021-02-09  8:09 ` Eric Wong [this message]
2021-02-09  8:09 ` [PATCH 04/11] git: ->qx: respect caller's $/ in array context Eric Wong
2021-02-09  8:09 ` [PATCH 05/11] lei: split out MdirReader package, lazy-require earlier Eric Wong
2021-02-09  8:09 ` [PATCH 06/11] t/run.perl: fix for >128 tests Eric Wong
2021-02-09  8:09 ` [PATCH 07/11] use MdirReader in -watch and InboxWritable Eric Wong
2021-02-09  8:09 ` [PATCH 08/11] lei q: prefix --alert ops with ':' instead of '-' Eric Wong
2021-02-09  8:09 ` [PATCH 09/11] t/run.perl: drop Cwd dependency Eric Wong
2021-02-09  8:09 ` [PATCH 10/11] lei: replace "I:"-prefixed info messages with "#" Eric Wong
2021-02-09  8:09 ` [PATCH 11/11] tests|lei: fixes for TEST_RUN_MODE=0 and lei oneshot Eric Wong

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=20210209080937.4678-4-e@80x24.org \
    --to=e@80x24.org \
    --cc=meta@public-inbox.org \
    --subject='Re: [PATCH 03/11] t/cgi.t: modernizations and style updates' \
    /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

user/dev discussion of public-inbox itself

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://public-inbox.org/meta
	git clone --mirror http://czquwvybam4bgbro.onion/meta
	git clone --mirror http://hjrcffqmbrq6wope.onion/meta
	git clone --mirror http://ou63pmih66umazou.onion/meta

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V1 meta meta/ https://public-inbox.org/meta \
		meta@public-inbox.org
	public-inbox-index meta

Example config snippet for mirrors.
Newsgroups are available over NNTP:
	nntp://news.public-inbox.org/inbox.comp.mail.public-inbox.meta
	nntp://ou63pmih66umazou.onion/inbox.comp.mail.public-inbox.meta
	nntp://czquwvybam4bgbro.onion/inbox.comp.mail.public-inbox.meta
	nntp://hjrcffqmbrq6wope.onion/inbox.comp.mail.public-inbox.meta
	nntp://news.gmane.io/gmane.mail.public-inbox.general
 note: .onion URLs require Tor: https://www.torproject.org/

code repositories for project(s) associated with this inbox:

	https://80x24.org/public-inbox.git

AGPL code for this site: git clone https://public-inbox.org/public-inbox.git