1 # Copyright (C) 2018 all contributors <meta@public-inbox.org>
2 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
7 use PublicInbox::ContentId qw(content_digest);
8 use File::Temp qw/tempdir/;
9 use File::Path qw(remove_tree);
11 foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
13 plan skip_all => "$mod missing for v1reindex.t" if $@;
15 use_ok 'PublicInbox::SearchIdx';
16 use_ok 'PublicInbox::Import';
17 my $mainrepo = tempdir('pi-v1reindex-XXXXXX', TMPDIR => 1, CLEANUP => 1);
18 is(system(qw(git init -q --bare), $mainrepo), 0);
20 mainrepo => $mainrepo,
21 name => 'test-v1reindex',
22 -primary_address => 'test@example.com',
24 my $ibx = PublicInbox::Inbox->new($ibx_config);
25 my $mime = PublicInbox::MIME->create(
27 From => 'a@example.com',
28 To => 'test@example.com',
29 Subject => 'this is a subject',
30 Date => 'Fri, 02 Oct 1993 00:00:00 +0000',
32 body => "hello world\n",
34 my $im = PublicInbox::Import->new($ibx->git, undef, undef, $ibx);
35 foreach my $i (1..10) {
36 $mime->header_set('Message-Id', "<$i\@example.com>");
37 ok($im->add($mime), "message $i added");
43 if ('test remove later') {
44 $mime->header_set('Message-Id', "<5\@example.com>");
49 my $rw = PublicInbox::SearchIdx->new($ibx, 1);
50 eval { $rw->index_sync() };
51 is($@, '', 'no error from indexing');
53 my $minmax = [ $ibx->mm->minmax ];
54 ok(defined $minmax->[0] && defined $minmax->[1], 'minmax defined');
55 is_deeply($minmax, [ 1, 10 ], 'minmax as expected');
57 $rw = PublicInbox::SearchIdx->new($ibx, 1);
58 eval { $rw->index_sync({reindex => 1}) };
59 is($@, '', 'no error from reindexing');
62 my $xap = "$mainrepo/public-inbox/xapian".PublicInbox::Search::SCHEMA_VERSION();
64 ok(!-d $xap, 'Xapian directories removed');
65 $rw = PublicInbox::SearchIdx->new($ibx, 1);
67 eval { $rw->index_sync({reindex => 1}) };
68 is($@, '', 'no error from reindexing');
70 ok(-d $xap, 'Xapian directories recreated');
73 is_deeply([ $ibx->mm->minmax ], $minmax, 'minmax unchanged');
75 ok(unlink "$mainrepo/public-inbox/msgmap.sqlite3", 'remove msgmap');
77 $rw = PublicInbox::SearchIdx->new($ibx, 1);
79 ok(!-d $xap, 'Xapian directories removed again');
82 local $SIG{__WARN__} = sub { push @warn, @_ };
83 eval { $rw->index_sync({reindex => 1}) };
84 is($@, '', 'no error from reindexing without msgmap');
85 is(scalar(@warn), 0, 'no warnings from reindexing');
87 ok(-d $xap, 'Xapian directories recreated');
89 is_deeply([ $ibx->mm->minmax ], $minmax, 'minmax unchanged');
92 ok(unlink "$mainrepo/public-inbox/msgmap.sqlite3", 'remove msgmap');
94 $rw = PublicInbox::SearchIdx->new($ibx, 1);
96 ok(!-d $xap, 'Xapian directories removed again');
99 local $SIG{__WARN__} = sub { push @warn, @_ };
100 eval { $rw->index_sync({reindex => 1}) };
101 is($@, '', 'no error from reindexing without msgmap');
102 is_deeply(\@warn, [], 'no warnings');
104 ok(-d $xap, 'Xapian directories recreated');
106 is_deeply([ $ibx->mm->minmax ], $minmax, 'minmax unchanged');