diff options
author | Eric Wong <e@yhbt.net> | 2020-02-02 06:52:14 +0000 |
---|---|---|
committer | Eric Wong <e@yhbt.net> | 2020-02-02 17:29:48 +0000 |
commit | 2b359355ae5839a5597ba81a40194bb3503118a0 (patch) | |
tree | d34736d271ee4aefa920ee168c2bda54bbefa8e6 | |
parent | fe5f65ae42f57215d68620b85f77015453835e28 (diff) | |
download | public-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-- | MANIFEST | 1 | ||||
-rw-r--r-- | t/multi-mid.t | 61 |
2 files changed, 62 insertions, 0 deletions
@@ -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(); |