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/macros.h" | 5 #include "base/macros.h" |
6 #include "components/filesystem/public/interfaces/directory.mojom.h" | 6 #include "components/filesystem/public/interfaces/directory.mojom.h" |
7 #include "components/filesystem/public/interfaces/file_system.mojom.h" | 7 #include "components/filesystem/public/interfaces/file_system.mojom.h" |
8 #include "components/filesystem/public/interfaces/types.mojom.h" | 8 #include "components/filesystem/public/interfaces/types.mojom.h" |
9 #include "components/leveldb/public/interfaces/leveldb.mojom.h" | 9 #include "components/leveldb/public/interfaces/leveldb.mojom.h" |
10 #include "mojo/common/common_type_converters.h" | 10 #include "mojo/common/common_type_converters.h" |
11 #include "mojo/public/cpp/bindings/weak_binding_set.h" | 11 #include "mojo/public/cpp/bindings/weak_binding_set.h" |
12 #include "mojo/shell/public/cpp/application_test_base.h" | 12 #include "mojo/shell/public/cpp/application_test_base.h" |
13 #include "mojo/shell/public/cpp/shell_connection.h" | 13 #include "mojo/shell/public/cpp/shell_connection.h" |
14 #include "mojo/util/capture_util.h" | 14 #include "mojo/util/capture_util.h" |
15 | 15 |
16 using filesystem::FileError; | 16 using filesystem::FileError; |
17 using mojo::Capture; | 17 using mojo::Capture; |
18 | 18 |
19 namespace leveldb { | 19 namespace leveldb { |
20 namespace { | 20 namespace { |
21 | 21 |
22 class LevelDBApptest : public mojo::test::ApplicationTestBase, | 22 class LevelDBApptest : public mojo::test::ApplicationTestBase { |
23 public filesystem::FileSystemClient { | |
24 public: | 23 public: |
25 LevelDBApptest() {} | 24 LevelDBApptest() {} |
26 ~LevelDBApptest() override {} | 25 ~LevelDBApptest() override {} |
27 | 26 |
28 protected: | 27 protected: |
29 // Overridden from mojo::test::ApplicationTestBase: | 28 // Overridden from mojo::test::ApplicationTestBase: |
30 void SetUp() override { | 29 void SetUp() override { |
31 ApplicationTestBase::SetUp(); | 30 ApplicationTestBase::SetUp(); |
32 shell()->ConnectToInterface("mojo:filesystem", &files_); | 31 shell()->ConnectToInterface("mojo:filesystem", &files_); |
33 shell()->ConnectToInterface("mojo:leveldb", &leveldb_); | 32 shell()->ConnectToInterface("mojo:leveldb", &leveldb_); |
34 } | 33 } |
35 | 34 |
36 // Overridden from FileSystemClient: | |
37 void OnFileSystemShutdown() override {} | |
38 | |
39 // Note: This has an out parameter rather than returning the |DirectoryPtr|, | 35 // Note: This has an out parameter rather than returning the |DirectoryPtr|, |
40 // since |ASSERT_...()| doesn't work with return values. | 36 // since |ASSERT_...()| doesn't work with return values. |
41 void GetOriginRoot(filesystem::DirectoryPtr* directory) { | 37 void GetUserDataDir(filesystem::DirectoryPtr* directory) { |
42 FileError error = FileError::FAILED; | 38 FileError error = FileError::FAILED; |
43 files()->OpenFileSystem("origin", GetProxy(directory), | 39 files()->OpenPersistentFileSystem(GetProxy(directory), |
44 bindings_.CreateInterfacePtrAndBind(this), | 40 mojo::Capture(&error)); |
45 mojo::Capture(&error)); | |
46 ASSERT_TRUE(files().WaitForIncomingResponse()); | 41 ASSERT_TRUE(files().WaitForIncomingResponse()); |
47 ASSERT_EQ(FileError::OK, error); | 42 ASSERT_EQ(FileError::OK, error); |
48 } | 43 } |
49 | 44 |
50 filesystem::FileSystemPtr& files() { return files_; } | 45 filesystem::FileSystemPtr& files() { return files_; } |
51 LevelDBServicePtr& leveldb() { return leveldb_; } | 46 LevelDBServicePtr& leveldb() { return leveldb_; } |
52 | 47 |
53 private: | 48 private: |
54 mojo::WeakBindingSet<filesystem::FileSystemClient> bindings_; | |
55 | |
56 filesystem::FileSystemPtr files_; | 49 filesystem::FileSystemPtr files_; |
57 LevelDBServicePtr leveldb_; | 50 LevelDBServicePtr leveldb_; |
58 | 51 |
59 DISALLOW_COPY_AND_ASSIGN(LevelDBApptest); | 52 DISALLOW_COPY_AND_ASSIGN(LevelDBApptest); |
60 }; | 53 }; |
61 | 54 |
62 TEST_F(LevelDBApptest, Basic) { | 55 TEST_F(LevelDBApptest, Basic) { |
63 filesystem::DirectoryPtr directory; | 56 filesystem::DirectoryPtr directory; |
64 GetOriginRoot(&directory); | 57 GetUserDataDir(&directory); |
65 | 58 |
66 DatabaseError error; | 59 DatabaseError error; |
67 LevelDBDatabasePtr database; | 60 LevelDBDatabasePtr database; |
68 leveldb()->Open(std::move(directory), "test", GetProxy(&database), | 61 leveldb()->Open(std::move(directory), "test", GetProxy(&database), |
69 Capture(&error)); | 62 Capture(&error)); |
70 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); | 63 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); |
71 EXPECT_EQ(DatabaseError::OK, error); | 64 EXPECT_EQ(DatabaseError::OK, error); |
72 | 65 |
73 // Write a key to the database. | 66 // Write a key to the database. |
74 error = DatabaseError::INVALID_ARGUMENT; | 67 error = DatabaseError::INVALID_ARGUMENT; |
(...skipping 24 matching lines...) Expand all Loading... |
99 value.SetToEmpty(); | 92 value.SetToEmpty(); |
100 database->Get(mojo::Array<uint8_t>::From(std::string("key")), | 93 database->Get(mojo::Array<uint8_t>::From(std::string("key")), |
101 Capture(&error, &value)); | 94 Capture(&error, &value)); |
102 ASSERT_TRUE(database.WaitForIncomingResponse()); | 95 ASSERT_TRUE(database.WaitForIncomingResponse()); |
103 EXPECT_EQ(DatabaseError::NOT_FOUND, error); | 96 EXPECT_EQ(DatabaseError::NOT_FOUND, error); |
104 EXPECT_EQ("", value.To<std::string>()); | 97 EXPECT_EQ("", value.To<std::string>()); |
105 } | 98 } |
106 | 99 |
107 TEST_F(LevelDBApptest, WriteBatch) { | 100 TEST_F(LevelDBApptest, WriteBatch) { |
108 filesystem::DirectoryPtr directory; | 101 filesystem::DirectoryPtr directory; |
109 GetOriginRoot(&directory); | 102 GetUserDataDir(&directory); |
110 | 103 |
111 DatabaseError error; | 104 DatabaseError error; |
112 LevelDBDatabasePtr database; | 105 LevelDBDatabasePtr database; |
113 leveldb()->Open(std::move(directory), "test", GetProxy(&database), | 106 leveldb()->Open(std::move(directory), "test", GetProxy(&database), |
114 Capture(&error)); | 107 Capture(&error)); |
115 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); | 108 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); |
116 EXPECT_EQ(DatabaseError::OK, error); | 109 EXPECT_EQ(DatabaseError::OK, error); |
117 | 110 |
118 // Write a key to the database. | 111 // Write a key to the database. |
119 database->Put(mojo::Array<uint8_t>::From(std::string("key")), | 112 database->Put(mojo::Array<uint8_t>::From(std::string("key")), |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 ASSERT_TRUE(database.WaitForIncomingResponse()); | 148 ASSERT_TRUE(database.WaitForIncomingResponse()); |
156 EXPECT_EQ(DatabaseError::OK, error); | 149 EXPECT_EQ(DatabaseError::OK, error); |
157 EXPECT_EQ("more", value.To<std::string>()); | 150 EXPECT_EQ("more", value.To<std::string>()); |
158 } | 151 } |
159 | 152 |
160 TEST_F(LevelDBApptest, Reconnect) { | 153 TEST_F(LevelDBApptest, Reconnect) { |
161 DatabaseError error; | 154 DatabaseError error; |
162 | 155 |
163 { | 156 { |
164 filesystem::DirectoryPtr directory; | 157 filesystem::DirectoryPtr directory; |
165 GetOriginRoot(&directory); | 158 GetUserDataDir(&directory); |
166 | 159 |
167 LevelDBDatabasePtr database; | 160 LevelDBDatabasePtr database; |
168 leveldb()->Open(std::move(directory), "test", GetProxy(&database), | 161 leveldb()->Open(std::move(directory), "test", GetProxy(&database), |
169 Capture(&error)); | 162 Capture(&error)); |
170 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); | 163 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); |
171 EXPECT_EQ(DatabaseError::OK, error); | 164 EXPECT_EQ(DatabaseError::OK, error); |
172 | 165 |
173 // Write a key to the database. | 166 // Write a key to the database. |
174 error = DatabaseError::INVALID_ARGUMENT; | 167 error = DatabaseError::INVALID_ARGUMENT; |
175 database->Put(mojo::Array<uint8_t>::From(std::string("key")), | 168 database->Put(mojo::Array<uint8_t>::From(std::string("key")), |
176 mojo::Array<uint8_t>::From(std::string("value")), | 169 mojo::Array<uint8_t>::From(std::string("value")), |
177 Capture(&error)); | 170 Capture(&error)); |
178 ASSERT_TRUE(database.WaitForIncomingResponse()); | 171 ASSERT_TRUE(database.WaitForIncomingResponse()); |
179 EXPECT_EQ(DatabaseError::OK, error); | 172 EXPECT_EQ(DatabaseError::OK, error); |
180 | 173 |
181 // The database should go out of scope here. | 174 // The database should go out of scope here. |
182 } | 175 } |
183 | 176 |
184 { | 177 { |
185 filesystem::DirectoryPtr directory; | 178 filesystem::DirectoryPtr directory; |
186 GetOriginRoot(&directory); | 179 GetUserDataDir(&directory); |
187 | 180 |
188 // Reconnect to the database. | 181 // Reconnect to the database. |
189 LevelDBDatabasePtr database; | 182 LevelDBDatabasePtr database; |
190 leveldb()->Open(std::move(directory), "test", GetProxy(&database), | 183 leveldb()->Open(std::move(directory), "test", GetProxy(&database), |
191 Capture(&error)); | 184 Capture(&error)); |
192 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); | 185 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); |
193 EXPECT_EQ(DatabaseError::OK, error); | 186 EXPECT_EQ(DatabaseError::OK, error); |
194 | 187 |
195 // We should still be able to read the key back from the database. | 188 // We should still be able to read the key back from the database. |
196 error = DatabaseError::INVALID_ARGUMENT; | 189 error = DatabaseError::INVALID_ARGUMENT; |
197 mojo::Array<uint8_t> value; | 190 mojo::Array<uint8_t> value; |
198 database->Get(mojo::Array<uint8_t>::From(std::string("key")), | 191 database->Get(mojo::Array<uint8_t>::From(std::string("key")), |
199 Capture(&error, &value)); | 192 Capture(&error, &value)); |
200 ASSERT_TRUE(database.WaitForIncomingResponse()); | 193 ASSERT_TRUE(database.WaitForIncomingResponse()); |
201 EXPECT_EQ(DatabaseError::OK, error); | 194 EXPECT_EQ(DatabaseError::OK, error); |
202 EXPECT_EQ("value", value.To<std::string>()); | 195 EXPECT_EQ("value", value.To<std::string>()); |
203 } | 196 } |
204 } | 197 } |
205 | 198 |
206 TEST_F(LevelDBApptest, GetSnapshotSimple) { | 199 TEST_F(LevelDBApptest, GetSnapshotSimple) { |
207 DatabaseError error; | 200 DatabaseError error; |
208 | 201 |
209 filesystem::DirectoryPtr directory; | 202 filesystem::DirectoryPtr directory; |
210 GetOriginRoot(&directory); | 203 GetUserDataDir(&directory); |
211 | 204 |
212 LevelDBDatabasePtr database; | 205 LevelDBDatabasePtr database; |
213 leveldb()->Open(std::move(directory), "test", GetProxy(&database), | 206 leveldb()->Open(std::move(directory), "test", GetProxy(&database), |
214 Capture(&error)); | 207 Capture(&error)); |
215 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); | 208 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); |
216 EXPECT_EQ(DatabaseError::OK, error); | 209 EXPECT_EQ(DatabaseError::OK, error); |
217 | 210 |
218 uint64_t snapshot_id = 0; | 211 uint64_t snapshot_id = 0; |
219 database->GetSnapshot(Capture(&snapshot_id)); | 212 database->GetSnapshot(Capture(&snapshot_id)); |
220 ASSERT_TRUE(database.WaitForIncomingResponse()); | 213 ASSERT_TRUE(database.WaitForIncomingResponse()); |
221 EXPECT_NE(static_cast<uint64_t>(0), snapshot_id); | 214 EXPECT_NE(static_cast<uint64_t>(0), snapshot_id); |
222 } | 215 } |
223 | 216 |
224 TEST_F(LevelDBApptest, GetFromSnapshots) { | 217 TEST_F(LevelDBApptest, GetFromSnapshots) { |
225 DatabaseError error; | 218 DatabaseError error; |
226 | 219 |
227 filesystem::DirectoryPtr directory; | 220 filesystem::DirectoryPtr directory; |
228 GetOriginRoot(&directory); | 221 GetUserDataDir(&directory); |
229 | 222 |
230 LevelDBDatabasePtr database; | 223 LevelDBDatabasePtr database; |
231 leveldb()->Open(std::move(directory), "test", GetProxy(&database), | 224 leveldb()->Open(std::move(directory), "test", GetProxy(&database), |
232 Capture(&error)); | 225 Capture(&error)); |
233 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); | 226 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); |
234 EXPECT_EQ(DatabaseError::OK, error); | 227 EXPECT_EQ(DatabaseError::OK, error); |
235 | 228 |
236 // Write a key to the database. | 229 // Write a key to the database. |
237 error = DatabaseError::INVALID_ARGUMENT; | 230 error = DatabaseError::INVALID_ARGUMENT; |
238 database->Put(mojo::Array<uint8_t>::From(std::string("key")), | 231 database->Put(mojo::Array<uint8_t>::From(std::string("key")), |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 key_value_snapshot, | 263 key_value_snapshot, |
271 mojo::Array<uint8_t>::From(std::string("key")), | 264 mojo::Array<uint8_t>::From(std::string("key")), |
272 Capture(&error, &value)); | 265 Capture(&error, &value)); |
273 ASSERT_TRUE(database.WaitForIncomingResponse()); | 266 ASSERT_TRUE(database.WaitForIncomingResponse()); |
274 EXPECT_EQ(DatabaseError::OK, error); | 267 EXPECT_EQ(DatabaseError::OK, error); |
275 EXPECT_EQ("value", value.To<std::string>()); | 268 EXPECT_EQ("value", value.To<std::string>()); |
276 } | 269 } |
277 | 270 |
278 TEST_F(LevelDBApptest, InvalidArgumentOnInvalidSnapshot) { | 271 TEST_F(LevelDBApptest, InvalidArgumentOnInvalidSnapshot) { |
279 filesystem::DirectoryPtr directory; | 272 filesystem::DirectoryPtr directory; |
280 GetOriginRoot(&directory); | 273 GetUserDataDir(&directory); |
281 | 274 |
282 LevelDBDatabasePtr database; | 275 LevelDBDatabasePtr database; |
283 DatabaseError error = DatabaseError::INVALID_ARGUMENT; | 276 DatabaseError error = DatabaseError::INVALID_ARGUMENT; |
284 leveldb()->Open(std::move(directory), "test", GetProxy(&database), | 277 leveldb()->Open(std::move(directory), "test", GetProxy(&database), |
285 Capture(&error)); | 278 Capture(&error)); |
286 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); | 279 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); |
287 EXPECT_EQ(DatabaseError::OK, error); | 280 EXPECT_EQ(DatabaseError::OK, error); |
288 | 281 |
289 uint64_t invalid_snapshot = 8; | 282 uint64_t invalid_snapshot = 8; |
290 | 283 |
291 error = DatabaseError::OK; | 284 error = DatabaseError::OK; |
292 mojo::Array<uint8_t> value; | 285 mojo::Array<uint8_t> value; |
293 database->GetFromSnapshot( | 286 database->GetFromSnapshot( |
294 invalid_snapshot, | 287 invalid_snapshot, |
295 mojo::Array<uint8_t>::From(std::string("key")), | 288 mojo::Array<uint8_t>::From(std::string("key")), |
296 Capture(&error, &value)); | 289 Capture(&error, &value)); |
297 ASSERT_TRUE(database.WaitForIncomingResponse()); | 290 ASSERT_TRUE(database.WaitForIncomingResponse()); |
298 EXPECT_EQ(DatabaseError::INVALID_ARGUMENT, error); | 291 EXPECT_EQ(DatabaseError::INVALID_ARGUMENT, error); |
299 } | 292 } |
300 | 293 |
301 } // namespace | 294 } // namespace |
302 } // namespace leveldb | 295 } // namespace leveldb |
OLD | NEW |