lib/PublicInbox/SpawnPP.pm
lib/PublicInbox/Syscall.pm
lib/PublicInbox/TLS.pm
+lib/PublicInbox/TestCommon.pm
lib/PublicInbox/Tmpfile.pm
lib/PublicInbox/Unsubscribe.pm
lib/PublicInbox/UserContent.pm
t/altid_v2.t
t/cgi.t
t/check-www-inbox.perl
-t/common.perl
t/config.t
t/config_limiter.t
t/content_id.t
# Copyright (C) 2015-2019 all contributors <meta@public-inbox.org>
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
+# internal APIs used only for tests
+package PublicInbox::TestCommon;
+use strict;
+use parent qw(Exporter);
use Fcntl qw(FD_CLOEXEC F_SETFD F_GETFD :seek);
use POSIX qw(dup2);
-use strict;
-use warnings;
use IO::Socket::INET;
+our @EXPORT = qw(tmpdir tcp_server tcp_connect require_git
+ run_script start_script key2sub);
sub tmpdir (;$) {
my ($base) = @_;
my $cur_int = ($cur_maj << 24) | ($cur_min << 16);
if ($cur_int < $req_int) {
return 0 if $maybe;
- plan skip_all => "git $req+ required, have $cur_maj.$cur_min";
+ plan(skip_all => "git $req+ required, have $cur_maj.$cur_min");
}
1;
}
use strict;
use subs qw(exit);
-*exit = *::run_script_exit;
+*exit = *PublicInbox::TestCommon::run_script_exit;
sub main {
$str
0;
die "FAIL: ",join(' ', $key, @argv), ": $!\n";
}
}
- TestProcess->new($pid, $tail_pid);
+ PublicInboxTestProcess->new($pid, $tail_pid);
}
-package TestProcess;
+package PublicInboxTestProcess;
use strict;
# prevent new threads from inheriting these objects
my ($self) = @_;
return if $self->{owner} != $$;
if (my $tail = delete $self->{tail_pid}) {
- ::wait_for_tail();
+ PublicInbox::TestCommon::wait_for_tail();
CORE::kill('TERM', $tail);
}
my $pid = delete $self->{pid} or return;
use strict;
use warnings;
use Test::More;
-require './t/common.perl';
+use PublicInbox::TestCommon;
use_ok 'PublicInbox::Admin', qw(resolve_repo_dir);
my ($tmpdir, $for_destroy) = tmpdir();
my $git_dir = "$tmpdir/v1";
use strict;
use warnings;
use Test::More;
-require './t/common.perl';
+use PublicInbox::TestCommon;
foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
eval "require $mod";
plan skip_all => "$mod missing for altid.t" if $@;
use strict;
use warnings;
use Test::More;
-require './t/common.perl';
+use PublicInbox::TestCommon;
require_git(2.6);
foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
eval "require $mod";
use warnings;
use Test::More;
use Email::MIME;
-require './t/common.perl';
+use PublicInbox::TestCommon;
my ($tmpdir, $for_destroy) = tmpdir();
my $home = "$tmpdir/pi-home";
my $pi_home = "$home/.public-inbox";
use warnings;
use Test::More;
use PublicInbox::Config;
-require './t/common.perl';
+use PublicInbox::TestCommon;
my ($tmpdir, $for_destroy) = tmpdir();
{
use Test::More;
use PublicInbox::MIME;
use PublicInbox::Spawn qw(which);
-require './t/common.perl';
+use PublicInbox::TestCommon;
require_git(2.6);
my @mods = qw(DBD::SQLite Search::Xapian);
foreach my $mod (@mods) {
use strict;
use warnings;
use Test::More;
-require './t/common.perl';
+use PublicInbox::TestCommon;
require_git(2.6);
require PublicInbox::Inbox;
require PublicInbox::InboxWritable;
use strict;
use warnings;
use Test::More;
-require './t/common.perl';
+use PublicInbox::TestCommon;
my ($tmpdir, $for_destroy) = tmpdir();
use_ok 'PublicInbox::Emergency';
use PublicInbox::Config;
use PublicInbox::Inbox;
my $have_xml_feed = eval { require XML::Feed; 1 };
-require './t/common.perl';
+use PublicInbox::TestCommon;
sub string_feed {
my $res = PublicInbox::Feed::generate($_[0]);
use warnings;
use Test::More;
use Email::MIME;
-require './t/common.perl';
+use PublicInbox::TestCommon;
use_ok 'PublicInbox::Filter::RubyLang';
my $f = PublicInbox::Filter::RubyLang->new;
use strict;
use warnings;
use Test::More;
-require './t/common.perl';
+use PublicInbox::TestCommon;
my ($dir, $for_destroy) = tmpdir();
use PublicInbox::Spawn qw(popen_rd);
use PublicInbox::Git;
use PublicInbox::Import;
use PublicInbox::Inbox;
-require './t/common.perl';
+use PublicInbox::TestCommon;
my ($tmpdir, $for_destroy) = tmpdir();
my $git_dir = "$tmpdir/gittest";
my $ibx = PublicInbox::Inbox->new({
use Fcntl qw(:seek);
use Socket qw(IPPROTO_TCP TCP_NODELAY SOL_SOCKET);
use POSIX qw(mkfifo);
-require './t/common.perl';
+use PublicInbox::TestCommon;
my ($tmpdir, $for_destroy) = tmpdir();
my $fifo = "$tmpdir/fifo";
ok(defined mkfifo($fifo, 0777), 'created FIFO');
}
use_ok 'PublicInbox::TLS';
use_ok 'IO::Socket::SSL';
-require './t/common.perl';
+use PublicInbox::TestCommon;
my $psgi = "./t/httpd-corner.psgi";
my ($tmpdir, $for_destroy) = tmpdir();
my $err = "$tmpdir/stderr.log";
use strict;
use warnings;
use Test::More;
-require './t/common.perl';
+use PublicInbox::TestCommon;
use Errno qw(EADDRINUSE);
foreach my $mod (qw(Plack::Util Plack::Builder HTTP::Date HTTP::Status)) {
plan skip_all => "$mod missing for httpd.t" if $@;
}
use Socket qw(IPPROTO_TCP SOL_SOCKET);
-require './t/common.perl';
+use PublicInbox::TestCommon;
# FIXME: too much setup
my ($tmpdir, $for_destroy) = tmpdir();
use IO::File;
use Fcntl qw(:DEFAULT);
use File::Temp qw/tempfile/;
-require './t/common.perl';
+use PublicInbox::TestCommon;
my ($dir, $for_destroy) = tmpdir();
is(system(qw(git init -q --bare), $dir), 0, 'git init successful');
use PublicInbox::Inbox;
use PublicInbox::InboxWritable;
require PublicInbox::Admin;
-require './t/common.perl';
+use PublicInbox::TestCommon;
my $PI_TEST_VERSION = $ENV{PI_TEST_VERSION} || 2;
require_git('2.6') if $PI_TEST_VERSION == 2;
use warnings;
use Test::More;
use PublicInbox::Config;
-require './t/common.perl';
+use PublicInbox::TestCommon;
use File::Basename;
my ($tmpdir, $for_destroy) = tmpdir();
sub quiet_fail {
use Cwd qw(getcwd);
use PublicInbox::MID qw(mid2path);
use PublicInbox::Git;
-require './t/common.perl';
+use PublicInbox::TestCommon;
my ($tmpdir, $for_destroy) = tmpdir();
my $home = "$tmpdir/pi-home";
my $pi_home = "$home/.public-inbox";
use Test::More;
use PublicInbox::MIME;
use PublicInbox::Config;
-require './t/common.perl';
+use PublicInbox::TestCommon;
require_git(2.6);
my @mods = qw(DBD::SQLite Search::Xapian);
foreach my $mod (@mods) {
use strict;
use warnings;
use Test::More;
-require './t/common.perl';
+use PublicInbox::TestCommon;
foreach my $mod (qw(DBD::SQLite)) {
eval "require $mod";
use_ok 'PublicInbox::TLS';
use_ok 'IO::Socket::SSL';
-require './t/common.perl';
+use PublicInbox::TestCommon;
require PublicInbox::InboxWritable;
require PublicInbox::MIME;
require PublicInbox::SearchIdx;
use Socket qw(IPPROTO_TCP TCP_NODELAY);
use Net::NNTP;
use Sys::Hostname;
-require './t/common.perl';
+use PublicInbox::TestCommon;
# FIXME: make easier to test both versions
my $version = $ENV{PI_TEST_VERSION} || 2;
use strict;
use warnings;
use Test::More;
-require './t/common.perl';
+use PublicInbox::TestCommon;
use_ok 'PublicInbox::Import';
use_ok 'PublicInbox::Git';
use warnings;
use Test::More;
use Compress::Zlib qw(compress);
-require './t/common.perl';
+use PublicInbox::TestCommon;
foreach my $mod (qw(DBD::SQLite)) {
eval "require $mod";
plan skip_all => "$mod missing for over.t" if $@;
use warnings;
use Test::More;
use Email::MIME;
-require './t/common.perl';
+use PublicInbox::TestCommon;
my $psgi = "./examples/public-inbox.psgi";
my ($tmpdir, $for_destroy) = tmpdir();
my $pi_config = "$tmpdir/config";
use warnings;
use Test::More;
use Email::MIME;
-require './t/common.perl';
+use PublicInbox::TestCommon;
my ($tmpdir, $for_destroy) = tmpdir();
my $maindir = "$tmpdir/main.git";
my $addr = 'test-public@example.com';
use PublicInbox::MIME;
use PublicInbox::Config;
use PublicInbox::WWW;
-require './t/common.perl';
+use PublicInbox::TestCommon;
my @mods = qw(DBD::SQLite HTTP::Request::Common Plack::Test
URI::Escape Plack::Builder);
foreach my $mod (@mods) {
use warnings;
use Test::More;
use Email::MIME;
-require './t/common.perl';
+use PublicInbox::TestCommon;
my ($tmpdir, $for_destroy) = tmpdir();
my $maindir = "$tmpdir/main.git";
my $addr = 'test-public@example.com';
use Email::MIME;
use PublicInbox::Config;
use PublicInbox::WWW;
-require './t/common.perl';
+use PublicInbox::TestCommon;
my @mods = qw(DBD::SQLite Search::Xapian HTTP::Request::Common
Plack::Test URI::Escape Plack::Builder Plack::Test);
foreach my $mod (@mods) {
use Test::More;
use Email::MIME;
use PublicInbox::Config;
-require './t/common.perl';
+use PublicInbox::TestCommon;
my @mods = qw(HTTP::Request::Common Plack::Test URI::Escape DBD::SQLite);
foreach my $mod (@mods) {
eval "require $mod";
use PublicInbox::InboxWritable;
use PublicInbox::WWW;
use bytes (); # only for bytes::length
-require './t/common.perl';
+use PublicInbox::TestCommon;
my @mods = qw(DBD::SQLite Search::Xapian HTTP::Request::Common Plack::Test
URI::Escape Plack::Builder);
foreach my $mod (@mods) {
use warnings;
use Test::More;
use Email::MIME;
-require './t/common.perl';
+use PublicInbox::TestCommon;
my ($tmpdir, $for_destroy) = tmpdir();
my $maindir = "$tmpdir/main.git";
my $addr = 'test-public@example.com';
use strict;
use warnings;
use Test::More;
-require './t/common.perl';
+use PublicInbox::TestCommon;
require_git(2.6);
use PublicInbox::MIME;
use PublicInbox::Config;
use strict;
use warnings;
use Test::More;
-require './t/common.perl';
+use PublicInbox::TestCommon;
require_git(2.6);
my @mods = qw(DBI DBD::SQLite);
foreach my $mod (@mods) {
use Test::More;
use PublicInbox::MIME;
use PublicInbox::InboxWritable;
-require './t/common.perl';
+use PublicInbox::TestCommon;
use Cwd qw(abs_path);
require_git(2.6); # replace is v2 only, for now...
foreach my $mod (qw(DBD::SQLite)) {
}
require PublicInbox::SearchIdx;
require PublicInbox::Inbox;
-require './t/common.perl';
+use PublicInbox::TestCommon;
my ($tmpdir, $for_destroy) = tmpdir();
my $git_dir = "$tmpdir/a.git";
};
require PublicInbox::SearchIdx;
require PublicInbox::Inbox;
-require './t/common.perl';
+use PublicInbox::TestCommon;
use Email::MIME;
my ($tmpdir, $for_destroy) = tmpdir();
my $git_dir = "$tmpdir/a.git";
use warnings;
use Test::More;
use Cwd qw(abs_path);
-require './t/common.perl';
+use PublicInbox::TestCommon;
require_git(2.6);
use PublicInbox::Spawn qw(spawn);
use Email::Simple;
use IO::File;
use Fcntl qw(:DEFAULT SEEK_SET);
-require './t/common.perl';
+use PublicInbox::TestCommon;
my ($tmpdir, $for_destroy) = tmpdir();
use_ok 'PublicInbox::Spamcheck::Spamc';
use Test::More;
use PublicInbox::MIME;
use PublicInbox::Import;
-require './t/common.perl';
+use PublicInbox::TestCommon;
foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
eval "require $mod";
use PublicInbox::MIME;
use PublicInbox::ContentId qw(content_digest);
use File::Path qw(remove_tree);
-require './t/common.perl';
+use PublicInbox::TestCommon;
require_git(2.6);
foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
use warnings;
use Test::More;
use PublicInbox::MIME;
-require './t/common.perl';
+use PublicInbox::TestCommon;
require_git(2.6);
foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
use PublicInbox::MIME;
use Fcntl qw(SEEK_SET);
use Cwd;
-require './t/common.perl';
+use PublicInbox::TestCommon;
require_git(2.6);
my $V = 2;
use strict;
use warnings;
use Test::More;
-require './t/common.perl';
+use PublicInbox::TestCommon;
use Cwd qw(abs_path);
require_git(2.6);
local $ENV{HOME} = abs_path('t');
use PublicInbox::MIME;
use PublicInbox::ContentId qw(content_digest);
use File::Path qw(remove_tree);
-require './t/common.perl';
+use PublicInbox::TestCommon;
require_git(2.6);
foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
use Test::More;
use PublicInbox::MIME;
use PublicInbox::ContentId qw(content_digest);
-require './t/common.perl';
+use PublicInbox::TestCommon;
use Cwd qw(abs_path);
require_git(2.6);
foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
use strict;
use warnings;
-require './t/common.perl';
+use PublicInbox::TestCommon;
use Test::More;
use PublicInbox::MIME;
use PublicInbox::Config;
use Email::MIME;
use Cwd;
use PublicInbox::Config;
-require './t/common.perl';
+use PublicInbox::TestCommon;
my @mods = qw(Filesys::Notify::Simple);
foreach my $mod (@mods) {
eval "require $mod";
use PublicInbox::MIME;
use Cwd;
use PublicInbox::Config;
-require './t/common.perl';
+use PublicInbox::TestCommon;
require_git(2.6);
my @mods = qw(Search::Xapian DBD::SQLite Filesys::Notify::Simple);
foreach my $mod (@mods) {
use warnings;
use Test::More;
use PublicInbox::Spawn qw(which);
-require './t/common.perl';
+use PublicInbox::TestCommon;
my @mods = qw(URI::Escape Plack::Builder Digest::SHA
IO::Compress::Gzip IO::Uncompress::Gunzip HTTP::Tiny);
foreach my $mod (@mods) {
eval "require $mod";
plan skip_all => "missing $mod for $0" if $@;
};
-require './t/common.perl';
+use PublicInbox::TestCommon;
require_git('2.6');
use PublicInbox::MIME;
use PublicInbox::InboxWritable;
use warnings;
use Test::More;
use POSIX qw(setsid);
-require './t/common.perl';
+use PublicInbox::TestCommon;
my $git_dir = $ENV{GIANT_GIT_DIR};
plan 'skip_all' => 'GIANT_GIT_DIR not defined' unless $git_dir;
if ($test_tls && !-r $key || !-r $cert) {
plan skip_all => "certs/ missing for $0, run $^X ./certs/create-certs.perl";
}
-require './t/common.perl';
+use PublicInbox::TestCommon;
my ($tmpdir, $ftd) = tmpdir();
$File::Temp::KEEP_ALL = !!$ENV{TEST_KEEP_TMP};
my (%OPT, $td, $host_port, $group);
use Benchmark qw(:all);
use PublicInbox::Inbox;
use PublicInbox::View;
-require './t/common.perl';
+use PublicInbox::TestCommon;
my $inboxdir = $ENV{GIANT_INBOX_DIR} // $ENV{GIANT_PI_DIR};
plan skip_all => "GIANT_INBOX_DIR not defined for $0" unless $inboxdir;
plan skip_all => "GIANT_INBOX_DIR not defined for $0" unless defined($inboxdir);
eval { require PublicInbox::Search };
my ($host_port, $group, %opts, $s, $td, $tmp_obj);
-require './t/common.perl';
+use PublicInbox::TestCommon;
if (($ENV{NNTP_TEST_URL} || '') =~ m!\Anntp://([^/]+)/([^/]+)\z!) {
($host_port, $group) = ($1, $2);