OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "content/browser/service_worker/service_worker_database.h" | 5 #include "content/browser/service_worker/service_worker_database.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <string> | 10 #include <string> |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 EXPECT_EQ(expected[i].size_bytes, actual[i].size_bytes); | 83 EXPECT_EQ(expected[i].size_bytes, actual[i].size_bytes); |
84 } | 84 } |
85 } | 85 } |
86 | 86 |
87 } // namespace | 87 } // namespace |
88 | 88 |
89 TEST(ServiceWorkerDatabaseTest, OpenDatabase) { | 89 TEST(ServiceWorkerDatabaseTest, OpenDatabase) { |
90 base::ScopedTempDir database_dir; | 90 base::ScopedTempDir database_dir; |
91 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); | 91 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); |
92 std::unique_ptr<ServiceWorkerDatabase> database( | 92 std::unique_ptr<ServiceWorkerDatabase> database( |
93 CreateDatabase(database_dir.path())); | 93 CreateDatabase(database_dir.GetPath())); |
94 | 94 |
95 // Should be false because the database does not exist at the path. | 95 // Should be false because the database does not exist at the path. |
96 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 96 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
97 database->LazyOpen(false)); | 97 database->LazyOpen(false)); |
98 | 98 |
99 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); | 99 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); |
100 | 100 |
101 database.reset(CreateDatabase(database_dir.path())); | 101 database.reset(CreateDatabase(database_dir.GetPath())); |
102 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(false)); | 102 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(false)); |
103 } | 103 } |
104 | 104 |
105 TEST(ServiceWorkerDatabaseTest, OpenDatabase_InMemory) { | 105 TEST(ServiceWorkerDatabaseTest, OpenDatabase_InMemory) { |
106 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 106 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
107 | 107 |
108 // Should be false because the database does not exist in memory. | 108 // Should be false because the database does not exist in memory. |
109 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 109 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
110 database->LazyOpen(false)); | 110 database->LazyOpen(false)); |
111 | 111 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 | 143 |
144 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 144 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
145 database->ReadDatabaseVersion(&db_version)); | 145 database->ReadDatabaseVersion(&db_version)); |
146 EXPECT_LT(0, db_version); | 146 EXPECT_LT(0, db_version); |
147 } | 147 } |
148 | 148 |
149 TEST(ServiceWorkerDatabaseTest, DatabaseVersion_ObsoleteSchemaVersion) { | 149 TEST(ServiceWorkerDatabaseTest, DatabaseVersion_ObsoleteSchemaVersion) { |
150 base::ScopedTempDir database_dir; | 150 base::ScopedTempDir database_dir; |
151 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); | 151 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); |
152 std::unique_ptr<ServiceWorkerDatabase> database( | 152 std::unique_ptr<ServiceWorkerDatabase> database( |
153 CreateDatabase(database_dir.path())); | 153 CreateDatabase(database_dir.GetPath())); |
154 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); | 154 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); |
155 | 155 |
156 // First writing triggers database initialization and bumps the schema | 156 // First writing triggers database initialization and bumps the schema |
157 // version. | 157 // version. |
158 GURL origin("http://example.com"); | 158 GURL origin("http://example.com"); |
159 std::vector<ServiceWorkerDatabase::ResourceRecord> resources; | 159 std::vector<ServiceWorkerDatabase::ResourceRecord> resources; |
160 resources.push_back(CreateResource(1, URL(origin, "/resource"), 10)); | 160 resources.push_back(CreateResource(1, URL(origin, "/resource"), 10)); |
161 ServiceWorkerDatabase::RegistrationData deleted_version; | 161 ServiceWorkerDatabase::RegistrationData deleted_version; |
162 std::vector<int64_t> newly_purgeable_resources; | 162 std::vector<int64_t> newly_purgeable_resources; |
163 ServiceWorkerDatabase::RegistrationData data; | 163 ServiceWorkerDatabase::RegistrationData data; |
(...skipping 10 matching lines...) Expand all Loading... |
174 int64_t old_db_version = 1; | 174 int64_t old_db_version = 1; |
175 leveldb::WriteBatch batch; | 175 leveldb::WriteBatch batch; |
176 batch.Put("INITDATA_DB_VERSION", base::Int64ToString(old_db_version)); | 176 batch.Put("INITDATA_DB_VERSION", base::Int64ToString(old_db_version)); |
177 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, database->WriteBatch(&batch)); | 177 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, database->WriteBatch(&batch)); |
178 db_version = -1; | 178 db_version = -1; |
179 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 179 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
180 database->ReadDatabaseVersion(&db_version)); | 180 database->ReadDatabaseVersion(&db_version)); |
181 ASSERT_EQ(old_db_version, db_version); | 181 ASSERT_EQ(old_db_version, db_version); |
182 | 182 |
183 // Opening the database whose schema version is obsolete should fail. | 183 // Opening the database whose schema version is obsolete should fail. |
184 database.reset(CreateDatabase(database_dir.path())); | 184 database.reset(CreateDatabase(database_dir.GetPath())); |
185 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_FAILED, | 185 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_FAILED, |
186 database->LazyOpen(true)); | 186 database->LazyOpen(true)); |
187 } | 187 } |
188 | 188 |
189 TEST(ServiceWorkerDatabaseTest, DatabaseVersion_CorruptedSchemaVersion) { | 189 TEST(ServiceWorkerDatabaseTest, DatabaseVersion_CorruptedSchemaVersion) { |
190 base::ScopedTempDir database_dir; | 190 base::ScopedTempDir database_dir; |
191 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); | 191 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); |
192 std::unique_ptr<ServiceWorkerDatabase> database( | 192 std::unique_ptr<ServiceWorkerDatabase> database( |
193 CreateDatabase(database_dir.path())); | 193 CreateDatabase(database_dir.GetPath())); |
194 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); | 194 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); |
195 | 195 |
196 // First writing triggers database initialization and bumps the schema | 196 // First writing triggers database initialization and bumps the schema |
197 // version. | 197 // version. |
198 GURL origin("http://example.com"); | 198 GURL origin("http://example.com"); |
199 std::vector<ServiceWorkerDatabase::ResourceRecord> resources; | 199 std::vector<ServiceWorkerDatabase::ResourceRecord> resources; |
200 resources.push_back(CreateResource(1, URL(origin, "/resource"), 10)); | 200 resources.push_back(CreateResource(1, URL(origin, "/resource"), 10)); |
201 ServiceWorkerDatabase::RegistrationData deleted_version; | 201 ServiceWorkerDatabase::RegistrationData deleted_version; |
202 std::vector<int64_t> newly_purgeable_resources; | 202 std::vector<int64_t> newly_purgeable_resources; |
203 ServiceWorkerDatabase::RegistrationData data; | 203 ServiceWorkerDatabase::RegistrationData data; |
204 data.resources_total_size_bytes = 10; | 204 data.resources_total_size_bytes = 10; |
205 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 205 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
206 database->WriteRegistration(data, resources, &deleted_version, | 206 database->WriteRegistration(data, resources, &deleted_version, |
207 &newly_purgeable_resources)); | 207 &newly_purgeable_resources)); |
208 int64_t db_version = -1; | 208 int64_t db_version = -1; |
209 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 209 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
210 database->ReadDatabaseVersion(&db_version)); | 210 database->ReadDatabaseVersion(&db_version)); |
211 ASSERT_LT(0, db_version); | 211 ASSERT_LT(0, db_version); |
212 | 212 |
213 // Emulate a corrupted schema version. | 213 // Emulate a corrupted schema version. |
214 int64_t corrupted_db_version = -10; | 214 int64_t corrupted_db_version = -10; |
215 leveldb::WriteBatch batch; | 215 leveldb::WriteBatch batch; |
216 batch.Put("INITDATA_DB_VERSION", base::Int64ToString(corrupted_db_version)); | 216 batch.Put("INITDATA_DB_VERSION", base::Int64ToString(corrupted_db_version)); |
217 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, database->WriteBatch(&batch)); | 217 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, database->WriteBatch(&batch)); |
218 db_version = -1; | 218 db_version = -1; |
219 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_CORRUPTED, | 219 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_CORRUPTED, |
220 database->ReadDatabaseVersion(&db_version)); | 220 database->ReadDatabaseVersion(&db_version)); |
221 | 221 |
222 // Opening the database whose schema version is corrupted should fail. | 222 // Opening the database whose schema version is corrupted should fail. |
223 database.reset(CreateDatabase(database_dir.path())); | 223 database.reset(CreateDatabase(database_dir.GetPath())); |
224 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_CORRUPTED, | 224 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_CORRUPTED, |
225 database->LazyOpen(true)); | 225 database->LazyOpen(true)); |
226 } | 226 } |
227 | 227 |
228 TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) { | 228 TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) { |
229 base::ScopedTempDir database_dir; | 229 base::ScopedTempDir database_dir; |
230 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); | 230 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); |
231 std::unique_ptr<ServiceWorkerDatabase> database( | 231 std::unique_ptr<ServiceWorkerDatabase> database( |
232 CreateDatabase(database_dir.path())); | 232 CreateDatabase(database_dir.GetPath())); |
233 | 233 |
234 GURL origin("http://example.com"); | 234 GURL origin("http://example.com"); |
235 | 235 |
236 // The database has never been used, so returns initial values. | 236 // The database has never been used, so returns initial values. |
237 AvailableIds ids; | 237 AvailableIds ids; |
238 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds( | 238 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds( |
239 &ids.reg_id, &ids.ver_id, &ids.res_id)); | 239 &ids.reg_id, &ids.ver_id, &ids.res_id)); |
240 EXPECT_EQ(0, ids.reg_id); | 240 EXPECT_EQ(0, ids.reg_id); |
241 EXPECT_EQ(0, ids.ver_id); | 241 EXPECT_EQ(0, ids.ver_id); |
242 EXPECT_EQ(0, ids.res_id); | 242 EXPECT_EQ(0, ids.res_id); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
310 database->WriteRegistration(data2, resources2, &deleted_version, | 310 database->WriteRegistration(data2, resources2, &deleted_version, |
311 &newly_purgeable_resources)); | 311 &newly_purgeable_resources)); |
312 | 312 |
313 // Same with resources. | 313 // Same with resources. |
314 int64_t kLowResourceId = 15; | 314 int64_t kLowResourceId = 15; |
315 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 315 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
316 database->WriteUncommittedResourceIds( | 316 database->WriteUncommittedResourceIds( |
317 std::set<int64_t>(&kLowResourceId, &kLowResourceId + 1))); | 317 std::set<int64_t>(&kLowResourceId, &kLowResourceId + 1))); |
318 | 318 |
319 // Close and reopen the database to verify the stored values. | 319 // Close and reopen the database to verify the stored values. |
320 database.reset(CreateDatabase(database_dir.path())); | 320 database.reset(CreateDatabase(database_dir.GetPath())); |
321 | 321 |
322 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds( | 322 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds( |
323 &ids.reg_id, &ids.ver_id, &ids.res_id)); | 323 &ids.reg_id, &ids.ver_id, &ids.res_id)); |
324 EXPECT_EQ(101, ids.reg_id); | 324 EXPECT_EQ(101, ids.reg_id); |
325 EXPECT_EQ(201, ids.ver_id); | 325 EXPECT_EQ(201, ids.ver_id); |
326 EXPECT_EQ(21, ids.res_id); | 326 EXPECT_EQ(21, ids.res_id); |
327 } | 327 } |
328 | 328 |
329 TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { | 329 TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { |
330 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 330 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
(...skipping 1297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1628 ServiceWorkerDatabase::STATUS_OK, | 1628 ServiceWorkerDatabase::STATUS_OK, |
1629 database->ReadUserData(data3.registration_id, {"key6"}, &user_data_out)); | 1629 database->ReadUserData(data3.registration_id, {"key6"}, &user_data_out)); |
1630 ASSERT_EQ(1u, user_data_out.size()); | 1630 ASSERT_EQ(1u, user_data_out.size()); |
1631 EXPECT_EQ("data6", user_data_out[0]); | 1631 EXPECT_EQ("data6", user_data_out[0]); |
1632 } | 1632 } |
1633 | 1633 |
1634 TEST(ServiceWorkerDatabaseTest, DestroyDatabase) { | 1634 TEST(ServiceWorkerDatabaseTest, DestroyDatabase) { |
1635 base::ScopedTempDir database_dir; | 1635 base::ScopedTempDir database_dir; |
1636 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); | 1636 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); |
1637 std::unique_ptr<ServiceWorkerDatabase> database( | 1637 std::unique_ptr<ServiceWorkerDatabase> database( |
1638 CreateDatabase(database_dir.path())); | 1638 CreateDatabase(database_dir.GetPath())); |
1639 | 1639 |
1640 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); | 1640 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); |
1641 ASSERT_TRUE(base::DirectoryExists(database_dir.path())); | 1641 ASSERT_TRUE(base::DirectoryExists(database_dir.GetPath())); |
1642 | 1642 |
1643 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->DestroyDatabase()); | 1643 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->DestroyDatabase()); |
1644 ASSERT_FALSE(base::DirectoryExists(database_dir.path())); | 1644 ASSERT_FALSE(base::DirectoryExists(database_dir.GetPath())); |
1645 } | 1645 } |
1646 | 1646 |
1647 TEST(ServiceWorkerDatabaseTest, GetOriginsWithForeignFetchRegistrations) { | 1647 TEST(ServiceWorkerDatabaseTest, GetOriginsWithForeignFetchRegistrations) { |
1648 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 1648 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
1649 | 1649 |
1650 std::set<GURL> origins; | 1650 std::set<GURL> origins; |
1651 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1651 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1652 database->GetOriginsWithForeignFetchRegistrations(&origins)); | 1652 database->GetOriginsWithForeignFetchRegistrations(&origins)); |
1653 EXPECT_TRUE(origins.empty()); | 1653 EXPECT_TRUE(origins.empty()); |
1654 | 1654 |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1774 &deleted_version, | 1774 &deleted_version, |
1775 &newly_purgeable_resources)); | 1775 &newly_purgeable_resources)); |
1776 | 1776 |
1777 origins.clear(); | 1777 origins.clear(); |
1778 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1778 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1779 database->GetOriginsWithForeignFetchRegistrations(&origins)); | 1779 database->GetOriginsWithForeignFetchRegistrations(&origins)); |
1780 EXPECT_EQ(0U, origins.size()); | 1780 EXPECT_EQ(0U, origins.size()); |
1781 } | 1781 } |
1782 | 1782 |
1783 } // namespace content | 1783 } // namespace content |
OLD | NEW |