Chromium Code Reviews| 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" |
| 11 #include "components/leveldb/public/cpp/util.h" | |
| 11 #include "components/leveldb/public/interfaces/leveldb.mojom.h" | 12 #include "components/leveldb/public/interfaces/leveldb.mojom.h" |
| 12 #include "mojo/common/common_type_converters.h" | |
| 13 #include "mojo/public/cpp/bindings/binding_set.h" | 13 #include "mojo/public/cpp/bindings/binding_set.h" |
| 14 #include "services/shell/public/cpp/service_context.h" | 14 #include "services/shell/public/cpp/service_context.h" |
| 15 #include "services/shell/public/cpp/service_test.h" | 15 #include "services/shell/public/cpp/service_test.h" |
| 16 | 16 |
| 17 using filesystem::mojom::FileError; | 17 using filesystem::mojom::FileError; |
| 18 | 18 |
| 19 namespace leveldb { | 19 namespace leveldb { |
| 20 namespace { | 20 namespace { |
| 21 | 21 |
| 22 template <typename... Args> void IgnoreAllArgs(Args&&...) {} | 22 template <typename... Args> void IgnoreAllArgs(Args&&...) {} |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 34 return base::Bind(&DoCaptures<T1>, t1, quit_closure); | 34 return base::Bind(&DoCaptures<T1>, t1, quit_closure); |
| 35 } | 35 } |
| 36 | 36 |
| 37 template <typename T1, typename T2> | 37 template <typename T1, typename T2> |
| 38 base::Callback<void(T1, T2)> Capture(T1* t1, | 38 base::Callback<void(T1, T2)> Capture(T1* t1, |
| 39 T2* t2, | 39 T2* t2, |
| 40 const base::Closure& quit_closure) { | 40 const base::Closure& quit_closure) { |
| 41 return base::Bind(&DoCaptures<T1, T2>, t1, t2, quit_closure); | 41 return base::Bind(&DoCaptures<T1, T2>, t1, t2, quit_closure); |
| 42 } | 42 } |
| 43 | 43 |
| 44 template <typename T1, typename T2> | |
| 45 void DoCapturesConstRef(T1* out_t1, | |
|
yzshen1
2016/08/26 16:58:40
I guess you could reuse the template above by chan
leonhsl(Using Gerrit)
2016/08/29 06:36:17
Done and thanks! I was not aware of existence of s
| |
| 46 T2* out_t2, | |
| 47 const base::Closure& quit_closure, | |
| 48 T1 in_t1, | |
| 49 const T2& in_t2) { | |
| 50 *out_t1 = in_t1; | |
| 51 *out_t2 = in_t2; | |
| 52 quit_closure.Run(); | |
| 53 } | |
| 54 | |
| 55 template <typename T1, typename T2> | |
| 56 base::Callback<void(T1, const T2&)> | |
| 57 CaptureConstRef(T1* t1, T2* t2, const base::Closure& quit_closure) { | |
| 58 return base::Bind(&DoCapturesConstRef<T1, T2>, t1, t2, quit_closure); | |
| 59 } | |
| 60 | |
| 44 void DatabaseSyncPut(mojom::LevelDBDatabase* database, | 61 void DatabaseSyncPut(mojom::LevelDBDatabase* database, |
| 45 mojo::Array<uint8_t> key, | 62 const std::string& key, |
| 46 mojo::Array<uint8_t> value, | 63 const std::string& value, |
| 47 mojom::DatabaseError* out_error) { | 64 mojom::DatabaseError* out_error) { |
| 48 base::RunLoop run_loop; | 65 base::RunLoop run_loop; |
| 49 database->Put(std::move(key), std::move(value), | 66 database->Put(StdStringToUint8Vector(key), StdStringToUint8Vector(value), |
| 50 Capture(out_error, run_loop.QuitClosure())); | 67 Capture(out_error, run_loop.QuitClosure())); |
| 51 run_loop.Run(); | 68 run_loop.Run(); |
| 52 } | 69 } |
| 53 | 70 |
| 54 void DatabaseSyncGet(mojom::LevelDBDatabase* database, | 71 void DatabaseSyncGet(mojom::LevelDBDatabase* database, |
| 55 mojo::Array<uint8_t> key, | 72 const std::string& key, |
| 56 mojom::DatabaseError* out_error, | 73 mojom::DatabaseError* out_error, |
| 57 mojo::Array<uint8_t>* out_value) { | 74 std::vector<uint8_t>* out_value) { |
| 58 base::RunLoop run_loop; | 75 base::RunLoop run_loop; |
| 59 database->Get(std::move(key), | 76 database->Get(StdStringToUint8Vector(key), |
| 60 Capture(out_error, out_value, run_loop.QuitClosure())); | 77 CaptureConstRef(out_error, out_value, run_loop.QuitClosure())); |
| 61 run_loop.Run(); | 78 run_loop.Run(); |
| 62 } | 79 } |
| 63 | 80 |
| 64 void DatabaseSyncGetPrefixed(mojom::LevelDBDatabase* database, | 81 void DatabaseSyncGetPrefixed(mojom::LevelDBDatabase* database, |
| 65 mojo::Array<uint8_t> key_prefix, | 82 const std::string& key_prefix, |
| 66 mojom::DatabaseError* out_error, | 83 mojom::DatabaseError* out_error, |
| 67 mojo::Array<mojom::KeyValuePtr>* out_key_values) { | 84 std::vector<mojom::KeyValuePtr>* out_key_values) { |
| 68 base::RunLoop run_loop; | 85 base::RunLoop run_loop; |
| 69 database->GetPrefixed( | 86 database->GetPrefixed( |
| 70 std::move(key_prefix), | 87 StdStringToUint8Vector(key_prefix), |
| 71 Capture(out_error, out_key_values, run_loop.QuitClosure())); | 88 Capture(out_error, out_key_values, run_loop.QuitClosure())); |
| 72 run_loop.Run(); | 89 run_loop.Run(); |
| 73 } | 90 } |
| 74 | 91 |
| 75 void DatabaseSyncDeletePrefixed(mojom::LevelDBDatabase* database, | 92 void DatabaseSyncDeletePrefixed(mojom::LevelDBDatabase* database, |
| 76 mojo::Array<uint8_t> key_prefix, | 93 const std::string& key_prefix, |
| 77 mojom::DatabaseError* out_error) { | 94 mojom::DatabaseError* out_error) { |
| 78 base::RunLoop run_loop; | 95 base::RunLoop run_loop; |
| 79 database->DeletePrefixed(std::move(key_prefix), | 96 database->DeletePrefixed(StdStringToUint8Vector(key_prefix), |
| 80 Capture(out_error, run_loop.QuitClosure())); | 97 Capture(out_error, run_loop.QuitClosure())); |
| 81 run_loop.Run(); | 98 run_loop.Run(); |
| 82 } | 99 } |
| 83 | 100 |
| 84 void LevelDBSyncOpenInMemory(mojom::LevelDBService* leveldb, | 101 void LevelDBSyncOpenInMemory(mojom::LevelDBService* leveldb, |
| 85 mojom::LevelDBDatabaseRequest database, | 102 mojom::LevelDBDatabaseRequest database, |
| 86 mojom::DatabaseError* out_error) { | 103 mojom::DatabaseError* out_error) { |
| 87 base::RunLoop run_loop; | 104 base::RunLoop run_loop; |
| 88 leveldb->OpenInMemory(std::move(database), | 105 leveldb->OpenInMemory(std::move(database), |
| 89 Capture(out_error, run_loop.QuitClosure())); | 106 Capture(out_error, run_loop.QuitClosure())); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 129 }; | 146 }; |
| 130 | 147 |
| 131 TEST_F(LevelDBServiceTest, Basic) { | 148 TEST_F(LevelDBServiceTest, Basic) { |
| 132 mojom::DatabaseError error; | 149 mojom::DatabaseError error; |
| 133 mojom::LevelDBDatabasePtr database; | 150 mojom::LevelDBDatabasePtr database; |
| 134 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); | 151 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); |
| 135 EXPECT_EQ(mojom::DatabaseError::OK, error); | 152 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 136 | 153 |
| 137 // Write a key to the database. | 154 // Write a key to the database. |
| 138 error = mojom::DatabaseError::INVALID_ARGUMENT; | 155 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 139 DatabaseSyncPut(database.get(), | 156 DatabaseSyncPut(database.get(), "key", "value", &error); |
| 140 mojo::Array<uint8_t>::From(std::string("key")), | |
| 141 mojo::Array<uint8_t>::From(std::string("value")), &error); | |
| 142 EXPECT_EQ(mojom::DatabaseError::OK, error); | 157 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 143 | 158 |
| 144 // Read the key back from the database. | 159 // Read the key back from the database. |
| 145 error = mojom::DatabaseError::INVALID_ARGUMENT; | 160 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 146 mojo::Array<uint8_t> value; | 161 std::vector<uint8_t> value; |
| 147 DatabaseSyncGet(database.get(), | 162 DatabaseSyncGet(database.get(), "key", &error, &value); |
| 148 mojo::Array<uint8_t>::From(std::string("key")), &error, | |
| 149 &value); | |
| 150 EXPECT_EQ(mojom::DatabaseError::OK, error); | 163 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 151 EXPECT_EQ("value", value.To<std::string>()); | 164 EXPECT_EQ("value", Uint8VectorToStdString(value)); |
| 152 | 165 |
| 153 // Delete the key from the database. | 166 // Delete the key from the database. |
| 154 error = mojom::DatabaseError::INVALID_ARGUMENT; | 167 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 155 base::RunLoop run_loop; | 168 base::RunLoop run_loop; |
| 156 database->Delete(mojo::Array<uint8_t>::From(std::string("key")), | 169 database->Delete(StdStringToUint8Vector("key"), |
| 157 Capture(&error, run_loop.QuitClosure())); | 170 Capture(&error, run_loop.QuitClosure())); |
| 158 run_loop.Run(); | 171 run_loop.Run(); |
| 159 EXPECT_EQ(mojom::DatabaseError::OK, error); | 172 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 160 | 173 |
| 161 // Read the key back from the database. | 174 // Read the key back from the database. |
| 162 error = mojom::DatabaseError::INVALID_ARGUMENT; | 175 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 163 value.SetToEmpty(); | 176 value.clear(); |
| 164 DatabaseSyncGet(database.get(), | 177 DatabaseSyncGet(database.get(), "key", &error, &value); |
| 165 mojo::Array<uint8_t>::From(std::string("key")), &error, | |
| 166 &value); | |
| 167 EXPECT_EQ(mojom::DatabaseError::NOT_FOUND, error); | 178 EXPECT_EQ(mojom::DatabaseError::NOT_FOUND, error); |
| 168 EXPECT_EQ("", value.To<std::string>()); | 179 EXPECT_EQ("", Uint8VectorToStdString(value)); |
| 169 } | 180 } |
| 170 | 181 |
| 171 TEST_F(LevelDBServiceTest, WriteBatch) { | 182 TEST_F(LevelDBServiceTest, WriteBatch) { |
| 172 mojom::DatabaseError error; | 183 mojom::DatabaseError error; |
| 173 mojom::LevelDBDatabasePtr database; | 184 mojom::LevelDBDatabasePtr database; |
| 174 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); | 185 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); |
| 175 EXPECT_EQ(mojom::DatabaseError::OK, error); | 186 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 176 | 187 |
| 177 // Write a key to the database. | 188 // Write a key to the database. |
| 178 DatabaseSyncPut(database.get(), | 189 DatabaseSyncPut(database.get(), "key", "value", &error); |
| 179 mojo::Array<uint8_t>::From(std::string("key")), | |
| 180 mojo::Array<uint8_t>::From(std::string("value")), &error); | |
| 181 EXPECT_EQ(mojom::DatabaseError::OK, error); | 190 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 182 | 191 |
| 183 // Create a batched operation which both deletes "key" and adds another write. | 192 // Create a batched operation which both deletes "key" and adds another write. |
| 184 mojo::Array<mojom::BatchedOperationPtr> operations; | 193 std::vector<mojom::BatchedOperationPtr> operations; |
| 185 mojom::BatchedOperationPtr item = mojom::BatchedOperation::New(); | 194 mojom::BatchedOperationPtr item = mojom::BatchedOperation::New(); |
| 186 item->type = mojom::BatchOperationType::DELETE_KEY; | 195 item->type = mojom::BatchOperationType::DELETE_KEY; |
| 187 item->key = mojo::Array<uint8_t>::From(std::string("key")); | 196 item->key = StdStringToUint8Vector("key"); |
| 188 operations.push_back(std::move(item)); | 197 operations.push_back(std::move(item)); |
| 189 | 198 |
| 190 item = mojom::BatchedOperation::New(); | 199 item = mojom::BatchedOperation::New(); |
| 191 item->type = mojom::BatchOperationType::PUT_KEY; | 200 item->type = mojom::BatchOperationType::PUT_KEY; |
| 192 item->key = mojo::Array<uint8_t>::From(std::string("other")); | 201 item->key = StdStringToUint8Vector("other"); |
| 193 item->value = mojo::Array<uint8_t>::From(std::string("more")); | 202 item->value = StdStringToUint8Vector("more"); |
| 194 operations.push_back(std::move(item)); | 203 operations.push_back(std::move(item)); |
| 195 | 204 |
| 196 base::RunLoop run_loop; | 205 base::RunLoop run_loop; |
| 197 database->Write(std::move(operations), | 206 database->Write(std::move(operations), |
| 198 Capture(&error, run_loop.QuitClosure())); | 207 Capture(&error, run_loop.QuitClosure())); |
| 199 run_loop.Run(); | 208 run_loop.Run(); |
| 200 EXPECT_EQ(mojom::DatabaseError::OK, error); | 209 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 201 | 210 |
| 202 // Reading "key" should be invalid now. | 211 // Reading "key" should be invalid now. |
| 203 error = mojom::DatabaseError::INVALID_ARGUMENT; | 212 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 204 mojo::Array<uint8_t> value; | 213 std::vector<uint8_t> value; |
| 205 DatabaseSyncGet(database.get(), | 214 DatabaseSyncGet(database.get(), "key", &error, &value); |
| 206 mojo::Array<uint8_t>::From(std::string("key")), &error, | |
| 207 &value); | |
| 208 EXPECT_EQ(mojom::DatabaseError::NOT_FOUND, error); | 215 EXPECT_EQ(mojom::DatabaseError::NOT_FOUND, error); |
| 209 EXPECT_EQ("", value.To<std::string>()); | 216 EXPECT_EQ("", Uint8VectorToStdString(value)); |
| 210 | 217 |
| 211 // Reading "other" should return "more" | 218 // Reading "other" should return "more" |
| 212 error = mojom::DatabaseError::INVALID_ARGUMENT; | 219 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 213 DatabaseSyncGet(database.get(), | 220 DatabaseSyncGet(database.get(), "other", &error, &value); |
| 214 mojo::Array<uint8_t>::From(std::string("other")), &error, | |
| 215 &value); | |
| 216 EXPECT_EQ(mojom::DatabaseError::OK, error); | 221 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 217 EXPECT_EQ("more", value.To<std::string>()); | 222 EXPECT_EQ("more", Uint8VectorToStdString(value)); |
| 218 | 223 |
| 219 // Write a some prefixed keys to the database. | 224 // Write a some prefixed keys to the database. |
| 220 DatabaseSyncPut(database.get(), | 225 DatabaseSyncPut(database.get(), "prefix-key1", "value", &error); |
| 221 mojo::Array<uint8_t>::From(std::string("prefix-key1")), | |
| 222 mojo::Array<uint8_t>::From(std::string("value")), &error); | |
| 223 EXPECT_EQ(mojom::DatabaseError::OK, error); | 226 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 224 DatabaseSyncPut(database.get(), | 227 DatabaseSyncPut(database.get(), "prefix-key2", "value", &error); |
| 225 mojo::Array<uint8_t>::From(std::string("prefix-key2")), | |
| 226 mojo::Array<uint8_t>::From(std::string("value")), &error); | |
| 227 EXPECT_EQ(mojom::DatabaseError::OK, error); | 228 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 228 | 229 |
| 229 // Create a batched operation to delete them. | 230 // Create a batched operation to delete them. |
| 230 operations.SetToEmpty(); | 231 operations.clear(); |
| 231 item = mojom::BatchedOperation::New(); | 232 item = mojom::BatchedOperation::New(); |
| 232 item->type = mojom::BatchOperationType::DELETE_PREFIXED_KEY; | 233 item->type = mojom::BatchOperationType::DELETE_PREFIXED_KEY; |
| 233 item->key = mojo::Array<uint8_t>::From(std::string("prefix")); | 234 item->key = StdStringToUint8Vector("prefix"); |
| 234 operations.push_back(std::move(item)); | 235 operations.push_back(std::move(item)); |
| 235 base::RunLoop run_loop2; | 236 base::RunLoop run_loop2; |
| 236 database->Write(std::move(operations), | 237 database->Write(std::move(operations), |
| 237 Capture(&error, run_loop2.QuitClosure())); | 238 Capture(&error, run_loop2.QuitClosure())); |
| 238 run_loop2.Run(); | 239 run_loop2.Run(); |
| 239 EXPECT_EQ(mojom::DatabaseError::OK, error); | 240 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 240 | 241 |
| 241 // Reading all "prefix" keys should be invalid now. | 242 // Reading all "prefix" keys should be invalid now. |
| 242 error = mojom::DatabaseError::INVALID_ARGUMENT; | 243 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 243 value = nullptr; | 244 value.clear(); |
| 244 DatabaseSyncGet(database.get(), | 245 DatabaseSyncGet(database.get(), "prefix-key1", &error, &value); |
| 245 mojo::Array<uint8_t>::From(std::string("prefix-key1")), | |
| 246 &error, &value); | |
| 247 EXPECT_EQ(mojom::DatabaseError::NOT_FOUND, error); | 246 EXPECT_EQ(mojom::DatabaseError::NOT_FOUND, error); |
| 248 EXPECT_EQ("", value.To<std::string>()); | 247 EXPECT_EQ("", Uint8VectorToStdString(value)); |
| 249 // Reading "key" should be invalid now. | 248 // Reading "key" should be invalid now. |
| 250 error = mojom::DatabaseError::INVALID_ARGUMENT; | 249 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 251 value = nullptr; | 250 value.clear(); |
| 252 DatabaseSyncGet(database.get(), | 251 DatabaseSyncGet(database.get(), "prefix-key2", &error, &value); |
| 253 mojo::Array<uint8_t>::From(std::string("prefix-key2")), | |
| 254 &error, &value); | |
| 255 EXPECT_EQ(mojom::DatabaseError::NOT_FOUND, error); | 252 EXPECT_EQ(mojom::DatabaseError::NOT_FOUND, error); |
| 256 EXPECT_EQ("", value.To<std::string>()); | 253 EXPECT_EQ("", Uint8VectorToStdString(value)); |
| 257 } | 254 } |
| 258 | 255 |
| 259 TEST_F(LevelDBServiceTest, Reconnect) { | 256 TEST_F(LevelDBServiceTest, Reconnect) { |
| 260 mojom::DatabaseError error; | 257 mojom::DatabaseError error; |
| 261 | 258 |
| 262 filesystem::mojom::DirectoryPtr temp_directory; | 259 filesystem::mojom::DirectoryPtr temp_directory; |
| 263 GetTempDirectory(&temp_directory); | 260 GetTempDirectory(&temp_directory); |
| 264 | 261 |
| 265 { | 262 { |
| 266 filesystem::mojom::DirectoryPtr directory; | 263 filesystem::mojom::DirectoryPtr directory; |
| 267 temp_directory->Clone(GetProxy(&directory)); | 264 temp_directory->Clone(GetProxy(&directory)); |
| 268 | 265 |
| 269 mojom::LevelDBDatabasePtr database; | 266 mojom::LevelDBDatabasePtr database; |
| 270 leveldb::mojom::OpenOptionsPtr options = leveldb::mojom::OpenOptions::New(); | 267 leveldb::mojom::OpenOptionsPtr options = leveldb::mojom::OpenOptions::New(); |
| 271 options->error_if_exists = true; | 268 options->error_if_exists = true; |
| 272 options->create_if_missing = true; | 269 options->create_if_missing = true; |
| 273 base::RunLoop run_loop; | 270 base::RunLoop run_loop; |
| 274 leveldb()->OpenWithOptions(std::move(options), std::move(directory), "test", | 271 leveldb()->OpenWithOptions(std::move(options), std::move(directory), "test", |
| 275 GetProxy(&database), | 272 GetProxy(&database), |
| 276 Capture(&error, run_loop.QuitClosure())); | 273 Capture(&error, run_loop.QuitClosure())); |
| 277 run_loop.Run(); | 274 run_loop.Run(); |
| 278 EXPECT_EQ(mojom::DatabaseError::OK, error); | 275 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 279 | 276 |
| 280 // Write a key to the database. | 277 // Write a key to the database. |
| 281 error = mojom::DatabaseError::INVALID_ARGUMENT; | 278 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 282 DatabaseSyncPut(database.get(), | 279 DatabaseSyncPut(database.get(), "key", "value", &error); |
| 283 mojo::Array<uint8_t>::From(std::string("key")), | |
| 284 mojo::Array<uint8_t>::From(std::string("value")), &error); | |
| 285 EXPECT_EQ(mojom::DatabaseError::OK, error); | 280 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 286 | 281 |
| 287 // The database should go out of scope here. | 282 // The database should go out of scope here. |
| 288 } | 283 } |
| 289 | 284 |
| 290 { | 285 { |
| 291 filesystem::mojom::DirectoryPtr directory; | 286 filesystem::mojom::DirectoryPtr directory; |
| 292 temp_directory->Clone(GetProxy(&directory)); | 287 temp_directory->Clone(GetProxy(&directory)); |
| 293 | 288 |
| 294 // Reconnect to the database. | 289 // Reconnect to the database. |
| 295 mojom::LevelDBDatabasePtr database; | 290 mojom::LevelDBDatabasePtr database; |
| 296 base::RunLoop run_loop; | 291 base::RunLoop run_loop; |
| 297 leveldb()->Open(std::move(directory), "test", GetProxy(&database), | 292 leveldb()->Open(std::move(directory), "test", GetProxy(&database), |
| 298 Capture(&error, run_loop.QuitClosure())); | 293 Capture(&error, run_loop.QuitClosure())); |
| 299 run_loop.Run(); | 294 run_loop.Run(); |
| 300 EXPECT_EQ(mojom::DatabaseError::OK, error); | 295 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 301 | 296 |
| 302 // We should still be able to read the key back from the database. | 297 // We should still be able to read the key back from the database. |
| 303 error = mojom::DatabaseError::INVALID_ARGUMENT; | 298 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 304 mojo::Array<uint8_t> value; | 299 std::vector<uint8_t> value; |
| 305 DatabaseSyncGet(database.get(), | 300 DatabaseSyncGet(database.get(), "key", &error, &value); |
| 306 mojo::Array<uint8_t>::From(std::string("key")), &error, | |
| 307 &value); | |
| 308 EXPECT_EQ(mojom::DatabaseError::OK, error); | 301 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 309 EXPECT_EQ("value", value.To<std::string>()); | 302 EXPECT_EQ("value", Uint8VectorToStdString(value)); |
| 310 } | 303 } |
| 311 } | 304 } |
| 312 | 305 |
| 313 TEST_F(LevelDBServiceTest, GetSnapshotSimple) { | 306 TEST_F(LevelDBServiceTest, GetSnapshotSimple) { |
| 314 mojom::DatabaseError error; | 307 mojom::DatabaseError error; |
| 315 mojom::LevelDBDatabasePtr database; | 308 mojom::LevelDBDatabasePtr database; |
| 316 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); | 309 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); |
| 317 EXPECT_EQ(mojom::DatabaseError::OK, error); | 310 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 318 | 311 |
| 319 uint64_t snapshot_id = 0; | 312 uint64_t snapshot_id = 0; |
| 320 base::RunLoop run_loop; | 313 base::RunLoop run_loop; |
| 321 database->GetSnapshot(Capture(&snapshot_id, run_loop.QuitClosure())); | 314 database->GetSnapshot(Capture(&snapshot_id, run_loop.QuitClosure())); |
| 322 run_loop.Run(); | 315 run_loop.Run(); |
| 323 EXPECT_NE(static_cast<uint64_t>(0), snapshot_id); | 316 EXPECT_NE(static_cast<uint64_t>(0), snapshot_id); |
| 324 } | 317 } |
| 325 | 318 |
| 326 TEST_F(LevelDBServiceTest, GetFromSnapshots) { | 319 TEST_F(LevelDBServiceTest, GetFromSnapshots) { |
| 327 mojom::DatabaseError error; | 320 mojom::DatabaseError error; |
| 328 mojom::LevelDBDatabasePtr database; | 321 mojom::LevelDBDatabasePtr database; |
| 329 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); | 322 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); |
| 330 EXPECT_EQ(mojom::DatabaseError::OK, error); | 323 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 331 | 324 |
| 332 // Write a key to the database. | 325 // Write a key to the database. |
| 333 error = mojom::DatabaseError::INVALID_ARGUMENT; | 326 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 334 DatabaseSyncPut(database.get(), | 327 DatabaseSyncPut(database.get(), "key", "value", &error); |
| 335 mojo::Array<uint8_t>::From(std::string("key")), | |
| 336 mojo::Array<uint8_t>::From(std::string("value")), &error); | |
| 337 EXPECT_EQ(mojom::DatabaseError::OK, error); | 328 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 338 | 329 |
| 339 // Take a snapshot where key=value. | 330 // Take a snapshot where key=value. |
| 340 uint64_t key_value_snapshot = 0; | 331 uint64_t key_value_snapshot = 0; |
| 341 base::RunLoop run_loop; | 332 base::RunLoop run_loop; |
| 342 database->GetSnapshot(Capture(&key_value_snapshot, run_loop.QuitClosure())); | 333 database->GetSnapshot(Capture(&key_value_snapshot, run_loop.QuitClosure())); |
| 343 run_loop.Run(); | 334 run_loop.Run(); |
| 344 | 335 |
| 345 // Change key to "yek". | 336 // Change key to "yek". |
| 346 error = mojom::DatabaseError::INVALID_ARGUMENT; | 337 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 347 DatabaseSyncPut(database.get(), | 338 DatabaseSyncPut(database.get(), "key", "yek", &error); |
| 348 mojo::Array<uint8_t>::From(std::string("key")), | |
| 349 mojo::Array<uint8_t>::From(std::string("yek")), &error); | |
| 350 EXPECT_EQ(mojom::DatabaseError::OK, error); | 339 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 351 | 340 |
| 352 // (Ensure this change is live on the database.) | 341 // (Ensure this change is live on the database.) |
| 353 error = mojom::DatabaseError::INVALID_ARGUMENT; | 342 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 354 mojo::Array<uint8_t> value; | 343 std::vector<uint8_t> value; |
| 355 DatabaseSyncGet(database.get(), | 344 DatabaseSyncGet(database.get(), "key", &error, &value); |
| 356 mojo::Array<uint8_t>::From(std::string("key")), &error, | |
| 357 &value); | |
| 358 EXPECT_EQ(mojom::DatabaseError::OK, error); | 345 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 359 EXPECT_EQ("yek", value.To<std::string>()); | 346 EXPECT_EQ("yek", Uint8VectorToStdString(value)); |
| 360 | 347 |
| 361 // But if we were to read from the snapshot, we'd still get value. | 348 // But if we were to read from the snapshot, we'd still get value. |
| 362 error = mojom::DatabaseError::INVALID_ARGUMENT; | 349 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 363 value.SetToEmpty(); | 350 value.clear(); |
| 364 base::RunLoop run_loop2; | 351 base::RunLoop run_loop2; |
| 365 database->GetFromSnapshot(key_value_snapshot, | 352 database->GetFromSnapshot( |
| 366 mojo::Array<uint8_t>::From(std::string("key")), | 353 key_value_snapshot, StdStringToUint8Vector("key"), |
| 367 Capture(&error, &value, run_loop2.QuitClosure())); | 354 CaptureConstRef(&error, &value, run_loop2.QuitClosure())); |
| 368 run_loop2.Run(); | 355 run_loop2.Run(); |
| 369 EXPECT_EQ(mojom::DatabaseError::OK, error); | 356 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 370 EXPECT_EQ("value", value.To<std::string>()); | 357 EXPECT_EQ("value", Uint8VectorToStdString(value)); |
| 371 } | 358 } |
| 372 | 359 |
| 373 TEST_F(LevelDBServiceTest, InvalidArgumentOnInvalidSnapshot) { | 360 TEST_F(LevelDBServiceTest, InvalidArgumentOnInvalidSnapshot) { |
| 374 mojom::LevelDBDatabasePtr database; | 361 mojom::LevelDBDatabasePtr database; |
| 375 mojom::DatabaseError error = mojom::DatabaseError::INVALID_ARGUMENT; | 362 mojom::DatabaseError error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 376 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); | 363 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); |
| 377 EXPECT_EQ(mojom::DatabaseError::OK, error); | 364 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 378 | 365 |
| 379 uint64_t invalid_snapshot = 8; | 366 uint64_t invalid_snapshot = 8; |
| 380 | 367 |
| 381 error = mojom::DatabaseError::OK; | 368 error = mojom::DatabaseError::OK; |
| 382 mojo::Array<uint8_t> value; | 369 std::vector<uint8_t> value; |
| 383 base::RunLoop run_loop; | 370 base::RunLoop run_loop; |
| 384 database->GetFromSnapshot(invalid_snapshot, | 371 database->GetFromSnapshot( |
| 385 mojo::Array<uint8_t>::From(std::string("key")), | 372 invalid_snapshot, StdStringToUint8Vector("key"), |
| 386 Capture(&error, &value, run_loop.QuitClosure())); | 373 CaptureConstRef(&error, &value, run_loop.QuitClosure())); |
| 387 run_loop.Run(); | 374 run_loop.Run(); |
| 388 EXPECT_EQ(mojom::DatabaseError::INVALID_ARGUMENT, error); | 375 EXPECT_EQ(mojom::DatabaseError::INVALID_ARGUMENT, error); |
| 389 } | 376 } |
| 390 | 377 |
| 391 TEST_F(LevelDBServiceTest, MemoryDBReadWrite) { | 378 TEST_F(LevelDBServiceTest, MemoryDBReadWrite) { |
| 392 mojom::LevelDBDatabasePtr database; | 379 mojom::LevelDBDatabasePtr database; |
| 393 mojom::DatabaseError error = mojom::DatabaseError::INVALID_ARGUMENT; | 380 mojom::DatabaseError error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 394 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); | 381 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); |
| 395 EXPECT_EQ(mojom::DatabaseError::OK, error); | 382 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 396 | 383 |
| 397 // Write a key to the database. | 384 // Write a key to the database. |
| 398 error = mojom::DatabaseError::INVALID_ARGUMENT; | 385 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 399 DatabaseSyncPut(database.get(), | 386 DatabaseSyncPut(database.get(), "key", "value", &error); |
| 400 mojo::Array<uint8_t>::From(std::string("key")), | |
| 401 mojo::Array<uint8_t>::From(std::string("value")), &error); | |
| 402 EXPECT_EQ(mojom::DatabaseError::OK, error); | 387 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 403 | 388 |
| 404 // Read the key back from the database. | 389 // Read the key back from the database. |
| 405 error = mojom::DatabaseError::INVALID_ARGUMENT; | 390 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 406 mojo::Array<uint8_t> value; | 391 std::vector<uint8_t> value; |
| 407 DatabaseSyncGet(database.get(), | 392 DatabaseSyncGet(database.get(), "key", &error, &value); |
| 408 mojo::Array<uint8_t>::From(std::string("key")), &error, | |
| 409 &value); | |
| 410 EXPECT_EQ(mojom::DatabaseError::OK, error); | 393 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 411 EXPECT_EQ("value", value.To<std::string>()); | 394 EXPECT_EQ("value", Uint8VectorToStdString(value)); |
| 412 | 395 |
| 413 // Delete the key from the database. | 396 // Delete the key from the database. |
| 414 error = mojom::DatabaseError::INVALID_ARGUMENT; | 397 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 415 base::RunLoop run_loop; | 398 base::RunLoop run_loop; |
| 416 database->Delete(mojo::Array<uint8_t>::From(std::string("key")), | 399 database->Delete(StdStringToUint8Vector("key"), |
| 417 Capture(&error, run_loop.QuitClosure())); | 400 Capture(&error, run_loop.QuitClosure())); |
| 418 run_loop.Run(); | 401 run_loop.Run(); |
| 419 EXPECT_EQ(mojom::DatabaseError::OK, error); | 402 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 420 | 403 |
| 421 // Read the key back from the database. | 404 // Read the key back from the database. |
| 422 error = mojom::DatabaseError::INVALID_ARGUMENT; | 405 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 423 value.SetToEmpty(); | 406 value.clear(); |
| 424 DatabaseSyncGet(database.get(), | 407 DatabaseSyncGet(database.get(), "key", &error, &value); |
| 425 mojo::Array<uint8_t>::From(std::string("key")), &error, | |
| 426 &value); | |
| 427 EXPECT_EQ(mojom::DatabaseError::NOT_FOUND, error); | 408 EXPECT_EQ(mojom::DatabaseError::NOT_FOUND, error); |
| 428 EXPECT_EQ("", value.To<std::string>()); | 409 EXPECT_EQ("", Uint8VectorToStdString(value)); |
| 429 } | 410 } |
| 430 | 411 |
| 431 TEST_F(LevelDBServiceTest, Prefixed) { | 412 TEST_F(LevelDBServiceTest, Prefixed) { |
| 432 // Open an in memory database for speed. | 413 // Open an in memory database for speed. |
| 433 mojom::DatabaseError error = mojom::DatabaseError::INVALID_ARGUMENT; | 414 mojom::DatabaseError error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 434 mojom::LevelDBDatabasePtr database; | 415 mojom::LevelDBDatabasePtr database; |
| 435 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); | 416 LevelDBSyncOpenInMemory(leveldb().get(), GetProxy(&database), &error); |
| 436 EXPECT_EQ(mojom::DatabaseError::OK, error); | 417 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 437 | 418 |
| 438 const std::string prefix("prefix"); | 419 const std::string prefix("prefix"); |
| 439 mojo::Array<mojom::KeyValuePtr> key_values; | 420 std::vector<mojom::KeyValuePtr> key_values; |
| 440 | 421 |
| 441 // Completely empty database. | 422 // Completely empty database. |
| 442 error = mojom::DatabaseError::INVALID_ARGUMENT; | 423 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 443 DatabaseSyncGetPrefixed(database.get(), mojo::Array<uint8_t>::From(prefix), | 424 DatabaseSyncGetPrefixed(database.get(), prefix, &error, &key_values); |
| 444 &error, &key_values); | |
| 445 EXPECT_EQ(mojom::DatabaseError::OK, error); | 425 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 446 EXPECT_TRUE(key_values.empty()); | 426 EXPECT_TRUE(key_values.empty()); |
| 447 | 427 |
| 448 // No values with our prefix, but values before and after. | 428 // No values with our prefix, but values before and after. |
| 449 error = mojom::DatabaseError::INVALID_ARGUMENT; | 429 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 450 DatabaseSyncPut(database.get(), | 430 DatabaseSyncPut(database.get(), "a-before-prefix", "value", &error); |
| 451 mojo::Array<uint8_t>::From(std::string("a-before-prefix")), | |
| 452 mojo::Array<uint8_t>::From(std::string("value")), &error); | |
| 453 EXPECT_EQ(mojom::DatabaseError::OK, error); | 431 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 454 error = mojom::DatabaseError::INVALID_ARGUMENT; | 432 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 455 DatabaseSyncPut(database.get(), | 433 DatabaseSyncPut(database.get(), "z-after-prefix", "value", &error); |
| 456 mojo::Array<uint8_t>::From(std::string("z-after-prefix")), | |
| 457 mojo::Array<uint8_t>::From(std::string("value")), &error); | |
| 458 EXPECT_EQ(mojom::DatabaseError::OK, error); | 434 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 459 key_values.SetToEmpty(); | 435 key_values.clear(); |
| 460 error = mojom::DatabaseError::INVALID_ARGUMENT; | 436 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 461 DatabaseSyncGetPrefixed(database.get(), mojo::Array<uint8_t>::From(prefix), | 437 DatabaseSyncGetPrefixed(database.get(), prefix, &error, &key_values); |
| 462 &error, &key_values); | |
| 463 EXPECT_EQ(mojom::DatabaseError::OK, error); | 438 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 464 EXPECT_TRUE(key_values.empty()); | 439 EXPECT_TRUE(key_values.empty()); |
| 465 | 440 |
| 466 // One value with the exact prefix. | 441 // One value with the exact prefix. |
| 467 DatabaseSyncPut(database.get(), mojo::Array<uint8_t>::From(prefix), | 442 DatabaseSyncPut(database.get(), prefix, "value", &error); |
| 468 mojo::Array<uint8_t>::From(std::string("value")), &error); | |
| 469 EXPECT_EQ(mojom::DatabaseError::OK, error); | 443 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 470 error = mojom::DatabaseError::INVALID_ARGUMENT; | 444 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 471 key_values.SetToEmpty(); | 445 key_values.clear(); |
| 472 DatabaseSyncGetPrefixed(database.get(), mojo::Array<uint8_t>::From(prefix), | 446 DatabaseSyncGetPrefixed(database.get(), prefix, &error, &key_values); |
| 473 &error, &key_values); | |
| 474 EXPECT_EQ(mojom::DatabaseError::OK, error); | 447 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 475 EXPECT_EQ(1u, key_values.size()); | 448 EXPECT_EQ(1u, key_values.size()); |
| 476 EXPECT_EQ("prefix", key_values[0]->key.To<std::string>()); | 449 EXPECT_EQ("prefix", Uint8VectorToStdString(key_values[0]->key)); |
| 477 EXPECT_EQ("value", key_values[0]->value.To<std::string>()); | 450 EXPECT_EQ("value", Uint8VectorToStdString(key_values[0]->value)); |
| 478 | 451 |
| 479 // Multiple values with starting with the prefix. | 452 // Multiple values with starting with the prefix. |
| 480 DatabaseSyncPut(database.get(), mojo::Array<uint8_t>::From(prefix + "2"), | 453 DatabaseSyncPut(database.get(), (prefix + "2"), "value2", &error); |
| 481 mojo::Array<uint8_t>::From(std::string("value2")), &error); | |
| 482 EXPECT_EQ(mojom::DatabaseError::OK, error); | 454 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 483 error = mojom::DatabaseError::INVALID_ARGUMENT; | 455 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 484 key_values.SetToEmpty(); | 456 key_values.clear(); |
| 485 DatabaseSyncGetPrefixed(database.get(), mojo::Array<uint8_t>::From(prefix), | 457 DatabaseSyncGetPrefixed(database.get(), prefix, &error, &key_values); |
| 486 &error, &key_values); | |
| 487 EXPECT_EQ(mojom::DatabaseError::OK, error); | 458 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 488 EXPECT_EQ(2u, key_values.size()); | 459 EXPECT_EQ(2u, key_values.size()); |
| 489 EXPECT_EQ("prefix", key_values[0]->key.To<std::string>()); | 460 EXPECT_EQ("prefix", Uint8VectorToStdString(key_values[0]->key)); |
| 490 EXPECT_EQ("value", key_values[0]->value.To<std::string>()); | 461 EXPECT_EQ("value", Uint8VectorToStdString(key_values[0]->value)); |
| 491 EXPECT_EQ("prefix2", key_values[1]->key.To<std::string>()); | 462 EXPECT_EQ("prefix2", Uint8VectorToStdString(key_values[1]->key)); |
| 492 EXPECT_EQ("value2", key_values[1]->value.To<std::string>()); | 463 EXPECT_EQ("value2", Uint8VectorToStdString(key_values[1]->value)); |
| 493 | 464 |
| 494 // Delete the prefixed values. | 465 // Delete the prefixed values. |
| 495 error = mojom::DatabaseError::INVALID_ARGUMENT; | 466 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 496 DatabaseSyncDeletePrefixed(database.get(), mojo::Array<uint8_t>::From(prefix), | 467 DatabaseSyncDeletePrefixed(database.get(), prefix, &error); |
| 497 &error); | |
| 498 EXPECT_EQ(mojom::DatabaseError::OK, error); | 468 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 499 error = mojom::DatabaseError::INVALID_ARGUMENT; | 469 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 500 key_values.SetToEmpty(); | 470 key_values.clear(); |
| 501 DatabaseSyncGetPrefixed(database.get(), mojo::Array<uint8_t>::From(prefix), | 471 DatabaseSyncGetPrefixed(database.get(), prefix, &error, &key_values); |
| 502 &error, &key_values); | |
| 503 EXPECT_EQ(mojom::DatabaseError::OK, error); | 472 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 504 EXPECT_TRUE(key_values.empty()); | 473 EXPECT_TRUE(key_values.empty()); |
| 505 | 474 |
| 506 // Make sure the others are not deleted. | 475 // Make sure the others are not deleted. |
| 507 mojo::Array<uint8_t> value; | 476 std::vector<uint8_t> value; |
| 508 DatabaseSyncGet(database.get(), | 477 DatabaseSyncGet(database.get(), "a-before-prefix", &error, &value); |
| 509 mojo::Array<uint8_t>::From(std::string("a-before-prefix")), | |
| 510 &error, &value); | |
| 511 EXPECT_EQ(mojom::DatabaseError::OK, error); | 478 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 512 EXPECT_EQ("value", value.To<std::string>()); | 479 EXPECT_EQ("value", Uint8VectorToStdString(value)); |
| 513 value.SetToEmpty(); | 480 value.clear(); |
| 514 DatabaseSyncGet(database.get(), | 481 DatabaseSyncGet(database.get(), "z-after-prefix", &error, &value); |
| 515 mojo::Array<uint8_t>::From(std::string("z-after-prefix")), | |
| 516 &error, &value); | |
| 517 EXPECT_EQ(mojom::DatabaseError::OK, error); | 482 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 518 EXPECT_EQ("value", value.To<std::string>()); | 483 EXPECT_EQ("value", Uint8VectorToStdString(value)); |
| 519 | 484 |
| 520 // A key having our prefix, but no key matching it exactly. | 485 // A key having our prefix, but no key matching it exactly. |
| 521 // Even thought there is no exact matching key, GetPrefixed | 486 // Even thought there is no exact matching key, GetPrefixed |
| 522 // and DeletePrefixed still operate on the values. | 487 // and DeletePrefixed still operate on the values. |
| 523 error = mojom::DatabaseError::INVALID_ARGUMENT; | 488 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 524 DatabaseSyncPut(database.get(), mojo::Array<uint8_t>::From(prefix + "2"), | 489 DatabaseSyncPut(database.get(), (prefix + "2"), "value2", &error); |
| 525 mojo::Array<uint8_t>::From(std::string("value2")), &error); | |
| 526 EXPECT_EQ(mojom::DatabaseError::OK, error); | 490 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 527 error = mojom::DatabaseError::INVALID_ARGUMENT; | 491 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 528 key_values.SetToEmpty(); | 492 key_values.clear(); |
| 529 DatabaseSyncGetPrefixed(database.get(), mojo::Array<uint8_t>::From(prefix), | 493 DatabaseSyncGetPrefixed(database.get(), prefix, &error, &key_values); |
| 530 &error, &key_values); | |
| 531 EXPECT_EQ(mojom::DatabaseError::OK, error); | 494 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 532 EXPECT_EQ(1u, key_values.size()); | 495 EXPECT_EQ(1u, key_values.size()); |
| 533 EXPECT_EQ("prefix2", key_values[0]->key.To<std::string>()); | 496 EXPECT_EQ("prefix2", Uint8VectorToStdString(key_values[0]->key)); |
| 534 EXPECT_EQ("value2", key_values[0]->value.To<std::string>()); | 497 EXPECT_EQ("value2", Uint8VectorToStdString(key_values[0]->value)); |
| 535 error = mojom::DatabaseError::INVALID_ARGUMENT; | 498 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 536 DatabaseSyncDeletePrefixed(database.get(), mojo::Array<uint8_t>::From(prefix), | 499 DatabaseSyncDeletePrefixed(database.get(), prefix, &error); |
| 537 &error); | |
| 538 EXPECT_EQ(mojom::DatabaseError::OK, error); | 500 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 539 error = mojom::DatabaseError::INVALID_ARGUMENT; | 501 error = mojom::DatabaseError::INVALID_ARGUMENT; |
| 540 key_values.SetToEmpty(); | 502 key_values.clear(); |
| 541 DatabaseSyncGetPrefixed(database.get(), mojo::Array<uint8_t>::From(prefix), | 503 DatabaseSyncGetPrefixed(database.get(), prefix, &error, &key_values); |
| 542 &error, &key_values); | |
| 543 EXPECT_EQ(mojom::DatabaseError::OK, error); | 504 EXPECT_EQ(mojom::DatabaseError::OK, error); |
| 544 EXPECT_TRUE(key_values.empty()); | 505 EXPECT_TRUE(key_values.empty()); |
| 545 } | 506 } |
| 546 | 507 |
| 547 } // namespace | 508 } // namespace |
| 548 } // namespace leveldb | 509 } // namespace leveldb |
| OLD | NEW |