OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/macros.h" | 6 #include "base/macros.h" |
7 #include "base/run_loop.h" | 7 #include "base/run_loop.h" |
8 #include "components/filesystem/public/interfaces/directory.mojom.h" | 8 #include "components/filesystem/public/interfaces/directory.mojom.h" |
9 #include "components/filesystem/public/interfaces/file_system.mojom.h" | 9 #include "components/filesystem/public/interfaces/file_system.mojom.h" |
10 #include "components/filesystem/public/interfaces/types.mojom.h" | 10 #include "components/filesystem/public/interfaces/types.mojom.h" |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 void TearDown() override { | 119 void TearDown() override { |
120 leveldb_.reset(); | 120 leveldb_.reset(); |
121 files_.reset(); | 121 files_.reset(); |
122 ServiceTest::TearDown(); | 122 ServiceTest::TearDown(); |
123 } | 123 } |
124 | 124 |
125 // Note: This has an out parameter rather than returning the |DirectoryPtr|, | 125 // Note: This has an out parameter rather than returning the |DirectoryPtr|, |
126 // since |ASSERT_...()| doesn't work with return values. | 126 // since |ASSERT_...()| doesn't work with return values. |
127 void GetTempDirectory(filesystem::mojom::DirectoryPtr* directory) { | 127 void GetTempDirectory(filesystem::mojom::DirectoryPtr* directory) { |
128 FileError error = FileError::FAILED; | 128 FileError error = FileError::FAILED; |
129 bool handled = files()->OpenTempDirectory(GetProxy(directory), &error); | 129 bool handled = files()->OpenTempDirectory(MakeRequest(directory), &error); |
130 ASSERT_TRUE(handled); | 130 ASSERT_TRUE(handled); |
131 ASSERT_EQ(FileError::OK, error); | 131 ASSERT_EQ(FileError::OK, error); |
132 } | 132 } |
133 | 133 |
134 filesystem::mojom::FileSystemPtr& files() { return files_; } | 134 filesystem::mojom::FileSystemPtr& files() { return files_; } |
135 mojom::LevelDBServicePtr& leveldb() { return leveldb_; } | 135 mojom::LevelDBServicePtr& leveldb() { return leveldb_; } |
136 | 136 |
137 private: | 137 private: |
138 filesystem::mojom::FileSystemPtr files_; | 138 filesystem::mojom::FileSystemPtr files_; |
139 mojom::LevelDBServicePtr leveldb_; | 139 mojom::LevelDBServicePtr leveldb_; |
140 | 140 |
141 DISALLOW_COPY_AND_ASSIGN(LevelDBServiceTest); | 141 DISALLOW_COPY_AND_ASSIGN(LevelDBServiceTest); |
142 }; | 142 }; |
143 | 143 |
144 TEST_F(LevelDBServiceTest, Basic) { | 144 TEST_F(LevelDBServiceTest, Basic) { |
145 mojom::DatabaseError error; | 145 mojom::DatabaseError error; |
146 mojom::LevelDBDatabasePtr database; | 146 mojom::LevelDBDatabasePtr database; |
147 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); | 147 LevelDBSyncOpenInMemory(leveldb().get(), MakeRequest(&database), &error); |
148 EXPECT_EQ(mojom::DatabaseError::OK, error); | 148 EXPECT_EQ(mojom::DatabaseError::OK, error); |
149 | 149 |
150 // Write a key to the database. | 150 // Write a key to the database. |
151 error = mojom::DatabaseError::INVALID_ARGUMENT; | 151 error = mojom::DatabaseError::INVALID_ARGUMENT; |
152 DatabaseSyncPut(database.get(), "key", "value", &error); | 152 DatabaseSyncPut(database.get(), "key", "value", &error); |
153 EXPECT_EQ(mojom::DatabaseError::OK, error); | 153 EXPECT_EQ(mojom::DatabaseError::OK, error); |
154 | 154 |
155 // Read the key back from the database. | 155 // Read the key back from the database. |
156 error = mojom::DatabaseError::INVALID_ARGUMENT; | 156 error = mojom::DatabaseError::INVALID_ARGUMENT; |
157 std::vector<uint8_t> value; | 157 std::vector<uint8_t> value; |
(...skipping 13 matching lines...) Expand all Loading... |
171 error = mojom::DatabaseError::INVALID_ARGUMENT; | 171 error = mojom::DatabaseError::INVALID_ARGUMENT; |
172 value.clear(); | 172 value.clear(); |
173 DatabaseSyncGet(database.get(), "key", &error, &value); | 173 DatabaseSyncGet(database.get(), "key", &error, &value); |
174 EXPECT_EQ(mojom::DatabaseError::NOT_FOUND, error); | 174 EXPECT_EQ(mojom::DatabaseError::NOT_FOUND, error); |
175 EXPECT_EQ("", Uint8VectorToStdString(value)); | 175 EXPECT_EQ("", Uint8VectorToStdString(value)); |
176 } | 176 } |
177 | 177 |
178 TEST_F(LevelDBServiceTest, WriteBatch) { | 178 TEST_F(LevelDBServiceTest, WriteBatch) { |
179 mojom::DatabaseError error; | 179 mojom::DatabaseError error; |
180 mojom::LevelDBDatabasePtr database; | 180 mojom::LevelDBDatabasePtr database; |
181 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); | 181 LevelDBSyncOpenInMemory(leveldb().get(), MakeRequest(&database), &error); |
182 EXPECT_EQ(mojom::DatabaseError::OK, error); | 182 EXPECT_EQ(mojom::DatabaseError::OK, error); |
183 | 183 |
184 // Write a key to the database. | 184 // Write a key to the database. |
185 DatabaseSyncPut(database.get(), "key", "value", &error); | 185 DatabaseSyncPut(database.get(), "key", "value", &error); |
186 EXPECT_EQ(mojom::DatabaseError::OK, error); | 186 EXPECT_EQ(mojom::DatabaseError::OK, error); |
187 | 187 |
188 // Create a batched operation which both deletes "key" and adds another write. | 188 // Create a batched operation which both deletes "key" and adds another write. |
189 std::vector<mojom::BatchedOperationPtr> operations; | 189 std::vector<mojom::BatchedOperationPtr> operations; |
190 mojom::BatchedOperationPtr item = mojom::BatchedOperation::New(); | 190 mojom::BatchedOperationPtr item = mojom::BatchedOperation::New(); |
191 item->type = mojom::BatchOperationType::DELETE_KEY; | 191 item->type = mojom::BatchOperationType::DELETE_KEY; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 } | 250 } |
251 | 251 |
252 TEST_F(LevelDBServiceTest, Reconnect) { | 252 TEST_F(LevelDBServiceTest, Reconnect) { |
253 mojom::DatabaseError error; | 253 mojom::DatabaseError error; |
254 | 254 |
255 filesystem::mojom::DirectoryPtr temp_directory; | 255 filesystem::mojom::DirectoryPtr temp_directory; |
256 GetTempDirectory(&temp_directory); | 256 GetTempDirectory(&temp_directory); |
257 | 257 |
258 { | 258 { |
259 filesystem::mojom::DirectoryPtr directory; | 259 filesystem::mojom::DirectoryPtr directory; |
260 temp_directory->Clone(GetProxy(&directory)); | 260 temp_directory->Clone(MakeRequest(&directory)); |
261 | 261 |
262 mojom::LevelDBDatabasePtr database; | 262 mojom::LevelDBDatabasePtr database; |
263 leveldb::mojom::OpenOptionsPtr options = leveldb::mojom::OpenOptions::New(); | 263 leveldb::mojom::OpenOptionsPtr options = leveldb::mojom::OpenOptions::New(); |
264 options->error_if_exists = true; | 264 options->error_if_exists = true; |
265 options->create_if_missing = true; | 265 options->create_if_missing = true; |
266 base::RunLoop run_loop; | 266 base::RunLoop run_loop; |
267 leveldb()->OpenWithOptions(std::move(options), std::move(directory), "test", | 267 leveldb()->OpenWithOptions(std::move(options), std::move(directory), "test", |
268 GetProxy(&database), | 268 MakeRequest(&database), |
269 Capture(&error, run_loop.QuitClosure())); | 269 Capture(&error, run_loop.QuitClosure())); |
270 run_loop.Run(); | 270 run_loop.Run(); |
271 EXPECT_EQ(mojom::DatabaseError::OK, error); | 271 EXPECT_EQ(mojom::DatabaseError::OK, error); |
272 | 272 |
273 // Write a key to the database. | 273 // Write a key to the database. |
274 error = mojom::DatabaseError::INVALID_ARGUMENT; | 274 error = mojom::DatabaseError::INVALID_ARGUMENT; |
275 DatabaseSyncPut(database.get(), "key", "value", &error); | 275 DatabaseSyncPut(database.get(), "key", "value", &error); |
276 EXPECT_EQ(mojom::DatabaseError::OK, error); | 276 EXPECT_EQ(mojom::DatabaseError::OK, error); |
277 | 277 |
278 // The database should go out of scope here. | 278 // The database should go out of scope here. |
279 } | 279 } |
280 | 280 |
281 { | 281 { |
282 filesystem::mojom::DirectoryPtr directory; | 282 filesystem::mojom::DirectoryPtr directory; |
283 temp_directory->Clone(GetProxy(&directory)); | 283 temp_directory->Clone(MakeRequest(&directory)); |
284 | 284 |
285 // Reconnect to the database. | 285 // Reconnect to the database. |
286 mojom::LevelDBDatabasePtr database; | 286 mojom::LevelDBDatabasePtr database; |
287 base::RunLoop run_loop; | 287 base::RunLoop run_loop; |
288 leveldb()->Open(std::move(directory), "test", GetProxy(&database), | 288 leveldb()->Open(std::move(directory), "test", MakeRequest(&database), |
289 Capture(&error, run_loop.QuitClosure())); | 289 Capture(&error, run_loop.QuitClosure())); |
290 run_loop.Run(); | 290 run_loop.Run(); |
291 EXPECT_EQ(mojom::DatabaseError::OK, error); | 291 EXPECT_EQ(mojom::DatabaseError::OK, error); |
292 | 292 |
293 // We should still be able to read the key back from the database. | 293 // We should still be able to read the key back from the database. |
294 error = mojom::DatabaseError::INVALID_ARGUMENT; | 294 error = mojom::DatabaseError::INVALID_ARGUMENT; |
295 std::vector<uint8_t> value; | 295 std::vector<uint8_t> value; |
296 DatabaseSyncGet(database.get(), "key", &error, &value); | 296 DatabaseSyncGet(database.get(), "key", &error, &value); |
297 EXPECT_EQ(mojom::DatabaseError::OK, error); | 297 EXPECT_EQ(mojom::DatabaseError::OK, error); |
298 EXPECT_EQ("value", Uint8VectorToStdString(value)); | 298 EXPECT_EQ("value", Uint8VectorToStdString(value)); |
299 } | 299 } |
300 } | 300 } |
301 | 301 |
302 TEST_F(LevelDBServiceTest, GetSnapshotSimple) { | 302 TEST_F(LevelDBServiceTest, GetSnapshotSimple) { |
303 mojom::DatabaseError error; | 303 mojom::DatabaseError error; |
304 mojom::LevelDBDatabasePtr database; | 304 mojom::LevelDBDatabasePtr database; |
305 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); | 305 LevelDBSyncOpenInMemory(leveldb().get(), MakeRequest(&database), &error); |
306 EXPECT_EQ(mojom::DatabaseError::OK, error); | 306 EXPECT_EQ(mojom::DatabaseError::OK, error); |
307 | 307 |
308 base::UnguessableToken snapshot; | 308 base::UnguessableToken snapshot; |
309 base::RunLoop run_loop; | 309 base::RunLoop run_loop; |
310 database->GetSnapshot(CaptureConstRef(&snapshot, run_loop.QuitClosure())); | 310 database->GetSnapshot(CaptureConstRef(&snapshot, run_loop.QuitClosure())); |
311 run_loop.Run(); | 311 run_loop.Run(); |
312 EXPECT_FALSE(snapshot.is_empty()); | 312 EXPECT_FALSE(snapshot.is_empty()); |
313 } | 313 } |
314 | 314 |
315 TEST_F(LevelDBServiceTest, GetFromSnapshots) { | 315 TEST_F(LevelDBServiceTest, GetFromSnapshots) { |
316 mojom::DatabaseError error; | 316 mojom::DatabaseError error; |
317 mojom::LevelDBDatabasePtr database; | 317 mojom::LevelDBDatabasePtr database; |
318 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); | 318 LevelDBSyncOpenInMemory(leveldb().get(), MakeRequest(&database), &error); |
319 EXPECT_EQ(mojom::DatabaseError::OK, error); | 319 EXPECT_EQ(mojom::DatabaseError::OK, error); |
320 | 320 |
321 // Write a key to the database. | 321 // Write a key to the database. |
322 error = mojom::DatabaseError::INVALID_ARGUMENT; | 322 error = mojom::DatabaseError::INVALID_ARGUMENT; |
323 DatabaseSyncPut(database.get(), "key", "value", &error); | 323 DatabaseSyncPut(database.get(), "key", "value", &error); |
324 EXPECT_EQ(mojom::DatabaseError::OK, error); | 324 EXPECT_EQ(mojom::DatabaseError::OK, error); |
325 | 325 |
326 // Take a snapshot where key=value. | 326 // Take a snapshot where key=value. |
327 base::UnguessableToken key_value_snapshot; | 327 base::UnguessableToken key_value_snapshot; |
328 base::RunLoop run_loop; | 328 base::RunLoop run_loop; |
(...skipping 21 matching lines...) Expand all Loading... |
350 key_value_snapshot, StdStringToUint8Vector("key"), | 350 key_value_snapshot, StdStringToUint8Vector("key"), |
351 CaptureConstRef(&error, &value, run_loop2.QuitClosure())); | 351 CaptureConstRef(&error, &value, run_loop2.QuitClosure())); |
352 run_loop2.Run(); | 352 run_loop2.Run(); |
353 EXPECT_EQ(mojom::DatabaseError::OK, error); | 353 EXPECT_EQ(mojom::DatabaseError::OK, error); |
354 EXPECT_EQ("value", Uint8VectorToStdString(value)); | 354 EXPECT_EQ("value", Uint8VectorToStdString(value)); |
355 } | 355 } |
356 | 356 |
357 TEST_F(LevelDBServiceTest, InvalidArgumentOnInvalidSnapshot) { | 357 TEST_F(LevelDBServiceTest, InvalidArgumentOnInvalidSnapshot) { |
358 mojom::LevelDBDatabasePtr database; | 358 mojom::LevelDBDatabasePtr database; |
359 mojom::DatabaseError error = mojom::DatabaseError::INVALID_ARGUMENT; | 359 mojom::DatabaseError error = mojom::DatabaseError::INVALID_ARGUMENT; |
360 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); | 360 LevelDBSyncOpenInMemory(leveldb().get(), MakeRequest(&database), &error); |
361 EXPECT_EQ(mojom::DatabaseError::OK, error); | 361 EXPECT_EQ(mojom::DatabaseError::OK, error); |
362 | 362 |
363 base::UnguessableToken invalid_snapshot = base::UnguessableToken::Create(); | 363 base::UnguessableToken invalid_snapshot = base::UnguessableToken::Create(); |
364 | 364 |
365 error = mojom::DatabaseError::OK; | 365 error = mojom::DatabaseError::OK; |
366 std::vector<uint8_t> value; | 366 std::vector<uint8_t> value; |
367 base::RunLoop run_loop; | 367 base::RunLoop run_loop; |
368 database->GetFromSnapshot( | 368 database->GetFromSnapshot( |
369 invalid_snapshot, StdStringToUint8Vector("key"), | 369 invalid_snapshot, StdStringToUint8Vector("key"), |
370 CaptureConstRef(&error, &value, run_loop.QuitClosure())); | 370 CaptureConstRef(&error, &value, run_loop.QuitClosure())); |
371 run_loop.Run(); | 371 run_loop.Run(); |
372 EXPECT_EQ(mojom::DatabaseError::INVALID_ARGUMENT, error); | 372 EXPECT_EQ(mojom::DatabaseError::INVALID_ARGUMENT, error); |
373 } | 373 } |
374 | 374 |
375 TEST_F(LevelDBServiceTest, MemoryDBReadWrite) { | 375 TEST_F(LevelDBServiceTest, MemoryDBReadWrite) { |
376 mojom::LevelDBDatabasePtr database; | 376 mojom::LevelDBDatabasePtr database; |
377 mojom::DatabaseError error = mojom::DatabaseError::INVALID_ARGUMENT; | 377 mojom::DatabaseError error = mojom::DatabaseError::INVALID_ARGUMENT; |
378 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); | 378 LevelDBSyncOpenInMemory(leveldb().get(), MakeRequest(&database), &error); |
379 EXPECT_EQ(mojom::DatabaseError::OK, error); | 379 EXPECT_EQ(mojom::DatabaseError::OK, error); |
380 | 380 |
381 // Write a key to the database. | 381 // Write a key to the database. |
382 error = mojom::DatabaseError::INVALID_ARGUMENT; | 382 error = mojom::DatabaseError::INVALID_ARGUMENT; |
383 DatabaseSyncPut(database.get(), "key", "value", &error); | 383 DatabaseSyncPut(database.get(), "key", "value", &error); |
384 EXPECT_EQ(mojom::DatabaseError::OK, error); | 384 EXPECT_EQ(mojom::DatabaseError::OK, error); |
385 | 385 |
386 // Read the key back from the database. | 386 // Read the key back from the database. |
387 error = mojom::DatabaseError::INVALID_ARGUMENT; | 387 error = mojom::DatabaseError::INVALID_ARGUMENT; |
388 std::vector<uint8_t> value; | 388 std::vector<uint8_t> value; |
(...skipping 14 matching lines...) Expand all Loading... |
403 value.clear(); | 403 value.clear(); |
404 DatabaseSyncGet(database.get(), "key", &error, &value); | 404 DatabaseSyncGet(database.get(), "key", &error, &value); |
405 EXPECT_EQ(mojom::DatabaseError::NOT_FOUND, error); | 405 EXPECT_EQ(mojom::DatabaseError::NOT_FOUND, error); |
406 EXPECT_EQ("", Uint8VectorToStdString(value)); | 406 EXPECT_EQ("", Uint8VectorToStdString(value)); |
407 } | 407 } |
408 | 408 |
409 TEST_F(LevelDBServiceTest, Prefixed) { | 409 TEST_F(LevelDBServiceTest, Prefixed) { |
410 // Open an in memory database for speed. | 410 // Open an in memory database for speed. |
411 mojom::DatabaseError error = mojom::DatabaseError::INVALID_ARGUMENT; | 411 mojom::DatabaseError error = mojom::DatabaseError::INVALID_ARGUMENT; |
412 mojom::LevelDBDatabasePtr database; | 412 mojom::LevelDBDatabasePtr database; |
413 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); | 413 LevelDBSyncOpenInMemory(leveldb().get(), MakeRequest(&database), &error); |
414 EXPECT_EQ(mojom::DatabaseError::OK, error); | 414 EXPECT_EQ(mojom::DatabaseError::OK, error); |
415 | 415 |
416 const std::string prefix("prefix"); | 416 const std::string prefix("prefix"); |
417 std::vector<mojom::KeyValuePtr> key_values; | 417 std::vector<mojom::KeyValuePtr> key_values; |
418 | 418 |
419 // Completely empty database. | 419 // Completely empty database. |
420 error = mojom::DatabaseError::INVALID_ARGUMENT; | 420 error = mojom::DatabaseError::INVALID_ARGUMENT; |
421 DatabaseSyncGetPrefixed(database.get(), prefix, &error, &key_values); | 421 DatabaseSyncGetPrefixed(database.get(), prefix, &error, &key_values); |
422 EXPECT_EQ(mojom::DatabaseError::OK, error); | 422 EXPECT_EQ(mojom::DatabaseError::OK, error); |
423 EXPECT_TRUE(key_values.empty()); | 423 EXPECT_TRUE(key_values.empty()); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
497 EXPECT_EQ(mojom::DatabaseError::OK, error); | 497 EXPECT_EQ(mojom::DatabaseError::OK, error); |
498 error = mojom::DatabaseError::INVALID_ARGUMENT; | 498 error = mojom::DatabaseError::INVALID_ARGUMENT; |
499 key_values.clear(); | 499 key_values.clear(); |
500 DatabaseSyncGetPrefixed(database.get(), prefix, &error, &key_values); | 500 DatabaseSyncGetPrefixed(database.get(), prefix, &error, &key_values); |
501 EXPECT_EQ(mojom::DatabaseError::OK, error); | 501 EXPECT_EQ(mojom::DatabaseError::OK, error); |
502 EXPECT_TRUE(key_values.empty()); | 502 EXPECT_TRUE(key_values.empty()); |
503 } | 503 } |
504 | 504 |
505 } // namespace | 505 } // namespace |
506 } // namespace leveldb | 506 } // namespace leveldb |
OLD | NEW |