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

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

Issue 2202113002: API to provide status of save page reqeusts to API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: CR fixes per DougArnett and FGorski. Also gets rid of status. Created 4 years, 4 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
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 <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 12 matching lines...) Expand all
23 #include "components/offline_pages/background/request_queue_in_memory_store.h" 23 #include "components/offline_pages/background/request_queue_in_memory_store.h"
24 #include "components/offline_pages/background/save_page_request.h" 24 #include "components/offline_pages/background/save_page_request.h"
25 #include "components/offline_pages/background/scheduler.h" 25 #include "components/offline_pages/background/scheduler.h"
26 #include "testing/gtest/include/gtest/gtest.h" 26 #include "testing/gtest/include/gtest/gtest.h"
27 27
28 namespace offline_pages { 28 namespace offline_pages {
29 29
30 namespace { 30 namespace {
31 // put test constants here 31 // put test constants here
32 const GURL kUrl("http://universe.com/everything"); 32 const GURL kUrl("http://universe.com/everything");
33 const ClientId kClientId("bookmark", "42"); 33 const GURL kUrl2("http://universe.com/nothing");
34 const std::string kClientNamespace("bookmark");
35 const std::string kId1("42");
36 const std::string kId2("life*universe+everything");
37 const ClientId kClientId(kClientNamespace, kId1);
38 const ClientId kClientId2(kClientNamespace, kId2);
34 const int kRequestId(1); 39 const int kRequestId(1);
35 const long kTestTimeoutSeconds = 1; 40 const long kTestTimeoutSeconds = 1;
36 const long kTestTimeBudgetSeconds = 200; 41 const long kTestTimeBudgetSeconds = 200;
37 const int kBatteryPercentageHigh = 75; 42 const int kBatteryPercentageHigh = 75;
38 const bool kPowerRequired = true; 43 const bool kPowerRequired = true;
39 const bool kUserRequested = true; 44 const bool kUserRequested = true;
40 const int kAttemptCount = 1; 45 const int kAttemptCount = 1;
41 } // namespace 46 } // namespace
42 47
43 class SchedulerStub : public Scheduler { 48 class SchedulerStub : public Scheduler {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 void PumpLoop(); 136 void PumpLoop();
132 137
133 RequestCoordinator* coordinator() { 138 RequestCoordinator* coordinator() {
134 return coordinator_.get(); 139 return coordinator_.get();
135 } 140 }
136 141
137 bool is_busy() { 142 bool is_busy() {
138 return coordinator_->is_busy(); 143 return coordinator_->is_busy();
139 } 144 }
140 145
141 // Empty callback function 146 // Empty callback function.
142 void EmptyCallbackFunction(bool result) { 147 void EmptyCallbackFunction(bool result) {
143 } 148 }
144 149
145 // Callback function which releases a wait for it. 150 // Callback function which releases a wait for it.
146 void WaitingCallbackFunction(bool result) { 151 void WaitingCallbackFunction(bool result) {
147 waiter_.Signal(); 152 waiter_.Signal();
148 } 153 }
149 154
150 // Callback for Add requests 155 // Callback for Add requests.
151 void AddRequestDone(RequestQueue::AddRequestResult result, 156 void AddRequestDone(RequestQueue::AddRequestResult result,
152 const SavePageRequest& request); 157 const SavePageRequest& request);
153 158
154 // Callback for getting requests. 159 // Callback for getting requests.
155 void GetRequestsDone(RequestQueue::GetRequestsResult result, 160 void GetRequestsDone(RequestQueue::GetRequestsResult result,
156 const std::vector<SavePageRequest>& requests); 161 const std::vector<SavePageRequest>& requests);
157 162
163 // Callback for getting request statuses.
164 void GetQueuedRequestsDone(const std::vector<ClientId>& statuses);
dougarnett 2016/08/03 04:27:19 statuses => client_ids
Pete Williamson 2016/08/03 20:13:45 Done.
165
158 void SendOfflinerDoneCallback(const SavePageRequest& request, 166 void SendOfflinerDoneCallback(const SavePageRequest& request,
159 Offliner::RequestStatus status); 167 Offliner::RequestStatus status);
160 168
161 RequestQueue::GetRequestsResult last_get_requests_result() const { 169 RequestQueue::GetRequestsResult last_get_requests_result() const {
162 return last_get_requests_result_; 170 return last_get_requests_result_;
163 } 171 }
164 172
165 const std::vector<SavePageRequest>& last_requests() const { 173 const std::vector<SavePageRequest>& last_requests() const {
166 return last_requests_; 174 return last_requests_;
167 } 175 }
168 176
177 const std::vector<ClientId>& last_client_ids() const {
178 return last_client_ids_;
179 }
180
169 void EnableOfflinerCallback(bool enable) { 181 void EnableOfflinerCallback(bool enable) {
170 offliner_->enable_callback(enable); 182 offliner_->enable_callback(enable);
171 } 183 }
172 184
173 void SetOfflinerTimeoutForTest(const base::TimeDelta& timeout) { 185 void SetOfflinerTimeoutForTest(const base::TimeDelta& timeout) {
174 coordinator_->SetOfflinerTimeoutForTest(timeout); 186 coordinator_->SetOfflinerTimeoutForTest(timeout);
175 } 187 }
176 188
177 void SetDeviceConditionsForTest(DeviceConditions device_conditions) { 189 void SetDeviceConditionsForTest(DeviceConditions device_conditions) {
178 coordinator_->SetDeviceConditionsForTest(device_conditions); 190 coordinator_->SetDeviceConditionsForTest(device_conditions);
179 } 191 }
180 192
181 void WaitForCallback() { 193 void WaitForCallback() {
182 waiter_.Wait(); 194 waiter_.Wait();
183 } 195 }
184 196
185 void AdvanceClockBy(base::TimeDelta delta) { 197 void AdvanceClockBy(base::TimeDelta delta) {
186 task_runner_->FastForwardBy(delta); 198 task_runner_->FastForwardBy(delta);
187 } 199 }
188 200
189 Offliner::RequestStatus last_offlining_status() const { 201 Offliner::RequestStatus last_offlining_status() const {
190 return coordinator_->last_offlining_status_; 202 return coordinator_->last_offlining_status_;
191 } 203 }
192 204
193 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); } 205 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); }
194 206
195 private: 207 private:
196 RequestQueue::GetRequestsResult last_get_requests_result_; 208 RequestQueue::GetRequestsResult last_get_requests_result_;
197 std::vector<SavePageRequest> last_requests_; 209 std::vector<SavePageRequest> last_requests_;
210 std::vector<ClientId> last_client_ids_;
198 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; 211 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
199 base::ThreadTaskRunnerHandle task_runner_handle_; 212 base::ThreadTaskRunnerHandle task_runner_handle_;
200 std::unique_ptr<RequestCoordinator> coordinator_; 213 std::unique_ptr<RequestCoordinator> coordinator_;
201 OfflinerStub* offliner_; 214 OfflinerStub* offliner_;
202 base::WaitableEvent waiter_; 215 base::WaitableEvent waiter_;
203 }; 216 };
204 217
205 RequestCoordinatorTest::RequestCoordinatorTest() 218 RequestCoordinatorTest::RequestCoordinatorTest()
206 : last_get_requests_result_(RequestQueue::GetRequestsResult::STORE_FAILURE), 219 : last_get_requests_result_(RequestQueue::GetRequestsResult::STORE_FAILURE),
207 task_runner_(new base::TestMockTimeTaskRunner), 220 task_runner_(new base::TestMockTimeTaskRunner),
(...skipping 23 matching lines...) Expand all
231 task_runner_->RunUntilIdle(); 244 task_runner_->RunUntilIdle();
232 } 245 }
233 246
234 void RequestCoordinatorTest::GetRequestsDone( 247 void RequestCoordinatorTest::GetRequestsDone(
235 RequestQueue::GetRequestsResult result, 248 RequestQueue::GetRequestsResult result,
236 const std::vector<SavePageRequest>& requests) { 249 const std::vector<SavePageRequest>& requests) {
237 last_get_requests_result_ = result; 250 last_get_requests_result_ = result;
238 last_requests_ = requests; 251 last_requests_ = requests;
239 } 252 }
240 253
254 void RequestCoordinatorTest::GetQueuedRequestsDone(
255 const std::vector<ClientId>& client_ids) {
256 last_client_ids_ = client_ids;
257 waiter_.Signal();
258 }
259
241 void RequestCoordinatorTest::AddRequestDone( 260 void RequestCoordinatorTest::AddRequestDone(
242 RequestQueue::AddRequestResult result, 261 RequestQueue::AddRequestResult result,
243 const SavePageRequest& request) {} 262 const SavePageRequest& request) {}
244 263
245 void RequestCoordinatorTest::SendOfflinerDoneCallback( 264 void RequestCoordinatorTest::SendOfflinerDoneCallback(
246 const SavePageRequest& request, Offliner::RequestStatus status) { 265 const SavePageRequest& request, Offliner::RequestStatus status) {
247 // Using the fact that the test class is a friend, call to the callback 266 // Using the fact that the test class is a friend, call to the callback
248 coordinator_->OfflinerDoneCallback(request, status); 267 coordinator_->OfflinerDoneCallback(request, status);
249 } 268 }
250 269
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 // which won't time out immediately, so the watchdog thread doesn't kill valid 528 // which won't time out immediately, so the watchdog thread doesn't kill valid
510 // tasks too soon. 529 // tasks too soon.
511 WaitForCallback(); 530 WaitForCallback();
512 PumpLoop(); 531 PumpLoop();
513 532
514 EXPECT_TRUE(OfflinerWasCanceled()); 533 EXPECT_TRUE(OfflinerWasCanceled());
515 EXPECT_EQ(Offliner::RequestStatus::REQUEST_COORDINATOR_CANCELED, 534 EXPECT_EQ(Offliner::RequestStatus::REQUEST_COORDINATOR_CANCELED,
516 last_offlining_status()); 535 last_offlining_status());
517 } 536 }
518 537
519
520 TEST_F(RequestCoordinatorTest, TimeBudgetExceeded) { 538 TEST_F(RequestCoordinatorTest, TimeBudgetExceeded) {
521 // Build a request to use with the pre-renderer, and put it on the queue. 539 // Build two requests to use with the pre-renderer, and put it on the queue.
522 offline_pages::SavePageRequest request1( 540 offline_pages::SavePageRequest request1(
523 kRequestId, kUrl, kClientId, base::Time::Now(), kUserRequested); 541 kRequestId, kUrl, kClientId, base::Time::Now(), kUserRequested);
524 offline_pages::SavePageRequest request2( 542 offline_pages::SavePageRequest request2(
525 kRequestId + 1, kUrl, kClientId, base::Time::Now(), kUserRequested); 543 kRequestId + 1, kUrl, kClientId, base::Time::Now(), kUserRequested);
526 request2.set_attempt_count(kAttemptCount); 544 request2.set_attempt_count(kAttemptCount);
527 coordinator()->queue()->AddRequest( 545 coordinator()->queue()->AddRequest(
528 request1, 546 request1,
529 base::Bind(&RequestCoordinatorTest::AddRequestDone, 547 base::Bind(&RequestCoordinatorTest::AddRequestDone,
530 base::Unretained(this))); 548 base::Unretained(this)));
531 coordinator()->queue()->AddRequest( 549 coordinator()->queue()->AddRequest(
532 request1, 550 request1, // TODO(petewil): This is a bug, should be request2.
533 base::Bind(&RequestCoordinatorTest::AddRequestDone, 551 base::Bind(&RequestCoordinatorTest::AddRequestDone,
534 base::Unretained(this))); 552 base::Unretained(this)));
535 PumpLoop(); 553 PumpLoop();
536 554
537 // Set up for the call to StartProcessing. 555 // Set up for the call to StartProcessing.
538 DeviceConditions device_conditions( 556 DeviceConditions device_conditions(
539 !kPowerRequired, kBatteryPercentageHigh, 557 !kPowerRequired, kBatteryPercentageHigh,
540 net::NetworkChangeNotifier::CONNECTION_3G); 558 net::NetworkChangeNotifier::CONNECTION_3G);
541 base::Callback<void(bool)> callback = 559 base::Callback<void(bool)> callback =
542 base::Bind(&RequestCoordinatorTest::WaitingCallbackFunction, 560 base::Bind(&RequestCoordinatorTest::WaitingCallbackFunction,
(...skipping 13 matching lines...) Expand all
556 // Verify the request gets removed from the queue, and wait for callbacks. 574 // Verify the request gets removed from the queue, and wait for callbacks.
557 coordinator()->queue()->GetRequests( 575 coordinator()->queue()->GetRequests(
558 base::Bind(&RequestCoordinatorTest::GetRequestsDone, 576 base::Bind(&RequestCoordinatorTest::GetRequestsDone,
559 base::Unretained(this))); 577 base::Unretained(this)));
560 PumpLoop(); 578 PumpLoop();
561 579
562 // We should find one request in the queue. 580 // We should find one request in the queue.
563 EXPECT_EQ(1UL, last_requests().size()); 581 EXPECT_EQ(1UL, last_requests().size());
564 } 582 }
565 583
584 TEST_F(RequestCoordinatorTest, GetQueuedRequests) {
585 // Add two requests to the queue.
586 offline_pages::SavePageRequest request1(kRequestId, kUrl, kClientId,
587 base::Time::Now(), kUserRequested);
588 offline_pages::SavePageRequest request2(kRequestId + 1, kUrl2, kClientId2,
589 base::Time::Now(), kUserRequested);
590 coordinator()->queue()->AddRequest(
591 request1, base::Bind(&RequestCoordinatorTest::AddRequestDone,
592 base::Unretained(this)));
593 coordinator()->queue()->AddRequest(
594 request2, base::Bind(&RequestCoordinatorTest::AddRequestDone,
595 base::Unretained(this)));
596 PumpLoop();
597
598 // Start the async status fetching.
599 coordinator()->GetQueuedRequests(
600 kClientNamespace,
601 base::Bind(&RequestCoordinatorTest::GetQueuedRequestsDone,
602 base::Unretained(this)));
603 PumpLoop();
604
605 // Wait for async get to finish.
606 WaitForCallback();
607 PumpLoop();
608
609 // Check that the statuses found in the callback match what we expect.
610 EXPECT_EQ(2UL, last_client_ids().size());
611 EXPECT_EQ(kId1, last_client_ids().at(0).id);
612 EXPECT_EQ(kId2, last_client_ids().at(1).id);
613 }
614
566 } // namespace offline_pages 615 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698