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

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

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

Powered by Google App Engine
This is Rietveld 408576698