Changeset View
Changeset View
Standalone View
Standalone View
autotests/integration/writetransactiontest.cpp
Show First 20 Lines • Show All 51 Lines • ▼ Show 20 Line(s) | 34 | private Q_SLOTS: | |||
---|---|---|---|---|---|
52 | void testRemoveRecursively(); | 52 | void testRemoveRecursively(); | ||
53 | void testDocumentId(); | 53 | void testDocumentId(); | ||
54 | void testTermPositions(); | 54 | void testTermPositions(); | ||
55 | private: | 55 | private: | ||
56 | QTemporaryDir* dir; | 56 | QTemporaryDir* dir; | ||
57 | Database* db; | 57 | Database* db; | ||
58 | }; | 58 | }; | ||
59 | 59 | | |||
60 | static quint64 touchFile(const QString& path) { | 60 | static void touchFile(const QString& path) { | ||
61 | QFile file(path); | 61 | QFile file(path); | ||
62 | file.open(QIODevice::WriteOnly); | 62 | file.open(QIODevice::WriteOnly); | ||
63 | file.write("data"); | 63 | file.write("data"); | ||
64 | file.close(); | 64 | file.close(); | ||
65 | | ||||
66 | return filePathToId(QFile::encodeName(path)); | | |||
67 | } | 65 | } | ||
68 | 66 | | |||
69 | void WriteTransactionTest::testAddDocument() | 67 | void WriteTransactionTest::testAddDocument() | ||
70 | { | 68 | { | ||
71 | Transaction tr(db, Transaction::ReadWrite); | 69 | Transaction tr(db, Transaction::ReadWrite); | ||
72 | 70 | | |||
73 | const QByteArray url(dir->path().toUtf8() + "/file"); | 71 | const QString filePath(dir->path() + "/file"); | ||
74 | touchFile(url); | 72 | touchFile(filePath); | ||
73 | QByteArray url = QFile::encodeName(filePath); | ||||
75 | quint64 id = filePathToId(url); | 74 | quint64 id = filePathToId(url); | ||
76 | 75 | | |||
77 | QCOMPARE(tr.hasDocument(id), false); | 76 | QCOMPARE(tr.hasDocument(id), false); | ||
78 | 77 | | |||
79 | Document doc; | 78 | Document doc; | ||
80 | doc.setId(id); | 79 | doc.setId(id); | ||
81 | doc.setUrl(url); | 80 | doc.setUrl(url); | ||
82 | doc.addTerm("a"); | 81 | doc.addTerm("a"); | ||
Show All 19 Lines | |||||
102 | state.docTimeDb = {{id, DocumentTimeDB::TimeInfo(1, 2)}}; | 101 | state.docTimeDb = {{id, DocumentTimeDB::TimeInfo(1, 2)}}; | ||
103 | state.mtimeDb = {{1, id}}; | 102 | state.mtimeDb = {{1, id}}; | ||
104 | 103 | | |||
105 | DBState actualState = DBState::fromTransaction(&tr2); | 104 | DBState actualState = DBState::fromTransaction(&tr2); | ||
106 | QCOMPARE(actualState, state); | 105 | QCOMPARE(actualState, state); | ||
107 | } | 106 | } | ||
108 | 107 | | |||
109 | 108 | | |||
110 | static Document createDocument(const QByteArray& url, quint32 mtime, quint32 ctime, const QVector<QByteArray>& terms, | 109 | static Document createDocument(const QString& filePath, quint32 mtime, quint32 ctime, const QVector<QByteArray>& terms, | ||
111 | const QVector<QByteArray>& fileNameTerms, const QVector<QByteArray>& xattrTerms) | 110 | const QVector<QByteArray>& fileNameTerms, const QVector<QByteArray>& xattrTerms) | ||
112 | { | 111 | { | ||
113 | Document doc; | 112 | Document doc; | ||
113 | | ||||
114 | const QByteArray url = QFile::encodeName(filePath); | ||||
114 | doc.setId(filePathToId(url)); | 115 | doc.setId(filePathToId(url)); | ||
115 | doc.setUrl(url); | 116 | doc.setUrl(url); | ||
116 | 117 | | |||
117 | for (const QByteArray& term: terms) { | 118 | for (const QByteArray& term: terms) { | ||
118 | doc.addTerm(term); | 119 | doc.addTerm(term); | ||
119 | } | 120 | } | ||
120 | for (const QByteArray& term: fileNameTerms) { | 121 | for (const QByteArray& term: fileNameTerms) { | ||
121 | doc.addFileNameTerm(term); | 122 | doc.addFileNameTerm(term); | ||
122 | } | 123 | } | ||
123 | for (const QByteArray& term: xattrTerms) { | 124 | for (const QByteArray& term: xattrTerms) { | ||
124 | doc.addXattrTerm(term); | 125 | doc.addXattrTerm(term); | ||
125 | } | 126 | } | ||
126 | doc.setMTime(mtime); | 127 | doc.setMTime(mtime); | ||
127 | doc.setCTime(ctime); | 128 | doc.setCTime(ctime); | ||
128 | 129 | | |||
129 | return doc; | 130 | return doc; | ||
130 | } | 131 | } | ||
131 | 132 | | |||
132 | void WriteTransactionTest::testAddDocumentTwoDocuments() | 133 | void WriteTransactionTest::testAddDocumentTwoDocuments() | ||
133 | { | 134 | { | ||
134 | const QByteArray url1(dir->path().toUtf8() + "/file1"); | 135 | const QString url1(dir->path() + "/file1"); | ||
135 | const QByteArray url2(dir->path().toUtf8() + "/file2"); | 136 | const QString url2(dir->path() + "/file2"); | ||
136 | touchFile(url1); | 137 | touchFile(url1); | ||
137 | touchFile(url2); | 138 | touchFile(url2); | ||
138 | 139 | | |||
139 | Document doc1 = createDocument(url1, 5, 1, {"a", "abc", "dab"}, {"file1"}, {}); | 140 | Document doc1 = createDocument(url1, 5, 1, {"a", "abc", "dab"}, {"file1"}, {}); | ||
140 | Document doc2 = createDocument(url2, 6, 2, {"a", "abcd", "dab"}, {"file2"}, {}); | 141 | Document doc2 = createDocument(url2, 6, 2, {"a", "abcd", "dab"}, {"file2"}, {}); | ||
141 | 142 | | |||
142 | { | 143 | { | ||
143 | Transaction tr(db, Transaction::ReadWrite); | 144 | Transaction tr(db, Transaction::ReadWrite); | ||
Show All 17 Lines | |||||
161 | state.mtimeDb = {{5, id1}, {6, id2}}; | 162 | state.mtimeDb = {{5, id1}, {6, id2}}; | ||
162 | 163 | | |||
163 | DBState actualState = DBState::fromTransaction(&tr); | 164 | DBState actualState = DBState::fromTransaction(&tr); | ||
164 | QVERIFY(DBState::debugCompare(actualState, state)); | 165 | QVERIFY(DBState::debugCompare(actualState, state)); | ||
165 | } | 166 | } | ||
166 | 167 | | |||
167 | void WriteTransactionTest::testAddAndRemoveOneDocument() | 168 | void WriteTransactionTest::testAddAndRemoveOneDocument() | ||
168 | { | 169 | { | ||
169 | const QByteArray url1(dir->path().toUtf8() + "/file1"); | 170 | const QString url1(dir->path() + "/file1"); | ||
170 | touchFile(url1); | 171 | touchFile(url1); | ||
171 | 172 | | |||
172 | Document doc1 = createDocument(url1, 5, 1, {"a", "abc", "dab"}, {"file1"}, {}); | 173 | Document doc1 = createDocument(url1, 5, 1, {"a", "abc", "dab"}, {"file1"}, {}); | ||
173 | 174 | | |||
174 | { | 175 | { | ||
175 | Transaction tr(db, Transaction::ReadWrite); | 176 | Transaction tr(db, Transaction::ReadWrite); | ||
176 | tr.addDocument(doc1); | 177 | tr.addDocument(doc1); | ||
177 | tr.commit(); | 178 | tr.commit(); | ||
178 | } | 179 | } | ||
179 | { | 180 | { | ||
180 | Transaction tr(db, Transaction::ReadWrite); | 181 | Transaction tr(db, Transaction::ReadWrite); | ||
181 | tr.removeDocument(doc1.id()); | 182 | tr.removeDocument(doc1.id()); | ||
182 | tr.commit(); | 183 | tr.commit(); | ||
183 | } | 184 | } | ||
184 | 185 | | |||
185 | Transaction tr(db, Transaction::ReadOnly); | 186 | Transaction tr(db, Transaction::ReadOnly); | ||
186 | DBState actualState = DBState::fromTransaction(&tr); | 187 | DBState actualState = DBState::fromTransaction(&tr); | ||
187 | QVERIFY(DBState::debugCompare(actualState, DBState())); | 188 | QVERIFY(DBState::debugCompare(actualState, DBState())); | ||
188 | } | 189 | } | ||
189 | 190 | | |||
190 | void WriteTransactionTest::testAddAndReplaceOneDocument() | 191 | void WriteTransactionTest::testAddAndReplaceOneDocument() | ||
191 | { | 192 | { | ||
192 | const QByteArray url1(dir->path().toUtf8() + "/file1"); | 193 | const QString url1(dir->path() + "/file1"); | ||
193 | touchFile(url1); | 194 | touchFile(url1); | ||
194 | 195 | | |||
195 | Document doc1 = createDocument(url1, 5, 1, {"a", "abc", "dab"}, {"file1"}, {}); | 196 | Document doc1 = createDocument(url1, 5, 1, {"a", "abc", "dab"}, {"file1"}, {}); | ||
196 | Document doc2 = createDocument(url1, 6, 2, {"a", "abc", "xxx"}, {"file1", "yyy"}, {}); | 197 | Document doc2 = createDocument(url1, 6, 2, {"a", "abc", "xxx"}, {"file1", "yyy"}, {}); | ||
197 | quint64 id = doc1.id(); | 198 | quint64 id = doc1.id(); | ||
198 | doc2.setId(id); | 199 | doc2.setId(id); | ||
199 | 200 | | |||
200 | { | 201 | { | ||
Show All 31 Lines | |||||
232 | 233 | | |||
233 | Transaction tr(db, Transaction::ReadOnly); | 234 | Transaction tr(db, Transaction::ReadOnly); | ||
234 | DBState actualState = DBState::fromTransaction(&tr); | 235 | DBState actualState = DBState::fromTransaction(&tr); | ||
235 | QVERIFY(DBState::debugCompare(actualState, state)); | 236 | QVERIFY(DBState::debugCompare(actualState, state)); | ||
236 | } | 237 | } | ||
237 | 238 | | |||
238 | void WriteTransactionTest::testRemoveRecursively() | 239 | void WriteTransactionTest::testRemoveRecursively() | ||
239 | { | 240 | { | ||
240 | QByteArray path = dir->path().toUtf8(); | 241 | const QString path = dir->path(); | ||
242 | const QString url1(path + "/file1"); | ||||
243 | const QString dirPath(path + "/dir"); | ||||
244 | const QString url2(dirPath + "/file1"); | ||||
241 | 245 | | |||
242 | const QByteArray url1(path + "/file1"); | | |||
243 | touchFile(url1); | 246 | touchFile(url1); | ||
244 | const QByteArray dirPath(path + "/dir"); | 247 | QDir().mkpath(dirPath); | ||
245 | QDir().mkpath(QString::fromUtf8(dirPath)); | | |||
246 | const QByteArray url2(dirPath + "/file1"); | | |||
247 | touchFile(url2); | 248 | touchFile(url2); | ||
248 | 249 | | |||
249 | Document doc1 = createDocument(url1, 5, 1, {"a", "abc", "dab"}, {"file1"}, {}); | 250 | Document doc1 = createDocument(url1, 5, 1, {"a", "abc", "dab"}, {"file1"}, {}); | ||
250 | Document doc2 = createDocument(url2, 5, 1, {"a", "abc", "dab"}, {"file1"}, {}); | 251 | Document doc2 = createDocument(url2, 5, 1, {"a", "abc", "dab"}, {"file1"}, {}); | ||
251 | Document doc3 = createDocument(dirPath, 5, 1, {"a"}, {"dir"}, {}); | 252 | Document doc3 = createDocument(dirPath, 5, 1, {"a"}, {"dir"}, {}); | ||
252 | 253 | | |||
253 | { | 254 | { | ||
254 | Transaction tr(db, Transaction::ReadWrite); | 255 | Transaction tr(db, Transaction::ReadWrite); | ||
Show All 10 Lines | |||||
265 | 266 | | |||
266 | Transaction tr(db, Transaction::ReadOnly); | 267 | Transaction tr(db, Transaction::ReadOnly); | ||
267 | DBState actualState = DBState::fromTransaction(&tr); | 268 | DBState actualState = DBState::fromTransaction(&tr); | ||
268 | QVERIFY(DBState::debugCompare(actualState, DBState())); | 269 | QVERIFY(DBState::debugCompare(actualState, DBState())); | ||
269 | } | 270 | } | ||
270 | 271 | | |||
271 | void WriteTransactionTest::testDocumentId() | 272 | void WriteTransactionTest::testDocumentId() | ||
272 | { | 273 | { | ||
273 | const QByteArray url1(dir->path().toUtf8() + "/file1"); | 274 | const QString url1(dir->path() + "/file1"); | ||
274 | touchFile(url1); | 275 | touchFile(url1); | ||
275 | 276 | | |||
276 | Document doc1 = createDocument(url1, 5, 1, {"a", "abc", "dab"}, {"file1"}, {}); | 277 | Document doc1 = createDocument(url1, 5, 1, {"a", "abc", "dab"}, {"file1"}, {}); | ||
277 | 278 | | |||
278 | { | 279 | { | ||
279 | Transaction tr(db, Transaction::ReadWrite); | 280 | Transaction tr(db, Transaction::ReadWrite); | ||
280 | tr.addDocument(doc1); | 281 | tr.addDocument(doc1); | ||
281 | tr.commit(); | 282 | tr.commit(); | ||
282 | } | 283 | } | ||
283 | 284 | | |||
284 | Transaction tr(db, Transaction::ReadOnly); | 285 | Transaction tr(db, Transaction::ReadOnly); | ||
285 | QCOMPARE(tr.documentId(url1), doc1.id()); | 286 | QCOMPARE(tr.documentId(QFile::encodeName(url1)), doc1.id()); | ||
286 | } | 287 | } | ||
287 | 288 | | |||
288 | void WriteTransactionTest::testTermPositions() | 289 | void WriteTransactionTest::testTermPositions() | ||
289 | { | 290 | { | ||
290 | const QByteArray url1(dir->path().toUtf8() + "/file1"); | 291 | const QString url1(dir->path() + "/file1"); | ||
292 | const QString url2(dir->path() + "/file2"); | ||||
293 | const QString url3(dir->path() + "/file3"); | ||||
291 | touchFile(url1); | 294 | touchFile(url1); | ||
292 | const QByteArray url2(dir->path().toUtf8() + "/file2"); | | |||
293 | touchFile(url2); | 295 | touchFile(url2); | ||
294 | const QByteArray url3(dir->path().toUtf8() + "/file3"); | | |||
295 | touchFile(url3); | 296 | touchFile(url3); | ||
296 | 297 | | |||
297 | Document doc1 = createDocument(url1, 5, 1, {"a", "abc", "dab"}, {"file1"}, {}); | 298 | Document doc1 = createDocument(url1, 5, 1, {"a", "abc", "dab"}, {"file1"}, {}); | ||
298 | quint64 id1 = doc1.id(); | 299 | quint64 id1 = doc1.id(); | ||
299 | Document doc2 = createDocument(url2, 5, 2, {"a", "abcd"}, {"file2"}, {}); | 300 | Document doc2 = createDocument(url2, 5, 2, {"a", "abcd"}, {"file2"}, {}); | ||
300 | quint64 id2 = doc2.id(); | 301 | quint64 id2 = doc2.id(); | ||
301 | Document doc3 = createDocument(url3, 6, 3, {"dab"}, {"file3"}, {}); | 302 | Document doc3 = createDocument(url3, 6, 3, {"dab"}, {"file3"}, {}); | ||
302 | quint64 id3 = doc3.id(); | 303 | quint64 id3 = doc3.id(); | ||
▲ Show 20 Lines • Show All 90 Lines • ▼ Show 20 Line(s) | 393 | { | |||
393 | Transaction tr(db, Transaction::ReadOnly); | 394 | Transaction tr(db, Transaction::ReadOnly); | ||
394 | DBState actualState = DBState::fromTransaction(&tr); | 395 | DBState actualState = DBState::fromTransaction(&tr); | ||
395 | QVERIFY(DBState::debugCompare(actualState, state)); | 396 | QVERIFY(DBState::debugCompare(actualState, state)); | ||
396 | } | 397 | } | ||
397 | } | 398 | } | ||
398 | 399 | | |||
399 | void WriteTransactionTest::testIdempotentDocumentChange() | 400 | void WriteTransactionTest::testIdempotentDocumentChange() | ||
400 | { | 401 | { | ||
401 | const QByteArray url1(dir->path().toUtf8() + "/file1"); | 402 | const QString url1(dir->path() + "/file1"); | ||
402 | touchFile(url1); | 403 | touchFile(url1); | ||
403 | 404 | | |||
404 | Document doc1 = createDocument(url1, 5, 1, {"a", "abc", "dab"}, {"file1"}, {}); | 405 | Document doc1 = createDocument(url1, 5, 1, {"a", "abc", "dab"}, {"file1"}, {}); | ||
405 | Document doc2 = createDocument(url1, 5, 1, {"a", "abcd", "dab"}, {"file1"}, {}); | 406 | Document doc2 = createDocument(url1, 5, 1, {"a", "abcd", "dab"}, {"file1"}, {}); | ||
406 | quint64 id = doc1.id(); | 407 | quint64 id = doc1.id(); | ||
407 | 408 | | |||
408 | { | 409 | { | ||
409 | Transaction tr(db, Transaction::ReadWrite); | 410 | Transaction tr(db, Transaction::ReadWrite); | ||
Show All 40 Lines |