From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id D85601F5A2 for ; Sun, 2 Feb 2020 06:52:22 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 1/9] t/multi-mid.t: extra test for -convert highwater mark Date: Sun, 2 Feb 2020 06:52:14 +0000 Message-Id: <20200202065222.14966-2-e@yhbt.net> In-Reply-To: <20200202065222.14966-1-e@yhbt.net> References: <20200202065222.14966-1-e@yhbt.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: 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 | 1 + t/multi-mid.t | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 t/multi-mid.t 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 +# License: AGPL-3.0+ +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(< +Message-ID: +From: a\@example.com +To: $addr +Date: Fri, 02 Oct 1993 00:00:00 +0000 +Subject: bad + +EOF + +my $good = PublicInbox::MIME->new(< +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();