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

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

Issue 188283003: Add ServiceWorkerVersion::status() (which is to be persisted unlike running status) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: added more statuses Created 6 years, 9 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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/run_loop.h" 6 #include "base/run_loop.h"
7 #include "content/browser/service_worker/embedded_worker_registry.h" 7 #include "content/browser/service_worker/embedded_worker_registry.h"
8 #include "content/browser/service_worker/embedded_worker_test_helper.h" 8 #include "content/browser/service_worker/embedded_worker_test_helper.h"
9 #include "content/browser/service_worker/service_worker_context_core.h" 9 #include "content/browser/service_worker/service_worker_context_core.h"
10 #include "content/browser/service_worker/service_worker_registration.h" 10 #include "content/browser/service_worker/service_worker_registration.h"
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 }; 129 };
130 130
131 TEST_F(ServiceWorkerVersionTest, ConcurrentStartAndStop) { 131 TEST_F(ServiceWorkerVersionTest, ConcurrentStartAndStop) {
132 // Call StartWorker() multiple times. 132 // Call StartWorker() multiple times.
133 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED; 133 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED;
134 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED; 134 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED;
135 ServiceWorkerStatusCode status3 = SERVICE_WORKER_ERROR_FAILED; 135 ServiceWorkerStatusCode status3 = SERVICE_WORKER_ERROR_FAILED;
136 version_->StartWorker(CreateReceiverOnCurrentThread(&status1)); 136 version_->StartWorker(CreateReceiverOnCurrentThread(&status1));
137 version_->StartWorker(CreateReceiverOnCurrentThread(&status2)); 137 version_->StartWorker(CreateReceiverOnCurrentThread(&status2));
138 138
139 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->status()); 139 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status());
140 base::RunLoop().RunUntilIdle(); 140 base::RunLoop().RunUntilIdle();
141 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->status()); 141 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
142 142
143 // Call StartWorker() after it's started. 143 // Call StartWorker() after it's started.
144 version_->StartWorker(CreateReceiverOnCurrentThread(&status3)); 144 version_->StartWorker(CreateReceiverOnCurrentThread(&status3));
145 base::RunLoop().RunUntilIdle(); 145 base::RunLoop().RunUntilIdle();
146 146
147 // All should just succeed. 147 // All should just succeed.
148 EXPECT_EQ(SERVICE_WORKER_OK, status1); 148 EXPECT_EQ(SERVICE_WORKER_OK, status1);
149 EXPECT_EQ(SERVICE_WORKER_OK, status2); 149 EXPECT_EQ(SERVICE_WORKER_OK, status2);
150 EXPECT_EQ(SERVICE_WORKER_OK, status3); 150 EXPECT_EQ(SERVICE_WORKER_OK, status3);
151 151
152 // Call StopWorker() multiple times. 152 // Call StopWorker() multiple times.
153 status1 = SERVICE_WORKER_ERROR_FAILED; 153 status1 = SERVICE_WORKER_ERROR_FAILED;
154 status2 = SERVICE_WORKER_ERROR_FAILED; 154 status2 = SERVICE_WORKER_ERROR_FAILED;
155 status3 = SERVICE_WORKER_ERROR_FAILED; 155 status3 = SERVICE_WORKER_ERROR_FAILED;
156 version_->StopWorker(CreateReceiverOnCurrentThread(&status1)); 156 version_->StopWorker(CreateReceiverOnCurrentThread(&status1));
157 version_->StopWorker(CreateReceiverOnCurrentThread(&status2)); 157 version_->StopWorker(CreateReceiverOnCurrentThread(&status2));
158 158
159 // Also try calling StartWorker while StopWorker is in queue. 159 // Also try calling StartWorker while StopWorker is in queue.
160 version_->StartWorker(CreateReceiverOnCurrentThread(&status3)); 160 version_->StartWorker(CreateReceiverOnCurrentThread(&status3));
161 161
162 EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->status()); 162 EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->running_status());
163 base::RunLoop().RunUntilIdle(); 163 base::RunLoop().RunUntilIdle();
164 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->status()); 164 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
165 165
166 // All StopWorker should just succeed, while StartWorker fails. 166 // All StopWorker should just succeed, while StartWorker fails.
167 EXPECT_EQ(SERVICE_WORKER_OK, status1); 167 EXPECT_EQ(SERVICE_WORKER_OK, status1);
168 EXPECT_EQ(SERVICE_WORKER_OK, status2); 168 EXPECT_EQ(SERVICE_WORKER_OK, status2);
169 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, status3); 169 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, status3);
170 } 170 }
171 171
172 TEST_F(ServiceWorkerVersionTest, SendMessage) { 172 TEST_F(ServiceWorkerVersionTest, SendMessage) {
173 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->status()); 173 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
174 174
175 // Send a message without starting the worker. 175 // Send a message without starting the worker.
176 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 176 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
177 version_->SendMessage(TestMsg_Message(), 177 version_->SendMessage(TestMsg_Message(),
178 CreateReceiverOnCurrentThread(&status)); 178 CreateReceiverOnCurrentThread(&status));
179 base::RunLoop().RunUntilIdle(); 179 base::RunLoop().RunUntilIdle();
180 EXPECT_EQ(SERVICE_WORKER_OK, status); 180 EXPECT_EQ(SERVICE_WORKER_OK, status);
181 181
182 // The worker should be now started. 182 // The worker should be now started.
183 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->status()); 183 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
184 184
185 // Stop the worker, and then send the message immediately. 185 // Stop the worker, and then send the message immediately.
186 ServiceWorkerStatusCode msg_status = SERVICE_WORKER_ERROR_FAILED; 186 ServiceWorkerStatusCode msg_status = SERVICE_WORKER_ERROR_FAILED;
187 ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED; 187 ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED;
188 version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status)); 188 version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status));
189 version_->SendMessage(TestMsg_Message(), 189 version_->SendMessage(TestMsg_Message(),
190 CreateReceiverOnCurrentThread(&msg_status)); 190 CreateReceiverOnCurrentThread(&msg_status));
191 base::RunLoop().RunUntilIdle(); 191 base::RunLoop().RunUntilIdle();
192 EXPECT_EQ(SERVICE_WORKER_OK, stop_status); 192 EXPECT_EQ(SERVICE_WORKER_OK, stop_status);
193 193
194 // SendMessage should return START_WORKER_FAILED error since it tried to 194 // SendMessage should return START_WORKER_FAILED error since it tried to
195 // start a worker while it was stopping. 195 // start a worker while it was stopping.
196 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, msg_status); 196 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, msg_status);
197 } 197 }
198 198
199 TEST_F(ServiceWorkerVersionTest, ReSendMessageAfterStop) { 199 TEST_F(ServiceWorkerVersionTest, ReSendMessageAfterStop) {
200 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->status()); 200 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
201 201
202 // Start the worker. 202 // Start the worker.
203 ServiceWorkerStatusCode start_status = SERVICE_WORKER_ERROR_FAILED; 203 ServiceWorkerStatusCode start_status = SERVICE_WORKER_ERROR_FAILED;
204 version_->StartWorker(CreateReceiverOnCurrentThread(&start_status)); 204 version_->StartWorker(CreateReceiverOnCurrentThread(&start_status));
205 base::RunLoop().RunUntilIdle(); 205 base::RunLoop().RunUntilIdle();
206 EXPECT_EQ(SERVICE_WORKER_OK, start_status); 206 EXPECT_EQ(SERVICE_WORKER_OK, start_status);
207 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->status()); 207 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
208 208
209 // Stop the worker, and then send the message immediately. 209 // Stop the worker, and then send the message immediately.
210 ServiceWorkerStatusCode msg_status = SERVICE_WORKER_ERROR_FAILED; 210 ServiceWorkerStatusCode msg_status = SERVICE_WORKER_ERROR_FAILED;
211 ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED; 211 ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED;
212 version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status)); 212 version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status));
213 version_->SendMessage(TestMsg_Message(), 213 version_->SendMessage(TestMsg_Message(),
214 CreateReceiverOnCurrentThread(&msg_status)); 214 CreateReceiverOnCurrentThread(&msg_status));
215 base::RunLoop().RunUntilIdle(); 215 base::RunLoop().RunUntilIdle();
216 EXPECT_EQ(SERVICE_WORKER_OK, stop_status); 216 EXPECT_EQ(SERVICE_WORKER_OK, stop_status);
217 217
218 // SendMessage should return START_WORKER_FAILED error since it tried to 218 // SendMessage should return START_WORKER_FAILED error since it tried to
219 // start a worker while it was stopping. 219 // start a worker while it was stopping.
220 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, msg_status); 220 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, msg_status);
221 221
222 // Resend the message, which should succeed and restart the worker. 222 // Resend the message, which should succeed and restart the worker.
223 version_->SendMessage(TestMsg_Message(), 223 version_->SendMessage(TestMsg_Message(),
224 CreateReceiverOnCurrentThread(&msg_status)); 224 CreateReceiverOnCurrentThread(&msg_status));
225 base::RunLoop().RunUntilIdle(); 225 base::RunLoop().RunUntilIdle();
226 EXPECT_EQ(SERVICE_WORKER_OK, msg_status); 226 EXPECT_EQ(SERVICE_WORKER_OK, msg_status);
227 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->status()); 227 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
228 } 228 }
229 229
230 TEST_F(ServiceWorkerVersionTest, SendMessageAndRegisterCallback) { 230 TEST_F(ServiceWorkerVersionTest, SendMessageAndRegisterCallback) {
231 // Send multiple messages and verify responses. 231 // Send multiple messages and verify responses.
232 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED; 232 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED;
233 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED; 233 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED;
234 int value1 = -1, value2 = -1; 234 int value1 = -1, value2 = -1;
235 235
236 version_->SendMessageAndRegisterCallback( 236 version_->SendMessageAndRegisterCallback(
237 TestMsg_Request(111), 237 TestMsg_Request(111),
238 base::Bind(&ReceiveResponse, &status1, &value1)); 238 base::Bind(&ReceiveResponse, &status1, &value1));
239 version_->SendMessageAndRegisterCallback( 239 version_->SendMessageAndRegisterCallback(
240 TestMsg_Request(333), 240 TestMsg_Request(333),
241 base::Bind(&ReceiveResponse, &status2, &value2)); 241 base::Bind(&ReceiveResponse, &status2, &value2));
242 base::RunLoop().RunUntilIdle(); 242 base::RunLoop().RunUntilIdle();
243 243
244 EXPECT_EQ(SERVICE_WORKER_OK, status1); 244 EXPECT_EQ(SERVICE_WORKER_OK, status1);
245 EXPECT_EQ(SERVICE_WORKER_OK, status2); 245 EXPECT_EQ(SERVICE_WORKER_OK, status2);
246 EXPECT_EQ(111 * 2, value1); 246 EXPECT_EQ(111 * 2, value1);
247 EXPECT_EQ(333 * 2, value2); 247 EXPECT_EQ(333 * 2, value2);
248 } 248 }
249 249
250 } // namespace content 250 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698