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

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

Issue 2113383002: More detailed implementation of the RequestPicker (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix time check and MeetsConditions check Created 4 years, 5 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_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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698