X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Fv1reindex.t;h=f593b3239586e0a013f155451dc9e67138c9b874;hb=4eee5af6011cc8cdefb66c9729952c7eff5c0b0b;hp=33a36fad34b19791fcc20ef229e8ed3aa7d4c119;hpb=b0e5062d43a96372801713ef78a78d6a1bc852bc;p=public-inbox.git diff --git a/t/v1reindex.t b/t/v1reindex.t index 33a36fad..f593b323 100644 --- a/t/v1reindex.t +++ b/t/v1reindex.t @@ -1,38 +1,33 @@ -# Copyright (C) 2018 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 File::Temp qw/tempdir/; +use PublicInbox::ContentHash qw(content_digest); use File::Path qw(remove_tree); -require './t/common.perl'; +use PublicInbox::TestCommon; +use PublicInbox::Eml; require_git(2.6); - -foreach my $mod (qw(DBD::SQLite Search::Xapian)) { - eval "require $mod"; - plan skip_all => "$mod missing for v1reindex.t" if $@; -} +require_mods(qw(DBD::SQLite Search::Xapian)); use_ok 'PublicInbox::SearchIdx'; use_ok 'PublicInbox::Import'; -my $mainrepo = tempdir('pi-v1reindex-XXXXXX', TMPDIR => 1, CLEANUP => 1); -is(system(qw(git init -q --bare), $mainrepo), 0); +use_ok 'PublicInbox::OverIdx'; +my ($inboxdir, $for_destroy) = tmpdir(); my $ibx_config = { - mainrepo => $mainrepo, + 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); @@ -40,6 +35,7 @@ my ($mark1, $mark2, $mark3, $mark4); my %config = %$ibx_config; my $ibx = PublicInbox::Inbox->new(\%config); my $im = PublicInbox::Import->new($ibx->git, undef, undef, $ibx); + $im->init_bare; foreach my $i (1..10) { $mime->header_set('Message-Id', "<$i\@example.com>"); ok($im->add($mime), "message $i added"); @@ -96,7 +92,7 @@ my ($mark1, $mark2, $mark3, $mark4); is_deeply($ibx->mm->msg_range(\$min, $max), $msgmap, 'msgmap unchanged'); } -my $xap = "$mainrepo/public-inbox/xapian".PublicInbox::Search::SCHEMA_VERSION(); +my $xap = "$inboxdir/public-inbox/xapian".PublicInbox::Search::SCHEMA_VERSION(); remove_tree($xap); ok(!-d $xap, 'Xapian directories removed'); { @@ -118,7 +114,7 @@ ok(!-d $xap, 'Xapian directories removed'); is_deeply($ibx->mm->msg_range(\$min, $max), $msgmap, 'msgmap unchanged'); } -ok(unlink "$mainrepo/public-inbox/msgmap.sqlite3", 'remove msgmap'); +ok(unlink "$inboxdir/public-inbox/msgmap.sqlite3", 'remove msgmap'); remove_tree($xap); ok(!-d $xap, 'Xapian directories removed again'); { @@ -141,7 +137,7 @@ ok(!-d $xap, 'Xapian directories removed again'); is_deeply($ibx->mm->msg_range(\$min, $max), $msgmap, 'msgmap unchanged'); } -ok(unlink "$mainrepo/public-inbox/msgmap.sqlite3", 'remove msgmap'); +ok(unlink "$inboxdir/public-inbox/msgmap.sqlite3", 'remove msgmap'); remove_tree($xap); ok(!-d $xap, 'Xapian directories removed again'); { @@ -164,7 +160,7 @@ ok(!-d $xap, 'Xapian directories removed again'); is_deeply($ibx->mm->msg_range(\$min, $max), $msgmap, 'msgmap unchanged'); } -ok(unlink "$mainrepo/public-inbox/msgmap.sqlite3", 'remove msgmap'); +ok(unlink "$inboxdir/public-inbox/msgmap.sqlite3", 'remove msgmap'); remove_tree($xap); ok(!-d $xap, 'Xapian directories removed again'); { @@ -183,14 +179,14 @@ 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; is_deeply($ibx->mm->msg_range(\$min, $max), $msgmap, 'msgmap unchanged'); } -ok(unlink "$mainrepo/public-inbox/msgmap.sqlite3", 'remove msgmap'); +ok(unlink "$inboxdir/public-inbox/msgmap.sqlite3", 'remove msgmap'); remove_tree($xap); ok(!-d $xap, 'Xapian directories removed again'); { @@ -209,8 +205,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->reopen->query('hello world', {mset=>1}); - is($mset->size, 0, "no Xapian search results"); + isnt($ibx->search, 'no search for basic'); my ($min, $max) = $ibx->mm->minmax; is_deeply($ibx->mm->msg_range(\$min, $max), $msgmap, 'msgmap unchanged'); @@ -224,13 +219,13 @@ ok(!-d $xap, 'Xapian directories removed again'); my @warn; local $SIG{__WARN__} = sub { push @warn, @_ }; my %config = %$ibx_config; - $config{indexleve} = 'medium'; + $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'); @@ -240,7 +235,7 @@ ok(!-d $xap, 'Xapian directories removed again'); } # An incremental indexing test -ok(unlink "$mainrepo/public-inbox/msgmap.sqlite3", 'remove msgmap'); +ok(unlink "$inboxdir/public-inbox/msgmap.sqlite3", 'remove msgmap'); remove_tree($xap); ok(!-d $xap, 'Xapian directories removed again'); { @@ -350,7 +345,7 @@ ok(!-d $xap, 'Xapian directories removed again'); # Another incremental indexing test -ok(unlink "$mainrepo/public-inbox/msgmap.sqlite3", 'remove msgmap'); +ok(unlink "$inboxdir/public-inbox/msgmap.sqlite3", 'remove msgmap'); remove_tree($xap); ok(!-d $xap, 'Xapian directories removed again'); { @@ -434,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();