use PublicInbox::Spawn qw(which);
require_mods(qw(DBD::SQLite));
require PublicInbox::InboxWritable;
-use Email::Simple;
+use PublicInbox::Eml;
use IO::Socket;
use Socket qw(IPPROTO_TCP TCP_NODELAY);
use Net::NNTP;
use Sys::Hostname;
# FIXME: make easier to test both versions
-my $version = $ENV{PI_TEST_VERSION} || 2;
+my $version = $ENV{PI_TEST_VERSION} || 1;
require_git('2.6') if $version == 2;
+my $lsof = which('lsof');
+my $fast_idle = eval { require Linux::Inotify2; 1 } //
+ eval { require IO::KQueue; 1 };
my ($tmpdir, $for_destroy) = tmpdir();
my $home = "$tmpdir/pi-home";
my $len;
$ibx = PublicInbox::InboxWritable->new($ibx);
- my $im = $ibx->importer;
+ my $im = $ibx->importer(0);
# ensure successful message delivery
{
- my $mime = Email::MIME->new(<<EOF);
+ my $mime = PublicInbox::Eml->new(<<EOF);
To: =?utf-8?Q?El=C3=A9anor?= <you\@example.com>
From: =?utf-8?Q?El=C3=A9anor?= <me\@example.com>
Cc: $addr
my $list_id = $addr;
$list_id =~ s/@/./;
$mime->header_set('List-Id', "<$list_id>");
- $len = length($mime->as_string);
+ my $str = $mime->as_string;
+ $str =~ s/(?<!\r)\n/\r\n/sg;
+ $len = length($str);
+ undef $str;
$im->add($mime);
$im->done;
if ($version == 1) {
ok($date <= $t1, 'valid date before stop');
}
if ('leafnode interop') {
- my $for_leafnode = PublicInbox::MIME->new(<<"");
+ my $for_leafnode = PublicInbox::Eml->new(<<"");
From: longheader\@example.com
To: $addr
Subject: none
is($rdr, waitpid($rdr, 0), 'reader done');
is($? >> 8, 0, 'no errors');
}
+ my $noerr = { 2 => \(my $null) };
SKIP: {
if ($INC{'Search/Xapian.pm'} && ($ENV{TEST_RUN_MODE}//2)) {
skip 'Search/Xapian.pm pre-loaded (by t/run.perl?)', 1;
}
- my $lsof = which('lsof') or skip 'lsof missing', 1;
- my $rdr = { 2 => \(my $null) };
- my @of = xqx([$lsof, '-p', $td->{pid}], undef, $rdr);
+ $lsof or skip 'lsof missing', 1;
+ my @of = xqx([$lsof, '-p', $td->{pid}], undef, $noerr);
skip('lsof broken', 1) if (!scalar(@of) || $?);
my @xap = grep m!Search/Xapian!, @of;
is_deeply(\@xap, [], 'Xapian not loaded in nntpd');
is(scalar @r, 1, 'only one response line');
}
+ # -compact requires Xapian
+ SKIP: {
+ require_mods('Search::Xapian', 2);
+ which('xapian-compact') or skip 'xapian-compact missing', 2;
+ is(xsys(qw(git config), "--file=$home/.public-inbox/config",
+ "publicinbox.$group.indexlevel", 'medium'),
+ 0, 'upgraded indexlevel');
+ my $ex = eml_load('t/data/0001.patch');
+ is($n->article($ex->header('Message-ID')), undef,
+ 'article did not exist');
+ $im->add($ex);
+ $im->done;
+ ok(run_script([qw(-index --reindex -c), $ibx->{inboxdir}],
+ undef, $noerr), '-compacted');
+ select(undef, undef, undef, $fast_idle ? 0.1 : 2.1);
+ $art = $n->article($ex->header('Message-ID'));
+ ok($art, 'new article retrieved after compact');
+ $lsof or skip 'lsof missing', 1;
+ ($^O =~ /\A(?:linux)\z/) or
+ skip "lsof /(deleted)/ check untested on $^O", 1;
+ my @of = xqx([$lsof, '-p', $td->{pid}], undef, $noerr);
+ is(scalar(grep(/\(deleted\)/, @of)), 0, 'no deleted files');
+ };
+
$n = $s = undef;
$td->join;
is($?, 0, 'no error in exited process');