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

Side by Side Diff: components/offline_pages/core/background/reconcile_task_unittest.cc

Issue 2568613002: Reconcile the request queue on startup. (Closed)
Patch Set: Created 4 years 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "components/offline_pages/core/background/reconcile_task.h"
6
7 #include <memory>
8 #include <set>
9
10 #include "base/bind.h"
11 #include "base/test/test_simple_task_runner.h"
12 #include "base/threading/thread_task_runner_handle.h"
13 #include "components/offline_pages/core/background/request_coordinator.h"
14 #include "components/offline_pages/core/background/request_queue_in_memory_store .h"
15 #include "components/offline_pages/core/background/request_queue_store.h"
16 #include "components/offline_pages/core/background/save_page_request.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18
19 namespace offline_pages {
20
21 namespace {
22 // Data for request 1.
23 const int64_t kRequestId1 = 17;
24 const GURL kUrl1("https://google.com");
25 const ClientId kClientId1("bookmark", "1234");
26 // Data for request 2.
27 const int64_t kRequestId2 = 42;
28 const GURL kUrl2("http://nytimes.com");
29 const ClientId kClientId2("bookmark", "5678");
30 const bool kUserRequested = true;
31
32 // Default request
33 const SavePageRequest kEmptyRequest(0UL,
fgorski 2016/12/12 17:35:18 nit: wouldn't git cl format put that on a single l
Pete Williamson 2016/12/15 18:37:43 Git cl format seems to prefer lining these up. I
34 GURL(""),
35 ClientId("", ""),
36 base::Time(),
37 true);
38 } // namespace
39
40 class ReconcileTaskTest : public testing::Test {
41 public:
42 ReconcileTaskTest();
43
44 ~ReconcileTaskTest() override;
45
46 void SetUp() override;
47
48 void PumpLoop();
49
50 void AddRequestDone(ItemActionStatus status);
51
52 void GetRequestsCallback(
53 bool success,
54 std::vector<std::unique_ptr<SavePageRequest>> requests);
55
56 void ReconcileCallback(std::unique_ptr<UpdateRequestsResult> result);
57
58 void QueueRequests(const SavePageRequest& request1,
59 const SavePageRequest& request2);
60
61 // Reset the factory and the task using the current policy.
62 void MakeTask();
63
64 ReconcileTask* task() { return task_.get(); }
65 RequestQueueStore* store() { return store_.get(); }
66 std::vector<std::unique_ptr<SavePageRequest>>& found_requests() {
67 return found_requests_;
68 }
69
70 protected:
71 void InitializeStoreDone(bool success);
72
73 std::unique_ptr<RequestQueueStore> store_;
74 std::unique_ptr<ReconcileTask> task_;
75 std::vector<std::unique_ptr<SavePageRequest>> found_requests_;
76 bool reconcile_called_;
77
78 private:
79 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
80 base::ThreadTaskRunnerHandle task_runner_handle_;
81 };
82
83 ReconcileTaskTest::ReconcileTaskTest()
84 : reconcile_called_(false),
85 task_runner_(new base::TestSimpleTaskRunner),
86 task_runner_handle_(task_runner_) {}
87
88 ReconcileTaskTest::~ReconcileTaskTest() {}
89
90 void ReconcileTaskTest::SetUp() {
91 DeviceConditions conditions;
92 store_.reset(new RequestQueueInMemoryStore());
93 MakeTask();
94
95 store_->Initialize(base::Bind(&ReconcileTaskTest::InitializeStoreDone,
96 base::Unretained(this)));
97 PumpLoop();
98 }
99
100 void ReconcileTaskTest::PumpLoop() {
101 task_runner_->RunUntilIdle();
102 }
103
104 void ReconcileTaskTest::AddRequestDone(ItemActionStatus status) {
105 ASSERT_EQ(ItemActionStatus::SUCCESS, status);
106 }
107
108 void ReconcileTaskTest::GetRequestsCallback(
109 bool success,
110 std::vector<std::unique_ptr<SavePageRequest>> requests) {
111 found_requests_ = std::move(requests);
112 }
113
114 void ReconcileTaskTest::ReconcileCallback(
dougarnett 2016/12/12 17:16:13 Should be able to test the updated requests pass i
Pete Williamson 2016/12/15 18:37:43 Done.
115 std::unique_ptr<UpdateRequestsResult> result) {
116 reconcile_called_ = true;
117 }
118
119 // Test helper to queue the two given requests.
120 void ReconcileTaskTest::QueueRequests(const SavePageRequest& request1,
121 const SavePageRequest& request2) {
122 DeviceConditions conditions;
123 std::set<int64_t> disabled_requests;
124 // Add test requests on the Queue.
125 store_->AddRequest(request1, base::Bind(&ReconcileTaskTest::AddRequestDone,
126 base::Unretained(this)));
127 store_->AddRequest(request2, base::Bind(&ReconcileTaskTest::AddRequestDone,
128 base::Unretained(this)));
129
130 // Pump the loop to give the async queue the opportunity to do the adds.
131 PumpLoop();
132 }
133
134 void ReconcileTaskTest::MakeTask() {
135 task_.reset(new ReconcileTask(
136 store_.get(), base::Bind(&ReconcileTaskTest::ReconcileCallback,
137 base::Unretained(this))));
138 }
139
140 void ReconcileTaskTest::InitializeStoreDone(bool success) {
141 ASSERT_TRUE(success);
142 }
143
144 TEST_F(ReconcileTaskTest, Reconcile) {
fgorski 2016/12/12 17:35:18 What about testing for case, where no need to upda
Pete Williamson 2016/12/15 18:37:43 Done.
145 base::Time creation_time = base::Time::Now();
146 // Request2 will be expired, request1 will be current.
147 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time,
148 kUserRequested);
149 request1.set_request_state(SavePageRequest::RequestState::PAUSED);
150 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time,
151 kUserRequested);
152 request2.set_request_state(SavePageRequest::RequestState::OFFLINING);
153 QueueRequests(request1, request2);
154
155 // Initiate cleanup.
156 task()->Run();
157 PumpLoop();
158
159 // See what is left in the queue, should be just the other request.
160 store()->GetRequests(base::Bind(&ReconcileTaskTest::GetRequestsCallback,
161 base::Unretained(this)));
162 PumpLoop();
163 EXPECT_EQ(2UL, found_requests().size());
164
165 // in case requests come back in a different order, check which is where.
166 int request1_index = 0;
167 int request2_index = 1;
168 if (found_requests().at(0)->request_id() != kRequestId1) {
169 request1_index = 1;
170 request2_index = 0;
171 }
172 EXPECT_EQ(SavePageRequest::RequestState::PAUSED,
173 found_requests().at(request1_index)->request_state());
174 EXPECT_EQ(SavePageRequest::RequestState::AVAILABLE,
175 found_requests().at(request2_index)->request_state());
176 EXPECT_EQ(true, reconcile_called_);
177 }
178
179 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698