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" | 10 #include "base/files/file_path.h" |
11 #include "base/files/scoped_temp_dir.h" | 11 #include "base/files/scoped_temp_dir.h" |
12 #include "base/test/test_simple_task_runner.h" | 12 #include "base/test/test_simple_task_runner.h" |
13 #include "base/threading/thread_task_runner_handle.h" | 13 #include "base/threading/thread_task_runner_handle.h" |
14 #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" | 15 #include "components/offline_pages/background/request_queue_store_sql.h" |
16 #include "components/offline_pages/background/save_page_request.h" | 16 #include "components/offline_pages/background/save_page_request.h" |
17 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
18 | 18 |
19 namespace offline_pages { | 19 namespace offline_pages { |
20 | 20 |
21 using UpdateStatus = RequestQueueStore::UpdateStatus; | 21 using UpdateStatus = RequestQueueStore::UpdateStatus; |
22 | 22 |
23 namespace { | 23 namespace { |
24 const int64_t kRequestId = 42; | 24 const int64_t kRequestId = 42; |
25 const GURL kUrl("http://example.com"); | 25 const GURL kUrl("http://example.com"); |
26 const ClientId kClientId("bookmark", "1234"); | 26 const ClientId kClientId("bookmark", "1234"); |
| 27 const bool kUserRequested = true; |
27 | 28 |
28 enum class LastResult { | 29 enum class LastResult { |
29 kNone, | 30 kNone, |
30 kFalse, | 31 kFalse, |
31 kTrue, | 32 kTrue, |
32 }; | 33 }; |
33 | 34 |
34 bool operator==(const SavePageRequest& lhs, const SavePageRequest& rhs) { | 35 bool operator==(const SavePageRequest& lhs, const SavePageRequest& rhs) { |
35 return lhs.request_id() == rhs.request_id() && lhs.url() == rhs.url() && | 36 return lhs.request_id() == rhs.request_id() && lhs.url() == rhs.url() && |
36 lhs.client_id() == rhs.client_id() && | 37 lhs.client_id() == rhs.client_id() && |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 base::Unretained(this))); | 189 base::Unretained(this))); |
189 ASSERT_EQ(LastResult::kNone, this->last_result()); | 190 ASSERT_EQ(LastResult::kNone, this->last_result()); |
190 this->PumpLoop(); | 191 this->PumpLoop(); |
191 ASSERT_EQ(LastResult::kTrue, this->last_result()); | 192 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
192 ASSERT_TRUE(this->last_requests().empty()); | 193 ASSERT_TRUE(this->last_requests().empty()); |
193 } | 194 } |
194 | 195 |
195 TYPED_TEST(RequestQueueStoreTest, AddRequest) { | 196 TYPED_TEST(RequestQueueStoreTest, AddRequest) { |
196 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); | 197 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); |
197 base::Time creation_time = base::Time::Now(); | 198 base::Time creation_time = base::Time::Now(); |
198 SavePageRequest request(kRequestId, kUrl, kClientId, creation_time); | 199 SavePageRequest request( |
| 200 kRequestId, kUrl, kClientId, creation_time, kUserRequested); |
199 | 201 |
200 store->AddOrUpdateRequest( | 202 store->AddOrUpdateRequest( |
201 request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, | 203 request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, |
202 base::Unretained(this))); | 204 base::Unretained(this))); |
203 ASSERT_EQ(UpdateStatus::FAILED, this->last_update_status()); | 205 ASSERT_EQ(UpdateStatus::FAILED, this->last_update_status()); |
204 this->PumpLoop(); | 206 this->PumpLoop(); |
205 ASSERT_EQ(UpdateStatus::UPDATED, this->last_update_status()); | 207 ASSERT_EQ(UpdateStatus::UPDATED, this->last_update_status()); |
206 | 208 |
207 // Verifying get reqeust results after a request was added. | 209 // Verifying get reqeust results after a request was added. |
208 this->ClearResults(); | 210 this->ClearResults(); |
209 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, | 211 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
210 base::Unretained(this))); | 212 base::Unretained(this))); |
211 ASSERT_EQ(LastResult::kNone, this->last_result()); | 213 ASSERT_EQ(LastResult::kNone, this->last_result()); |
212 this->PumpLoop(); | 214 this->PumpLoop(); |
213 ASSERT_EQ(LastResult::kTrue, this->last_result()); | 215 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
214 ASSERT_EQ(1ul, this->last_requests().size()); | 216 ASSERT_EQ(1ul, this->last_requests().size()); |
215 ASSERT_TRUE(request == this->last_requests()[0]); | 217 ASSERT_TRUE(request == this->last_requests()[0]); |
216 } | 218 } |
217 | 219 |
218 TYPED_TEST(RequestQueueStoreTest, UpdateRequest) { | 220 TYPED_TEST(RequestQueueStoreTest, UpdateRequest) { |
219 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); | 221 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); |
220 base::Time creation_time = base::Time::Now(); | 222 base::Time creation_time = base::Time::Now(); |
221 SavePageRequest original_request(kRequestId, kUrl, kClientId, creation_time); | 223 SavePageRequest original_request( |
| 224 kRequestId, kUrl, kClientId, creation_time, kUserRequested); |
222 store->AddOrUpdateRequest( | 225 store->AddOrUpdateRequest( |
223 original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, | 226 original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, |
224 base::Unretained(this))); | 227 base::Unretained(this))); |
225 this->PumpLoop(); | 228 this->PumpLoop(); |
226 this->ClearResults(); | 229 this->ClearResults(); |
227 | 230 |
228 base::Time new_creation_time = | 231 base::Time new_creation_time = |
229 creation_time + base::TimeDelta::FromMinutes(1); | 232 creation_time + base::TimeDelta::FromMinutes(1); |
230 base::Time activation_time = creation_time + base::TimeDelta::FromHours(6); | 233 base::Time activation_time = creation_time + base::TimeDelta::FromHours(6); |
231 SavePageRequest updated_request(kRequestId, kUrl, kClientId, | 234 SavePageRequest updated_request(kRequestId, kUrl, kClientId, |
232 new_creation_time, activation_time); | 235 new_creation_time, activation_time, |
| 236 kUserRequested); |
233 store->AddOrUpdateRequest( | 237 store->AddOrUpdateRequest( |
234 updated_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, | 238 updated_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, |
235 base::Unretained(this))); | 239 base::Unretained(this))); |
236 ASSERT_EQ(UpdateStatus::FAILED, this->last_update_status()); | 240 ASSERT_EQ(UpdateStatus::FAILED, this->last_update_status()); |
237 this->PumpLoop(); | 241 this->PumpLoop(); |
238 ASSERT_EQ(UpdateStatus::UPDATED, this->last_update_status()); | 242 ASSERT_EQ(UpdateStatus::UPDATED, this->last_update_status()); |
239 | 243 |
240 // Verifying get reqeust results after a request was updated. | 244 // Verifying get reqeust results after a request was updated. |
241 this->ClearResults(); | 245 this->ClearResults(); |
242 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, | 246 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
243 base::Unretained(this))); | 247 base::Unretained(this))); |
244 ASSERT_EQ(LastResult::kNone, this->last_result()); | 248 ASSERT_EQ(LastResult::kNone, this->last_result()); |
245 this->PumpLoop(); | 249 this->PumpLoop(); |
246 ASSERT_EQ(LastResult::kTrue, this->last_result()); | 250 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
247 ASSERT_EQ(1ul, this->last_requests().size()); | 251 ASSERT_EQ(1ul, this->last_requests().size()); |
248 ASSERT_TRUE(updated_request == this->last_requests()[0]); | 252 ASSERT_TRUE(updated_request == this->last_requests()[0]); |
249 } | 253 } |
250 | 254 |
251 TYPED_TEST(RequestQueueStoreTest, RemoveRequest) { | 255 TYPED_TEST(RequestQueueStoreTest, RemoveRequest) { |
252 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); | 256 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); |
253 base::Time creation_time = base::Time::Now(); | 257 base::Time creation_time = base::Time::Now(); |
254 SavePageRequest original_request(kRequestId, kUrl, kClientId, creation_time); | 258 SavePageRequest original_request( |
| 259 kRequestId, kUrl, kClientId, creation_time, kUserRequested); |
255 store->AddOrUpdateRequest( | 260 store->AddOrUpdateRequest( |
256 original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, | 261 original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, |
257 base::Unretained(this))); | 262 base::Unretained(this))); |
258 this->PumpLoop(); | 263 this->PumpLoop(); |
259 this->ClearResults(); | 264 this->ClearResults(); |
260 | 265 |
261 std::vector<int64_t> request_ids{kRequestId}; | 266 std::vector<int64_t> request_ids{kRequestId}; |
262 store->RemoveRequests(request_ids, | 267 store->RemoveRequests(request_ids, |
263 base::Bind(&RequestQueueStoreTestBase::RemoveDone, | 268 base::Bind(&RequestQueueStoreTestBase::RemoveDone, |
264 base::Unretained(this))); | 269 base::Unretained(this))); |
(...skipping 18 matching lines...) Expand all Loading... |
283 ASSERT_EQ(LastResult::kNone, this->last_result()); | 288 ASSERT_EQ(LastResult::kNone, this->last_result()); |
284 ASSERT_EQ(0, this->last_remove_count()); | 289 ASSERT_EQ(0, this->last_remove_count()); |
285 this->PumpLoop(); | 290 this->PumpLoop(); |
286 ASSERT_EQ(LastResult::kTrue, this->last_result()); | 291 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
287 ASSERT_EQ(0, this->last_remove_count()); | 292 ASSERT_EQ(0, this->last_remove_count()); |
288 } | 293 } |
289 | 294 |
290 TYPED_TEST(RequestQueueStoreTest, ResetStore) { | 295 TYPED_TEST(RequestQueueStoreTest, ResetStore) { |
291 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); | 296 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); |
292 base::Time creation_time = base::Time::Now(); | 297 base::Time creation_time = base::Time::Now(); |
293 SavePageRequest original_request(kRequestId, kUrl, kClientId, creation_time); | 298 SavePageRequest original_request( |
| 299 kRequestId, kUrl, kClientId, creation_time, kUserRequested); |
294 store->AddOrUpdateRequest( | 300 store->AddOrUpdateRequest( |
295 original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, | 301 original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, |
296 base::Unretained(this))); | 302 base::Unretained(this))); |
297 this->PumpLoop(); | 303 this->PumpLoop(); |
298 this->ClearResults(); | 304 this->ClearResults(); |
299 | 305 |
300 store->Reset(base::Bind(&RequestQueueStoreTestBase::ResetDone, | 306 store->Reset(base::Bind(&RequestQueueStoreTestBase::ResetDone, |
301 base::Unretained(this))); | 307 base::Unretained(this))); |
302 ASSERT_EQ(LastResult::kNone, this->last_result()); | 308 ASSERT_EQ(LastResult::kNone, this->last_result()); |
303 this->PumpLoop(); | 309 this->PumpLoop(); |
304 ASSERT_EQ(LastResult::kTrue, this->last_result()); | 310 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
305 this->ClearResults(); | 311 this->ClearResults(); |
306 | 312 |
307 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, | 313 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
308 base::Unretained(this))); | 314 base::Unretained(this))); |
309 this->PumpLoop(); | 315 this->PumpLoop(); |
310 ASSERT_EQ(LastResult::kTrue, this->last_result()); | 316 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
311 ASSERT_TRUE(this->last_requests().empty()); | 317 ASSERT_TRUE(this->last_requests().empty()); |
312 } | 318 } |
313 | 319 |
314 class RequestQueueStoreSQLTest | 320 class RequestQueueStoreSQLTest |
315 : public RequestQueueStoreTest<RequestQueueStoreSQLFactory> {}; | 321 : public RequestQueueStoreTest<RequestQueueStoreSQLFactory> {}; |
316 | 322 |
317 // Makes sure that persistent DB is actually persisting requests across store | 323 // Makes sure that persistent DB is actually persisting requests across store |
318 // restarts. | 324 // restarts. |
319 TEST_F(RequestQueueStoreSQLTest, SaveCloseReopenRead) { | 325 TEST_F(RequestQueueStoreSQLTest, SaveCloseReopenRead) { |
320 std::unique_ptr<RequestQueueStore> store(BuildStore()); | 326 std::unique_ptr<RequestQueueStore> store(BuildStore()); |
321 base::Time creation_time = base::Time::Now(); | 327 base::Time creation_time = base::Time::Now(); |
322 SavePageRequest original_request(kRequestId, kUrl, kClientId, creation_time); | 328 SavePageRequest original_request( |
| 329 kRequestId, kUrl, kClientId, creation_time, kUserRequested); |
323 store->AddOrUpdateRequest( | 330 store->AddOrUpdateRequest( |
324 original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, | 331 original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, |
325 base::Unretained(this))); | 332 base::Unretained(this))); |
326 PumpLoop(); | 333 PumpLoop(); |
327 ClearResults(); | 334 ClearResults(); |
328 | 335 |
329 // Resets the store, using the same temp directory. The contents should be | 336 // Resets the store, using the same temp directory. The contents should be |
330 // intact. First reset is done separately to release DB lock. | 337 // intact. First reset is done separately to release DB lock. |
331 store.reset(); | 338 store.reset(); |
332 store = BuildStore(); | 339 store = BuildStore(); |
333 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, | 340 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
334 base::Unretained(this))); | 341 base::Unretained(this))); |
335 ASSERT_EQ(LastResult::kNone, this->last_result()); | 342 ASSERT_EQ(LastResult::kNone, this->last_result()); |
336 this->PumpLoop(); | 343 this->PumpLoop(); |
337 ASSERT_EQ(LastResult::kTrue, this->last_result()); | 344 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
338 ASSERT_EQ(1ul, this->last_requests().size()); | 345 ASSERT_EQ(1ul, this->last_requests().size()); |
339 ASSERT_TRUE(original_request == this->last_requests()[0]); | 346 ASSERT_TRUE(original_request == this->last_requests()[0]); |
340 } | 347 } |
341 | 348 |
342 } // offline_pages | 349 } // offline_pages |
OLD | NEW |