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

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

Issue 2543093002: Split the RequestPicker task into two separate tasks. (Closed)
Patch Set: Created 4 years 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "components/offline_pages/background/cleanup_task.h"
6
7 #include <memory>
8 #include <set>
9
10 #include "base/bind.h"
11 #include "base/test/test_simple_task_runner.h"
12 #include "base/threading/thread_task_runner_handle.h"
13 #include "components/offline_pages/background/offliner_policy.h"
14 #include "components/offline_pages/background/request_coordinator.h"
15 #include "components/offline_pages/background/request_coordinator_event_logger.h "
16 #include "components/offline_pages/background/request_notifier.h"
17 #include "components/offline_pages/background/request_queue_in_memory_store.h"
18 #include "components/offline_pages/background/request_queue_store.h"
19 #include "components/offline_pages/background/save_page_request.h"
20 #include "testing/gtest/include/gtest/gtest.h"
21
22 namespace offline_pages {
23
24 namespace {
25 // Data for request 1.
26 const int64_t kRequestId1 = 17;
27 const GURL kUrl1("https://google.com");
28 const ClientId kClientId1("bookmark", "1234");
29 // Data for request 2.
30 const int64_t kRequestId2 = 42;
31 const GURL kUrl2("http://nytimes.com");
32 const ClientId kClientId2("bookmark", "5678");
33 const bool kUserRequested = true;
34
35 // Default request
36 const SavePageRequest kEmptyRequest(0UL,
37 GURL(""),
38 ClientId("", ""),
39 base::Time(),
40 true);
41 } // namespace
42
43 // TODO: Refactor this stub class into its own file, use in Pick Request Task
44 // Test too.
45 // Helper class needed by the CleanupTask
46 class RequestNotifierStub : public RequestNotifier {
47 public:
48 RequestNotifierStub()
49 : last_expired_request_(kEmptyRequest), total_expired_requests_(0) {}
50
51 void NotifyAdded(const SavePageRequest& request) override {}
52 void NotifyChanged(const SavePageRequest& request) override {}
53
54 void NotifyCompleted(const SavePageRequest& request,
55 BackgroundSavePageResult status) override {
56 last_expired_request_ = request;
57 last_request_expiration_status_ = status;
58 total_expired_requests_++;
59 }
60
61 const SavePageRequest& last_expired_request() {
62 return last_expired_request_;
63 }
64
65 RequestCoordinator::BackgroundSavePageResult
66 last_request_expiration_status() {
67 return last_request_expiration_status_;
68 }
69
70 int32_t total_expired_requests() { return total_expired_requests_; }
71
72 private:
73 BackgroundSavePageResult last_request_expiration_status_;
74 SavePageRequest last_expired_request_;
75 int32_t total_expired_requests_;
76 };
77
78 class CleanupTaskTest : public testing::Test {
79 public:
80 CleanupTaskTest();
81
82 ~CleanupTaskTest() override;
83
84 void SetUp() override;
85
86 void PumpLoop();
87
88 void AddRequestDone(ItemActionStatus status);
89
90 void GetRequestsCallback(
91 bool success,
92 std::vector<std::unique_ptr<SavePageRequest>> requests);
93
94 void QueueRequests(const SavePageRequest& request1,
95 const SavePageRequest& request2);
96
97 // Reset the factory and the task using the current policy.
98 void MakeFactoryAndTask();
99
100 RequestNotifierStub* GetNotifier() { return notifier_.get(); }
101
102 CleanupTask* task() { return task_.get(); }
103 RequestQueueStore* store() { return store_.get(); }
104 OfflinerPolicy* policy() { return policy_.get(); }
105 std::vector<std::unique_ptr<SavePageRequest>>& found_requests() {
106 return found_requests_;
107 }
108
109 protected:
110 void InitializeStoreDone(bool success);
111
112 std::unique_ptr<RequestQueueStore> store_;
113 std::unique_ptr<RequestNotifierStub> notifier_;
114 std::unique_ptr<SavePageRequest> last_picked_;
115 std::unique_ptr<OfflinerPolicy> policy_;
116 RequestCoordinatorEventLogger event_logger_;
117 std::unique_ptr<CleanupTaskFactory> factory_;
118 std::unique_ptr<CleanupTask> task_;
119 std::vector<std::unique_ptr<SavePageRequest>> found_requests_;
120
121 private:
122 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
123 base::ThreadTaskRunnerHandle task_runner_handle_;
124 };
125
126 CleanupTaskTest::CleanupTaskTest()
127 : task_runner_(new base::TestSimpleTaskRunner),
128 task_runner_handle_(task_runner_) {}
129
130 CleanupTaskTest::~CleanupTaskTest() {}
131
132 void CleanupTaskTest::SetUp() {
133 DeviceConditions conditions;
134 store_.reset(new RequestQueueInMemoryStore());
135 policy_.reset(new OfflinerPolicy());
136 notifier_.reset(new RequestNotifierStub());
137 MakeFactoryAndTask();
138
139 store_->Initialize(base::Bind(&CleanupTaskTest::InitializeStoreDone,
140 base::Unretained(this)));
141 PumpLoop();
142 }
143
144 void CleanupTaskTest::PumpLoop() {
145 task_runner_->RunUntilIdle();
146 }
147
148 void CleanupTaskTest::AddRequestDone(ItemActionStatus status) {}
fgorski 2016/12/02 21:44:04 how about ASSERT/EXPECT that this was successful?
Pete Williamson 2016/12/05 20:39:45 Done.
149
150 void CleanupTaskTest::GetRequestsCallback(
151 bool success,
152 std::vector<std::unique_ptr<SavePageRequest>> requests) {
153 found_requests_ = std::move(requests);
154 }
155
156 // Test helper to queue the two given requests.
157 void CleanupTaskTest::QueueRequests(const SavePageRequest& request1,
158 const SavePageRequest& request2) {
159 DeviceConditions conditions;
160 std::set<int64_t> disabled_requests;
161 // Add test requests on the Queue.
162 store_->AddRequest(request1, base::Bind(&CleanupTaskTest::AddRequestDone,
163 base::Unretained(this)));
164 store_->AddRequest(request2, base::Bind(&CleanupTaskTest::AddRequestDone,
165 base::Unretained(this)));
166
167 // Pump the loop to give the async queue the opportunity to do the adds.
168 PumpLoop();
169 }
170
171 void CleanupTaskTest::MakeFactoryAndTask() {
172 factory_.reset(
173 new CleanupTaskFactory(policy_.get(), notifier_.get(), &event_logger_));
174 DeviceConditions conditions;
175 task_ = factory_->CreateCleanupTask(store_.get());
176 }
177
178 void CleanupTaskTest::InitializeStoreDone(bool success) {
179 ASSERT_TRUE(success);
180 }
181
182 TEST_F(CleanupTaskTest, CleanupExpiredRequest) {
183 base::Time creation_time = base::Time::Now();
184 base::Time expired_time =
185 creation_time - base::TimeDelta::FromSeconds(
186 policy()->GetRequestExpirationTimeInSeconds() + 10);
187 // Request2 will be expired, request1 will be current.
188 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time,
189 kUserRequested);
190 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, expired_time,
191 kUserRequested);
192 QueueRequests(request1, request2);
193
194 // Initiate cleanup.
195 task()->Run();
196 PumpLoop();
197
198 // See what is left in the queue, should be just the other request.
199 store()->GetRequests(base::Bind(&CleanupTaskTest::GetRequestsCallback,
200 base::Unretained(this)));
201 PumpLoop();
202 EXPECT_EQ(1UL, found_requests().size());
203 EXPECT_EQ(kRequestId1, found_requests().at(0)->request_id());
204 }
205
206 TEST_F(CleanupTaskTest, CleanupStartCountExceededRequest) {
207 base::Time creation_time = base::Time::Now();
208 // Request2 will have an exceeded start count.
209 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time,
210 kUserRequested);
211 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time,
212 kUserRequested);
213 request2.set_started_attempt_count(policy()->GetMaxStartedTries());
214 QueueRequests(request1, request2);
215
216 // Initiate cleanup.
217 task()->Run();
218 PumpLoop();
219
220 // See what is left in the queue, should be just the other request.
221 store()->GetRequests(base::Bind(&CleanupTaskTest::GetRequestsCallback,
222 base::Unretained(this)));
223 PumpLoop();
224 EXPECT_EQ(1UL, found_requests().size());
225 EXPECT_EQ(kRequestId1, found_requests().at(0)->request_id());
226 }
227
228 TEST_F(CleanupTaskTest, CleanupCompletionCountExceededRequest) {
229 base::Time creation_time = base::Time::Now();
230 // Request2 will have an exceeded completion count.
231 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time,
232 kUserRequested);
233 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time,
234 kUserRequested);
235 request2.set_completed_attempt_count(policy()->GetMaxCompletedTries());
236 QueueRequests(request1, request2);
237
238 // Initiate cleanup.
239 task()->Run();
240 PumpLoop();
241
242 // See what is left in the queue, should be just the other request.
243 store()->GetRequests(base::Bind(&CleanupTaskTest::GetRequestsCallback,
244 base::Unretained(this)));
245 PumpLoop();
246 EXPECT_EQ(1UL, found_requests().size());
247 EXPECT_EQ(kRequestId1, found_requests().at(0)->request_id());
248 }
249
250 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698