X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Fv2reindex.t;h=a2fc20757d2f0a33e4d90918aa1e4fe5d977da36;hb=1814b1a0b78770c8ba9e7a0adef56c4c324d4064;hp=b6164ff810febd2936236e7ac2bd42f0d2e3bdc8;hpb=4bebfa0c80ad7f4596a7dca98b39121470a42af0;p=public-inbox.git diff --git a/t/v2reindex.t b/t/v2reindex.t index b6164ff8..a2fc2075 100644 --- a/t/v2reindex.t +++ b/t/v2reindex.t @@ -3,13 +3,14 @@ use strict; use warnings; use Test::More; -use PublicInbox::MIME; -use PublicInbox::ContentId qw(content_digest); +use PublicInbox::Eml; +use PublicInbox::ContentHash qw(content_digest); use File::Path qw(remove_tree); use PublicInbox::TestCommon; require_git(2.6); require_mods(qw(DBD::SQLite Search::Xapian)); use_ok 'PublicInbox::V2Writable'; +use_ok 'PublicInbox::OverIdx'; my ($inboxdir, $for_destroy) = tmpdir(); my $ibx_config = { inboxdir => $inboxdir, @@ -24,15 +25,13 @@ my $agpl = do { <$fh>; }; my $phrase = q("defending all users' freedom"); -my $mime = PublicInbox::MIME->create( - header => [ - From => 'a@example.com', - To => 'test@example.com', - Subject => 'this is a subject', - Date => 'Fri, 02 Oct 1993 00:00:00 +0000', - ], - body => $agpl, -); +my $mime = PublicInbox::Eml->new(<<'EOF'.$agpl); +From: a@example.com +To: test@example.com +Subject: this is a subject +Date: Fri, 02 Oct 1993 00:00:00 +0000 + +EOF my $minmax; my $msgmap; my ($mark1, $mark2, $mark3, $mark4); @@ -40,7 +39,7 @@ my ($mark1, $mark2, $mark3, $mark4); my %config = %$ibx_config; my $ibx = PublicInbox::Inbox->new(\%config); my $im = PublicInbox::V2Writable->new($ibx, {nproc => 1}); - my $im0 = $im->importer(); + my $im0 = $im->importer(0); foreach my $i (1..10) { $mime->header_set('Message-Id', "<$i\@example.com>"); ok($im->add($mime), "message $i added"); @@ -425,6 +424,46 @@ ok(!-d $xap, 'Xapian directories removed again'); ], 'msgmap as expected' ); } +my $check_rethread = sub { + my ($desc) = @_; + my @warn; + local $SIG{__WARN__} = sub { push @warn, @_ }; + my %config = %$ibx_config; + my $ibx = PublicInbox::Inbox->new(\%config); + my $f = $ibx->over->{dbh}->sqlite_db_filename; + my $over = PublicInbox::OverIdx->new($f); + my $dbh = $over->dbh; + my $non_ghost_tids = sub { + $dbh->selectall_arrayref(<<''); +SELECT tid FROM over WHERE num > 0 ORDER BY tid ASC + + }; + my $before = $non_ghost_tids->(); + + # mess up threading: + my $tid = PublicInbox::OverIdx::get_counter($dbh, 'thread'); + my $nr = $dbh->do('UPDATE over SET tid = ?', undef, $tid); + diag "messing up all threads with tid=$tid"; + + my $v2w = PublicInbox::V2Writable->new($ibx); + my @pr; + my $pr = sub { push @pr, @_ }; + $v2w->index_sync({reindex => 1, rethread => 1, -progress => $pr}); + # diag "@pr"; # nobody cares + is_deeply(\@warn, [], 'no warnings on reindex + rethread'); + + my @n = $dbh->selectrow_array(<(); + ok($after->[0]->[0] > $before->[-1]->[0], + 'all tids greater than before'); + is(scalar @$after, scalar @$before, 'thread count unchanged'); +}; + +$check_rethread->('no-monster'); + # A real example from linux-renesas-soc on lore where a 3-headed monster # of a message has 3 sets of common headers. Another normal message # previously existed with a single Message-ID that conflicts with one @@ -436,7 +475,7 @@ ok(!-d $xap, 'Xapian directories removed again'); $config{indexlevel} = 'medium'; my $ibx = PublicInbox::Inbox->new(\%config); my $im = PublicInbox::V2Writable->new($ibx); - my $m3 = PublicInbox::MIME->new(<<'EOF'); + my $m3 = PublicInbox::Eml->new(<<'EOF'); Date: Tue, 24 May 2016 14:34:22 -0700 (PDT) Message-Id: <20160524.143422.552507610109476444.d@example.com> To: t@example.com @@ -467,7 +506,7 @@ Somehow we got a message with 3 sets of headers into one message, could've been something broken on the archiver side. EOF - my $m1 = PublicInbox::MIME->new(<<'EOF'); + my $m1 = PublicInbox::Eml->new(<<'EOF'); From: a@example.com To: t@example.com Subject: [PATCH 12/13] @@ -499,4 +538,8 @@ EOF is_deeply([values %uniq], [3], 'search on different subjects'); } +# XXX: not deterministic when dealing with ambiguous messages, oh well +$check_rethread->('3-headed-monster once'); +$check_rethread->('3-headed-monster twice'); + done_testing();