Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(245)

Side by Side Diff: content/browser/service_worker/service_worker_database_unittest.cc

Issue 282533002: ServiceWorker: Clean up ServiceWorkerDatabaseTest (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <string> 7 #include <string>
8 8
9 #include "base/files/scoped_temp_dir.h" 9 #include "base/files/scoped_temp_dir.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
11 #include "content/browser/service_worker/service_worker_database.pb.h" 11 #include "content/browser/service_worker/service_worker_database.pb.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 13
14 namespace content { 14 namespace content {
15 15
16 namespace { 16 namespace {
17 17
18 typedef ServiceWorkerDatabase::RegistrationData RegistrationData; 18 typedef ServiceWorkerDatabase::RegistrationData RegistrationData;
19 typedef ServiceWorkerDatabase::ResourceRecord Resource; 19 typedef ServiceWorkerDatabase::ResourceRecord Resource;
20 20
21 struct AvailableIds { 21 struct AvailableIds {
22 int64 reg_id; 22 int64 reg_id;
23 int64 res_id; 23 int64 res_id;
24 int64 ver_id; 24 int64 ver_id;
25 25
26 AvailableIds() : reg_id(-1), res_id(-1), ver_id(-1) {} 26 AvailableIds() : reg_id(-1), res_id(-1), ver_id(-1) {}
27 ~AvailableIds() {} 27 ~AvailableIds() {}
28 }; 28 };
29 29
30 // TODO(nhiroki): Refactor tests using this helper.
31 GURL URL(const GURL& origin, const std::string& path) { 30 GURL URL(const GURL& origin, const std::string& path) {
32 EXPECT_TRUE(origin.is_valid()); 31 EXPECT_TRUE(origin.is_valid());
33 GURL out(origin.GetOrigin().spec() + path); 32 GURL out(origin.GetOrigin().spec() + path);
34 EXPECT_TRUE(out.is_valid()); 33 EXPECT_TRUE(out.is_valid());
35 return out; 34 return out;
36 } 35 }
37 36
38 // TODO(nhiroki): Remove this.
39 Resource CreateResource(int64 resource_id, const std::string& url) {
40 Resource resource;
41 resource.resource_id = resource_id;
42 resource.url = GURL(url);
43 EXPECT_TRUE(resource.url.is_valid());
44 return resource;
45 }
46
47 Resource CreateResource(int64 resource_id, const GURL& url) { 37 Resource CreateResource(int64 resource_id, const GURL& url) {
48 Resource resource; 38 Resource resource;
49 resource.resource_id = resource_id; 39 resource.resource_id = resource_id;
50 resource.url = url; 40 resource.url = url;
51 EXPECT_TRUE(resource.url.is_valid()); 41 EXPECT_TRUE(resource.url.is_valid());
52 return resource; 42 return resource;
53 } 43 }
54 44
55 ServiceWorkerDatabase* CreateDatabase(const base::FilePath& path) { 45 ServiceWorkerDatabase* CreateDatabase(const base::FilePath& path) {
56 return new ServiceWorkerDatabase(path); 46 return new ServiceWorkerDatabase(path);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 120
131 EXPECT_TRUE(database->ReadDatabaseVersion(&db_version)); 121 EXPECT_TRUE(database->ReadDatabaseVersion(&db_version));
132 EXPECT_LT(0, db_version); 122 EXPECT_LT(0, db_version);
133 } 123 }
134 124
135 TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) { 125 TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) {
136 base::ScopedTempDir database_dir; 126 base::ScopedTempDir database_dir;
137 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); 127 ASSERT_TRUE(database_dir.CreateUniqueTempDir());
138 scoped_ptr<ServiceWorkerDatabase> database( 128 scoped_ptr<ServiceWorkerDatabase> database(
139 CreateDatabase(database_dir.path())); 129 CreateDatabase(database_dir.path()));
140 AvailableIds ids; 130
131 GURL origin("http://example.com");
141 132
142 // The database has never been used, so returns initial values. 133 // The database has never been used, so returns initial values.
134 AvailableIds ids;
143 EXPECT_TRUE(database->GetNextAvailableIds( 135 EXPECT_TRUE(database->GetNextAvailableIds(
144 &ids.reg_id, &ids.ver_id, &ids.res_id)); 136 &ids.reg_id, &ids.ver_id, &ids.res_id));
145 EXPECT_EQ(0, ids.reg_id); 137 EXPECT_EQ(0, ids.reg_id);
146 EXPECT_EQ(0, ids.ver_id); 138 EXPECT_EQ(0, ids.ver_id);
147 EXPECT_EQ(0, ids.res_id); 139 EXPECT_EQ(0, ids.res_id);
148 140
149 ASSERT_TRUE(database->LazyOpen(true)); 141 ASSERT_TRUE(database->LazyOpen(true));
150 EXPECT_TRUE(database->GetNextAvailableIds( 142 EXPECT_TRUE(database->GetNextAvailableIds(
151 &ids.reg_id, &ids.ver_id, &ids.res_id)); 143 &ids.reg_id, &ids.ver_id, &ids.res_id));
152 EXPECT_EQ(0, ids.reg_id); 144 EXPECT_EQ(0, ids.reg_id);
153 EXPECT_EQ(0, ids.ver_id); 145 EXPECT_EQ(0, ids.ver_id);
154 EXPECT_EQ(0, ids.res_id); 146 EXPECT_EQ(0, ids.res_id);
155 147
156 // Writing a registration bumps the next available ids. 148 // Writing a registration bumps the next available ids.
157 std::vector<Resource> resources; 149 std::vector<Resource> resources;
158 RegistrationData data1; 150 RegistrationData data1;
159 data1.registration_id = 100; 151 data1.registration_id = 100;
160 data1.scope = GURL("http://example.com/foo"); 152 data1.scope = URL(origin, "/foo");
161 data1.script = GURL("http://example.com/script1.js"); 153 data1.script = URL(origin, "/script1.js");
162 data1.version_id = 200; 154 data1.version_id = 200;
163 ASSERT_TRUE(database->WriteRegistration(data1, resources)); 155 ASSERT_TRUE(database->WriteRegistration(data1, resources));
164 156
165 EXPECT_TRUE(database->GetNextAvailableIds( 157 EXPECT_TRUE(database->GetNextAvailableIds(
166 &ids.reg_id, &ids.ver_id, &ids.res_id)); 158 &ids.reg_id, &ids.ver_id, &ids.res_id));
167 EXPECT_EQ(101, ids.reg_id); 159 EXPECT_EQ(101, ids.reg_id);
168 EXPECT_EQ(201, ids.ver_id); 160 EXPECT_EQ(201, ids.ver_id);
169 EXPECT_EQ(0, ids.res_id); 161 EXPECT_EQ(0, ids.res_id);
170 162
171 // Writing a registration whose ids are lower than the stored ones should not 163 // Writing a registration whose ids are lower than the stored ones should not
172 // bump the next available ids. 164 // bump the next available ids.
173 RegistrationData data2; 165 RegistrationData data2;
174 data2.registration_id = 10; 166 data2.registration_id = 10;
175 data2.scope = GURL("http://example.com/bar"); 167 data2.scope = URL(origin, "/bar");
176 data2.script = GURL("http://example.com/script2.js"); 168 data2.script = URL(origin, "/script2.js");
177 data2.version_id = 20; 169 data2.version_id = 20;
178 ASSERT_TRUE(database->WriteRegistration(data2, resources)); 170 ASSERT_TRUE(database->WriteRegistration(data2, resources));
179 171
180 // Close and reopen the database to verify the stored values. 172 // Close and reopen the database to verify the stored values.
181 database.reset(CreateDatabase(database_dir.path())); 173 database.reset(CreateDatabase(database_dir.path()));
182 174
183 EXPECT_TRUE(database->GetNextAvailableIds( 175 EXPECT_TRUE(database->GetNextAvailableIds(
184 &ids.reg_id, &ids.ver_id, &ids.res_id)); 176 &ids.reg_id, &ids.ver_id, &ids.res_id));
185 EXPECT_EQ(101, ids.reg_id); 177 EXPECT_EQ(101, ids.reg_id);
186 EXPECT_EQ(201, ids.ver_id); 178 EXPECT_EQ(201, ids.ver_id);
187 EXPECT_EQ(0, ids.res_id); 179 EXPECT_EQ(0, ids.res_id);
188 } 180 }
189 181
190 TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { 182 TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) {
191 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 183 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
192 184
193 std::set<GURL> origins; 185 std::set<GURL> origins;
194 EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins)); 186 EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins));
195 EXPECT_TRUE(origins.empty()); 187 EXPECT_TRUE(origins.empty());
196 188
197 std::vector<Resource> resources; 189 std::vector<Resource> resources;
198 190
191 GURL origin1("http://example.com");
199 RegistrationData data1; 192 RegistrationData data1;
200 data1.registration_id = 123; 193 data1.registration_id = 123;
201 data1.scope = GURL("http://example.com/foo"); 194 data1.scope = URL(origin1, "/foo");
202 data1.script = GURL("http://example.com/script1.js"); 195 data1.script = URL(origin1, "/script1.js");
203 data1.version_id = 456; 196 data1.version_id = 456;
204 GURL origin1 = data1.script.GetOrigin();
205 ASSERT_TRUE(database->WriteRegistration(data1, resources)); 197 ASSERT_TRUE(database->WriteRegistration(data1, resources));
206 198
199 GURL origin2("https://www.example.com");
207 RegistrationData data2; 200 RegistrationData data2;
208 data2.registration_id = 234; 201 data2.registration_id = 234;
209 data2.scope = GURL("https://www.example.com/bar"); 202 data2.scope = URL(origin2, "/bar");
210 data2.script = GURL("https://www.example.com/script2.js"); 203 data2.script = URL(origin2, "/script2.js");
211 data2.version_id = 567; 204 data2.version_id = 567;
212 GURL origin2 = data2.script.GetOrigin();
213 ASSERT_TRUE(database->WriteRegistration(data2, resources)); 205 ASSERT_TRUE(database->WriteRegistration(data2, resources));
214 206
207 GURL origin3("https://example.org");
215 RegistrationData data3; 208 RegistrationData data3;
216 data3.registration_id = 345; 209 data3.registration_id = 345;
217 data3.scope = GURL("https://example.org/hoge"); 210 data3.scope = URL(origin3, "/hoge");
218 data3.script = GURL("https://example.org/script3.js"); 211 data3.script = URL(origin3, "/script3.js");
219 data3.version_id = 678; 212 data3.version_id = 678;
220 GURL origin3 = data3.script.GetOrigin();
221 ASSERT_TRUE(database->WriteRegistration(data3, resources)); 213 ASSERT_TRUE(database->WriteRegistration(data3, resources));
222 214
223 // |origin3| has two registrations. 215 // |origin3| has two registrations.
224 RegistrationData data4; 216 RegistrationData data4;
225 data4.registration_id = 456; 217 data4.registration_id = 456;
226 data4.scope = GURL("https://example.org/fuga"); 218 data4.scope = URL(origin3, "/fuga");
227 data4.script = GURL("https://example.org/script4.js"); 219 data4.script = URL(origin3, "/script4.js");
228 data4.version_id = 789; 220 data4.version_id = 789;
229 ASSERT_EQ(origin3, data4.scope.GetOrigin()); 221 ASSERT_EQ(origin3, data4.scope.GetOrigin());
230 ASSERT_TRUE(database->WriteRegistration(data4, resources)); 222 ASSERT_TRUE(database->WriteRegistration(data4, resources));
231 223
232 origins.clear(); 224 origins.clear();
233 EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins)); 225 EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins));
234 EXPECT_EQ(3U, origins.size()); 226 EXPECT_EQ(3U, origins.size());
235 EXPECT_TRUE(ContainsKey(origins, origin1)); 227 EXPECT_TRUE(ContainsKey(origins, origin1));
236 EXPECT_TRUE(ContainsKey(origins, origin2)); 228 EXPECT_TRUE(ContainsKey(origins, origin2));
237 EXPECT_TRUE(ContainsKey(origins, origin3)); 229 EXPECT_TRUE(ContainsKey(origins, origin3));
(...skipping 15 matching lines...) Expand all
253 origins.clear(); 245 origins.clear();
254 EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins)); 246 EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins));
255 EXPECT_EQ(2U, origins.size()); 247 EXPECT_EQ(2U, origins.size());
256 EXPECT_TRUE(ContainsKey(origins, origin1)); 248 EXPECT_TRUE(ContainsKey(origins, origin1));
257 EXPECT_TRUE(ContainsKey(origins, origin2)); 249 EXPECT_TRUE(ContainsKey(origins, origin2));
258 } 250 }
259 251
260 TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) { 252 TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) {
261 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 253 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
262 254
263 GURL origin("https://example.org"); 255 GURL origin1("http://example.com");
256 GURL origin2("https://www.example.com");
257 GURL origin3("https://example.org");
258
264 std::vector<RegistrationData> registrations; 259 std::vector<RegistrationData> registrations;
265 EXPECT_TRUE(database->GetRegistrationsForOrigin(origin, &registrations)); 260 EXPECT_TRUE(database->GetRegistrationsForOrigin(origin1, &registrations));
266 EXPECT_TRUE(registrations.empty()); 261 EXPECT_TRUE(registrations.empty());
267 262
268 std::vector<Resource> resources; 263 std::vector<Resource> resources;
269 264
270 RegistrationData data1; 265 RegistrationData data1;
271 data1.registration_id = 100; 266 data1.registration_id = 100;
272 data1.scope = GURL("http://example.com/foo"); 267 data1.scope = URL(origin1, "/foo");
273 data1.script = GURL("http://example.com/script1.js"); 268 data1.script = URL(origin1, "/script1.js");
274 data1.version_id = 1000; 269 data1.version_id = 1000;
275 ASSERT_TRUE(database->WriteRegistration(data1, resources)); 270 ASSERT_TRUE(database->WriteRegistration(data1, resources));
276 271
277 RegistrationData data2; 272 RegistrationData data2;
278 data2.registration_id = 200; 273 data2.registration_id = 200;
279 data2.scope = GURL("https://www.example.com/bar"); 274 data2.scope = URL(origin2, "/bar");
280 data2.script = GURL("https://www.example.com/script2.js"); 275 data2.script = URL(origin2, "/script2.js");
281 data2.version_id = 2000; 276 data2.version_id = 2000;
282 ASSERT_TRUE(database->WriteRegistration(data2, resources)); 277 ASSERT_TRUE(database->WriteRegistration(data2, resources));
283 278
284 RegistrationData data3; 279 RegistrationData data3;
285 data3.registration_id = 300; 280 data3.registration_id = 300;
286 data3.scope = GURL("https://example.org/hoge"); 281 data3.scope = URL(origin3, "/hoge");
287 data3.script = GURL("https://example.org/script3.js"); 282 data3.script = URL(origin3, "/script3.js");
288 data3.version_id = 3000; 283 data3.version_id = 3000;
289 ASSERT_TRUE(database->WriteRegistration(data3, resources)); 284 ASSERT_TRUE(database->WriteRegistration(data3, resources));
290 285
291 // Same origin with |data3|. 286 // |origin3| has two registrations.
292 RegistrationData data4; 287 RegistrationData data4;
293 data4.registration_id = 400; 288 data4.registration_id = 400;
294 data4.scope = GURL("https://example.org/fuga"); 289 data4.scope = URL(origin3, "/fuga");
295 data4.script = GURL("https://example.org/script4.js"); 290 data4.script = URL(origin3, "/script4.js");
296 data4.version_id = 4000; 291 data4.version_id = 4000;
297 ASSERT_TRUE(database->WriteRegistration(data4, resources)); 292 ASSERT_TRUE(database->WriteRegistration(data4, resources));
298 293
299 registrations.clear(); 294 registrations.clear();
300 EXPECT_TRUE(database->GetRegistrationsForOrigin(origin, &registrations)); 295 EXPECT_TRUE(database->GetRegistrationsForOrigin(origin3, &registrations));
301 EXPECT_EQ(2U, registrations.size()); 296 EXPECT_EQ(2U, registrations.size());
302 VerifyRegistrationData(data3, registrations[0]); 297 VerifyRegistrationData(data3, registrations[0]);
303 VerifyRegistrationData(data4, registrations[1]); 298 VerifyRegistrationData(data4, registrations[1]);
304 } 299 }
305 300
306 TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) { 301 TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) {
307 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 302 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
308 303
309 std::vector<RegistrationData> registrations; 304 std::vector<RegistrationData> registrations;
310 EXPECT_TRUE(database->GetAllRegistrations(&registrations)); 305 EXPECT_TRUE(database->GetAllRegistrations(&registrations));
311 EXPECT_TRUE(registrations.empty()); 306 EXPECT_TRUE(registrations.empty());
312 307
313 std::vector<Resource> resources; 308 std::vector<Resource> resources;
314 309
310 GURL origin1("http://www1.example.com");
315 RegistrationData data1; 311 RegistrationData data1;
316 data1.registration_id = 100; 312 data1.registration_id = 100;
317 data1.scope = GURL("http://www1.example.com/foo"); 313 data1.scope = URL(origin1, "/foo");
318 data1.script = GURL("http://www1.example.com/script1.js"); 314 data1.script = URL(origin1, "/script1.js");
319 data1.version_id = 1000; 315 data1.version_id = 1000;
320 ASSERT_TRUE(database->WriteRegistration(data1, resources)); 316 ASSERT_TRUE(database->WriteRegistration(data1, resources));
321 317
318 GURL origin2("http://www2.example.com");
322 RegistrationData data2; 319 RegistrationData data2;
323 data2.registration_id = 200; 320 data2.registration_id = 200;
324 data2.scope = GURL("http://www2.example.com/bar"); 321 data2.scope = URL(origin2, "/bar");
325 data2.script = GURL("http://www2.example.com/script2.js"); 322 data2.script = URL(origin2, "/script2.js");
326 data2.version_id = 2000; 323 data2.version_id = 2000;
327 ASSERT_TRUE(database->WriteRegistration(data2, resources)); 324 ASSERT_TRUE(database->WriteRegistration(data2, resources));
328 325
326 GURL origin3("http://www3.example.com");
329 RegistrationData data3; 327 RegistrationData data3;
330 data3.registration_id = 300; 328 data3.registration_id = 300;
331 data3.scope = GURL("http://www3.example.com/hoge"); 329 data3.scope = URL(origin3, "/hoge");
332 data3.script = GURL("http://www3.example.com/script3.js"); 330 data3.script = URL(origin3, "/script3.js");
333 data3.version_id = 3000; 331 data3.version_id = 3000;
334 ASSERT_TRUE(database->WriteRegistration(data3, resources)); 332 ASSERT_TRUE(database->WriteRegistration(data3, resources));
335 333
336 // Same origin with |data3|. 334 // |origin3| has two registrations.
337 RegistrationData data4; 335 RegistrationData data4;
338 data4.registration_id = 400; 336 data4.registration_id = 400;
339 data4.scope = GURL("http://www4.example.com/fuga"); 337 data4.scope = URL(origin3, "/fuga");
340 data4.script = GURL("http://www4.example.com/script4.js"); 338 data4.script = URL(origin3, "/script4.js");
341 data4.version_id = 4000; 339 data4.version_id = 4000;
342 ASSERT_TRUE(database->WriteRegistration(data4, resources)); 340 ASSERT_TRUE(database->WriteRegistration(data4, resources));
343 341
344 registrations.clear(); 342 registrations.clear();
345 EXPECT_TRUE(database->GetAllRegistrations(&registrations)); 343 EXPECT_TRUE(database->GetAllRegistrations(&registrations));
346 EXPECT_EQ(4U, registrations.size()); 344 EXPECT_EQ(4U, registrations.size());
347 VerifyRegistrationData(data1, registrations[0]); 345 VerifyRegistrationData(data1, registrations[0]);
348 VerifyRegistrationData(data2, registrations[1]); 346 VerifyRegistrationData(data2, registrations[1]);
349 VerifyRegistrationData(data3, registrations[2]); 347 VerifyRegistrationData(data3, registrations[2]);
350 VerifyRegistrationData(data4, registrations[3]); 348 VerifyRegistrationData(data4, registrations[3]);
351 } 349 }
352 350
353 // TODO(nhiroki): Record read/write operations using gtest fixture to avoid 351 // TODO(nhiroki): Record read/write operations using gtest fixture to avoid
354 // building expectations by hand. For example, expected purgeable resource ids 352 // building expectations by hand. For example, expected purgeable resource ids
355 // should be calculated automatically. 353 // should be calculated automatically.
356 TEST(ServiceWorkerDatabaseTest, Registration_Basic) { 354 TEST(ServiceWorkerDatabaseTest, Registration_Basic) {
357 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 355 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
358 356
357 GURL origin("http://example.com");
359 RegistrationData data; 358 RegistrationData data;
360 data.registration_id = 100; 359 data.registration_id = 100;
361 data.scope = GURL("http://example.com/foo"); 360 data.scope = URL(origin, "/foo");
362 data.script = GURL("http://example.com/script.js"); 361 data.script = URL(origin, "/script.js");
363 data.version_id = 200; 362 data.version_id = 200;
364 GURL origin = data.scope.GetOrigin();
365 363
366 Resource resource1 = CreateResource(1, "http://example.com/resource1"); 364 Resource resource1 = CreateResource(1, URL(origin, "/resource1"));
367 Resource resource2 = CreateResource(2, "http://example.com/resource2"); 365 Resource resource2 = CreateResource(2, URL(origin, "/resource2"));
368 366
369 std::vector<Resource> resources; 367 std::vector<Resource> resources;
370 resources.push_back(resource1); 368 resources.push_back(resource1);
371 resources.push_back(resource2); 369 resources.push_back(resource2);
372 370
373 // Write |resource1| to the uncommitted list to make sure that writing 371 // Write |resource1| to the uncommitted list to make sure that writing
374 // registration removes resource ids associated with the registration from 372 // registration removes resource ids associated with the registration from
375 // the uncommitted list. 373 // the uncommitted list.
376 std::set<int64> uncommitted_ids; 374 std::set<int64> uncommitted_ids;
377 uncommitted_ids.insert(resource1.resource_id); 375 uncommitted_ids.insert(resource1.resource_id);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 std::set<int64> purgeable_resource_ids; 407 std::set<int64> purgeable_resource_ids;
410 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids)); 408 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids));
411 EXPECT_EQ(2u, purgeable_resource_ids.size()); 409 EXPECT_EQ(2u, purgeable_resource_ids.size());
412 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource1.resource_id)); 410 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource1.resource_id));
413 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource2.resource_id)); 411 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource2.resource_id));
414 } 412 }
415 413
416 TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) { 414 TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) {
417 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 415 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
418 416
417 GURL origin("http://example.com");
419 RegistrationData data; 418 RegistrationData data;
420 data.registration_id = 100; 419 data.registration_id = 100;
421 data.scope = GURL("http://example.com/foo"); 420 data.scope = URL(origin, "/foo");
422 data.script = GURL("http://example.com/script.js"); 421 data.script = URL(origin, "/script.js");
423 data.version_id = 200; 422 data.version_id = 200;
424 GURL origin = data.scope.GetOrigin();
425 423
426 Resource resource1 = CreateResource(1, "http://example.com/resource1"); 424 Resource resource1 = CreateResource(1, URL(origin, "/resource1"));
427 Resource resource2 = CreateResource(2, "http://example.com/resource2"); 425 Resource resource2 = CreateResource(2, URL(origin, "/resource2"));
428 426
429 std::vector<Resource> resources1; 427 std::vector<Resource> resources1;
430 resources1.push_back(resource1); 428 resources1.push_back(resource1);
431 resources1.push_back(resource2); 429 resources1.push_back(resource2);
432 430
433 EXPECT_TRUE(database->WriteRegistration(data, resources1)); 431 EXPECT_TRUE(database->WriteRegistration(data, resources1));
434 432
435 // Make sure that the registration and resource records are stored. 433 // Make sure that the registration and resource records are stored.
436 RegistrationData data_out; 434 RegistrationData data_out;
437 std::vector<Resource> resources_out; 435 std::vector<Resource> resources_out;
438 EXPECT_TRUE(database->ReadRegistration( 436 EXPECT_TRUE(database->ReadRegistration(
439 data.registration_id, origin, &data_out, &resources_out)); 437 data.registration_id, origin, &data_out, &resources_out));
440 VerifyRegistrationData(data, data_out); 438 VerifyRegistrationData(data, data_out);
441 VerifyResourceRecords(resources1, resources_out); 439 VerifyResourceRecords(resources1, resources_out);
442 440
443 // Update the registration. 441 // Update the registration.
444 RegistrationData updated_data = data; 442 RegistrationData updated_data = data;
445 updated_data.version_id = data.version_id + 1; 443 updated_data.version_id = data.version_id + 1;
446 Resource resource3 = CreateResource(3, "http://example.com/resource3"); 444 Resource resource3 = CreateResource(3, URL(origin, "/resource3"));
447 Resource resource4 = CreateResource(4, "http://example.com/resource4"); 445 Resource resource4 = CreateResource(4, URL(origin, "/resource4"));
448 std::vector<Resource> resources2; 446 std::vector<Resource> resources2;
449 resources2.push_back(resource3); 447 resources2.push_back(resource3);
450 resources2.push_back(resource4); 448 resources2.push_back(resource4);
451 449
452 EXPECT_TRUE(database->WriteRegistration(updated_data, resources2)); 450 EXPECT_TRUE(database->WriteRegistration(updated_data, resources2));
453 451
454 // Make sure that |updated_data| is stored and resources referred from |data| 452 // Make sure that |updated_data| is stored and resources referred from |data|
455 // is moved to the purgeable list. 453 // is moved to the purgeable list.
456 resources_out.clear(); 454 resources_out.clear();
457 EXPECT_TRUE(database->ReadRegistration( 455 EXPECT_TRUE(database->ReadRegistration(
458 updated_data.registration_id, origin, &data_out, &resources_out)); 456 updated_data.registration_id, origin, &data_out, &resources_out));
459 VerifyRegistrationData(updated_data, data_out); 457 VerifyRegistrationData(updated_data, data_out);
460 VerifyResourceRecords(resources2, resources_out); 458 VerifyResourceRecords(resources2, resources_out);
461 459
462 std::set<int64> purgeable_resource_ids; 460 std::set<int64> purgeable_resource_ids;
463 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids)); 461 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids));
464 EXPECT_EQ(2u, purgeable_resource_ids.size()); 462 EXPECT_EQ(2u, purgeable_resource_ids.size());
465 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource1.resource_id)); 463 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource1.resource_id));
466 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource2.resource_id)); 464 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource2.resource_id));
467 } 465 }
468 466
469 TEST(ServiceWorkerDatabaseTest, Registration_Multiple) { 467 TEST(ServiceWorkerDatabaseTest, Registration_Multiple) {
470 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 468 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
471 469
470 GURL origin("http://example.com");
471
472 // Add registration1. 472 // Add registration1.
473 RegistrationData data1; 473 RegistrationData data1;
474 data1.registration_id = 100; 474 data1.registration_id = 100;
475 data1.scope = GURL("http://example.com/foo"); 475 data1.scope = URL(origin, "/foo");
476 data1.script = GURL("http://example.com/script1.js"); 476 data1.script = URL(origin, "/script1.js");
477 data1.version_id = 200; 477 data1.version_id = 200;
478 GURL origin1 = data1.scope.GetOrigin(); 478 GURL origin1 = data1.scope.GetOrigin();
479 479
480 Resource resource1 = CreateResource(1, "http://example.com/resource1"); 480 Resource resource1 = CreateResource(1, URL(origin, "/resource1"));
481 Resource resource2 = CreateResource(2, "http://example.com/resource2"); 481 Resource resource2 = CreateResource(2, URL(origin, "/resource2"));
482 482
483 std::vector<Resource> resources1; 483 std::vector<Resource> resources1;
484 resources1.push_back(resource1); 484 resources1.push_back(resource1);
485 resources1.push_back(resource2); 485 resources1.push_back(resource2);
486 EXPECT_TRUE(database->WriteRegistration(data1, resources1)); 486 EXPECT_TRUE(database->WriteRegistration(data1, resources1));
487 487
488 // Add registration2. 488 // Add registration2.
489 RegistrationData data2; 489 RegistrationData data2;
490 data2.registration_id = 101; 490 data2.registration_id = 101;
491 data2.scope = GURL("http://example.com/bar"); 491 data2.scope = URL(origin, "/bar");
492 data2.script = GURL("http://example.com/script2.js"); 492 data2.script = URL(origin, "/script2.js");
493 data2.version_id = 201; 493 data2.version_id = 201;
494 GURL origin2 = data2.scope.GetOrigin(); 494 GURL origin2 = data2.scope.GetOrigin();
495 495
496 Resource resource3 = CreateResource(3, "http://example.com/resource3"); 496 Resource resource3 = CreateResource(3, URL(origin, "/resource3"));
497 Resource resource4 = CreateResource(4, "http://example.com/resource4"); 497 Resource resource4 = CreateResource(4, URL(origin, "/resource4"));
498 498
499 std::vector<Resource> resources2; 499 std::vector<Resource> resources2;
500 resources2.push_back(resource3); 500 resources2.push_back(resource3);
501 resources2.push_back(resource4); 501 resources2.push_back(resource4);
502 EXPECT_TRUE(database->WriteRegistration(data2, resources2)); 502 EXPECT_TRUE(database->WriteRegistration(data2, resources2));
503 503
504 // Make sure that registration1 is stored. 504 // Make sure that registration1 is stored.
505 RegistrationData data_out; 505 RegistrationData data_out;
506 std::vector<Resource> resources_out; 506 std::vector<Resource> resources_out;
507 EXPECT_TRUE(database->ReadRegistration( 507 EXPECT_TRUE(database->ReadRegistration(
508 data1.registration_id, origin1, &data_out, &resources_out)); 508 data1.registration_id, origin, &data_out, &resources_out));
509 VerifyRegistrationData(data1, data_out); 509 VerifyRegistrationData(data1, data_out);
510 VerifyResourceRecords(resources1, resources_out); 510 VerifyResourceRecords(resources1, resources_out);
511 511
512 // Make sure that registration2 is also stored. 512 // Make sure that registration2 is also stored.
513 resources_out.clear(); 513 resources_out.clear();
514 EXPECT_TRUE(database->ReadRegistration( 514 EXPECT_TRUE(database->ReadRegistration(
515 data2.registration_id, origin2, &data_out, &resources_out)); 515 data2.registration_id, origin, &data_out, &resources_out));
516 VerifyRegistrationData(data2, data_out); 516 VerifyRegistrationData(data2, data_out);
517 VerifyResourceRecords(resources2, resources_out); 517 VerifyResourceRecords(resources2, resources_out);
518 518
519 std::set<int64> purgeable_resource_ids; 519 std::set<int64> purgeable_resource_ids;
520 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids)); 520 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids));
521 EXPECT_TRUE(purgeable_resource_ids.empty()); 521 EXPECT_TRUE(purgeable_resource_ids.empty());
522 522
523 // Delete registration1. 523 // Delete registration1.
524 EXPECT_TRUE(database->DeleteRegistration(data1.registration_id, origin1)); 524 EXPECT_TRUE(database->DeleteRegistration(data1.registration_id, origin));
525 525
526 // Make sure that registration1 is gone. 526 // Make sure that registration1 is gone.
527 resources_out.clear(); 527 resources_out.clear();
528 EXPECT_FALSE(database->ReadRegistration( 528 EXPECT_FALSE(database->ReadRegistration(
529 data1.registration_id, origin1, &data_out, &resources_out)); 529 data1.registration_id, origin, &data_out, &resources_out));
530 EXPECT_TRUE(resources_out.empty()); 530 EXPECT_TRUE(resources_out.empty());
531 531
532 purgeable_resource_ids.clear(); 532 purgeable_resource_ids.clear();
533 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids)); 533 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids));
534 EXPECT_EQ(2u, purgeable_resource_ids.size()); 534 EXPECT_EQ(2u, purgeable_resource_ids.size());
535 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource1.resource_id)); 535 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource1.resource_id));
536 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource2.resource_id)); 536 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource2.resource_id));
537 537
538 // Make sure that registration2 is still alive. 538 // Make sure that registration2 is still alive.
539 resources_out.clear(); 539 resources_out.clear();
540 EXPECT_TRUE(database->ReadRegistration( 540 EXPECT_TRUE(database->ReadRegistration(
541 data2.registration_id, origin2, &data_out, &resources_out)); 541 data2.registration_id, origin, &data_out, &resources_out));
542 VerifyRegistrationData(data2, data_out); 542 VerifyRegistrationData(data2, data_out);
543 VerifyResourceRecords(resources2, resources_out); 543 VerifyResourceRecords(resources2, resources_out);
544 } 544 }
545 545
546 TEST(ServiceWorkerDatabaseTest, UncommittedResourceIds) { 546 TEST(ServiceWorkerDatabaseTest, UncommittedResourceIds) {
547 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 547 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
548 548
549 // Write {1, 2, 3}. 549 // Write {1, 2, 3}.
550 std::set<int64> ids1; 550 std::set<int64> ids1;
551 ids1.insert(1); 551 ids1.insert(1);
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
694 std::set<int64> purgeable_ids_out; 694 std::set<int64> purgeable_ids_out;
695 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); 695 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out));
696 EXPECT_EQ(4u, purgeable_ids_out.size()); 696 EXPECT_EQ(4u, purgeable_ids_out.size());
697 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 1)); 697 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 1));
698 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 2)); 698 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 2));
699 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 3)); 699 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 3));
700 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 4)); 700 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 4));
701 } 701 }
702 702
703 } // namespace content 703 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698