]> Sergey Matveev's repositories - public-inbox.git/commitdiff
t/multi-mid.t: extra test for -convert highwater mark
authorEric Wong <e@yhbt.net>
Sun, 2 Feb 2020 06:52:14 +0000 (06:52 +0000)
committerEric Wong <e@yhbt.net>
Sun, 2 Feb 2020 17:29:48 +0000 (17:29 +0000)
This is derived from a real-world test case where I encounterd
multiple Message-IDs in a v1 inbox causing regen problems.

Fixes: eea47b676127bcdb ("convert: preserve highwater mark from v1 msgmap")
MANIFEST
t/multi-mid.t [new file with mode: 0644]

index 3736c77721e380491f44a819756c603798bba404..5eb5d53a519a02a9a94f486f74c54c3fd0477f8b 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -250,6 +250,7 @@ t/mime.t
 t/msg_iter.t
 t/msgmap.t
 t/msgtime.t
+t/multi-mid.t
 t/nntp.t
 t/nntpd-tls.t
 t/nntpd.t
diff --git a/t/multi-mid.t b/t/multi-mid.t
new file mode 100644 (file)
index 0000000..0d283a0
--- /dev/null
@@ -0,0 +1,61 @@
+# Copyright (C) 2020 all contributors <meta@public-inbox.org>
+# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
+use Test::More;
+use PublicInbox::MIME;
+use PublicInbox::TestCommon;
+use PublicInbox::InboxWritable;
+use PublicInbox::SearchIdx;
+require_git(2.6);
+require_mods(qw(DBD::SQLite));
+
+my $addr = 'test@example.com';
+my $bad = PublicInbox::MIME->new(<<EOF);
+Message-ID: <a\@example.com>
+Message-ID: <b\@example.com>
+From: a\@example.com
+To: $addr
+Date: Fri, 02 Oct 1993 00:00:00 +0000
+Subject: bad
+
+EOF
+
+my $good = PublicInbox::MIME->new(<<EOF);
+Message-ID: <b\@example.com>
+Date: Fri, 02 Oct 1993 00:00:00 +0000
+From: b\@example.com
+To: $addr
+Subject: good
+
+EOF
+
+for my $order ([$bad, $good], [$good, $bad]) {
+       my $before;
+       my ($tmpdir, $for_destroy) = tmpdir();
+       my $ibx = PublicInbox::InboxWritable->new({
+               inboxdir => "$tmpdir/v1",
+               name => 'test-v1',
+               indexlevel => 'basic',
+               -primary_address => $addr,
+       }, my $creat_opt = {});
+       if ('setup v1 inbox') {
+               my $im = $ibx->importer(0);
+               ok($im->add($_), 'added '.$_->header('Subject')) for @$order;
+               $im->done;
+               my $s = PublicInbox::SearchIdx->new($ibx, 1);
+               $s->index_sync;
+               $before = [ $ibx->mm->minmax ];
+               $ibx->cleanup;
+       }
+       my $rdr = { 1 => \(my $out = ''), 2 => \(my $err = '') };
+       my $cmd = [ '-convert', $ibx->{inboxdir}, "$tmpdir/v2" ];
+       ok(run_script($cmd, undef, $rdr),
+               'convert to v2');
+       $err =~ s!\AW: $tmpdir/v1 not configured[^\n]+\n!!s;
+       is($err, '', 'no errors or warnings from -convert');
+       $ibx->{version} = 2;
+       $ibx->{inboxdir} = "$tmpdir/v2";
+       is_deeply([$ibx->mm->minmax], $before,
+               'min, max article numbers unchanged');
+}
+
+done_testing();