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/macros.h" | 6 #include "base/macros.h" |
6 #include "components/filesystem/public/interfaces/directory.mojom.h" | 7 #include "components/filesystem/public/interfaces/directory.mojom.h" |
7 #include "components/filesystem/public/interfaces/file_system.mojom.h" | 8 #include "components/filesystem/public/interfaces/file_system.mojom.h" |
8 #include "components/filesystem/public/interfaces/types.mojom.h" | 9 #include "components/filesystem/public/interfaces/types.mojom.h" |
9 #include "components/leveldb/public/interfaces/leveldb.mojom.h" | 10 #include "components/leveldb/public/interfaces/leveldb.mojom.h" |
10 #include "mojo/common/common_type_converters.h" | 11 #include "mojo/common/common_type_converters.h" |
11 #include "mojo/public/cpp/bindings/binding_set.h" | 12 #include "mojo/public/cpp/bindings/binding_set.h" |
12 #include "mojo/util/capture_util.h" | 13 #include "mojo/util/capture_util.h" |
13 #include "services/shell/public/cpp/shell_connection.h" | 14 #include "services/shell/public/cpp/shell_connection.h" |
14 #include "services/shell/public/cpp/shell_test.h" | 15 #include "services/shell/public/cpp/shell_test.h" |
(...skipping 18 matching lines...) Expand all Loading... |
33 } | 34 } |
34 | 35 |
35 void TearDown() override { | 36 void TearDown() override { |
36 leveldb_.reset(); | 37 leveldb_.reset(); |
37 files_.reset(); | 38 files_.reset(); |
38 ShellTest::TearDown(); | 39 ShellTest::TearDown(); |
39 } | 40 } |
40 | 41 |
41 // Note: This has an out parameter rather than returning the |DirectoryPtr|, | 42 // Note: This has an out parameter rather than returning the |DirectoryPtr|, |
42 // since |ASSERT_...()| doesn't work with return values. | 43 // since |ASSERT_...()| doesn't work with return values. |
43 void GetUserDataDir(filesystem::DirectoryPtr* directory) { | 44 void GetTempDirectory(filesystem::DirectoryPtr* directory) { |
44 FileError error = FileError::FAILED; | 45 FileError error = FileError::FAILED; |
45 files()->OpenPersistentFileSystem(GetProxy(directory), | 46 files()->OpenTempDirectory(GetProxy(directory), mojo::Capture(&error)); |
46 mojo::Capture(&error)); | |
47 ASSERT_TRUE(files().WaitForIncomingResponse()); | 47 ASSERT_TRUE(files().WaitForIncomingResponse()); |
48 ASSERT_EQ(FileError::OK, error); | 48 ASSERT_EQ(FileError::OK, error); |
49 } | 49 } |
50 | 50 |
51 filesystem::FileSystemPtr& files() { return files_; } | 51 filesystem::FileSystemPtr& files() { return files_; } |
52 LevelDBServicePtr& leveldb() { return leveldb_; } | 52 LevelDBServicePtr& leveldb() { return leveldb_; } |
53 | 53 |
54 private: | 54 private: |
55 filesystem::FileSystemPtr files_; | 55 filesystem::FileSystemPtr files_; |
56 LevelDBServicePtr leveldb_; | 56 LevelDBServicePtr leveldb_; |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 // Reading "key" should be invalid now. | 180 // Reading "key" should be invalid now. |
181 error = DatabaseError::INVALID_ARGUMENT; | 181 error = DatabaseError::INVALID_ARGUMENT; |
182 value = nullptr; | 182 value = nullptr; |
183 database->Get(mojo::Array<uint8_t>::From(std::string("prefix-key2")), | 183 database->Get(mojo::Array<uint8_t>::From(std::string("prefix-key2")), |
184 Capture(&error, &value)); | 184 Capture(&error, &value)); |
185 ASSERT_TRUE(database.WaitForIncomingResponse()); | 185 ASSERT_TRUE(database.WaitForIncomingResponse()); |
186 EXPECT_EQ(DatabaseError::NOT_FOUND, error); | 186 EXPECT_EQ(DatabaseError::NOT_FOUND, error); |
187 EXPECT_EQ("", value.To<std::string>()); | 187 EXPECT_EQ("", value.To<std::string>()); |
188 } | 188 } |
189 | 189 |
190 // TODO(crbug.com/602820) Test is flaky. | 190 TEST_F(LevelDBServiceTest, Reconnect) { |
191 #if defined(OS_LINUX) || defined(OS_WIN) | |
192 #define MAYBE_Reconnect DISABLED_Reconnect | |
193 #else | |
194 #define MAYBE_Reconnect Reconnect | |
195 #endif | |
196 TEST_F(LevelDBServiceTest, MAYBE_Reconnect) { | |
197 DatabaseError error; | 191 DatabaseError error; |
198 | 192 |
| 193 filesystem::DirectoryPtr temp_directory; |
| 194 GetTempDirectory(&temp_directory); |
| 195 |
199 { | 196 { |
200 filesystem::DirectoryPtr directory; | 197 filesystem::DirectoryPtr directory; |
201 GetUserDataDir(&directory); | 198 temp_directory->Clone(GetProxy(&directory)); |
202 | 199 |
203 LevelDBDatabasePtr database; | 200 LevelDBDatabasePtr database; |
204 leveldb()->Open(std::move(directory), "test", GetProxy(&database), | 201 leveldb::OpenOptionsPtr options = leveldb::OpenOptions::New(); |
205 Capture(&error)); | 202 options->error_if_exists = true; |
| 203 options->create_if_missing = true; |
| 204 leveldb()->OpenWithOptions(std::move(options), |
| 205 std::move(directory), "test", |
| 206 GetProxy(&database), |
| 207 Capture(&error)); |
206 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); | 208 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); |
207 EXPECT_EQ(DatabaseError::OK, error); | 209 EXPECT_EQ(DatabaseError::OK, error); |
208 | 210 |
209 // Write a key to the database. | 211 // Write a key to the database. |
210 error = DatabaseError::INVALID_ARGUMENT; | 212 error = DatabaseError::INVALID_ARGUMENT; |
211 database->Put(mojo::Array<uint8_t>::From(std::string("key")), | 213 database->Put(mojo::Array<uint8_t>::From(std::string("key")), |
212 mojo::Array<uint8_t>::From(std::string("value")), | 214 mojo::Array<uint8_t>::From(std::string("value")), |
213 Capture(&error)); | 215 Capture(&error)); |
214 ASSERT_TRUE(database.WaitForIncomingResponse()); | 216 ASSERT_TRUE(database.WaitForIncomingResponse()); |
215 EXPECT_EQ(DatabaseError::OK, error); | 217 EXPECT_EQ(DatabaseError::OK, error); |
216 | 218 |
217 // The database should go out of scope here. | 219 // The database should go out of scope here. |
218 } | 220 } |
219 | 221 |
220 { | 222 { |
221 filesystem::DirectoryPtr directory; | 223 filesystem::DirectoryPtr directory; |
222 GetUserDataDir(&directory); | 224 temp_directory->Clone(GetProxy(&directory)); |
223 | 225 |
224 // Reconnect to the database. | 226 // Reconnect to the database. |
225 LevelDBDatabasePtr database; | 227 LevelDBDatabasePtr database; |
226 leveldb()->Open(std::move(directory), "test", GetProxy(&database), | 228 leveldb()->Open(std::move(directory), "test", GetProxy(&database), |
227 Capture(&error)); | 229 Capture(&error)); |
228 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); | 230 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); |
229 EXPECT_EQ(DatabaseError::OK, error); | 231 EXPECT_EQ(DatabaseError::OK, error); |
230 | 232 |
231 // We should still be able to read the key back from the database. | 233 // We should still be able to read the key back from the database. |
232 error = DatabaseError::INVALID_ARGUMENT; | 234 error = DatabaseError::INVALID_ARGUMENT; |
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 key_values.SetToEmpty(); | 492 key_values.SetToEmpty(); |
491 database->GetPrefixed(mojo::Array<uint8_t>::From(prefix), | 493 database->GetPrefixed(mojo::Array<uint8_t>::From(prefix), |
492 Capture(&error, &key_values)); | 494 Capture(&error, &key_values)); |
493 ASSERT_TRUE(database.WaitForIncomingResponse()); | 495 ASSERT_TRUE(database.WaitForIncomingResponse()); |
494 EXPECT_EQ(DatabaseError::OK, error); | 496 EXPECT_EQ(DatabaseError::OK, error); |
495 EXPECT_TRUE(key_values.empty()); | 497 EXPECT_TRUE(key_values.empty()); |
496 } | 498 } |
497 | 499 |
498 } // namespace | 500 } // namespace |
499 } // namespace leveldb | 501 } // namespace leveldb |
OLD | NEW |