X-Git-Url: http://www.git.stargrave.org/?p=public-inbox.git;a=blobdiff_plain;f=t%2Fv1reindex.t;h=f593b3239586e0a013f155451dc9e67138c9b874;hp=378c8efb469baa852f34e7b58eef1be67424237e;hb=refs%2Fheads%2Fmaster;hpb=4bebfa0c80ad7f4596a7dca98b39121470a42af0 diff --git a/t/v1reindex.t b/t/v1reindex.t index 378c8efb..f593b323 100644 --- a/t/v1reindex.t +++ b/t/v1reindex.t @@ -1,32 +1,33 @@ -# Copyright (C) 2018-2020 all contributors +# Copyright (C) 2018-2021 all contributors # License: AGPL-3.0+ use strict; use warnings; use Test::More; -use PublicInbox::MIME; -use PublicInbox::ContentId qw(content_digest); +use PublicInbox::ContentHash qw(content_digest); use File::Path qw(remove_tree); use PublicInbox::TestCommon; +use PublicInbox::Eml; require_git(2.6); require_mods(qw(DBD::SQLite Search::Xapian)); use_ok 'PublicInbox::SearchIdx'; use_ok 'PublicInbox::Import'; +use_ok 'PublicInbox::OverIdx'; my ($inboxdir, $for_destroy) = tmpdir(); my $ibx_config = { inboxdir => $inboxdir, name => 'test-v1reindex', -primary_address => 'test@example.com', indexlevel => 'full', + -no_fsync => 1, }; -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 => "hello world\n", -); +my $mime = PublicInbox::Eml->new(<<'EOF'); +From: a@example.com +To: test@example.com +Subject: this is a subject +Date: Fri, 02 Oct 1993 00:00:00 +0000 + +hello world +EOF my $minmax; my $msgmap; my ($mark1, $mark2, $mark3, $mark4); @@ -178,7 +179,7 @@ ok(!-d $xap, 'Xapian directories removed again'); delete $ibx->{mm}; is_deeply([ $ibx->mm->minmax ], $minmax, 'minmax unchanged'); is($ibx->mm->num_highwater, 10, 'num_highwater as expected'); - my $mset = $ibx->search->query('hello world', {mset=>1}); + my $mset = $ibx->search->mset('hello world'); isnt($mset->size, 0, 'got Xapian search results'); my ($min, $max) = $ibx->mm->minmax; @@ -221,10 +222,10 @@ ok(!-d $xap, 'Xapian directories removed again'); $config{indexlevel} = 'medium'; my $ibx = PublicInbox::Inbox->new(\%config); my $rw = PublicInbox::SearchIdx->new($ibx, 1); - eval { $rw->index_sync }; + eval { $rw->index_sync({reindex => 1}) }; is($@, '', 'no error from indexing'); is_deeply(\@warn, [], 'no warnings'); - my $mset = $ibx->search->reopen->query('hello world', {mset=>1}); + my $mset = $ibx->search->reopen->mset('hello world'); isnt($mset->size, 0, 'search OK after basic -> medium'); is($ibx->mm->num_highwater, 10, 'num_highwater as expected'); @@ -428,5 +429,38 @@ ok(!-d $xap, 'Xapian directories removed again'); ], 'msgmap as expected' ); } +{ + my @warn; + local $SIG{__WARN__} = sub { push @warn, @_ }; + my $ibx = PublicInbox::Inbox->new({ %$ibx_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); + + my $rw = PublicInbox::SearchIdx->new($ibx, 1); + my @pr; + my $pr = sub { push @pr, @_ }; + $rw->index_sync({reindex => 1, rethread => 1, -progress => $pr }); + 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'); + is_deeply([], \@warn, 'no warnings'); + # diag "@pr"; # XXX do we care? +} done_testing();