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

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

Issue 2473553004: Request Picker task (Closed)
Patch Set: merge 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_queue.h" 5 #include "components/offline_pages/background/request_queue.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/test/test_simple_task_runner.h" 11 #include "base/test/test_simple_task_runner.h"
12 #include "base/threading/thread_task_runner_handle.h" 12 #include "base/threading/thread_task_runner_handle.h"
13 #include "components/offline_pages/background/device_conditions.h"
14 #include "components/offline_pages/background/offliner_policy.h"
15 #include "components/offline_pages/background/request_coordinator_event_logger.h "
16 #include "components/offline_pages/background/request_notifier.h"
13 #include "components/offline_pages/background/request_queue_in_memory_store.h" 17 #include "components/offline_pages/background/request_queue_in_memory_store.h"
14 #include "components/offline_pages/background/save_page_request.h" 18 #include "components/offline_pages/background/save_page_request.h"
15 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
16 20
17 namespace offline_pages { 21 namespace offline_pages {
18 22
19 using AddRequestResult = RequestQueue::AddRequestResult; 23 using AddRequestResult = QueueResults::AddRequestResult;
20 using GetRequestsResult = RequestQueue::GetRequestsResult; 24 using GetRequestsResult = QueueResults::GetRequestsResult;
21 using UpdateRequestResult = RequestQueue::UpdateRequestResult; 25 using UpdateRequestResult = QueueResults::UpdateRequestResult;
22 26
23 namespace { 27 namespace {
24 // Data for request 1. 28 // Data for request 1.
25 const int64_t kRequestId = 42; 29 const int64_t kRequestId = 42;
26 const GURL kUrl("http://example.com"); 30 const GURL kUrl("http://example.com");
27 const ClientId kClientId("bookmark", "1234"); 31 const ClientId kClientId("bookmark", "1234");
28 // Data for request 2. 32 // Data for request 2.
29 const int64_t kRequestId2 = 77; 33 const int64_t kRequestId2 = 77;
30 const GURL kUrl2("http://test.com"); 34 const GURL kUrl2("http://test.com");
31 const ClientId kClientId2("bookmark", "567"); 35 const ClientId kClientId2("bookmark", "567");
32 const bool kUserRequested = true; 36 const bool kUserRequested = true;
33 const int64_t kRequestId3 = 99; 37 const int64_t kRequestId3 = 99;
38 const int kOneWeekInSeconds = 7 * 24 * 60 * 60;
39
40 // Default request
41 const SavePageRequest kEmptyRequest(0UL,
42 GURL(""),
43 ClientId("", ""),
44 base::Time(),
45 true);
46
34 } // namespace 47 } // namespace
35 48
49 // Helper class needed by the PickRequestTask
50 class RequestNotifierStub : public RequestNotifier {
51 public:
52 RequestNotifierStub()
53 : last_expired_request_(kEmptyRequest), total_expired_requests_(0) {}
54
55 void NotifyAdded(const SavePageRequest& request) override {}
56 void NotifyChanged(const SavePageRequest& request) override {}
57
58 void NotifyCompleted(const SavePageRequest& request,
59 BackgroundSavePageResult status) override {
60 last_expired_request_ = request;
61 last_request_expiration_status_ = status;
62 total_expired_requests_++;
63 }
64
65 const SavePageRequest& last_expired_request() {
66 return last_expired_request_;
67 }
68
69 RequestCoordinator::BackgroundSavePageResult
70 last_request_expiration_status() {
71 return last_request_expiration_status_;
72 }
73
74 int32_t total_expired_requests() { return total_expired_requests_; }
75
76 private:
77 BackgroundSavePageResult last_request_expiration_status_;
78 SavePageRequest last_expired_request_;
79 int32_t total_expired_requests_;
80 };
81
36 // TODO(fgorski): Add tests for store failures in add/remove/get. 82 // TODO(fgorski): Add tests for store failures in add/remove/get.
37 class RequestQueueTest : public testing::Test { 83 class RequestQueueTest : public testing::Test {
38 public: 84 public:
39 RequestQueueTest(); 85 RequestQueueTest();
40 ~RequestQueueTest() override; 86 ~RequestQueueTest() override;
41 87
42 // Test overrides. 88 // Test overrides.
43 void SetUp() override; 89 void SetUp() override;
44 90
45 void PumpLoop(); 91 void PumpLoop();
46 92
47 // Callback for adding requests. 93 // Callback for adding requests.
48 void AddRequestDone(AddRequestResult result, const SavePageRequest& request); 94 void AddRequestDone(AddRequestResult result, const SavePageRequest& request);
49 // Callback for getting requests. 95 // Callback for getting requests.
50 void GetRequestsDone(GetRequestsResult result, 96 void GetRequestsDone(GetRequestsResult result,
51 std::vector<std::unique_ptr<SavePageRequest>> requests); 97 std::vector<std::unique_ptr<SavePageRequest>> requests);
52 98
53 void UpdateRequestDone(UpdateRequestResult result); 99 void UpdateRequestDone(UpdateRequestResult result);
54 void UpdateRequestsDone(std::unique_ptr<UpdateRequestsResult> result); 100 void UpdateRequestsDone(
101 std::unique_ptr<QueueResults::UpdateRequestsResult> result);
55 102
56 void ClearResults(); 103 void ClearResults();
57 104
58 RequestQueue* queue() { return queue_.get(); } 105 RequestQueue* queue() { return queue_.get(); }
59 106
60 AddRequestResult last_add_result() const { return last_add_result_; } 107 AddRequestResult last_add_result() const { return last_add_result_; }
61 SavePageRequest* last_added_request() { 108 SavePageRequest* last_added_request() {
62 return last_added_request_.get(); 109 return last_added_request_.get();
63 } 110 }
64 111
65 UpdateRequestResult last_update_result() const { return last_update_result_; } 112 UpdateRequestResult last_update_result() const { return last_update_result_; }
66 113
67 GetRequestsResult last_get_requests_result() const { 114 GetRequestsResult last_get_requests_result() const {
68 return last_get_requests_result_; 115 return last_get_requests_result_;
69 } 116 }
70 117
71 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { 118 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const {
72 return last_requests_; 119 return last_requests_;
73 } 120 }
74 121
75 UpdateRequestsResult* update_requests_result() const { 122 QueueResults::UpdateRequestsResult* update_requests_result() const {
76 return update_requests_result_.get(); 123 return update_requests_result_.get();
77 } 124 }
78 125
126 void RequestPickedCallback(const SavePageRequest& request) {}
127 void RequestNotPickedCallback(bool non_user_requested_tasks_remain) {}
128
79 private: 129 private:
80 AddRequestResult last_add_result_; 130 AddRequestResult last_add_result_;
81 std::unique_ptr<SavePageRequest> last_added_request_; 131 std::unique_ptr<SavePageRequest> last_added_request_;
82 std::unique_ptr<UpdateRequestsResult> update_requests_result_; 132 std::unique_ptr<QueueResults::UpdateRequestsResult> update_requests_result_;
83 UpdateRequestResult last_update_result_; 133 UpdateRequestResult last_update_result_;
84 134
85 GetRequestsResult last_get_requests_result_; 135 GetRequestsResult last_get_requests_result_;
86 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; 136 std::vector<std::unique_ptr<SavePageRequest>> last_requests_;
87 137
88 std::unique_ptr<RequestQueue> queue_; 138 std::unique_ptr<RequestQueue> queue_;
89 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; 139 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
90 base::ThreadTaskRunnerHandle task_runner_handle_; 140 base::ThreadTaskRunnerHandle task_runner_handle_;
91 }; 141 };
92 142
(...skipping 27 matching lines...) Expand all
120 std::vector<std::unique_ptr<SavePageRequest>> requests) { 170 std::vector<std::unique_ptr<SavePageRequest>> requests) {
121 last_get_requests_result_ = result; 171 last_get_requests_result_ = result;
122 last_requests_ = std::move(requests); 172 last_requests_ = std::move(requests);
123 } 173 }
124 174
125 void RequestQueueTest::UpdateRequestDone(UpdateRequestResult result) { 175 void RequestQueueTest::UpdateRequestDone(UpdateRequestResult result) {
126 last_update_result_ = result; 176 last_update_result_ = result;
127 } 177 }
128 178
129 void RequestQueueTest::UpdateRequestsDone( 179 void RequestQueueTest::UpdateRequestsDone(
130 std::unique_ptr<UpdateRequestsResult> result) { 180 std::unique_ptr<QueueResults::UpdateRequestsResult> result) {
131 update_requests_result_ = std::move(result); 181 update_requests_result_ = std::move(result);
132 } 182 }
133 183
134 void RequestQueueTest::ClearResults() { 184 void RequestQueueTest::ClearResults() {
135 last_add_result_ = AddRequestResult::STORE_FAILURE; 185 last_add_result_ = AddRequestResult::STORE_FAILURE;
136 last_update_result_ = UpdateRequestResult::STORE_FAILURE; 186 last_update_result_ = UpdateRequestResult::STORE_FAILURE;
137 last_get_requests_result_ = GetRequestsResult::STORE_FAILURE; 187 last_get_requests_result_ = GetRequestsResult::STORE_FAILURE;
138 last_added_request_.reset(nullptr); 188 last_added_request_.reset(nullptr);
139 update_requests_result_.reset(nullptr); 189 update_requests_result_.reset(nullptr);
140 last_requests_.clear(); 190 last_requests_.clear();
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 ASSERT_TRUE(update_requests_result()); 527 ASSERT_TRUE(update_requests_result());
478 EXPECT_EQ(1UL, update_requests_result()->item_statuses.size()); 528 EXPECT_EQ(1UL, update_requests_result()->item_statuses.size());
479 EXPECT_EQ(kRequestId, update_requests_result()->item_statuses.at(0).first); 529 EXPECT_EQ(kRequestId, update_requests_result()->item_statuses.at(0).first);
480 EXPECT_EQ(ItemActionStatus::SUCCESS, 530 EXPECT_EQ(ItemActionStatus::SUCCESS,
481 update_requests_result()->item_statuses.at(0).second); 531 update_requests_result()->item_statuses.at(0).second);
482 EXPECT_EQ(1UL, update_requests_result()->updated_items.size()); 532 EXPECT_EQ(1UL, update_requests_result()->updated_items.size());
483 EXPECT_EQ(SavePageRequest::RequestState::AVAILABLE, 533 EXPECT_EQ(SavePageRequest::RequestState::AVAILABLE,
484 update_requests_result()->updated_items.at(0).request_state()); 534 update_requests_result()->updated_items.at(0).request_state());
485 } 535 }
486 536
537 TEST_F(RequestQueueTest, CleanStaleRequests) {
538 // Create a request that is already expired.
539 base::Time creation_time =
540 base::Time::Now() - base::TimeDelta::FromSeconds(2 * kOneWeekInSeconds);
541
542 SavePageRequest original_request(kRequestId, kUrl, kClientId, creation_time,
543 kUserRequested);
544 queue()->AddRequest(
545 original_request,
546 base::Bind(&RequestQueueTest::AddRequestDone, base::Unretained(this)));
547 this->PumpLoop();
548 this->ClearResults();
549
550 // Set up a picker factory pointing to our fake notifier.
551 OfflinerPolicy policy;
552 RequestNotifierStub notifier;
553 RequestCoordinatorEventLogger event_logger;
554 std::unique_ptr<PickRequestTaskFactory> picker_factory(
555 new PickRequestTaskFactory(&policy, &notifier, &event_logger));
556 queue()->SetPickerFactory(std::move(picker_factory));
557
558 // Do a pick and clean operation, which will remove stale entries.
559 DeviceConditions conditions;
560 std::set<int64_t> disabled_list;
561 queue()->PickNextRequest(
562 base::Bind(&RequestQueueTest::RequestPickedCallback,
563 base::Unretained(this)),
564 base::Bind(&RequestQueueTest::RequestNotPickedCallback,
565 base::Unretained(this)),
566 &conditions, disabled_list);
567
568 this->PumpLoop();
569
570 // Notifier should have been notified that the request was removed.
571 ASSERT_EQ(notifier.last_expired_request().request_id(), kRequestId);
572 ASSERT_EQ(notifier.last_request_expiration_status(),
573 RequestNotifier::BackgroundSavePageResult::EXPIRED);
574
575 // Doing a get should show no entries left in the queue since the expired
576 // request has been removed.
577 queue()->GetRequests(
578 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this)));
579 this->PumpLoop();
580 ASSERT_EQ(GetRequestsResult::SUCCESS, this->last_get_requests_result());
581 ASSERT_TRUE(this->last_requests().empty());
582 }
583
487 } // namespace offline_pages 584 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698