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

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

Issue 1947253002: [Offline pages] Implementation of RequestQueue: Add, Remove, Get (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: removing optional Created 4 years, 7 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
« no previous file with comments | « components/offline_pages/background/request_queue.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/background/request_queue.h"
6
7 #include <memory>
8
9 #include "base/bind.h"
10 #include "base/test/test_simple_task_runner.h"
11 #include "base/thread_task_runner_handle.h"
12 #include "components/offline_pages/background/request_queue_in_memory_store.h"
13 #include "components/offline_pages/background/save_page_request.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 namespace offline_pages {
17
18 using AddRequestResult = RequestQueue::AddRequestResult;
19 using GetRequestsResult = RequestQueue::GetRequestsResult;
20 using UpdateRequestResult = RequestQueue::UpdateRequestResult;
21
22 namespace {
23 // Data for request 1.
24 const int64_t kRequestId = 42;
25 const GURL kUrl("http://example.com");
26 const ClientId kClientId("bookmark", "1234");
27 // Data for request 2.
28 const int64_t kRequestId2 = 77;
29 const GURL kUrl2("http://test.com");
30 const ClientId kClientId2("bookmark", "567");
31 } // namespace
32
33 // TODO(fgorski): Add tests for store failures in add/remove/get.
34 class RequestQueueTest : public testing::Test {
35 public:
36 RequestQueueTest();
37 ~RequestQueueTest() override;
38
39 // Test overrides.
40 void SetUp() override;
41
42 void PumpLoop();
43
44 // Callback for adding requests.
45 void AddRequestDone(AddRequestResult result, const SavePageRequest& request);
46 // Callback for getting requests.
47 void GetRequestsDone(GetRequestsResult result,
48 const std::vector<SavePageRequest>& requests);
49 // Callback for removing request.
50 void RemoveRequestDone(UpdateRequestResult result);
51
52 RequestQueue* queue() { return queue_.get(); }
53
54 AddRequestResult last_add_result() const { return last_add_result_; }
55 SavePageRequest* last_added_request() {
56 return last_added_request_.get();
57 }
58
59 UpdateRequestResult last_remove_result() const { return last_remove_result_; }
60
61 GetRequestsResult last_get_requests_result() const {
62 return last_get_requests_result_;
63 }
64 const std::vector<SavePageRequest>& last_requests() const {
65 return last_requests_;
66 }
67
68 private:
69 AddRequestResult last_add_result_;
70 std::unique_ptr<SavePageRequest> last_added_request_;
71
72 UpdateRequestResult last_remove_result_;
73
74 GetRequestsResult last_get_requests_result_;
75 std::vector<SavePageRequest> last_requests_;
76
77 std::unique_ptr<RequestQueue> queue_;
78 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
79 base::ThreadTaskRunnerHandle task_runner_handle_;
80 };
81
82 RequestQueueTest::RequestQueueTest()
83 : last_add_result_(AddRequestResult::kStoreFailure),
84 last_remove_result_(UpdateRequestResult::kStoreFailure),
85 last_get_requests_result_(GetRequestsResult::kStoreFailure),
86 task_runner_(new base::TestSimpleTaskRunner),
87 task_runner_handle_(task_runner_) {}
88
89 RequestQueueTest::~RequestQueueTest() {}
90
91 void RequestQueueTest::SetUp() {
92 std::unique_ptr<RequestQueueInMemoryStore> store(
93 new RequestQueueInMemoryStore());
94 queue_.reset(new RequestQueue(std::move(store)));
95 }
96
97 void RequestQueueTest::PumpLoop() {
98 task_runner_->RunUntilIdle();
99 }
100
101 void RequestQueueTest::AddRequestDone(AddRequestResult result,
102 const SavePageRequest& request) {
103 last_add_result_ = result;
104 last_added_request_.reset(new SavePageRequest(request));
105 }
106
107 void RequestQueueTest::GetRequestsDone(
108 GetRequestsResult result,
109 const std::vector<SavePageRequest>& requests) {
110 last_get_requests_result_ = result;
111 last_requests_ = requests;
112 }
113
114 void RequestQueueTest::RemoveRequestDone(UpdateRequestResult result) {
115 last_remove_result_ = result;
116 }
117
118 TEST_F(RequestQueueTest, GetRequestsEmpty) {
119 queue()->GetRequests(
120 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this)));
121 PumpLoop();
122 ASSERT_EQ(GetRequestsResult::kSuccess, last_get_requests_result());
123 ASSERT_EQ(0ul, last_requests().size());
124 }
125
126 TEST_F(RequestQueueTest, AddRequest) {
127 base::Time creation_time = base::Time::Now();
128 SavePageRequest request(kRequestId, kUrl, kClientId, creation_time);
129 queue()->AddRequest(request, base::Bind(&RequestQueueTest::AddRequestDone,
130 base::Unretained(this)));
131 PumpLoop();
132 ASSERT_EQ(AddRequestResult::kSuccess, last_add_result());
133 ASSERT_TRUE(last_added_request());
134 ASSERT_EQ(kRequestId, last_added_request()->request_id());
135
136 queue()->GetRequests(
137 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this)));
138 PumpLoop();
139 ASSERT_EQ(GetRequestsResult::kSuccess, last_get_requests_result());
140 ASSERT_EQ(1ul, last_requests().size());
141 }
142
143 TEST_F(RequestQueueTest, RemoveRequest) {
144 base::Time creation_time = base::Time::Now();
145 SavePageRequest request(kRequestId, kUrl, kClientId, creation_time);
146 queue()->AddRequest(request, base::Bind(&RequestQueueTest::AddRequestDone,
147 base::Unretained(this)));
148 PumpLoop();
149 ASSERT_EQ(kRequestId, last_added_request()->request_id());
150
151 queue()->RemoveRequest(
152 kRequestId,
153 base::Bind(&RequestQueueTest::RemoveRequestDone, base::Unretained(this)));
154 PumpLoop();
155 ASSERT_EQ(UpdateRequestResult::kSuccess, last_remove_result());
156
157 queue()->GetRequests(
158 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this)));
159 PumpLoop();
160 ASSERT_EQ(GetRequestsResult::kSuccess, last_get_requests_result());
161 ASSERT_EQ(0ul, last_requests().size());
162 }
163
164 // A longer test populating the request queue with more than one item, properly
165 // listing multiple items and removing the right item.
166 TEST_F(RequestQueueTest, MultipleRequestsAddGetRemove) {
167 base::Time creation_time = base::Time::Now();
168 SavePageRequest request1(kRequestId, kUrl, kClientId, creation_time);
169 queue()->AddRequest(request1, base::Bind(&RequestQueueTest::AddRequestDone,
170 base::Unretained(this)));
171 PumpLoop();
172 ASSERT_EQ(request1.request_id(), last_added_request()->request_id());
173 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time);
174 queue()->AddRequest(request2, base::Bind(&RequestQueueTest::AddRequestDone,
175 base::Unretained(this)));
176 PumpLoop();
177 ASSERT_EQ(request2.request_id(), last_added_request()->request_id());
178
179 queue()->GetRequests(
180 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this)));
181 PumpLoop();
182 ASSERT_EQ(GetRequestsResult::kSuccess, last_get_requests_result());
183 ASSERT_EQ(2ul, last_requests().size());
184
185 queue()->RemoveRequest(
186 request1.request_id(),
187 base::Bind(&RequestQueueTest::RemoveRequestDone, base::Unretained(this)));
188 PumpLoop();
189 ASSERT_EQ(UpdateRequestResult::kSuccess, last_remove_result());
190
191 queue()->GetRequests(
192 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this)));
193 PumpLoop();
194 ASSERT_EQ(GetRequestsResult::kSuccess, last_get_requests_result());
195 ASSERT_EQ(1ul, last_requests().size());
196 ASSERT_EQ(request2.request_id(), last_requests()[0].request_id());
197 }
198
199 } // namespace offline_pages
OLDNEW
« no previous file with comments | « components/offline_pages/background/request_queue.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698