about summary refs log tree commit
diff options
context:
space:
mode:
authorEric Wong <e@yhbt.net>2020-02-02 06:52:14 +0000
committerEric Wong <e@yhbt.net>2020-02-02 17:29:48 +0000
commit2b359355ae5839a5597ba81a40194bb3503118a0 (patch)
treed34736d271ee4aefa920ee168c2bda54bbefa8e6
parentfe5f65ae42f57215d68620b85f77015453835e28 (diff)
downloadpublic-inbox-2b359355ae5839a5597ba81a40194bb3503118a0.tar.gz
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")
-rw-r--r--MANIFEST1
-rw-r--r--t/multi-mid.t61
2 files changed, 62 insertions, 0 deletions
diff --git a/MANIFEST b/MANIFEST
index 3736c777..5eb5d53a 100644
--- 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
index 00000000..0d283a0d
--- /dev/null
+++ b/t/multi-mid.t
@@ -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();