]> Sergey Matveev's repositories - public-inbox.git/blobdiff - t/v2mirror.t
remove most internal Email::MIME usage
[public-inbox.git] / t / v2mirror.t
index 213a5f1534d47e139840bf75920a93a9a7bfdb15..d588808d645bc3a22410729d2ac273ae70292b49 100644 (file)
@@ -1,24 +1,21 @@
-# Copyright (C) 2018-2019 all contributors <meta@public-inbox.org>
+# Copyright (C) 2018-2020 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 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 $@;
-}
+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';
 use PublicInbox::InboxWritable;
-use PublicInbox::MIME;
+use PublicInbox::Eml;
 use PublicInbox::Config;
 # FIXME: too much setup
 my ($tmpdir, $for_destroy) = tmpdir();
@@ -41,7 +38,7 @@ $ibx->{version} = 2;
 my $v2w = PublicInbox::V2Writable->new($ibx, 1);
 ok $v2w, 'v2w loaded';
 $v2w->{parallel} = 0;
-my $mime = PublicInbox::MIME->new(<<'');
+my $mime = PublicInbox::Eml->new(<<'');
 From: Me <me@example.com>
 To: You <you@example.com>
 Subject: a
@@ -58,6 +55,11 @@ 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 = tcp_server();
@@ -74,7 +76,7 @@ foreach my $i (0..$epoch_max) {
                "http://$host:$port/v2/$i$sfx",
                "$tmpdir/m/git/$i.git");
 
-       is(system(@cmd), 0, "cloned $i.git");
+       is(xsys(@cmd), 0, "cloned $i.git");
        ok(-d "$tmpdir/m/git/$i.git", "mirror $i OK");
 }
 
@@ -100,7 +102,7 @@ $ibx->cleanup;
 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,
+               is(xsys('git', "--git-dir=$dir", 'fetch', '-q'), 0,
                        'fetch successful');
        }
 };
@@ -185,6 +187,37 @@ 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');
 }
 
+if ('max size') {
+       $mime->header_set('Message-ID', '<2big@a>');
+       my $max = '2k';
+       $mime->body_str_set("z\n" x 1024);
+       ok($v2w->add($mime), "add big message");
+       $v2w->done;
+       $ibx->cleanup;
+       $fetch_each_epoch->();
+       PublicInbox::InboxWritable::cleanup($mibx);
+       my $cmd = ['-index', "$tmpdir/m", "--max-size=$max" ];
+       my $opt = { 2 => \(my $err) };
+       ok(run_script($cmd, undef, $opt), 'indexed with --max-size');
+       like($err, qr/skipping [a-f0-9]{40,}/, 'warned about skipping message');
+       $mset = $mibx->search->reopen->query('m:2big@a', {mset =>1});
+       is(scalar($mset->items), 0, 'large message not indexed');
+
+       {
+               open my $fh, '>>', $pi_config or die;
+               print $fh <<EOF or die;
+[publicinbox]
+       indexMaxSize = 2k
+EOF
+               close $fh or die;
+       }
+       $cmd = ['-index', "$tmpdir/m", "--reindex" ];
+       ok(run_script($cmd, undef, $opt), 'reindexed w/ indexMaxSize in file');
+       like($err, qr/skipping [a-f0-9]{40,}/, 'warned about skipping message');
+       $mset = $mibx->search->reopen->query('m:2big@a', {mset =>1});
+       is(scalar($mset->items), 0, 'large message not re-indexed');
+}
+
 ok($td->kill, 'killed httpd');
 $td->join;