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

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

Issue 2324493005: [Offline Pages] Adds event logs for requests dropped due to number of start or complete attempts. (Closed)
Patch Set: Addresses dimich feedback Created 4 years, 3 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
« no previous file with comments | « components/offline_pages/background/request_picker.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_picker.h" 5 #include "components/offline_pages/background/request_picker.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/test/test_simple_task_runner.h" 8 #include "base/test/test_simple_task_runner.h"
9 #include "base/threading/thread_task_runner_handle.h" 9 #include "base/threading/thread_task_runner_handle.h"
10 #include "base/time/time.h" 10 #include "base/time/time.h"
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 RequestNotifierStub* GetNotifier() { return notifier_.get(); } 102 RequestNotifierStub* GetNotifier() { return notifier_.get(); }
103 103
104 protected: 104 protected:
105 // The request queue is simple enough we will use a real queue with a memory 105 // The request queue is simple enough we will use a real queue with a memory
106 // store instead of a stub. 106 // store instead of a stub.
107 std::unique_ptr<RequestQueue> queue_; 107 std::unique_ptr<RequestQueue> queue_;
108 std::unique_ptr<RequestPicker> picker_; 108 std::unique_ptr<RequestPicker> picker_;
109 std::unique_ptr<RequestNotifierStub> notifier_; 109 std::unique_ptr<RequestNotifierStub> notifier_;
110 std::unique_ptr<SavePageRequest> last_picked_; 110 std::unique_ptr<SavePageRequest> last_picked_;
111 std::unique_ptr<OfflinerPolicy> policy_; 111 std::unique_ptr<OfflinerPolicy> policy_;
112 RequestCoordinatorEventLogger event_logger_;
112 bool request_queue_not_picked_called_; 113 bool request_queue_not_picked_called_;
113 114
114 private: 115 private:
115 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; 116 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
116 base::ThreadTaskRunnerHandle task_runner_handle_; 117 base::ThreadTaskRunnerHandle task_runner_handle_;
117 }; 118 };
118 119
119 RequestPickerTest::RequestPickerTest() 120 RequestPickerTest::RequestPickerTest()
120 : task_runner_(new base::TestSimpleTaskRunner), 121 : task_runner_(new base::TestSimpleTaskRunner),
121 task_runner_handle_(task_runner_) {} 122 task_runner_handle_(task_runner_) {}
122 123
123 RequestPickerTest::~RequestPickerTest() {} 124 RequestPickerTest::~RequestPickerTest() {}
124 125
125 void RequestPickerTest::SetUp() { 126 void RequestPickerTest::SetUp() {
126 std::unique_ptr<RequestQueueInMemoryStore> store( 127 std::unique_ptr<RequestQueueInMemoryStore> store(
127 new RequestQueueInMemoryStore()); 128 new RequestQueueInMemoryStore());
128 queue_.reset(new RequestQueue(std::move(store))); 129 queue_.reset(new RequestQueue(std::move(store)));
129 policy_.reset(new OfflinerPolicy()); 130 policy_.reset(new OfflinerPolicy());
130 notifier_.reset(new RequestNotifierStub()); 131 notifier_.reset(new RequestNotifierStub());
131 picker_.reset( 132 picker_.reset(new RequestPicker(queue_.get(), policy_.get(), notifier_.get(),
132 new RequestPicker(queue_.get(), policy_.get(), notifier_.get())); 133 &event_logger_));
133 request_queue_not_picked_called_ = false; 134 request_queue_not_picked_called_ = false;
134 } 135 }
135 136
136 void RequestPickerTest::PumpLoop() { 137 void RequestPickerTest::PumpLoop() {
137 task_runner_->RunUntilIdle(); 138 task_runner_->RunUntilIdle();
138 } 139 }
139 140
140 void RequestPickerTest::AddRequestDone(RequestQueue::AddRequestResult result, 141 void RequestPickerTest::AddRequestDone(RequestQueue::AddRequestResult result,
141 const SavePageRequest& request) {} 142 const SavePageRequest& request) {}
142 143
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 // callback. 188 // callback.
188 PumpLoop(); 189 PumpLoop();
189 190
190 EXPECT_TRUE(request_queue_not_picked_called_); 191 EXPECT_TRUE(request_queue_not_picked_called_);
191 } 192 }
192 193
193 TEST_F(RequestPickerTest, ChooseRequestWithHigherRetryCount) { 194 TEST_F(RequestPickerTest, ChooseRequestWithHigherRetryCount) {
194 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier, 195 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier,
195 kPreferRetryCount, kMaxStartedTries, 196 kPreferRetryCount, kMaxStartedTries,
196 kMaxCompletedTries + 1)); 197 kMaxCompletedTries + 1));
197 picker_.reset( 198 picker_.reset(new RequestPicker(queue_.get(), policy_.get(), notifier_.get(),
198 new RequestPicker(queue_.get(), policy_.get(), notifier_.get())); 199 &event_logger_));
199 200
200 base::Time creation_time = base::Time::Now(); 201 base::Time creation_time = base::Time::Now();
201 SavePageRequest request1( 202 SavePageRequest request1(
202 kRequestId1, kUrl1, kClientId1, creation_time, kUserRequested); 203 kRequestId1, kUrl1, kClientId1, creation_time, kUserRequested);
203 SavePageRequest request2( 204 SavePageRequest request2(
204 kRequestId2, kUrl2, kClientId2, creation_time, kUserRequested); 205 kRequestId2, kUrl2, kClientId2, creation_time, kUserRequested);
205 request2.set_completed_attempt_count(kAttemptCount); 206 request2.set_completed_attempt_count(kAttemptCount);
206 207
207 QueueRequestsAndChooseOne(request1, request2); 208 QueueRequestsAndChooseOne(request1, request2);
208 209
(...skipping 14 matching lines...) Expand all
223 224
224 EXPECT_EQ(kRequestId1, last_picked_->request_id()); 225 EXPECT_EQ(kRequestId1, last_picked_->request_id());
225 EXPECT_FALSE(request_queue_not_picked_called_); 226 EXPECT_FALSE(request_queue_not_picked_called_);
226 } 227 }
227 228
228 TEST_F(RequestPickerTest, ChooseEarlierRequest) { 229 TEST_F(RequestPickerTest, ChooseEarlierRequest) {
229 // We need a custom policy object prefering recency to retry count. 230 // We need a custom policy object prefering recency to retry count.
230 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier, 231 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier,
231 !kPreferRetryCount, kMaxStartedTries, 232 !kPreferRetryCount, kMaxStartedTries,
232 kMaxCompletedTries)); 233 kMaxCompletedTries));
233 picker_.reset( 234 picker_.reset(new RequestPicker(queue_.get(), policy_.get(), notifier_.get(),
234 new RequestPicker(queue_.get(), policy_.get(), notifier_.get())); 235 &event_logger_));
235 236
236 base::Time creation_time1 = 237 base::Time creation_time1 =
237 base::Time::Now() - base::TimeDelta::FromSeconds(10); 238 base::Time::Now() - base::TimeDelta::FromSeconds(10);
238 base::Time creation_time2 = base::Time::Now(); 239 base::Time creation_time2 = base::Time::Now();
239 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, 240 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1,
240 kUserRequested); 241 kUserRequested);
241 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, 242 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2,
242 kUserRequested); 243 kUserRequested);
243 request2.set_completed_attempt_count(kAttemptCount); 244 request2.set_completed_attempt_count(kAttemptCount);
244 245
245 QueueRequestsAndChooseOne(request1, request2); 246 QueueRequestsAndChooseOne(request1, request2);
246 247
247 EXPECT_EQ(kRequestId1, last_picked_->request_id()); 248 EXPECT_EQ(kRequestId1, last_picked_->request_id());
248 EXPECT_FALSE(request_queue_not_picked_called_); 249 EXPECT_FALSE(request_queue_not_picked_called_);
249 } 250 }
250 251
251 TEST_F(RequestPickerTest, ChooseSameTimeRequestWithHigherRetryCount) { 252 TEST_F(RequestPickerTest, ChooseSameTimeRequestWithHigherRetryCount) {
252 // We need a custom policy object preferring recency to retry count. 253 // We need a custom policy object preferring recency to retry count.
253 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier, 254 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier,
254 !kPreferRetryCount, kMaxStartedTries, 255 !kPreferRetryCount, kMaxStartedTries,
255 kMaxCompletedTries + 1)); 256 kMaxCompletedTries + 1));
256 picker_.reset( 257 picker_.reset(new RequestPicker(queue_.get(), policy_.get(), notifier_.get(),
257 new RequestPicker(queue_.get(), policy_.get(), notifier_.get())); 258 &event_logger_));
258 259
259 base::Time creation_time = base::Time::Now(); 260 base::Time creation_time = base::Time::Now();
260 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, 261 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time,
261 kUserRequested); 262 kUserRequested);
262 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, 263 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time,
263 kUserRequested); 264 kUserRequested);
264 request2.set_completed_attempt_count(kAttemptCount); 265 request2.set_completed_attempt_count(kAttemptCount);
265 266
266 QueueRequestsAndChooseOne(request1, request2); 267 QueueRequestsAndChooseOne(request1, request2);
267 268
268 EXPECT_EQ(kRequestId2, last_picked_->request_id()); 269 EXPECT_EQ(kRequestId2, last_picked_->request_id());
269 EXPECT_FALSE(request_queue_not_picked_called_); 270 EXPECT_FALSE(request_queue_not_picked_called_);
270 } 271 }
271 272
272 TEST_F(RequestPickerTest, ChooseRequestWithLowerRetryCount) { 273 TEST_F(RequestPickerTest, ChooseRequestWithLowerRetryCount) {
273 // We need a custom policy object preferring lower retry count. 274 // We need a custom policy object preferring lower retry count.
274 policy_.reset(new OfflinerPolicy(!kPreferUntried, kPreferEarlier, 275 policy_.reset(new OfflinerPolicy(!kPreferUntried, kPreferEarlier,
275 kPreferRetryCount, kMaxStartedTries, 276 kPreferRetryCount, kMaxStartedTries,
276 kMaxCompletedTries + 1)); 277 kMaxCompletedTries + 1));
277 picker_.reset( 278 picker_.reset(new RequestPicker(queue_.get(), policy_.get(), notifier_.get(),
278 new RequestPicker(queue_.get(), policy_.get(), notifier_.get())); 279 &event_logger_));
279 280
280 base::Time creation_time = base::Time::Now(); 281 base::Time creation_time = base::Time::Now();
281 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, 282 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time,
282 kUserRequested); 283 kUserRequested);
283 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, 284 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time,
284 kUserRequested); 285 kUserRequested);
285 request2.set_completed_attempt_count(kAttemptCount); 286 request2.set_completed_attempt_count(kAttemptCount);
286 287
287 QueueRequestsAndChooseOne(request1, request2); 288 QueueRequestsAndChooseOne(request1, request2);
288 289
289 EXPECT_EQ(kRequestId1, last_picked_->request_id()); 290 EXPECT_EQ(kRequestId1, last_picked_->request_id());
290 EXPECT_FALSE(request_queue_not_picked_called_); 291 EXPECT_FALSE(request_queue_not_picked_called_);
291 } 292 }
292 293
293 TEST_F(RequestPickerTest, ChooseLaterRequest) { 294 TEST_F(RequestPickerTest, ChooseLaterRequest) {
294 // We need a custom policy preferring recency over retry, and later requests. 295 // We need a custom policy preferring recency over retry, and later requests.
295 policy_.reset(new OfflinerPolicy(kPreferUntried, !kPreferEarlier, 296 policy_.reset(new OfflinerPolicy(kPreferUntried, !kPreferEarlier,
296 !kPreferRetryCount, kMaxStartedTries, 297 !kPreferRetryCount, kMaxStartedTries,
297 kMaxCompletedTries)); 298 kMaxCompletedTries));
298 picker_.reset( 299 picker_.reset(new RequestPicker(queue_.get(), policy_.get(), notifier_.get(),
299 new RequestPicker(queue_.get(), policy_.get(), notifier_.get())); 300 &event_logger_));
300 301
301 base::Time creation_time1 = 302 base::Time creation_time1 =
302 base::Time::Now() - base::TimeDelta::FromSeconds(10); 303 base::Time::Now() - base::TimeDelta::FromSeconds(10);
303 base::Time creation_time2 = base::Time::Now(); 304 base::Time creation_time2 = base::Time::Now();
304 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, 305 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1,
305 kUserRequested); 306 kUserRequested);
306 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, 307 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2,
307 kUserRequested); 308 kUserRequested);
308 309
309 QueueRequestsAndChooseOne(request1, request2); 310 QueueRequestsAndChooseOne(request1, request2);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 // With default policy settings, we should choose the earlier request. 366 // With default policy settings, we should choose the earlier request.
366 // However, we will make the earlier reqeust exceed the limit. 367 // However, we will make the earlier reqeust exceed the limit.
367 request1.set_completed_attempt_count(policy_->GetMaxCompletedTries()); 368 request1.set_completed_attempt_count(policy_->GetMaxCompletedTries());
368 369
369 QueueRequestsAndChooseOne(request1, request2); 370 QueueRequestsAndChooseOne(request1, request2);
370 371
371 EXPECT_EQ(kRequestId2, last_picked_->request_id()); 372 EXPECT_EQ(kRequestId2, last_picked_->request_id());
372 EXPECT_FALSE(request_queue_not_picked_called_); 373 EXPECT_FALSE(request_queue_not_picked_called_);
373 } 374 }
374 } // namespace offline_pages 375 } // namespace offline_pages
OLDNEW
« no previous file with comments | « components/offline_pages/background/request_picker.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698