| 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_queue_store.h" | 5 #include "components/offline_pages/background/request_queue_store.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/files/file_path.h" |
| 11 #include "base/files/scoped_temp_dir.h" |
| 10 #include "base/test/test_simple_task_runner.h" | 12 #include "base/test/test_simple_task_runner.h" |
| 11 #include "base/threading/thread_task_runner_handle.h" | 13 #include "base/threading/thread_task_runner_handle.h" |
| 12 #include "components/offline_pages/background/request_queue_in_memory_store.h" | 14 #include "components/offline_pages/background/request_queue_in_memory_store.h" |
| 15 #include "components/offline_pages/background/request_queue_store_sql.h" |
| 13 #include "components/offline_pages/background/save_page_request.h" | 16 #include "components/offline_pages/background/save_page_request.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 15 | 18 |
| 16 namespace offline_pages { | 19 namespace offline_pages { |
| 17 | 20 |
| 18 using UpdateStatus = RequestQueueStore::UpdateStatus; | 21 using UpdateStatus = RequestQueueStore::UpdateStatus; |
| 19 | 22 |
| 20 namespace { | 23 namespace { |
| 21 const int64_t kRequestId = 42; | 24 const int64_t kRequestId = 42; |
| 22 const GURL kUrl("http://example.com"); | 25 const GURL kUrl("http://example.com"); |
| 23 const ClientId kClientId("bookmark", "1234"); | 26 const ClientId kClientId("bookmark", "1234"); |
| 24 | 27 |
| 28 enum class LastResult { |
| 29 kNone, |
| 30 kFalse, |
| 31 kTrue, |
| 32 }; |
| 33 |
| 25 bool operator==(const SavePageRequest& lhs, const SavePageRequest& rhs) { | 34 bool operator==(const SavePageRequest& lhs, const SavePageRequest& rhs) { |
| 26 return lhs.request_id() == rhs.request_id() && lhs.url() == rhs.url() && | 35 return lhs.request_id() == rhs.request_id() && lhs.url() == rhs.url() && |
| 27 lhs.client_id() == rhs.client_id() && | 36 lhs.client_id() == rhs.client_id() && |
| 28 lhs.creation_time() == rhs.creation_time() && | 37 lhs.creation_time() == rhs.creation_time() && |
| 29 lhs.activation_time() == rhs.activation_time() && | 38 lhs.activation_time() == rhs.activation_time() && |
| 30 lhs.attempt_count() == rhs.attempt_count() && | 39 lhs.attempt_count() == rhs.attempt_count() && |
| 31 lhs.last_attempt_time() == rhs.last_attempt_time(); | 40 lhs.last_attempt_time() == rhs.last_attempt_time(); |
| 32 } | 41 } |
| 33 | 42 |
| 34 } // namespace | 43 } // namespace |
| 35 | 44 |
| 36 class RequestQueueInMemoryStoreTest : public testing::Test { | 45 // Class that serves as a base for testing different implementations of the |
| 46 // |RequestQueueStore|. Specific implementations extend the templatized version |
| 47 // of this class and provide appropriate store factory. |
| 48 class RequestQueueStoreTestBase : public testing::Test { |
| 37 public: | 49 public: |
| 38 enum class LastResult { | 50 RequestQueueStoreTestBase(); |
| 39 RESULT_NONE, | |
| 40 RESULT_FALSE, | |
| 41 RESULT_TRUE, | |
| 42 }; | |
| 43 | |
| 44 RequestQueueInMemoryStoreTest(); | |
| 45 | 51 |
| 46 // Test overrides. | 52 // Test overrides. |
| 47 void SetUp() override; | 53 void TearDown() override; |
| 48 | |
| 49 RequestQueueStore* store() { return store_.get(); } | |
| 50 | 54 |
| 51 void PumpLoop(); | 55 void PumpLoop(); |
| 52 void ResetResults(); | 56 void ClearResults(); |
| 53 | 57 |
| 54 // Callback used for get requests. | 58 // Callback used for get requests. |
| 55 void GetRequestsDone(bool result, | 59 void GetRequestsDone(bool result, |
| 56 const std::vector<SavePageRequest>& requests); | 60 const std::vector<SavePageRequest>& requests); |
| 57 // Callback used for add/update request. | 61 // Callback used for add/update request. |
| 58 void AddOrUpdateDone(UpdateStatus result); | 62 void AddOrUpdateDone(UpdateStatus result); |
| 59 // Callback used for remove requests. | 63 // Callback used for remove requests. |
| 60 void RemoveDone(bool result, int count); | 64 void RemoveDone(bool result, int count); |
| 61 // Callback used for reset. | 65 // Callback used for reset. |
| 62 void ResetDone(bool result); | 66 void ResetDone(bool result); |
| 63 | 67 |
| 64 LastResult last_result() const { return last_result_; } | 68 LastResult last_result() const { return last_result_; } |
| 65 | |
| 66 UpdateStatus last_update_status() const { return last_update_status_; } | 69 UpdateStatus last_update_status() const { return last_update_status_; } |
| 67 | |
| 68 int last_remove_count() const { return last_remove_count_; } | 70 int last_remove_count() const { return last_remove_count_; } |
| 69 | |
| 70 const std::vector<SavePageRequest>& last_requests() const { | 71 const std::vector<SavePageRequest>& last_requests() const { |
| 71 return last_requests_; | 72 return last_requests_; |
| 72 } | 73 } |
| 73 | 74 |
| 75 protected: |
| 76 base::ScopedTempDir temp_directory_; |
| 77 |
| 74 private: | 78 private: |
| 75 std::unique_ptr<RequestQueueInMemoryStore> store_; | |
| 76 LastResult last_result_; | 79 LastResult last_result_; |
| 77 UpdateStatus last_update_status_; | 80 UpdateStatus last_update_status_; |
| 78 int last_remove_count_; | 81 int last_remove_count_; |
| 79 std::vector<SavePageRequest> last_requests_; | 82 std::vector<SavePageRequest> last_requests_; |
| 83 |
| 80 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | 84 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
| 81 base::ThreadTaskRunnerHandle task_runner_handle_; | 85 base::ThreadTaskRunnerHandle task_runner_handle_; |
| 82 }; | 86 }; |
| 83 | 87 |
| 84 RequestQueueInMemoryStoreTest::RequestQueueInMemoryStoreTest() | 88 RequestQueueStoreTestBase::RequestQueueStoreTestBase() |
| 85 : last_result_(LastResult::RESULT_NONE), | 89 : last_result_(LastResult::kNone), |
| 86 last_update_status_(UpdateStatus::FAILED), | 90 last_update_status_(UpdateStatus::FAILED), |
| 87 last_remove_count_(0), | 91 last_remove_count_(0), |
| 88 task_runner_(new base::TestSimpleTaskRunner), | 92 task_runner_(new base::TestSimpleTaskRunner), |
| 89 task_runner_handle_(task_runner_) {} | 93 task_runner_handle_(task_runner_) { |
| 90 | 94 EXPECT_TRUE(temp_directory_.CreateUniqueTempDir()); |
| 91 void RequestQueueInMemoryStoreTest::SetUp() { | 95 } |
| 92 store_.reset(new RequestQueueInMemoryStore()); | 96 |
| 93 } | 97 void RequestQueueStoreTestBase::TearDown() { |
| 94 | 98 // Wait for all the pieces of the store to delete itself properly. |
| 95 void RequestQueueInMemoryStoreTest::PumpLoop() { | 99 PumpLoop(); |
| 100 } |
| 101 |
| 102 void RequestQueueStoreTestBase::PumpLoop() { |
| 96 task_runner_->RunUntilIdle(); | 103 task_runner_->RunUntilIdle(); |
| 97 } | 104 } |
| 98 | 105 |
| 99 void RequestQueueInMemoryStoreTest::ResetResults() { | 106 void RequestQueueStoreTestBase::ClearResults() { |
| 100 last_result_ = LastResult::RESULT_NONE; | 107 last_result_ = LastResult::kNone; |
| 101 last_update_status_ = UpdateStatus::FAILED; | 108 last_update_status_ = UpdateStatus::FAILED; |
| 102 last_remove_count_ = 0; | 109 last_remove_count_ = 0; |
| 103 last_requests_.clear(); | 110 last_requests_.clear(); |
| 104 } | 111 } |
| 105 | 112 |
| 106 void RequestQueueInMemoryStoreTest::GetRequestsDone( | 113 void RequestQueueStoreTestBase::GetRequestsDone( |
| 107 bool result, | 114 bool result, |
| 108 const std::vector<SavePageRequest>& requests) { | 115 const std::vector<SavePageRequest>& requests) { |
| 109 last_result_ = result ? LastResult::RESULT_TRUE : LastResult::RESULT_FALSE; | 116 last_result_ = result ? LastResult::kTrue : LastResult::kFalse; |
| 110 last_requests_ = requests; | 117 last_requests_ = requests; |
| 111 } | 118 } |
| 112 | 119 |
| 113 void RequestQueueInMemoryStoreTest::AddOrUpdateDone(UpdateStatus status) { | 120 void RequestQueueStoreTestBase::AddOrUpdateDone(UpdateStatus status) { |
| 114 last_update_status_ = status; | 121 last_update_status_ = status; |
| 115 } | 122 } |
| 116 | 123 |
| 117 void RequestQueueInMemoryStoreTest::RemoveDone(bool result, int count) { | 124 void RequestQueueStoreTestBase::RemoveDone(bool result, int count) { |
| 118 last_result_ = result ? LastResult::RESULT_TRUE : LastResult::RESULT_FALSE; | 125 last_result_ = result ? LastResult::kTrue : LastResult::kFalse; |
| 119 last_remove_count_ = count; | 126 last_remove_count_ = count; |
| 120 } | 127 } |
| 121 | 128 |
| 122 void RequestQueueInMemoryStoreTest::ResetDone(bool result) { | 129 void RequestQueueStoreTestBase::ResetDone(bool result) { |
| 123 last_result_ = result ? LastResult::RESULT_TRUE : LastResult::RESULT_FALSE; | 130 last_result_ = result ? LastResult::kTrue : LastResult::kFalse; |
| 124 } | 131 } |
| 125 | 132 |
| 126 TEST_F(RequestQueueInMemoryStoreTest, GetRequestsEmpty) { | 133 // Defines interface for the store factory. |
| 127 store()->GetRequests(base::Bind( | 134 class RequestQueueStoreFactory { |
| 128 &RequestQueueInMemoryStoreTest::GetRequestsDone, base::Unretained(this))); | 135 public: |
| 129 ASSERT_EQ(LastResult::RESULT_NONE, last_result()); | 136 virtual RequestQueueStore* BuildStore(const base::FilePath& path) = 0; |
| 130 PumpLoop(); | 137 }; |
| 131 ASSERT_EQ(LastResult::RESULT_TRUE, last_result()); | 138 |
| 132 ASSERT_TRUE(last_requests().empty()); | 139 // Implements a store factory for in memory store. |
| 133 } | 140 class RequestQueueInMemoryStoreFactory : public RequestQueueStoreFactory { |
| 134 | 141 public: |
| 135 TEST_F(RequestQueueInMemoryStoreTest, AddRequest) { | 142 RequestQueueStore* BuildStore(const base::FilePath& path) override { |
| 143 RequestQueueStore* store = new RequestQueueInMemoryStore(); |
| 144 return store; |
| 145 } |
| 146 }; |
| 147 |
| 148 // Implements a store factory for SQLite based implementation of the store. |
| 149 class RequestQueueStoreSQLFactory : public RequestQueueStoreFactory { |
| 150 public: |
| 151 RequestQueueStore* BuildStore(const base::FilePath& path) override { |
| 152 RequestQueueStore* store = |
| 153 new RequestQueueStoreSQL(base::ThreadTaskRunnerHandle::Get(), path); |
| 154 return store; |
| 155 } |
| 156 }; |
| 157 |
| 158 // Defines a store test fixture templatized by the store factory. |
| 159 template <typename T> |
| 160 class RequestQueueStoreTest : public RequestQueueStoreTestBase { |
| 161 public: |
| 162 std::unique_ptr<RequestQueueStore> BuildStore(); |
| 163 |
| 164 protected: |
| 165 T factory_; |
| 166 }; |
| 167 |
| 168 template <typename T> |
| 169 std::unique_ptr<RequestQueueStore> RequestQueueStoreTest<T>::BuildStore() { |
| 170 std::unique_ptr<RequestQueueStore> store( |
| 171 factory_.BuildStore(temp_directory_.path())); |
| 172 return store; |
| 173 } |
| 174 |
| 175 // |StoreTypes| lists all factories, based on which the tests will be created. |
| 176 typedef testing::Types<RequestQueueInMemoryStoreFactory, |
| 177 RequestQueueStoreSQLFactory> |
| 178 StoreTypes; |
| 179 |
| 180 // This portion causes test fixtures to be defined. |
| 181 // Notice that in the store we are using "this->" to refer to the methods |
| 182 // defined on the |RequestQuieueStoreBaseTest| class. That's by design. |
| 183 TYPED_TEST_CASE(RequestQueueStoreTest, StoreTypes); |
| 184 |
| 185 TYPED_TEST(RequestQueueStoreTest, GetRequestsEmpty) { |
| 186 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); |
| 187 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
| 188 base::Unretained(this))); |
| 189 ASSERT_EQ(LastResult::kNone, this->last_result()); |
| 190 this->PumpLoop(); |
| 191 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
| 192 ASSERT_TRUE(this->last_requests().empty()); |
| 193 } |
| 194 |
| 195 TYPED_TEST(RequestQueueStoreTest, AddRequest) { |
| 196 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); |
| 136 base::Time creation_time = base::Time::Now(); | 197 base::Time creation_time = base::Time::Now(); |
| 137 SavePageRequest request(kRequestId, kUrl, kClientId, creation_time); | 198 SavePageRequest request(kRequestId, kUrl, kClientId, creation_time); |
| 138 | 199 |
| 139 store()->AddOrUpdateRequest( | 200 store->AddOrUpdateRequest( |
| 140 request, base::Bind(&RequestQueueInMemoryStoreTest::AddOrUpdateDone, | 201 request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, |
| 141 base::Unretained(this))); | 202 base::Unretained(this))); |
| 142 ASSERT_EQ(UpdateStatus::FAILED, last_update_status()); | 203 ASSERT_EQ(UpdateStatus::FAILED, this->last_update_status()); |
| 143 PumpLoop(); | 204 this->PumpLoop(); |
| 144 ASSERT_EQ(UpdateStatus::ADDED, last_update_status()); | 205 ASSERT_EQ(UpdateStatus::UPDATED, this->last_update_status()); |
| 145 | 206 |
| 146 // Verifying get reqeust results after a request was added. | 207 // Verifying get reqeust results after a request was added. |
| 147 ResetResults(); | 208 this->ClearResults(); |
| 148 store()->GetRequests(base::Bind( | 209 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
| 149 &RequestQueueInMemoryStoreTest::GetRequestsDone, base::Unretained(this))); | 210 base::Unretained(this))); |
| 150 ASSERT_EQ(LastResult::RESULT_NONE, last_result()); | 211 ASSERT_EQ(LastResult::kNone, this->last_result()); |
| 151 PumpLoop(); | 212 this->PumpLoop(); |
| 152 ASSERT_EQ(LastResult::RESULT_TRUE, last_result()); | 213 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
| 153 ASSERT_EQ(1ul, last_requests().size()); | 214 ASSERT_EQ(1ul, this->last_requests().size()); |
| 154 ASSERT_TRUE(request == last_requests()[0]); | 215 ASSERT_TRUE(request == this->last_requests()[0]); |
| 155 } | 216 } |
| 156 | 217 |
| 157 TEST_F(RequestQueueInMemoryStoreTest, UpdateRequest) { | 218 TYPED_TEST(RequestQueueStoreTest, UpdateRequest) { |
| 219 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); |
| 158 base::Time creation_time = base::Time::Now(); | 220 base::Time creation_time = base::Time::Now(); |
| 159 SavePageRequest original_request(kRequestId, kUrl, kClientId, creation_time); | 221 SavePageRequest original_request(kRequestId, kUrl, kClientId, creation_time); |
| 160 store()->AddOrUpdateRequest( | 222 store->AddOrUpdateRequest( |
| 161 original_request, | 223 original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, |
| 162 base::Bind(&RequestQueueInMemoryStoreTest::AddOrUpdateDone, | 224 base::Unretained(this))); |
| 163 base::Unretained(this))); | 225 this->PumpLoop(); |
| 164 PumpLoop(); | 226 this->ClearResults(); |
| 165 ResetResults(); | |
| 166 | 227 |
| 167 base::Time new_creation_time = | 228 base::Time new_creation_time = |
| 168 creation_time + base::TimeDelta::FromMinutes(1); | 229 creation_time + base::TimeDelta::FromMinutes(1); |
| 169 base::Time activation_time = creation_time + base::TimeDelta::FromHours(6); | 230 base::Time activation_time = creation_time + base::TimeDelta::FromHours(6); |
| 170 SavePageRequest updated_request(kRequestId, kUrl, kClientId, | 231 SavePageRequest updated_request(kRequestId, kUrl, kClientId, |
| 171 new_creation_time, activation_time); | 232 new_creation_time, activation_time); |
| 172 store()->AddOrUpdateRequest( | 233 store->AddOrUpdateRequest( |
| 173 updated_request, | 234 updated_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, |
| 174 base::Bind(&RequestQueueInMemoryStoreTest::AddOrUpdateDone, | 235 base::Unretained(this))); |
| 175 base::Unretained(this))); | 236 ASSERT_EQ(UpdateStatus::FAILED, this->last_update_status()); |
| 176 ASSERT_EQ(UpdateStatus::FAILED, last_update_status()); | 237 this->PumpLoop(); |
| 177 PumpLoop(); | 238 ASSERT_EQ(UpdateStatus::UPDATED, this->last_update_status()); |
| 178 ASSERT_EQ(UpdateStatus::UPDATED, last_update_status()); | |
| 179 | 239 |
| 180 // Verifying get reqeust results after a request was updated. | 240 // Verifying get reqeust results after a request was updated. |
| 181 ResetResults(); | 241 this->ClearResults(); |
| 182 store()->GetRequests(base::Bind( | 242 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
| 183 &RequestQueueInMemoryStoreTest::GetRequestsDone, base::Unretained(this))); | 243 base::Unretained(this))); |
| 184 ASSERT_EQ(LastResult::RESULT_NONE, last_result()); | 244 ASSERT_EQ(LastResult::kNone, this->last_result()); |
| 185 PumpLoop(); | 245 this->PumpLoop(); |
| 186 ASSERT_EQ(LastResult::RESULT_TRUE, last_result()); | 246 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
| 187 ASSERT_EQ(1ul, last_requests().size()); | 247 ASSERT_EQ(1ul, this->last_requests().size()); |
| 188 ASSERT_TRUE(updated_request == last_requests()[0]); | 248 ASSERT_TRUE(updated_request == this->last_requests()[0]); |
| 189 } | 249 } |
| 190 | 250 |
| 191 TEST_F(RequestQueueInMemoryStoreTest, RemoveRequest) { | 251 TYPED_TEST(RequestQueueStoreTest, RemoveRequest) { |
| 252 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); |
| 192 base::Time creation_time = base::Time::Now(); | 253 base::Time creation_time = base::Time::Now(); |
| 193 SavePageRequest original_request(kRequestId, kUrl, kClientId, creation_time); | 254 SavePageRequest original_request(kRequestId, kUrl, kClientId, creation_time); |
| 194 store()->AddOrUpdateRequest( | 255 store->AddOrUpdateRequest( |
| 195 original_request, | 256 original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, |
| 196 base::Bind(&RequestQueueInMemoryStoreTest::AddOrUpdateDone, | 257 base::Unretained(this))); |
| 197 base::Unretained(this))); | 258 this->PumpLoop(); |
| 198 PumpLoop(); | 259 this->ClearResults(); |
| 199 ResetResults(); | |
| 200 | 260 |
| 201 std::vector<int64_t> request_ids{kRequestId}; | 261 std::vector<int64_t> request_ids{kRequestId}; |
| 202 store()->RemoveRequests(request_ids, | 262 store->RemoveRequests(request_ids, |
| 203 base::Bind(&RequestQueueInMemoryStoreTest::RemoveDone, | 263 base::Bind(&RequestQueueStoreTestBase::RemoveDone, |
| 204 base::Unretained(this))); | 264 base::Unretained(this))); |
| 205 ASSERT_EQ(LastResult::RESULT_NONE, last_result()); | 265 ASSERT_EQ(LastResult::kNone, this->last_result()); |
| 206 ASSERT_EQ(0, last_remove_count()); | 266 ASSERT_EQ(0, this->last_remove_count()); |
| 207 PumpLoop(); | 267 this->PumpLoop(); |
| 208 ASSERT_EQ(LastResult::RESULT_TRUE, last_result()); | 268 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
| 209 ASSERT_EQ(1, last_remove_count()); | 269 ASSERT_EQ(1, this->last_remove_count()); |
| 210 ASSERT_EQ(0ul, last_requests().size()); | 270 this->ClearResults(); |
| 211 ResetResults(); | 271 |
| 272 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
| 273 base::Unretained(this))); |
| 274 this->PumpLoop(); |
| 275 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
| 276 ASSERT_TRUE(this->last_requests().empty()); |
| 277 this->ClearResults(); |
| 212 | 278 |
| 213 // Removing a request that is missing fails. | 279 // Removing a request that is missing fails. |
| 214 store()->RemoveRequests(request_ids, | 280 store->RemoveRequests(request_ids, |
| 215 base::Bind(&RequestQueueInMemoryStoreTest::RemoveDone, | 281 base::Bind(&RequestQueueStoreTestBase::RemoveDone, |
| 216 base::Unretained(this))); | 282 base::Unretained(this))); |
| 217 ASSERT_EQ(LastResult::RESULT_NONE, last_result()); | 283 ASSERT_EQ(LastResult::kNone, this->last_result()); |
| 218 ASSERT_EQ(0, last_remove_count()); | 284 ASSERT_EQ(0, this->last_remove_count()); |
| 219 PumpLoop(); | 285 this->PumpLoop(); |
| 220 ASSERT_EQ(LastResult::RESULT_FALSE, last_result()); | 286 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
| 221 ASSERT_EQ(0, last_remove_count()); | 287 ASSERT_EQ(0, this->last_remove_count()); |
| 222 } | 288 } |
| 223 | 289 |
| 224 TEST_F(RequestQueueInMemoryStoreTest, ResetStore) { | 290 TYPED_TEST(RequestQueueStoreTest, ResetStore) { |
| 291 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); |
| 225 base::Time creation_time = base::Time::Now(); | 292 base::Time creation_time = base::Time::Now(); |
| 226 SavePageRequest original_request(kRequestId, kUrl, kClientId, creation_time); | 293 SavePageRequest original_request(kRequestId, kUrl, kClientId, creation_time); |
| 227 store()->AddOrUpdateRequest( | 294 store->AddOrUpdateRequest( |
| 228 original_request, | 295 original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, |
| 229 base::Bind(&RequestQueueInMemoryStoreTest::AddOrUpdateDone, | 296 base::Unretained(this))); |
| 230 base::Unretained(this))); | 297 this->PumpLoop(); |
| 231 PumpLoop(); | 298 this->ClearResults(); |
| 232 ResetResults(); | 299 |
| 233 | 300 store->Reset(base::Bind(&RequestQueueStoreTestBase::ResetDone, |
| 234 store()->Reset(base::Bind(&RequestQueueInMemoryStoreTest::ResetDone, | 301 base::Unretained(this))); |
| 235 base::Unretained(this))); | 302 ASSERT_EQ(LastResult::kNone, this->last_result()); |
| 236 ASSERT_EQ(LastResult::RESULT_NONE, last_result()); | 303 this->PumpLoop(); |
| 237 PumpLoop(); | 304 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
| 238 ASSERT_EQ(LastResult::RESULT_TRUE, last_result()); | 305 this->ClearResults(); |
| 239 ASSERT_EQ(0ul, last_requests().size()); | 306 |
| 307 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
| 308 base::Unretained(this))); |
| 309 this->PumpLoop(); |
| 310 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
| 311 ASSERT_TRUE(this->last_requests().empty()); |
| 240 } | 312 } |
| 241 | 313 |
| 242 } // offline_pages | 314 } // offline_pages |
| OLD | NEW |