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

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

Issue 248803003: ServiceWorker: Store registration data in ServiceWorkerDatabase (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase on https://codereview.chromium.org/257593003/ Created 6 years, 8 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
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 "base/files/scoped_temp_dir.h" 7 #include "base/files/scoped_temp_dir.h"
8 #include "base/stl_util.h"
9 #include "content/browser/service_worker/service_worker_database.pb.h"
8 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
9 11
10 namespace content { 12 namespace content {
11 13
12 namespace { 14 namespace {
13 15
14 struct AvailableIds { 16 struct AvailableIds {
15 int64 reg_id; 17 int64 reg_id;
16 int64 res_id; 18 int64 res_id;
17 int64 ver_id; 19 int64 ver_id;
18 20
19 AvailableIds() : reg_id(-1), res_id(-1), ver_id(-1) {} 21 AvailableIds() : reg_id(-1), res_id(-1), ver_id(-1) {}
20 ~AvailableIds() {} 22 ~AvailableIds() {}
21 }; 23 };
22 24
23 ServiceWorkerDatabase* CreateDatabase(const base::FilePath& path) { 25 ServiceWorkerDatabase* CreateDatabase(const base::FilePath& path) {
24 return new ServiceWorkerDatabase(path); 26 return new ServiceWorkerDatabase(path);
25 } 27 }
26 28
27 ServiceWorkerDatabase* CreateDatabaseInMemory() { 29 ServiceWorkerDatabase* CreateDatabaseInMemory() {
28 return new ServiceWorkerDatabase(base::FilePath()); 30 return new ServiceWorkerDatabase(base::FilePath());
29 } 31 }
30 32
33 void VerifyRegistrationData(
34 const ServiceWorkerRegistrationData& expected,
35 const ServiceWorkerRegistrationData& actual) {
36 EXPECT_EQ(expected.registration_id(), actual.registration_id());
37 EXPECT_EQ(expected.scope_url(), actual.scope_url());
38 EXPECT_EQ(expected.script_url(), actual.script_url());
39 EXPECT_EQ(expected.version_id(), actual.version_id());
40 }
41
31 } // namespace 42 } // namespace
32 43
33 TEST(ServiceWorkerDatabaseTest, OpenDatabase) { 44 TEST(ServiceWorkerDatabaseTest, OpenDatabase) {
34 base::ScopedTempDir database_dir; 45 base::ScopedTempDir database_dir;
35 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); 46 ASSERT_TRUE(database_dir.CreateUniqueTempDir());
36 scoped_ptr<ServiceWorkerDatabase> database( 47 scoped_ptr<ServiceWorkerDatabase> database(
37 CreateDatabase(database_dir.path())); 48 CreateDatabase(database_dir.path()));
38 49
39 // Should be false because the database does not exist at the path. 50 // Should be false because the database does not exist at the path.
40 EXPECT_FALSE(database->LazyOpen(false)); 51 EXPECT_FALSE(database->LazyOpen(false));
(...skipping 25 matching lines...) Expand all
66 EXPECT_FALSE(database->GetNextAvailableIds( 77 EXPECT_FALSE(database->GetNextAvailableIds(
67 &ids.reg_id, &ids.ver_id, &ids.res_id)); 78 &ids.reg_id, &ids.ver_id, &ids.res_id));
68 79
69 ASSERT_TRUE(database->LazyOpen(true)); 80 ASSERT_TRUE(database->LazyOpen(true));
70 EXPECT_TRUE(database->GetNextAvailableIds( 81 EXPECT_TRUE(database->GetNextAvailableIds(
71 &ids.reg_id, &ids.ver_id, &ids.res_id)); 82 &ids.reg_id, &ids.ver_id, &ids.res_id));
72 EXPECT_EQ(0, ids.reg_id); 83 EXPECT_EQ(0, ids.reg_id);
73 EXPECT_EQ(0, ids.ver_id); 84 EXPECT_EQ(0, ids.ver_id);
74 EXPECT_EQ(0, ids.res_id); 85 EXPECT_EQ(0, ids.res_id);
75 86
76 // TODO(nhiroki): Test GetNextAvailableIds() after update these ids. 87 // Writing a registration bumps the next available ids.
88 std::vector<ServiceWorkerResourceRecord> resources;
89 ServiceWorkerRegistrationData data;
90 data.set_registration_id(100);
91 data.set_scope_url("http://example.com/foo");
92 data.set_script_url("http://example.com/script.js");
93 data.set_version_id(200);
94 ASSERT_TRUE(database->WriteRegistration(data, resources));
95
96 EXPECT_TRUE(database->GetNextAvailableIds(
97 &ids.reg_id, &ids.ver_id, &ids.res_id));
98 EXPECT_EQ(101, ids.reg_id);
99 EXPECT_EQ(201, ids.ver_id);
100 EXPECT_EQ(0, ids.res_id);
101 }
102
103 TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) {
104 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
105
106 std::set<GURL> origins;
107 EXPECT_FALSE(database->GetOriginsWithRegistrations(&origins));
108
109 std::vector<ServiceWorkerResourceRecord> resources;
110
111 ServiceWorkerRegistrationData data1;
112 data1.set_registration_id(123);
113 data1.set_scope_url("http://example.com/foo");
114 data1.set_script_url("http://example.com/script1.js");
115 data1.set_version_id(456);
116 ASSERT_TRUE(database->WriteRegistration(data1, resources));
117
118 ServiceWorkerRegistrationData data2;
119 data2.set_registration_id(234);
120 data2.set_scope_url("https://www.example.com/bar");
121 data2.set_script_url("https://www.example.com/script2.js");
122 data2.set_version_id(567);
123 ASSERT_TRUE(database->WriteRegistration(data2, resources));
124
125 ServiceWorkerRegistrationData data3;
126 data3.set_registration_id(345);
127 data3.set_scope_url("https://example.org/hoge");
128 data3.set_script_url("https://example.org/script3.js");
129 data3.set_version_id(678);
130 ASSERT_TRUE(database->WriteRegistration(data3, resources));
131
132 // Same origin with |data3|.
133 ServiceWorkerRegistrationData data4;
134 data4.set_registration_id(456);
135 data4.set_scope_url("https://example.org/fuga");
136 data4.set_script_url("https://example.org/script4.js");
137 data4.set_version_id(789);
138 ASSERT_TRUE(database->WriteRegistration(data4, resources));
139
140 EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins));
141 EXPECT_EQ(3U, origins.size());
142 EXPECT_TRUE(ContainsKey(origins, GURL("http://example.com")));
143 EXPECT_TRUE(ContainsKey(origins, GURL("https://www.example.com")));
144 EXPECT_TRUE(ContainsKey(origins, GURL("https://example.org")));
145 }
146
147 TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) {
148 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
149
150 GURL origin("https://example.org");
151 std::vector<ServiceWorkerRegistrationData> registrations;
152 EXPECT_FALSE(database->GetRegistrationsForOrigin(origin, &registrations));
153
154 std::vector<ServiceWorkerResourceRecord> resources;
155
156 ServiceWorkerRegistrationData data1;
157 data1.set_registration_id(100);
158 data1.set_scope_url("http://example.com/foo");
159 data1.set_script_url("http://example.com/script1.js");
160 data1.set_version_id(1000);
161 ASSERT_TRUE(database->WriteRegistration(data1, resources));
162
163 ServiceWorkerRegistrationData data2;
164 data2.set_registration_id(200);
165 data2.set_scope_url("https://www.example.com/bar");
166 data2.set_script_url("https://www.example.com/script2.js");
167 data2.set_version_id(2000);
168 ASSERT_TRUE(database->WriteRegistration(data2, resources));
169
170 ServiceWorkerRegistrationData data3;
171 data3.set_registration_id(300);
172 data3.set_scope_url("https://example.org/hoge");
173 data3.set_script_url("https://example.org/script3.js");
174 data3.set_version_id(3000);
175 ASSERT_TRUE(database->WriteRegistration(data3, resources));
176
177 // Same origin with |data3|.
178 ServiceWorkerRegistrationData data4;
179 data4.set_registration_id(400);
180 data4.set_scope_url("https://example.org/fuga");
181 data4.set_script_url("https://example.org/script4.js");
182 data4.set_version_id(4000);
183 ASSERT_TRUE(database->WriteRegistration(data4, resources));
184
185 EXPECT_TRUE(database->GetRegistrationsForOrigin(origin, &registrations));
186 EXPECT_EQ(2U, registrations.size());
187 VerifyRegistrationData(data3, registrations[0]);
188 VerifyRegistrationData(data4, registrations[1]);
189 }
190
191 TEST(ServiceWorkerDatabaseTest, Registration) {
192 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
193
194 ServiceWorkerRegistrationData data;
195 data.set_registration_id(100);
196 data.set_scope_url("http://example.com/foo");
197 data.set_script_url("http://example.com/script.js");
198 data.set_version_id(200);
199
200 // TODO(nhiroki): Test ResourceRecord manipulation.
201 std::vector<ServiceWorkerResourceRecord> resources;
202
203 database->WriteRegistration(data, resources);
204
205 ServiceWorkerRegistrationData data_out;
206 std::vector<ServiceWorkerResourceRecord> resources_out;
207 database->ReadRegistration(data.registration_id(),
208 GURL("http://example.com"),
209 &data_out, &resources_out);
210
211 VerifyRegistrationData(data, data_out);
77 } 212 }
78 213
79 } // namespace content 214 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698