blob: b6d38a667a0f14aae1a4925bf15398e17cf04a2b [file] [log] [blame]
Akrond9991622020-06-02 11:45:33 +02001package de.ids_mannheim.korap.index;
2
3import static org.junit.Assert.assertEquals;
Akrond9991622020-06-02 11:45:33 +02004import static org.junit.Assert.assertNotEquals;
Akron412727b2021-10-18 18:46:41 +02005import static org.junit.Assert.assertTrue;
Akrond9991622020-06-02 11:45:33 +02006
Akrone370fd82021-10-18 19:13:30 +02007import java.util.List;
8
Akrond9991622020-06-02 11:45:33 +02009import java.io.IOException;
Akron412727b2021-10-18 18:46:41 +020010import java.nio.file.Files;
11import java.nio.file.Path;
Akrond9991622020-06-02 11:45:33 +020012import java.nio.file.Paths;
Akron412727b2021-10-18 18:46:41 +020013
Akrone370fd82021-10-18 19:13:30 +020014import org.apache.lucene.index.LeafReaderContext;
Akrond9991622020-06-02 11:45:33 +020015import org.apache.lucene.store.MMapDirectory;
Akron412727b2021-10-18 18:46:41 +020016import org.junit.Ignore;
17import org.junit.Test;
18
19import de.ids_mannheim.korap.KrillIndex;
Akrond9991622020-06-02 11:45:33 +020020
21public class TestIndexRevision {
22
23 @Test
24 public void testIndexRevisionAdd () throws IOException {
25 KrillIndex ki = new KrillIndex();
26
27 assertEquals(ki.getFingerprint(),"null");
28
29 ki.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"), true);
30 ki.commit();
31
32 String x1 = ki.getFingerprint();
Akron412727b2021-10-18 18:46:41 +020033 assertEquals("ibtSULzKIMrfGAtES3GXRA==",x1);
Akrond9991622020-06-02 11:45:33 +020034
35 ki.addDoc(getClass().getResourceAsStream("/wiki/00002.json.gz"), true);
36 ki.addDoc(getClass().getResourceAsStream("/wiki/00003.json.gz"), true);
37 ki.addDoc(getClass().getResourceAsStream("/wiki/00004.json.gz"), true);
38 ki.commit();
39
40 String x2 = ki.getFingerprint();
Akron412727b2021-10-18 18:46:41 +020041 assertEquals("0UIQZpZVfiGDD2leAq6YQA==",x2);
Akrond9991622020-06-02 11:45:33 +020042
43 ki.addDoc(getClass().getResourceAsStream("/wiki/00006.json.gz"), true);
44 ki.commit();
45
46 String x3 = ki.getFingerprint();
Akron412727b2021-10-18 18:46:41 +020047 assertEquals("fS3GqnKynhPQ5wFyC9/XWw==",x3);
Akrond9991622020-06-02 11:45:33 +020048
49
50 // Check if the same changes will have the same effect
51 KrillIndex ki2 = new KrillIndex();
52
Akron412727b2021-10-18 18:46:41 +020053 assertEquals("null",ki2.getFingerprint());
Akrond9991622020-06-02 11:45:33 +020054
55 ki2.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"), true);
56 ki2.commit();
57
Akron412727b2021-10-18 18:46:41 +020058 assertEquals(x1, ki2.getFingerprint());
Akrond9991622020-06-02 11:45:33 +020059
60 ki2.addDoc(getClass().getResourceAsStream("/wiki/00002.json.gz"), true);
61 ki2.addDoc(getClass().getResourceAsStream("/wiki/00003.json.gz"), true);
62 ki2.addDoc(getClass().getResourceAsStream("/wiki/00004.json.gz"), true);
63 ki2.commit();
64
Akron412727b2021-10-18 18:46:41 +020065 assertEquals(x2, ki2.getFingerprint());
Akrond9991622020-06-02 11:45:33 +020066
67 ki2.addDoc(getClass().getResourceAsStream("/wiki/00006.json.gz"), true);
68 ki2.commit();
69
Akron412727b2021-10-18 18:46:41 +020070 assertEquals(x3, ki2.getFingerprint());
Akrond9991622020-06-02 11:45:33 +020071 };
72
73 @Test
74 public void testIndexRevisionDel () throws IOException {
75 KrillIndex ki = new KrillIndex();
76
77 assertEquals(ki.getFingerprint(),"null");
78
79 ki.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"), true);
80 ki.commit();
81
82 String x1 = ki.getFingerprint();
Akron412727b2021-10-18 18:46:41 +020083 assertEquals("ibtSULzKIMrfGAtES3GXRA==",x1);
Akrond9991622020-06-02 11:45:33 +020084
85 assertTrue(ki.delDocs("title", "A"));
86 ki.commit();
87
88 String x2 = ki.getFingerprint();
89 assertNotEquals(x1, x2);
Akrond9991622020-06-02 11:45:33 +020090 };
91
Akron412727b2021-10-18 18:46:41 +020092 @Test
93 public void testIndexRevisionTempFile () throws IOException {
94
95 Path tmpdir = Files.createTempDirectory("wiki");
96 KrillIndex ki = new KrillIndex(new MMapDirectory(tmpdir));
97
98 assertEquals("null", ki.getFingerprint());
99
100 ki.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"), true);
101 ki.commit();
102
103 ki.addDoc(getClass().getResourceAsStream("/wiki/00002.json.gz"), true);
104 ki.addDoc(getClass().getResourceAsStream("/wiki/00003.json.gz"), true);
105 ki.addDoc(getClass().getResourceAsStream("/wiki/00004.json.gz"), true);
106 ki.commit();
107
108 ki.addDoc(getClass().getResourceAsStream("/wiki/00006.json.gz"), true);
109 ki.commit();
110
111 assertTrue(ki.delDocs("title", "A"));
112 ki.commit();
113
114 assertEquals(false, ki.isReaderOpen());
115
116 String fingerp = "aoD2zQvZKa8oQPjFJlji1g==";
117 assertEquals(fingerp, ki.getFingerprint());
118
119 assertEquals(true, ki.isReaderOpen());
120 assertEquals(4, ki.numberOf("base", "documents"));
121
122 assertEquals(fingerp, ki.getFingerprint());
123
124 ki.close();
125
126 // Reload index
127 ki = new KrillIndex(new MMapDirectory(tmpdir));
128
129 assertEquals(fingerp, ki.getFingerprint());
130
131 ki.close();
132 };
133
Akrone370fd82021-10-18 19:13:30 +0200134 public void testIndexRevisionLeafTempFile () throws IOException {
135
136 String x1, x2, x3;
137
138 Path tmpdir = Files.createTempDirectory("wikileaf");
139 KrillIndex ki = new KrillIndex(new MMapDirectory(tmpdir));
140
141 assertEquals("null", ki.getFingerprint());
142
143 ki.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"), true);
144 ki.commit();
145
146 List<LeafReaderContext> contexts = ki.reader().leaves();
147 assertEquals(1, contexts.size());
148 x1 = contexts.get(0).reader().getCombinedCoreAndDeletesKey().toString();
149 assertEquals("_0(5.0.0):c1", x1);
150
151 ki.addDoc(getClass().getResourceAsStream("/wiki/00002.json.gz"), true);
152 ki.addDoc(getClass().getResourceAsStream("/wiki/00003.json.gz"), true);
153 ki.addDoc(getClass().getResourceAsStream("/wiki/00004.json.gz"), true);
154 ki.commit();
155
156 ki.addDoc(getClass().getResourceAsStream("/wiki/00006.json.gz"), true);
157 ki.commit();
158
159 contexts = ki.reader().leaves();
160 assertEquals(3, contexts.size());
161 x1 = contexts.get(0).reader().getCombinedCoreAndDeletesKey().toString();
162 assertEquals("_0(5.0.0):c1", x1);
163 x2 = contexts.get(1).reader().getCombinedCoreAndDeletesKey().toString();
164 assertEquals("_1(5.0.0):c3", x2);
165 x3 = contexts.get(2).reader().getCombinedCoreAndDeletesKey().toString();
166 assertEquals("_2(5.0.0):c1", x3);
167
168 assertTrue(ki.delDocs("title", "A (Band)"));
169 ki.commit();
170
171 assertEquals(false, ki.isReaderOpen());
172
173 contexts = ki.reader().leaves();
174 assertEquals(3, contexts.size());
175 x1 = contexts.get(0).reader().getCombinedCoreAndDeletesKey().toString();
176 assertEquals("_0(5.0.0):c1", x1);
177 x2 = contexts.get(1).reader().getCombinedCoreAndDeletesKey().toString();
178 assertEquals("_1(5.0.0):c3/1:delGen=1", x2);
179 x3 = contexts.get(2).reader().getCombinedCoreAndDeletesKey().toString();
180 assertEquals("_2(5.0.0):c1", x3);
181
182 String fingerp = "241/XHj/9ZxeO5Lm3zZ+iw==";
183 assertEquals(fingerp, ki.getFingerprint());
184
185 ki.close();
186
187 // Reload index
188 ki = new KrillIndex(new MMapDirectory(tmpdir));
189
190 assertEquals(fingerp, ki.getFingerprint());
191
192 contexts = ki.reader().leaves();
193 assertEquals(3, contexts.size());
194 x1 = contexts.get(0).reader().getCombinedCoreAndDeletesKey().toString();
195 assertEquals("_0(5.0.0):c1", x1);
196 x2 = contexts.get(1).reader().getCombinedCoreAndDeletesKey().toString();
197 assertEquals("_1(5.0.0):c3/1:delGen=1", x2);
198 x3 = contexts.get(2).reader().getCombinedCoreAndDeletesKey().toString();
199 assertEquals("_2(5.0.0):c1", x3);
200
201 ki.close();
202 };
203
204
Akrond9991622020-06-02 11:45:33 +0200205 @Ignore
206 public void testIndexRevisionSample () throws IOException {
207 KrillIndex ki = new KrillIndex(new MMapDirectory(
208 Paths.get(getClass().getResource("/sample-index").getFile())));
209
Akron412727b2021-10-18 18:46:41 +0200210 assertEquals("Wes8Bd4h1OypPqbWF5njeQ==",ki.getFingerprint());
Akrond9991622020-06-02 11:45:33 +0200211 };
212};