skip "$af not loaded: kldload $af", 1;
}
-sub require_mods {
+sub require_mods (@) {
my @mods = @_;
my $maybe = pop @mods if $mods[-1] =~ /\A[0-9]+\z/;
- my @need;
+ my (@need, @use);
+
while (my $mod = shift(@mods)) {
if ($mod eq 'lei') {
require_git(2.6, $maybe ? $maybe : ());
push @mods, qw(Plack::Builder Plack::Util
HTTP::Date HTTP::Status);
next;
+ } elsif ($mod eq 'psgi') {
+ my @m = qw(Plack::Test HTTP::Request::Common
+ Plack::Builder);
+ push @use, @m;
+ push @mods, qw(Plack::Util), @m;
+ next;
} elsif ($mod eq '-imapd') {
push @mods, qw(Parse::RecDescent DBD::SQLite);
next;
$ENV{TEST_IPV4_ONLY} = 1 if !eval { $mod->VERSION($v) };
}
}
- return unless @need;
+ unless (@need) {
+ for my $mod (@use) {
+ my ($pkg) = caller(0);
+ eval "package $pkg; $mod->import";
+ xbail "$mod->import: $@" if $@;
+ }
+ return;
+ }
my $m = join(', ', @need)." missing for $0";
$m =~ s/\bEmail::MIME\b/Email::MIME (development purposes only)/;
skip($m, $maybe) if $maybe;
};
for (qw(PI_CONFIG)) { $env->{$_} or BAIL_OUT "$_ unset" }
SKIP: {
- require_mods(qw(Plack::Test::ExternalServer LWP::UserAgent),
- $skip // 1);
+ require_mods qw(Plack::Test::ExternalServer LWP::UserAgent
+ -httpd), $skip // 1;
my $sock = tcp_server() or die;
my ($out, $err) = map { "$env->{TMPDIR}/std$_.log" } qw(out err);
my $cmd = [ qw(-httpd -W0), "--stdout=$out", "--stderr=$err" ];
use File::Path qw(remove_tree);
use PublicInbox::SHA qw(sha1_hex);
use PublicInbox::IO;
-require_mods(qw(json Plack::Builder HTTP::Date HTTP::Status));
+require_mods qw(json psgi -httpd);
require_git_http_backend;
-require_git '1.8.5';
+require_git v1.8.5;
require_cmd 'curl';
require_ok 'PublicInbox::LeiMirror';
my ($tmpdir, $for_destroy) = tmpdir();
xsys_e([qw(git clone -q), "${url}c.git", "$tmpdir/dst/c.git"]);
SKIP: {
require_mods(qw(Plack::Test::ExternalServer LWP::UserAgent), 1);
- use_ok($_) for qw(HTTP::Request::Common);
chop(my $uri = $url) eq '/' or xbail "BUG: no /";
local $ENV{PLACK_TEST_EXTERNALSERVER_URI} = $uri;
my %opt = (ua => LWP::UserAgent->new);
use File::Copy qw(cp);
use IO::Handle ();
require_git(2.6);
-require_mods(qw(json DBD::SQLite Xapian
- HTTP::Request::Common Plack::Test URI::Escape Plack::Builder));
-use_ok($_) for (qw(HTTP::Request::Common Plack::Test));
+require_mods qw(json DBD::SQLite Xapian psgi);
use IO::Uncompress::Gunzip qw(gunzip);
require PublicInbox::WWW;
my ($ro_home, $cfg_path) = setup_public_inboxes;
use Time::HiRes qw(gettimeofday tv_interval);
use autodie qw(getsockopt setsockopt);
use PublicInbox::Spawn qw(spawn popen_rd);
-require_mods(qw(Plack::Util Plack::Builder HTTP::Date HTTP::Status));
+require_mods '-httpd';
use PublicInbox::SHA qw(sha1_hex);
use IO::Handle ();
use IO::Socket::UNIX;
# ensure compatibility with other PSGI servers
SKIP: {
- require_mods(@zmods, qw(Plack::Test HTTP::Request::Common), 3);
- use_ok 'HTTP::Request::Common';
- use_ok 'Plack::Test';
+ require_mods @zmods, 'psgi', 3;
STDERR->flush;
open my $olderr, '>&', \*STDERR or die "dup stderr: $!";
open my $tmperr, '+>', undef or die;
use PublicInbox::TestCommon;
use File::Copy qw(cp);
# IO::Poll is part of the standard library, but distros may split them off...
-require_mods(qw(IO::Socket::SSL IO::Poll Plack::Util));
+require_mods qw(IO::Socket::SSL IO::Poll -httpd);
my @certs = qw(certs/server-cert.pem certs/server-key.pem
certs/server2-cert.pem certs/server2-key.pem);
if (scalar(grep { -r $_ } @certs) != scalar(@certs)) {
use Cwd qw(abs_path);
use Carp qw(croak);
use autodie qw(close);
-require_mods(qw(Plack::Util Plack::Builder HTTP::Date HTTP::Status));
+require_mods qw(-httpd);
use IO::Socket::UNIX;
use POSIX qw(mkfifo);
require PublicInbox::Sigfd;
#!perl -w
-# Copyright (C) 2016-2021 all contributors <meta@public-inbox.org>
+# Copyright (C) all contributors <meta@public-inbox.org>
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
use strict;
use v5.10.1;
use PublicInbox::TestCommon;
use PublicInbox::Eml;
use Socket qw(IPPROTO_TCP SOL_SOCKET);
-require_mods(qw(Plack::Util Plack::Builder HTTP::Date HTTP::Status));
+require_mods '-httpd';
require_git_http_backend;
# FIXME: too much setup
use v5.10.1;
use PublicInbox::TestCommon;
my $psgi = "./examples/public-inbox.psgi";
-my @mods = qw(HTTP::Request::Common Plack::Test URI::Escape);
-require_mods(@mods);
-foreach my $mod (@mods) { use_ok $mod; }
+require_mods 'psgi';
ok(-f $psgi, "psgi example file found");
my ($tmpdir, $for_destroy) = tmpdir();
my $pfx = 'http://example.com/test';
use strict;
use v5.10.1;
use PublicInbox::TestCommon;
-my @mods = qw(HTTP::Request::Common Plack::Builder Plack::Test URI::Escape);
-require_mods(@mods);
-use_ok $_ foreach @mods;
+require_mods 'psgi';
use_ok 'PublicInbox::WWW';
use PublicInbox::Config;
use PublicInbox::Eml;
use v5.12;
use PublicInbox::TestCommon;
use PublicInbox::Eml;
-my @mods = qw(DBD::SQLite HTTP::Request::Common Plack::Test
- URI::Escape Plack::Builder);
-require_git 2.6;
-require_mods(@mods);
-use_ok($_) for @mods;
+require_git v2.6;
+require_mods qw(DBD::SQLite psgi);
use_ok 'PublicInbox::WWW';
my $msgs = <<'';
F1V5OR6NMF.3M649JTLO9IXD@tux.localdomain/hehe1"'<foo
use PublicInbox::TestCommon;
my ($tmpdir, $for_destroy) = tmpdir();
my $v1dir = "$tmpdir/v1.git";
-my @mods = qw(HTTP::Request::Common Plack::Test URI::Escape
- Plack::Builder Plack::App::URLMap);
-require_mods(@mods);
-use_ok $_ foreach @mods;
+require_mods 'psgi';
use_ok 'PublicInbox::WWW';
my $ibx = create_inbox 'test', tmpdir => $v1dir, sub {
my ($im, $ibx) = @_;
use PublicInbox::TestCommon;
use PublicInbox::Eml;
require_git 2.6;
-my @mods = qw(DBD::SQLite Xapian HTTP::Request::Common
- Plack::Test URI::Escape Plack::Builder Plack::Test);
-require_mods(@mods);
-use_ok($_) for (qw(HTTP::Request::Common Plack::Test));
+require_mods qw(DBD::SQLite Xapian psgi);
use_ok 'PublicInbox::WWW';
my $ibx = create_inbox 'v2', version => 2, sub {
my ($im) = @_;
use v5.12;
use PublicInbox::TestCommon;
use PublicInbox::Eml;
-my @use = qw(HTTP::Request::Common Plack::Test);
my @req = qw(URI::Escape DBD::SQLite);
require_git v2.6;
-require_mods(@use, @req, qw(PublicInbox::WWW));
-$_->import for @use;
+require_mods qw(DBD::SQLite psgi);
+use_ok 'PublicInbox::WWW';
my $cfgtxt = '';
foreach my $i (1..2) {
my $ibx = create_inbox "test-$i", version => 2, indexlevel => 'basic',
use IO::Uncompress::Gunzip qw(gunzip);
use PublicInbox::Eml;
use PublicInbox::Inbox;
-my @mods = qw(DBD::SQLite Xapian HTTP::Request::Common Plack::Test
- URI::Escape Plack::Builder);
-require_mods(@mods);
-use_ok($_) for (qw(HTTP::Request::Common Plack::Test));
+require_mods qw(DBD::SQLite Xapian psgi);
use_ok 'PublicInbox::WWW';
use_ok 'PublicInbox::SearchIdx';
my ($tmpdir, $for_destroy) = tmpdir();
my $maindir = "$tmpdir/main.git";
my $addr = 'test-public@example.com';
my $cfgpfx = "publicinbox.test";
-my @mods = qw(HTTP::Request::Common Plack::Test URI::Escape Plack::Builder);
-use_ok $_ foreach @mods;
+require_mods qw(psgi);
use PublicInbox::Import;
use_ok 'PublicInbox::WWW';
use_ok 'PublicInbox::WwwText';
use PublicInbox::Config;
use PublicInbox::MID qw(mids);
use autodie qw(kill rename);
-require_mods(qw(DBD::SQLite Xapian HTTP::Request::Common Plack::Test
- URI::Escape Plack::Builder HTTP::Date));
-use_ok($_) for (qw(HTTP::Request::Common Plack::Test));
+require_mods qw(DBD::SQLite Xapian psgi);
use_ok 'PublicInbox::WWW';
my ($tmpdir, $for_destroy) = tmpdir();
my $enc_dup = 'ref-20150309094050.GO3427@x1.example';
require_git v2.6;
use PublicInbox::ContentHash qw(git_sha);
use PublicInbox::Spawn qw(run_qx);
-require_mods(qw(DBD::SQLite Xapian URI::Escape));
+require_mods(qw(DBD::SQLite Xapian));
require PublicInbox::SolverGit;
my $rdr = { 2 => \(my $null) };
my $git_dir = xqx([qw(git rev-parse --git-common-dir)], undef, $rdr);
shift @$res; shift @$hinted;
is_deeply($res, $hinted, 'hints work (or did not hurt :P');
-my @psgi = qw(HTTP::Request::Common Plack::Test Plack::Builder);
SKIP: {
- require_mods(@psgi, 7 + scalar(@psgi));
- use_ok($_) for @psgi;
+ require_mods qw(psgi 1);
require PublicInbox::WWW;
my $binfoo = "$ibx->{inboxdir}/binfoo.git";
my $l = "$ibx->{inboxdir}/inbox.lock";
use IO::Uncompress::Gunzip qw(gunzip $GunzipError);
# Integration tests for HTTP cloning + mirroring
-require_mods(qw(Plack::Util Plack::Builder
- HTTP::Date HTTP::Status Xapian DBD::SQLite));
+require_mods qw(psgi -httpd Xapian DBD::SQLite);
use_ok 'PublicInbox::V2Writable';
use PublicInbox::InboxWritable;
use PublicInbox::Eml;
use PublicInbox::Config;
use PublicInbox::Spawn qw(spawn);
require_cmd('sqlite3');
-require_mods(qw(DBD::SQLite HTTP::Request::Common Plack::Test URI::Escape
- Plack::Builder IO::Uncompress::Gunzip Xapian));
+require_mods qw(DBD::SQLite psgi Xapian);
use_ok($_) for qw(Plack::Test HTTP::Request::Common);
require_ok 'PublicInbox::Msgmap';
require_ok 'PublicInbox::AltId';
require_ok 'PublicInbox::WWW';
+require IO::Uncompress::Gunzip;
my ($tmpdir, $for_destroy) = tmpdir();
my $aid = 'xyz';
my $cfgpath;
use v5.12; use PublicInbox::TestCommon;
use PublicInbox::Import;
use IO::Uncompress::Gunzip qw(gunzip);
-require_mods(qw(json URI::Escape Plack::Builder HTTP::Tiny));
+require_mods qw(json URI::Escape psgi -httpd HTTP::Tiny);
my $curl = require_cmd 'curl';
require PublicInbox::WwwListing;
require PublicInbox::ManifestJsGz;
use PublicInbox::TestCommon;
my ($tmpdir, $for_destroy) = tmpdir();
my @mods = qw(HTTP::Request::Common Plack::Test URI::Escape);
-require_mods(@mods, 'IO::Uncompress::Gunzip');
-use_ok $_ foreach @mods;
+require_mods qw(psgi);
+require IO::Uncompress::Gunzip;
use_ok 'PublicInbox::WwwStatic';
my $app = sub {