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

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

Issue 2473553004: Request Picker task (Closed)
Patch Set: CR feedback per EStade, FGorski, and DougArnett Created 4 years, 1 month 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 <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/location.h" 13 #include "base/location.h"
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "base/synchronization/waitable_event.h" 15 #include "base/synchronization/waitable_event.h"
16 #include "base/sys_info.h" 16 #include "base/sys_info.h"
17 #include "base/test/test_mock_time_task_runner.h" 17 #include "base/test/test_mock_time_task_runner.h"
18 #include "base/threading/thread_task_runner_handle.h" 18 #include "base/threading/thread_task_runner_handle.h"
19 #include "base/time/time.h" 19 #include "base/time/time.h"
20 #include "components/offline_pages/background/device_conditions.h" 20 #include "components/offline_pages/background/device_conditions.h"
21 #include "components/offline_pages/background/offliner.h" 21 #include "components/offline_pages/background/offliner.h"
22 #include "components/offline_pages/background/offliner_factory.h" 22 #include "components/offline_pages/background/offliner_factory.h"
23 #include "components/offline_pages/background/offliner_policy.h" 23 #include "components/offline_pages/background/offliner_policy.h"
24 #include "components/offline_pages/background/pick_request_task_factory.h"
24 #include "components/offline_pages/background/request_queue.h" 25 #include "components/offline_pages/background/request_queue.h"
25 #include "components/offline_pages/background/request_queue_in_memory_store.h" 26 #include "components/offline_pages/background/request_queue_in_memory_store.h"
26 #include "components/offline_pages/background/save_page_request.h" 27 #include "components/offline_pages/background/save_page_request.h"
27 #include "components/offline_pages/background/scheduler.h" 28 #include "components/offline_pages/background/scheduler.h"
28 #include "testing/gtest/include/gtest/gtest.h" 29 #include "testing/gtest/include/gtest/gtest.h"
29 30
30 namespace offline_pages { 31 namespace offline_pages {
31 32
32 namespace { 33 namespace {
33 // put test constants here 34 // put test constants here
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 // Callback function which releases a wait for it. 255 // Callback function which releases a wait for it.
255 void WaitingCallbackFunction(bool result) { 256 void WaitingCallbackFunction(bool result) {
256 waiter_.Signal(); 257 waiter_.Signal();
257 } 258 }
258 259
259 net::NetworkChangeNotifier::ConnectionType GetConnectionType() { 260 net::NetworkChangeNotifier::ConnectionType GetConnectionType() {
260 return coordinator()->GetConnectionType(); 261 return coordinator()->GetConnectionType();
261 } 262 }
262 263
263 // Callback for Add requests. 264 // Callback for Add requests.
264 void AddRequestDone(RequestQueue::AddRequestResult result, 265 void AddRequestDone(AddRequestResult result, const SavePageRequest& request);
265 const SavePageRequest& request);
266 266
267 // Callback for getting requests. 267 // Callback for getting requests.
268 void GetRequestsDone(RequestQueue::GetRequestsResult result, 268 void GetRequestsDone(GetRequestsResult result,
269 std::vector<std::unique_ptr<SavePageRequest>> requests); 269 std::vector<std::unique_ptr<SavePageRequest>> requests);
270 270
271 // Callback for removing requests. 271 // Callback for removing requests.
272 void RemoveRequestsDone(const MultipleItemStatuses& results); 272 void RemoveRequestsDone(const MultipleItemStatuses& results);
273 273
274 // Callback for getting request statuses. 274 // Callback for getting request statuses.
275 void GetQueuedRequestsDone( 275 void GetQueuedRequestsDone(
276 std::vector<std::unique_ptr<SavePageRequest>> requests); 276 std::vector<std::unique_ptr<SavePageRequest>> requests);
277 277
278 void SetupForOfflinerDoneCallbackTest( 278 void SetupForOfflinerDoneCallbackTest(
279 offline_pages::SavePageRequest* request); 279 offline_pages::SavePageRequest* request);
280 280
281 void SendOfflinerDoneCallback(const SavePageRequest& request, 281 void SendOfflinerDoneCallback(const SavePageRequest& request,
282 Offliner::RequestStatus status); 282 Offliner::RequestStatus status);
283 283
284 RequestQueue::GetRequestsResult last_get_requests_result() const { 284 GetRequestsResult last_get_requests_result() const {
285 return last_get_requests_result_; 285 return last_get_requests_result_;
286 } 286 }
287 287
288 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { 288 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const {
289 return last_requests_; 289 return last_requests_;
290 } 290 }
291 291
292 const MultipleItemStatuses& last_remove_results() const { 292 const MultipleItemStatuses& last_remove_results() const {
293 return last_remove_results_; 293 return last_remove_results_;
294 } 294 }
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 367
368 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); } 368 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); }
369 369
370 ObserverStub observer() { return observer_; } 370 ObserverStub observer() { return observer_; }
371 371
372 bool immediate_schedule_callback_called() const { 372 bool immediate_schedule_callback_called() const {
373 return immediate_schedule_callback_called_; 373 return immediate_schedule_callback_called_;
374 } 374 }
375 375
376 private: 376 private:
377 RequestQueue::GetRequestsResult last_get_requests_result_; 377 GetRequestsResult last_get_requests_result_;
378 MultipleItemStatuses last_remove_results_; 378 MultipleItemStatuses last_remove_results_;
379 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; 379 std::vector<std::unique_ptr<SavePageRequest>> last_requests_;
380 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; 380 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
381 base::ThreadTaskRunnerHandle task_runner_handle_; 381 base::ThreadTaskRunnerHandle task_runner_handle_;
382 std::unique_ptr<NetworkQualityEstimatorStub> network_quality_estimator_; 382 std::unique_ptr<NetworkQualityEstimatorStub> network_quality_estimator_;
383 std::unique_ptr<RequestCoordinator> coordinator_; 383 std::unique_ptr<RequestCoordinator> coordinator_;
384 OfflinerStub* offliner_; 384 OfflinerStub* offliner_;
385 base::WaitableEvent waiter_; 385 base::WaitableEvent waiter_;
386 ObserverStub observer_; 386 ObserverStub observer_;
387 bool immediate_schedule_callback_called_; 387 bool immediate_schedule_callback_called_;
388 }; 388 };
389 389
390 RequestCoordinatorTest::RequestCoordinatorTest() 390 RequestCoordinatorTest::RequestCoordinatorTest()
391 : last_get_requests_result_(RequestQueue::GetRequestsResult::STORE_FAILURE), 391 : last_get_requests_result_(GetRequestsResult::STORE_FAILURE),
392 task_runner_(new base::TestMockTimeTaskRunner), 392 task_runner_(new base::TestMockTimeTaskRunner),
393 task_runner_handle_(task_runner_), 393 task_runner_handle_(task_runner_),
394 offliner_(nullptr), 394 offliner_(nullptr),
395 waiter_(base::WaitableEvent::ResetPolicy::MANUAL, 395 waiter_(base::WaitableEvent::ResetPolicy::MANUAL,
396 base::WaitableEvent::InitialState::NOT_SIGNALED), 396 base::WaitableEvent::InitialState::NOT_SIGNALED),
397 immediate_schedule_callback_called_(false) {} 397 immediate_schedule_callback_called_(false) {}
398 398
399 RequestCoordinatorTest::~RequestCoordinatorTest() {} 399 RequestCoordinatorTest::~RequestCoordinatorTest() {}
400 400
401 void RequestCoordinatorTest::SetUp() { 401 void RequestCoordinatorTest::SetUp() {
402 std::unique_ptr<OfflinerPolicy> policy(new OfflinerPolicy()); 402 std::unique_ptr<OfflinerPolicy> policy(new OfflinerPolicy());
403 std::unique_ptr<OfflinerFactory> factory(new OfflinerFactoryStub()); 403 std::unique_ptr<OfflinerFactory> offliner_factory(new OfflinerFactoryStub());
404 // Save the offliner for use by the tests. 404 // Save the offliner for use by the tests.
405 offliner_ = 405 offliner_ = reinterpret_cast<OfflinerStub*>(
406 reinterpret_cast<OfflinerStub*>(factory->GetOffliner(policy.get())); 406 offliner_factory->GetOffliner(policy.get()));
407 std::unique_ptr<RequestQueueInMemoryStore> 407 std::unique_ptr<RequestQueueInMemoryStore>
408 store(new RequestQueueInMemoryStore()); 408 store(new RequestQueueInMemoryStore());
409 std::unique_ptr<RequestQueue> queue(new RequestQueue(std::move(store))); 409 std::unique_ptr<RequestQueue> queue(new RequestQueue(std::move(store)));
410 std::unique_ptr<Scheduler> scheduler_stub(new SchedulerStub()); 410 std::unique_ptr<Scheduler> scheduler_stub(new SchedulerStub());
411 network_quality_estimator_.reset(new NetworkQualityEstimatorStub()); 411 network_quality_estimator_.reset(new NetworkQualityEstimatorStub());
412 coordinator_.reset(new RequestCoordinator( 412 coordinator_.reset(new RequestCoordinator(
413 std::move(policy), std::move(factory), std::move(queue), 413 std::move(policy), std::move(offliner_factory), std::move(queue),
414 std::move(scheduler_stub), network_quality_estimator_.get())); 414 std::move(scheduler_stub), network_quality_estimator_.get()));
415 coordinator_->AddObserver(&observer_); 415 coordinator_->AddObserver(&observer_);
416 SetNetworkConnected(true); 416 SetNetworkConnected(true);
417 std::unique_ptr<PickRequestTaskFactory> picker_factory(
418 new PickRequestTaskFactory(
419 coordinator_->policy(),
420 static_cast<RequestNotifier*>(coordinator_.get()),
421 coordinator_->GetLogger()));
422 coordinator_->queue()->SetPickerFactory(std::move(picker_factory));
417 } 423 }
418 424
419 void RequestCoordinatorTest::PumpLoop() { 425 void RequestCoordinatorTest::PumpLoop() {
420 task_runner_->RunUntilIdle(); 426 task_runner_->RunUntilIdle();
421 } 427 }
422 428
423 void RequestCoordinatorTest::GetRequestsDone( 429 void RequestCoordinatorTest::GetRequestsDone(
424 RequestQueue::GetRequestsResult result, 430 GetRequestsResult result,
425 std::vector<std::unique_ptr<SavePageRequest>> requests) { 431 std::vector<std::unique_ptr<SavePageRequest>> requests) {
426 last_get_requests_result_ = result; 432 last_get_requests_result_ = result;
427 last_requests_ = std::move(requests); 433 last_requests_ = std::move(requests);
428 } 434 }
429 435
430 void RequestCoordinatorTest::RemoveRequestsDone( 436 void RequestCoordinatorTest::RemoveRequestsDone(
431 const MultipleItemStatuses& results) { 437 const MultipleItemStatuses& results) {
432 last_remove_results_ = results; 438 last_remove_results_ = results;
433 waiter_.Signal(); 439 waiter_.Signal();
434 } 440 }
435 441
436 void RequestCoordinatorTest::GetQueuedRequestsDone( 442 void RequestCoordinatorTest::GetQueuedRequestsDone(
437 std::vector<std::unique_ptr<SavePageRequest>> requests) { 443 std::vector<std::unique_ptr<SavePageRequest>> requests) {
438 last_requests_ = std::move(requests); 444 last_requests_ = std::move(requests);
439 waiter_.Signal(); 445 waiter_.Signal();
440 } 446 }
441 447
442 void RequestCoordinatorTest::AddRequestDone( 448 void RequestCoordinatorTest::AddRequestDone(AddRequestResult result,
443 RequestQueue::AddRequestResult result, 449 const SavePageRequest& request) {}
444 const SavePageRequest& request) {}
445 450
446 void RequestCoordinatorTest::SetupForOfflinerDoneCallbackTest( 451 void RequestCoordinatorTest::SetupForOfflinerDoneCallbackTest(
447 offline_pages::SavePageRequest* request) { 452 offline_pages::SavePageRequest* request) {
448 // Mark request as started and add it to the queue, 453 // Mark request as started and add it to the queue,
449 // then wait for callback to finish. 454 // then wait for callback to finish.
450 request->MarkAttemptStarted(base::Time::Now()); 455 request->MarkAttemptStarted(base::Time::Now());
451 coordinator()->queue()->AddRequest( 456 coordinator()->queue()->AddRequest(
452 *request, base::Bind(&RequestCoordinatorTest::AddRequestDone, 457 *request, base::Bind(&RequestCoordinatorTest::AddRequestDone,
453 base::Unretained(this))); 458 base::Unretained(this)));
454 PumpLoop(); 459 PumpLoop();
(...skipping 957 matching lines...) Expand 10 before | Expand all | Expand 10 after
1412 // Now whether processing triggered immediately depends on whether test 1417 // Now whether processing triggered immediately depends on whether test
1413 // is run on svelte device or not. 1418 // is run on svelte device or not.
1414 if (base::SysInfo::IsLowEndDevice()) { 1419 if (base::SysInfo::IsLowEndDevice()) {
1415 EXPECT_FALSE(is_busy()); 1420 EXPECT_FALSE(is_busy());
1416 } else { 1421 } else {
1417 EXPECT_TRUE(is_busy()); 1422 EXPECT_TRUE(is_busy());
1418 } 1423 }
1419 } 1424 }
1420 1425
1421 } // namespace offline_pages 1426 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698