X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Fv2mirror.t;h=2e23e763de09a31cf2b59b09de9b48780f327c63;hb=9253dc860de52360d3bc60710422783457143e3d;hp=2c7f6a8418f23e07858e079a872f8193f0cd66ac;hpb=1d409006c6932c2be45dafd826242654cda23c6c;p=public-inbox.git
diff --git a/t/v2mirror.t b/t/v2mirror.t
index 2c7f6a84..2e23e763 100644
--- a/t/v2mirror.t
+++ b/t/v2mirror.t
@@ -1,18 +1,16 @@
-# Copyright (C) 2018-2019 all contributors
+# Copyright (C) 2018-2020 all contributors
# License: AGPL-3.0+
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');
# Integration tests for HTTP cloning + mirroring
-foreach my $mod (qw(Plack::Util Plack::Builder
- HTTP::Date HTTP::Status Search::Xapian DBD::SQLite)) {
- eval "require $mod";
- plan skip_all => "$mod missing for v2mirror.t" if $@;
-}
-use File::Temp qw/tempdir/;
+require_mods(qw(Plack::Util Plack::Builder
+ HTTP::Date HTTP::Status Search::Xapian DBD::SQLite));
use IO::Socket;
use POSIX qw(dup2);
use_ok 'PublicInbox::V2Writable';
@@ -20,8 +18,7 @@ use PublicInbox::InboxWritable;
use PublicInbox::MIME;
use PublicInbox::Config;
# FIXME: too much setup
-my $tmpdir = tempdir('pi-v2mirror-XXXXXX', TMPDIR => 1, CLEANUP => 1);
-my $script = 'blib/script/public-inbox';
+my ($tmpdir, $for_destroy) = tmpdir();
my $pi_config = "$tmpdir/config";
{
open my $fh, '>', $pi_config or die "open($pi_config): $!";
@@ -58,21 +55,17 @@ for my $i (1..9) {
my $epoch_max = $v2w->{epoch_max};
ok($epoch_max > 0, "multiple epochs");
$v2w->done;
+{
+ my $smsg = $ibx->over->get_art(1);
+ like($smsg->{lines}, qr/\A[0-9]+\z/, 'lines is a digit');
+ like($smsg->{bytes}, qr/\A[0-9]+\z/, 'bytes is a digit');
+}
$ibx->cleanup;
-my ($sock, $pid);
-
-# TODO: replace this with ->DESTROY:
-my $owner_pid = $$;
-END { kill('TERM', $pid) if defined($pid) && $owner_pid == $$ };
-
-$! = 0;
-$sock = tcp_server();
+my $sock = tcp_server();
ok($sock, 'sock created');
-my $httpd = "$script-httpd";
-my $cmd = [ $httpd, '-W0', "--stdout=$tmpdir/out", "--stderr=$tmpdir/err" ];
-ok(defined($pid = spawn_listener(undef, $cmd, [ $sock ])),
- 'spawned httpd process successfully');
+my $cmd = [ '-httpd', '-W0', "--stdout=$tmpdir/out", "--stderr=$tmpdir/err" ];
+my $td = start_script($cmd, undef, { 3 => $sock });
my ($host, $port) = ($sock->sockhost, $sock->sockport);
$sock = undef;
@@ -106,15 +99,15 @@ for my $i (10..15) {
$v2w->done;
$ibx->cleanup;
-sub fetch_each_epoch {
+my $fetch_each_epoch = sub {
foreach my $i (0..$epoch_max) {
my $dir = "$tmpdir/m/git/$i.git";
is(system('git', "--git-dir=$dir", 'fetch', '-q'), 0,
'fetch successful');
}
-}
+};
-fetch_each_epoch();
+$fetch_each_epoch->();
my $mset = $mibx->search->reopen->query('m:15@example.com', {mset => 1});
is(scalar($mset->items), 0, 'new message not found in mirror, yet');
@@ -144,7 +137,7 @@ like($to_purge, qr/\A[a-f0-9]{40,}\z/, 'read blob to be purged');
$mset = $ibx->search->reopen->query('m:10@example.com', {mset => 1});
is(scalar($mset->items), 0, 'purged message gone from origin');
-fetch_each_epoch();
+$fetch_each_epoch->();
{
$ibx->cleanup;
PublicInbox::InboxWritable::cleanup($mibx);
@@ -182,7 +175,7 @@ is($mibx->git->check($to_purge), undef, 'unindex+prune successful in mirror');
ok($v2w->remove($mime), 'removed <1@example.com> from source');
$v2w->done;
$ibx->cleanup;
- fetch_each_epoch();
+ $fetch_each_epoch->();
PublicInbox::InboxWritable::cleanup($mibx);
my $cmd = [ "-index", "$tmpdir/m" ];
@@ -194,9 +187,8 @@ is($mibx->git->check($to_purge), undef, 'unindex+prune successful in mirror');
is(scalar($mset->items), 0, '1@example.com no longer visible in mirror');
}
-ok(kill('TERM', $pid), 'killed httpd');
-$pid = undef;
-waitpid(-1, 0);
+ok($td->kill, 'killed httpd');
+$td->join;
done_testing();