]> Sergey Matveev's repositories - public-inbox.git/blob - t/v2reindex.t
SearchIdx: Allow the amount of indexing be configured
[public-inbox.git] / t / v2reindex.t
1 # Copyright (C) 2018 all contributors <meta@public-inbox.org>
2 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
3 use strict;
4 use warnings;
5 use Test::More;
6 use PublicInbox::MIME;
7 use PublicInbox::ContentId qw(content_digest);
8 use File::Temp qw/tempdir/;
9 use File::Path qw(remove_tree);
10
11 foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
12         eval "require $mod";
13         plan skip_all => "$mod missing for v2reindex.t" if $@;
14 }
15 use_ok 'PublicInbox::V2Writable';
16 my $mainrepo = tempdir('pi-v2reindex-XXXXXX', TMPDIR => 1, CLEANUP => 1);
17 my $ibx_config = {
18         mainrepo => $mainrepo,
19         name => 'test-v2writable',
20         version => 2,
21         -primary_address => 'test@example.com',
22         indexlevel => 'full',
23 };
24 my $ibx = PublicInbox::Inbox->new($ibx_config);
25 my $mime = PublicInbox::MIME->create(
26         header => [
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',
31         ],
32         body => "hello world\n",
33 );
34 local $ENV{NPROC} = 2;
35 my $im = PublicInbox::V2Writable->new($ibx, 1);
36 foreach my $i (1..10) {
37         $mime->header_set('Message-Id', "<$i\@example.com>");
38         ok($im->add($mime), "message $i added");
39         if ($i == 4) {
40                 $im->remove($mime);
41         }
42 }
43
44 if ('test remove later') {
45         $mime->header_set('Message-Id', "<5\@example.com>");
46         $im->remove($mime);
47 }
48
49 $im->done;
50 my $minmax = [ $ibx->mm->minmax ];
51 ok(defined $minmax->[0] && defined $minmax->[1], 'minmax defined');
52 is_deeply($minmax, [ 1, 10 ], 'minmax as expected');
53
54 eval { $im->index_sync({reindex => 1}) };
55 is($@, '', 'no error from reindexing');
56 $im->done;
57
58 my $xap = "$mainrepo/xap".PublicInbox::Search::SCHEMA_VERSION();
59 remove_tree($xap);
60 ok(!-d $xap, 'Xapian directories removed');
61 eval { $im->index_sync({reindex => 1}) };
62 is($@, '', 'no error from reindexing');
63 $im->done;
64 ok(-d $xap, 'Xapian directories recreated');
65
66 delete $ibx->{mm};
67 is_deeply([ $ibx->mm->minmax ], $minmax, 'minmax unchanged');
68
69 ok(unlink "$mainrepo/msgmap.sqlite3", 'remove msgmap');
70 remove_tree($xap);
71 ok(!-d $xap, 'Xapian directories removed again');
72 {
73         my @warn;
74         local $SIG{__WARN__} = sub { push @warn, @_ };
75         eval { $im->index_sync({reindex => 1}) };
76         is($@, '', 'no error from reindexing without msgmap');
77         is(scalar(@warn), 0, 'no warnings from reindexing');
78         $im->done;
79         ok(-d $xap, 'Xapian directories recreated');
80         delete $ibx->{mm};
81         is_deeply([ $ibx->mm->minmax ], $minmax, 'minmax unchanged');
82 }
83
84 ok(unlink "$mainrepo/msgmap.sqlite3", 'remove msgmap');
85 remove_tree($xap);
86 ok(!-d $xap, 'Xapian directories removed again');
87 {
88         my @warn;
89         local $SIG{__WARN__} = sub { push @warn, @_ };
90         eval { $im->index_sync({reindex => 1}) };
91         is($@, '', 'no error from reindexing without msgmap');
92         is_deeply(\@warn, [], 'no warnings');
93         $im->done;
94         ok(-d $xap, 'Xapian directories recreated');
95         delete $ibx->{mm};
96         is_deeply([ $ibx->mm->minmax ], $minmax, 'minmax unchanged');
97 }
98
99 ok(unlink "$mainrepo/msgmap.sqlite3", 'remove msgmap');
100 remove_tree($xap);
101 ok(!-d $xap, 'Xapian directories removed again');
102
103 $ibx_config->{index_level} = 'medium';
104 $ibx = PublicInbox::Inbox->new($ibx_config);
105 $im = PublicInbox::V2Writable->new($ibx);
106 {
107         my @warn;
108         local $SIG{__WARN__} = sub { push @warn, @_ };
109         eval { $im->index_sync({reindex => 1}) };
110         is($@, '', 'no error from reindexing without msgmap');
111         is_deeply(\@warn, [], 'no warnings');
112         $im->done;
113         ok(-d $xap, 'Xapian directories recreated');
114         delete $ibx->{mm};
115         is_deeply([ $ibx->mm->minmax ], $minmax, 'minmax unchanged');
116 }
117
118
119 ok(unlink "$mainrepo/msgmap.sqlite3", 'remove msgmap');
120 remove_tree($xap);
121 ok(!-d $xap, 'Xapian directories removed again');
122
123 $ibx_config->{index_level} = 'basic';
124 $ibx = PublicInbox::Inbox->new($ibx_config);
125 $im = PublicInbox::V2Writable->new($ibx);
126 {
127         my @warn;
128         local $SIG{__WARN__} = sub { push @warn, @_ };
129         eval { $im->index_sync({reindex => 1}) };
130         is($@, '', 'no error from reindexing without msgmap');
131         is_deeply(\@warn, [], 'no warnings');
132         $im->done;
133         ok(-d $xap, 'Xapian directories recreated');
134         delete $ibx->{mm};
135         is_deeply([ $ibx->mm->minmax ], $minmax, 'minmax unchanged');
136 }
137
138 done_testing();