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

Side by Side Diff: components/offline_pages/background/request_coordinator_unittest.cc

Issue 2219393004: Adds an observer for the request coordinator. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@resumeAPI
Patch Set: Created 4 years, 4 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
OLDNEW
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 "components/offline_pages/background/request_coordinator.h" 5 #include "components/offline_pages/background/request_coordinator.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 if (offliner_.get() == nullptr) { 119 if (offliner_.get() == nullptr) {
120 offliner_.reset(new OfflinerStub()); 120 offliner_.reset(new OfflinerStub());
121 } 121 }
122 return offliner_.get(); 122 return offliner_.get();
123 } 123 }
124 124
125 private: 125 private:
126 std::unique_ptr<OfflinerStub> offliner_; 126 std::unique_ptr<OfflinerStub> offliner_;
127 }; 127 };
128 128
129 class ObserverStub : public RequestCoordinator::Observer {
130 public:
131 ObserverStub()
132 : available_called_(false),
133 succeeded_called_(false),
134 failed_called_(false),
135 paused_called_(false) {}
136
137 void clear() {
138 available_called_ = false;
139 succeeded_called_ = false;
140 failed_called_ = false;
141 paused_called_ = false;
142 }
143
144 void OnAvailable(RequestCoordinator::RequestInfo info) override {
145 available_called_ = true;
146 }
147
148 void OnSucceeded(RequestCoordinator::RequestInfo info) override {
149 succeeded_called_ = true;
150 }
151
152 void OnFailed(RequestCoordinator::RequestInfo info) override {
153 failed_called_ = true;
154 }
155
156 void OnPaused(RequestCoordinator::RequestInfo info) override {
157 paused_called_ = true;
158 }
159
160 bool available_called() { return available_called_; }
161 bool succeeded_called() { return succeeded_called_; }
162 bool failed_called() { return failed_called_; }
163 bool paused_called() { return paused_called_; }
164
165 private:
166 bool available_called_;
167 bool succeeded_called_;
168 bool failed_called_;
169 bool paused_called_;
170 };
171
129 class RequestCoordinatorTest 172 class RequestCoordinatorTest
130 : public testing::Test { 173 : public testing::Test {
131 public: 174 public:
132 RequestCoordinatorTest(); 175 RequestCoordinatorTest();
133 ~RequestCoordinatorTest() override; 176 ~RequestCoordinatorTest() override;
134 177
135 void SetUp() override; 178 void SetUp() override;
136 179
137 void PumpLoop(); 180 void PumpLoop();
138 181
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 void AdvanceClockBy(base::TimeDelta delta) { 241 void AdvanceClockBy(base::TimeDelta delta) {
199 task_runner_->FastForwardBy(delta); 242 task_runner_->FastForwardBy(delta);
200 } 243 }
201 244
202 Offliner::RequestStatus last_offlining_status() const { 245 Offliner::RequestStatus last_offlining_status() const {
203 return coordinator_->last_offlining_status_; 246 return coordinator_->last_offlining_status_;
204 } 247 }
205 248
206 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); } 249 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); }
207 250
251 ObserverStub observer() { return observer_; }
252
208 private: 253 private:
209 RequestQueue::GetRequestsResult last_get_requests_result_; 254 RequestQueue::GetRequestsResult last_get_requests_result_;
210 std::vector<SavePageRequest> last_requests_; 255 std::vector<SavePageRequest> last_requests_;
211 std::vector<ClientId> last_client_ids_; 256 std::vector<ClientId> last_client_ids_;
212 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; 257 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
213 base::ThreadTaskRunnerHandle task_runner_handle_; 258 base::ThreadTaskRunnerHandle task_runner_handle_;
214 std::unique_ptr<RequestCoordinator> coordinator_; 259 std::unique_ptr<RequestCoordinator> coordinator_;
215 OfflinerStub* offliner_; 260 OfflinerStub* offliner_;
216 base::WaitableEvent waiter_; 261 base::WaitableEvent waiter_;
262 ObserverStub observer_;
217 }; 263 };
218 264
219 RequestCoordinatorTest::RequestCoordinatorTest() 265 RequestCoordinatorTest::RequestCoordinatorTest()
220 : last_get_requests_result_(RequestQueue::GetRequestsResult::STORE_FAILURE), 266 : last_get_requests_result_(RequestQueue::GetRequestsResult::STORE_FAILURE),
221 task_runner_(new base::TestMockTimeTaskRunner), 267 task_runner_(new base::TestMockTimeTaskRunner),
222 task_runner_handle_(task_runner_), 268 task_runner_handle_(task_runner_),
223 offliner_(nullptr), 269 offliner_(nullptr),
224 waiter_(base::WaitableEvent::ResetPolicy::MANUAL, 270 waiter_(base::WaitableEvent::ResetPolicy::MANUAL,
225 base::WaitableEvent::InitialState::NOT_SIGNALED) {} 271 base::WaitableEvent::InitialState::NOT_SIGNALED) {}
226 272
227 RequestCoordinatorTest::~RequestCoordinatorTest() {} 273 RequestCoordinatorTest::~RequestCoordinatorTest() {}
228 274
229 void RequestCoordinatorTest::SetUp() { 275 void RequestCoordinatorTest::SetUp() {
230 std::unique_ptr<OfflinerPolicy> policy(new OfflinerPolicy()); 276 std::unique_ptr<OfflinerPolicy> policy(new OfflinerPolicy());
231 std::unique_ptr<OfflinerFactory> factory(new OfflinerFactoryStub()); 277 std::unique_ptr<OfflinerFactory> factory(new OfflinerFactoryStub());
232 // Save the offliner for use by the tests. 278 // Save the offliner for use by the tests.
233 offliner_ = 279 offliner_ =
234 reinterpret_cast<OfflinerStub*>(factory->GetOffliner(policy.get())); 280 reinterpret_cast<OfflinerStub*>(factory->GetOffliner(policy.get()));
235 std::unique_ptr<RequestQueueInMemoryStore> 281 std::unique_ptr<RequestQueueInMemoryStore>
236 store(new RequestQueueInMemoryStore()); 282 store(new RequestQueueInMemoryStore());
237 std::unique_ptr<RequestQueue> queue(new RequestQueue(std::move(store))); 283 std::unique_ptr<RequestQueue> queue(new RequestQueue(std::move(store)));
238 std::unique_ptr<Scheduler> scheduler_stub(new SchedulerStub()); 284 std::unique_ptr<Scheduler> scheduler_stub(new SchedulerStub());
239 coordinator_.reset(new RequestCoordinator( 285 coordinator_.reset(new RequestCoordinator(
240 std::move(policy), std::move(factory), std::move(queue), 286 std::move(policy), std::move(factory), std::move(queue),
241 std::move(scheduler_stub))); 287 std::move(scheduler_stub)));
288 coordinator_->AddObserver(&observer_);
242 } 289 }
243 290
244 void RequestCoordinatorTest::PumpLoop() { 291 void RequestCoordinatorTest::PumpLoop() {
245 task_runner_->RunUntilIdle(); 292 task_runner_->RunUntilIdle();
246 } 293 }
247 294
248 void RequestCoordinatorTest::GetRequestsDone( 295 void RequestCoordinatorTest::GetRequestsDone(
249 RequestQueue::GetRequestsResult result, 296 RequestQueue::GetRequestsResult result,
250 const std::vector<SavePageRequest>& requests) { 297 const std::vector<SavePageRequest>& requests) {
251 last_get_requests_result_ = result; 298 last_get_requests_result_ = result;
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 EXPECT_EQ(kClientId1, last_requests()[0].client_id()); 366 EXPECT_EQ(kClientId1, last_requests()[0].client_id());
320 367
321 // Expect that the scheduler got notified. 368 // Expect that the scheduler got notified.
322 SchedulerStub* scheduler_stub = reinterpret_cast<SchedulerStub*>( 369 SchedulerStub* scheduler_stub = reinterpret_cast<SchedulerStub*>(
323 coordinator()->scheduler()); 370 coordinator()->scheduler());
324 EXPECT_TRUE(scheduler_stub->schedule_called()); 371 EXPECT_TRUE(scheduler_stub->schedule_called());
325 EXPECT_EQ(coordinator() 372 EXPECT_EQ(coordinator()
326 ->GetTriggerConditionsForUserRequest() 373 ->GetTriggerConditionsForUserRequest()
327 .minimum_battery_percentage, 374 .minimum_battery_percentage,
328 scheduler_stub->conditions()->minimum_battery_percentage); 375 scheduler_stub->conditions()->minimum_battery_percentage);
376
377 // Check that the observer got the notification that a page is available
378 EXPECT_EQ(true, observer().available_called());
329 } 379 }
330 380
331 TEST_F(RequestCoordinatorTest, OfflinerDoneRequestSucceeded) { 381 TEST_F(RequestCoordinatorTest, OfflinerDoneRequestSucceeded) {
332 // Add a request to the queue, wait for callbacks to finish. 382 // Add a request to the queue, wait for callbacks to finish.
333 offline_pages::SavePageRequest request( 383 offline_pages::SavePageRequest request(
334 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested); 384 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested);
335 request.MarkAttemptStarted(base::Time::Now()); 385 request.MarkAttemptStarted(base::Time::Now());
336 coordinator()->queue()->AddRequest( 386 coordinator()->queue()->AddRequest(
337 request, 387 request,
338 base::Bind(&RequestCoordinatorTest::AddRequestDone, 388 base::Bind(&RequestCoordinatorTest::AddRequestDone,
(...skipping 21 matching lines...) Expand all
360 // Verify the request gets removed from the queue, and wait for callbacks. 410 // Verify the request gets removed from the queue, and wait for callbacks.
361 coordinator()->queue()->GetRequests( 411 coordinator()->queue()->GetRequests(
362 base::Bind(&RequestCoordinatorTest::GetRequestsDone, 412 base::Bind(&RequestCoordinatorTest::GetRequestsDone,
363 base::Unretained(this))); 413 base::Unretained(this)));
364 PumpLoop(); 414 PumpLoop();
365 415
366 // We should not find any requests in the queue anymore. 416 // We should not find any requests in the queue anymore.
367 // RequestPicker should *not* have tried to start an additional job, 417 // RequestPicker should *not* have tried to start an additional job,
368 // because the request queue is empty now. 418 // because the request queue is empty now.
369 EXPECT_EQ(0UL, last_requests().size()); 419 EXPECT_EQ(0UL, last_requests().size());
420 // Check that the observer got the notification that we succeeded.
421 EXPECT_EQ(true, observer().succeeded_called());
370 } 422 }
371 423
372 TEST_F(RequestCoordinatorTest, OfflinerDoneRequestFailed) { 424 TEST_F(RequestCoordinatorTest, OfflinerDoneRequestFailed) {
373 // Add a request to the queue, wait for callbacks to finish. 425 // Add a request to the queue, wait for callbacks to finish.
374 offline_pages::SavePageRequest request( 426 offline_pages::SavePageRequest request(
375 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested); 427 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested);
376 request.MarkAttemptStarted(base::Time::Now()); 428 request.MarkAttemptStarted(base::Time::Now());
377 coordinator()->queue()->AddRequest( 429 coordinator()->queue()->AddRequest(
378 request, 430 request,
379 base::Bind(&RequestCoordinatorTest::AddRequestDone, 431 base::Bind(&RequestCoordinatorTest::AddRequestDone,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 466
415 // Verify neither request is removed from the queue; wait for callbacks. 467 // Verify neither request is removed from the queue; wait for callbacks.
416 coordinator()->queue()->GetRequests( 468 coordinator()->queue()->GetRequests(
417 base::Bind(&RequestCoordinatorTest::GetRequestsDone, 469 base::Bind(&RequestCoordinatorTest::GetRequestsDone,
418 base::Unretained(this))); 470 base::Unretained(this)));
419 PumpLoop(); 471 PumpLoop();
420 472
421 // Now just one request in the queue since failed request removed 473 // Now just one request in the queue since failed request removed
422 // (for single attempt policy). 474 // (for single attempt policy).
423 EXPECT_EQ(1UL, last_requests().size()); 475 EXPECT_EQ(1UL, last_requests().size());
476 // Check that the observer got the notification that we failed
477 EXPECT_EQ(true, observer().failed_called());
424 } 478 }
425 479
426 TEST_F(RequestCoordinatorTest, OfflinerDoneForegroundCancel) { 480 TEST_F(RequestCoordinatorTest, OfflinerDoneForegroundCancel) {
427 // Add a request to the queue, wait for callbacks to finish. 481 // Add a request to the queue, wait for callbacks to finish.
428 offline_pages::SavePageRequest request( 482 offline_pages::SavePageRequest request(
429 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested); 483 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested);
430 request.MarkAttemptStarted(base::Time::Now()); 484 request.MarkAttemptStarted(base::Time::Now());
431 coordinator()->queue()->AddRequest( 485 coordinator()->queue()->AddRequest(
432 request, base::Bind(&RequestCoordinatorTest::AddRequestDone, 486 request, base::Bind(&RequestCoordinatorTest::AddRequestDone,
433 base::Unretained(this))); 487 base::Unretained(this)));
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 // Wait for async get to finish. 706 // Wait for async get to finish.
653 WaitForCallback(); 707 WaitForCallback();
654 PumpLoop(); 708 PumpLoop();
655 709
656 // Check that the statuses found in the callback match what we expect. 710 // Check that the statuses found in the callback match what we expect.
657 EXPECT_EQ(2UL, last_client_ids().size()); 711 EXPECT_EQ(2UL, last_client_ids().size());
658 EXPECT_EQ(kId1, last_client_ids().at(0).id); 712 EXPECT_EQ(kId1, last_client_ids().at(0).id);
659 EXPECT_EQ(kId2, last_client_ids().at(1).id); 713 EXPECT_EQ(kId2, last_client_ids().at(1).id);
660 } 714 }
661 715
716 TEST_F(RequestCoordinatorTest, PauseAndResumeObserver) {
717 // Add a request to the queue.
718 offline_pages::SavePageRequest request1(kRequestId1, kUrl1, kClientId1,
719 base::Time::Now(), kUserRequested);
720 coordinator()->queue()->AddRequest(
721 request1, base::Bind(&RequestCoordinatorTest::AddRequestDone,
722 base::Unretained(this)));
723 PumpLoop();
724
725 // Pause the request.
726 std::vector<ClientId> client_ids;
727 client_ids.push_back(kClientId1);
728 coordinator()->PauseRequests(client_ids);
729 PumpLoop();
730
731 EXPECT_EQ(true, observer().paused_called());
732
733 // Clear out the observer before the next call.
734 observer().clear();
735
736 // Resume the request.
737 coordinator()->ResumeRequests(client_ids);
738 PumpLoop();
739
740 EXPECT_EQ(true, observer().available_called());
741 }
742
662 } // namespace offline_pages 743 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698