Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/location.h" | 12 #include "base/location.h" |
| 13 #include "base/test/test_simple_task_runner.h" | 13 #include "base/test/test_simple_task_runner.h" |
| 14 #include "base/threading/thread_task_runner_handle.h" | 14 #include "base/threading/thread_task_runner_handle.h" |
| 15 #include "components/offline_pages/background/offliner.h" | 15 #include "components/offline_pages/background/offliner.h" |
| 16 #include "components/offline_pages/background/offliner_factory.h" | 16 #include "components/offline_pages/background/offliner_factory.h" |
| 17 #include "components/offline_pages/background/offliner_policy.h" | 17 #include "components/offline_pages/background/offliner_policy.h" |
| 18 #include "components/offline_pages/background/request_queue.h" | 18 #include "components/offline_pages/background/request_queue.h" |
| 19 #include "components/offline_pages/background/request_queue_in_memory_store.h" | 19 #include "components/offline_pages/background/request_queue_in_memory_store.h" |
| 20 #include "components/offline_pages/background/save_page_request.h" | 20 #include "components/offline_pages/background/save_page_request.h" |
| 21 #include "components/offline_pages/background/scheduler.h" | 21 #include "components/offline_pages/background/scheduler.h" |
| 22 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
| 23 | 23 |
| 24 namespace offline_pages { | 24 namespace offline_pages { |
| 25 | 25 |
| 26 namespace { | 26 namespace { |
| 27 // put test constants here | 27 // put test constants here |
| 28 const GURL kUrl("http://universe.com/everything"); | 28 const GURL kUrl("http://universe.com/everything"); |
| 29 const ClientId kClientId("bookmark", "42"); | 29 const ClientId kClientId("bookmark", "42"); |
| 30 const int kRequestId(1); | |
| 30 } // namespace | 31 } // namespace |
| 31 | 32 |
| 32 class SchedulerStub : public Scheduler { | 33 class SchedulerStub : public Scheduler { |
| 33 public: | 34 public: |
| 34 SchedulerStub() : schedule_called_(false), unschedule_called_(false) {} | 35 SchedulerStub() : schedule_called_(false), unschedule_called_(false) {} |
| 35 | 36 |
| 36 void Schedule(const TriggerCondition& trigger_condition) override { | 37 void Schedule(const TriggerCondition& trigger_condition) override { |
| 37 schedule_called_ = true; | 38 schedule_called_ = true; |
| 38 } | 39 } |
| 39 | 40 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 87 void PumpLoop(); | 88 void PumpLoop(); |
| 88 | 89 |
| 89 RequestCoordinator* coordinator() { | 90 RequestCoordinator* coordinator() { |
| 90 return coordinator_.get(); | 91 return coordinator_.get(); |
| 91 } | 92 } |
| 92 | 93 |
| 93 // Empty callback function | 94 // Empty callback function |
| 94 void EmptyCallbackFunction(bool result) { | 95 void EmptyCallbackFunction(bool result) { |
| 95 } | 96 } |
| 96 | 97 |
| 98 // Callback for Add requests | |
| 99 void AddRequestDone(RequestQueue::AddRequestResult result, | |
| 100 const SavePageRequest& request); | |
| 101 | |
| 97 // Callback for getting requests. | 102 // Callback for getting requests. |
| 98 void GetRequestsDone(RequestQueue::GetRequestsResult result, | 103 void GetRequestsDone(RequestQueue::GetRequestsResult result, |
| 99 const std::vector<SavePageRequest>& requests); | 104 const std::vector<SavePageRequest>& requests); |
| 100 | 105 |
| 106 void SendOfflinerDoneCallback(const SavePageRequest& request, | |
| 107 Offliner::RequestStatus status); | |
| 108 | |
| 101 RequestQueue::GetRequestsResult last_get_requests_result() const { | 109 RequestQueue::GetRequestsResult last_get_requests_result() const { |
| 102 return last_get_requests_result_; | 110 return last_get_requests_result_; |
| 103 } | 111 } |
| 104 | 112 |
| 105 const std::vector<SavePageRequest>& last_requests() const { | 113 const std::vector<SavePageRequest>& last_requests() const { |
| 106 return last_requests_; | 114 return last_requests_; |
| 107 } | 115 } |
| 108 | 116 |
| 109 private: | 117 private: |
| 110 RequestQueue::GetRequestsResult last_get_requests_result_; | 118 RequestQueue::GetRequestsResult last_get_requests_result_; |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 137 task_runner_->RunUntilIdle(); | 145 task_runner_->RunUntilIdle(); |
| 138 } | 146 } |
| 139 | 147 |
| 140 void RequestCoordinatorTest::GetRequestsDone( | 148 void RequestCoordinatorTest::GetRequestsDone( |
| 141 RequestQueue::GetRequestsResult result, | 149 RequestQueue::GetRequestsResult result, |
| 142 const std::vector<SavePageRequest>& requests) { | 150 const std::vector<SavePageRequest>& requests) { |
| 143 last_get_requests_result_ = result; | 151 last_get_requests_result_ = result; |
| 144 last_requests_ = requests; | 152 last_requests_ = requests; |
| 145 } | 153 } |
| 146 | 154 |
| 155 | |
| 156 void RequestCoordinatorTest::AddRequestDone( | |
| 157 RequestQueue::AddRequestResult result, | |
| 158 const SavePageRequest& request) {} | |
| 159 | |
| 160 void RequestCoordinatorTest::SendOfflinerDoneCallback( | |
| 161 const SavePageRequest& request, Offliner::RequestStatus status) { | |
| 162 // Using the fact that the test class is a friend, call to the callback | |
| 163 coordinator_->OfflinerDoneCallback(request, status); | |
| 164 } | |
| 165 | |
| 166 | |
| 147 TEST_F(RequestCoordinatorTest, StartProcessingWithNoRequests) { | 167 TEST_F(RequestCoordinatorTest, StartProcessingWithNoRequests) { |
| 148 base::Callback<void(bool)> callback = | 168 base::Callback<void(bool)> callback = |
| 149 base::Bind( | 169 base::Bind( |
| 150 &RequestCoordinatorTest::EmptyCallbackFunction, | 170 &RequestCoordinatorTest::EmptyCallbackFunction, |
| 151 base::Unretained(this)); | 171 base::Unretained(this)); |
| 152 EXPECT_FALSE(coordinator()->StartProcessing(callback)); | 172 EXPECT_FALSE(coordinator()->StartProcessing(callback)); |
|
dougarnett
2016/06/14 22:53:33
EXPECT_TRUE at this point since don't know if ther
Pete Williamson
2016/06/15 00:06:31
Changed expectations. Saving future thoughts for
| |
| 153 } | 173 } |
| 154 | 174 |
| 155 TEST_F(RequestCoordinatorTest, SavePageLater) { | 175 TEST_F(RequestCoordinatorTest, SavePageLater) { |
| 156 EXPECT_TRUE(coordinator()->SavePageLater(kUrl, kClientId)); | 176 EXPECT_TRUE(coordinator()->SavePageLater(kUrl, kClientId)); |
| 157 | 177 |
| 158 // Expect that a request got placed on the queue. | 178 // Expect that a request got placed on the queue. |
| 159 coordinator()->queue()->GetRequests( | 179 coordinator()->queue()->GetRequests( |
| 160 base::Bind(&RequestCoordinatorTest::GetRequestsDone, | 180 base::Bind(&RequestCoordinatorTest::GetRequestsDone, |
| 161 base::Unretained(this))); | 181 base::Unretained(this))); |
| 162 | 182 |
| 163 // Wait for callbacks to finish, both request queue and offliner. | 183 // Wait for callbacks to finish, both request queue and offliner. |
| 164 PumpLoop(); | 184 PumpLoop(); |
| 165 | 185 |
| 166 // Check the request queue is as expected. | 186 // Check the request queue is as expected. |
| 167 EXPECT_EQ(1UL, last_requests().size()); | 187 EXPECT_EQ(1UL, last_requests().size()); |
| 168 EXPECT_EQ(kUrl, last_requests()[0].url()); | 188 EXPECT_EQ(kUrl, last_requests()[0].url()); |
| 169 EXPECT_EQ(kClientId, last_requests()[0].client_id()); | 189 EXPECT_EQ(kClientId, last_requests()[0].client_id()); |
| 170 | 190 |
| 171 // Expect that the scheduler got notified. | 191 // Expect that the scheduler got notified. |
| 172 SchedulerStub* scheduler_stub = reinterpret_cast<SchedulerStub*>( | 192 SchedulerStub* scheduler_stub = reinterpret_cast<SchedulerStub*>( |
| 173 coordinator()->scheduler()); | 193 coordinator()->scheduler()); |
| 174 EXPECT_TRUE(scheduler_stub->schedule_called()); | 194 EXPECT_TRUE(scheduler_stub->schedule_called()); |
| 175 } | 195 } |
| 176 | 196 |
| 197 TEST_F(RequestCoordinatorTest, OfflinerDone) { | |
| 198 | |
| 199 // Add a request to the queue, wait for callbacks to finish. | |
| 200 offline_pages::SavePageRequest request( | |
| 201 kRequestId, kUrl, kClientId, base::Time::Now()); | |
| 202 coordinator()->queue()->AddRequest( | |
| 203 request, | |
| 204 base::Bind(&RequestCoordinatorTest::AddRequestDone, | |
| 205 base::Unretained(this))); | |
| 206 PumpLoop(); | |
| 207 | |
| 208 // We need to give a callback to the request. | |
| 209 base::Callback<void(bool)> callback = | |
| 210 base::Bind( | |
| 211 &RequestCoordinatorTest::EmptyCallbackFunction, | |
| 212 base::Unretained(this)); | |
| 213 coordinator()->SetProcessingCallbackForTest(callback); | |
| 214 | |
| 215 // Call the OfflinerDoneCallback to simulate the page being completed, wait | |
| 216 // for callbacks. | |
| 217 SendOfflinerDoneCallback(request, Offliner::RequestStatus::SAVED); | |
| 218 PumpLoop(); | |
| 219 | |
| 220 // Verify the request gets removed from the queue, and wait for callbacks. | |
| 221 coordinator()->queue()->GetRequests( | |
| 222 base::Bind(&RequestCoordinatorTest::GetRequestsDone, | |
| 223 base::Unretained(this))); | |
| 224 PumpLoop(); | |
| 225 | |
| 226 // We should not find any requests in the queue anymore. | |
| 227 // RequestPicker should *not* have tried to start an additional job, | |
| 228 // because the request queue is empty now. | |
| 229 EXPECT_EQ(0UL, last_requests().size()); | |
| 230 } | |
| 231 | |
| 177 } // namespace offline_pages | 232 } // namespace offline_pages |
| OLD | NEW |