| 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 |