OLD | NEW |
| (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/add_request_task.h" | |
6 | |
7 #include <memory> | |
8 | |
9 #include "base/bind.h" | |
10 #include "base/test/test_simple_task_runner.h" | |
11 #include "base/threading/thread_task_runner_handle.h" | |
12 #include "components/offline_pages/background/request_queue_in_memory_store.h" | |
13 #include "testing/gtest/include/gtest/gtest.h" | |
14 | |
15 namespace offline_pages { | |
16 namespace { | |
17 const int64_t kRequestId1 = 42; | |
18 const int64_t kRequestId2 = 44; | |
19 const GURL kUrl1("http://example.com"); | |
20 const GURL kUrl2("http://otherexample.com"); | |
21 const ClientId kClientId1("download", "1234"); | |
22 const ClientId kClientId2("download", "5678"); | |
23 } // namespace | |
24 | |
25 class AddRequestTaskTest : public testing::Test { | |
26 public: | |
27 AddRequestTaskTest(); | |
28 ~AddRequestTaskTest() override; | |
29 | |
30 void PumpLoop(); | |
31 void ClearResults(); | |
32 | |
33 void InitializeStore(RequestQueueStore* store); | |
34 | |
35 void AddRequestDone(ItemActionStatus status); | |
36 | |
37 void GetRequestsCallback( | |
38 bool success, | |
39 std::vector<std::unique_ptr<SavePageRequest>> requests); | |
40 | |
41 bool callback_called() const { return callback_called_; } | |
42 | |
43 ItemActionStatus last_status() const { return status_; } | |
44 | |
45 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { | |
46 return requests_; | |
47 } | |
48 | |
49 private: | |
50 void InitializeStoreDone(bool success); | |
51 | |
52 bool callback_called_; | |
53 ItemActionStatus status_; | |
54 std::vector<std::unique_ptr<SavePageRequest>> requests_; | |
55 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | |
56 base::ThreadTaskRunnerHandle task_runner_handle_; | |
57 }; | |
58 | |
59 AddRequestTaskTest::AddRequestTaskTest() | |
60 : callback_called_(false), | |
61 status_(ItemActionStatus::NOT_FOUND), | |
62 task_runner_(new base::TestSimpleTaskRunner), | |
63 task_runner_handle_(task_runner_) {} | |
64 | |
65 AddRequestTaskTest::~AddRequestTaskTest() {} | |
66 | |
67 void AddRequestTaskTest::PumpLoop() { | |
68 task_runner_->RunUntilIdle(); | |
69 } | |
70 | |
71 void AddRequestTaskTest::ClearResults() { | |
72 callback_called_ = false; | |
73 status_ = ItemActionStatus::NOT_FOUND; | |
74 requests_.clear(); | |
75 } | |
76 | |
77 void AddRequestTaskTest::InitializeStore(RequestQueueStore* store) { | |
78 store->Initialize(base::Bind(&AddRequestTaskTest::InitializeStoreDone, | |
79 base::Unretained(this))); | |
80 PumpLoop(); | |
81 } | |
82 | |
83 void AddRequestTaskTest::AddRequestDone(ItemActionStatus status) { | |
84 status_ = status; | |
85 callback_called_ = true; | |
86 } | |
87 | |
88 void AddRequestTaskTest::GetRequestsCallback( | |
89 bool success, | |
90 std::vector<std::unique_ptr<SavePageRequest>> requests) { | |
91 requests_ = std::move(requests); | |
92 } | |
93 | |
94 void AddRequestTaskTest::InitializeStoreDone(bool success) { | |
95 ASSERT_TRUE(success); | |
96 } | |
97 | |
98 TEST_F(AddRequestTaskTest, AddSingleRequest) { | |
99 RequestQueueInMemoryStore store; | |
100 InitializeStore(&store); | |
101 base::Time creation_time = base::Time::Now(); | |
102 SavePageRequest request_1(kRequestId1, kUrl1, kClientId1, creation_time, | |
103 true); | |
104 AddRequestTask task( | |
105 &store, request_1, | |
106 base::Bind(&AddRequestTaskTest::AddRequestDone, base::Unretained(this))); | |
107 task.Run(); | |
108 PumpLoop(); | |
109 EXPECT_TRUE(callback_called()); | |
110 EXPECT_EQ(ItemActionStatus::SUCCESS, last_status()); | |
111 | |
112 store.GetRequests(base::Bind(&AddRequestTaskTest::GetRequestsCallback, | |
113 base::Unretained(this))); | |
114 PumpLoop(); | |
115 ASSERT_EQ(1ul, last_requests().size()); | |
116 EXPECT_EQ(kRequestId1, last_requests().at(0)->request_id()); | |
117 EXPECT_EQ(kUrl1, last_requests().at(0)->url()); | |
118 EXPECT_EQ(kClientId1, last_requests().at(0)->client_id()); | |
119 EXPECT_EQ(creation_time, last_requests().at(0)->creation_time()); | |
120 EXPECT_TRUE(last_requests().at(0)->user_requested()); | |
121 } | |
122 | |
123 TEST_F(AddRequestTaskTest, AddMultipleRequests) { | |
124 RequestQueueInMemoryStore store; | |
125 InitializeStore(&store); | |
126 base::Time creation_time_1 = base::Time::Now(); | |
127 SavePageRequest request_1(kRequestId1, kUrl1, kClientId1, creation_time_1, | |
128 true); | |
129 AddRequestTask task( | |
130 &store, request_1, | |
131 base::Bind(&AddRequestTaskTest::AddRequestDone, base::Unretained(this))); | |
132 task.Run(); | |
133 PumpLoop(); | |
134 EXPECT_TRUE(callback_called()); | |
135 EXPECT_EQ(ItemActionStatus::SUCCESS, last_status()); | |
136 | |
137 ClearResults(); | |
138 base::Time creation_time_2 = base::Time::Now(); | |
139 SavePageRequest request_2(kRequestId2, kUrl2, kClientId2, creation_time_2, | |
140 true); | |
141 AddRequestTask task_2( | |
142 &store, request_2, | |
143 base::Bind(&AddRequestTaskTest::AddRequestDone, base::Unretained(this))); | |
144 task_2.Run(); | |
145 PumpLoop(); | |
146 EXPECT_TRUE(callback_called()); | |
147 EXPECT_EQ(ItemActionStatus::SUCCESS, last_status()); | |
148 | |
149 store.GetRequests(base::Bind(&AddRequestTaskTest::GetRequestsCallback, | |
150 base::Unretained(this))); | |
151 PumpLoop(); | |
152 ASSERT_EQ(2ul, last_requests().size()); | |
153 int request_2_index = | |
154 last_requests().at(0)->request_id() == kRequestId2 ? 0 : 1; | |
155 EXPECT_EQ(kRequestId2, last_requests().at(request_2_index)->request_id()); | |
156 EXPECT_EQ(kUrl2, last_requests().at(request_2_index)->url()); | |
157 EXPECT_EQ(kClientId2, last_requests().at(request_2_index)->client_id()); | |
158 EXPECT_EQ(creation_time_2, | |
159 last_requests().at(request_2_index)->creation_time()); | |
160 EXPECT_TRUE(last_requests().at(request_2_index)->user_requested()); | |
161 } | |
162 | |
163 TEST_F(AddRequestTaskTest, AddDuplicateRequest) { | |
164 RequestQueueInMemoryStore store; | |
165 InitializeStore(&store); | |
166 base::Time creation_time_1 = base::Time::Now(); | |
167 SavePageRequest request_1(kRequestId1, kUrl1, kClientId1, creation_time_1, | |
168 true); | |
169 AddRequestTask task( | |
170 &store, request_1, | |
171 base::Bind(&AddRequestTaskTest::AddRequestDone, base::Unretained(this))); | |
172 task.Run(); | |
173 PumpLoop(); | |
174 EXPECT_TRUE(callback_called()); | |
175 EXPECT_EQ(ItemActionStatus::SUCCESS, last_status()); | |
176 | |
177 ClearResults(); | |
178 base::Time creation_time_2 = base::Time::Now(); | |
179 // This was has the same request ID. | |
180 SavePageRequest request_2(kRequestId1, kUrl2, kClientId2, creation_time_2, | |
181 true); | |
182 AddRequestTask task_2( | |
183 &store, request_2, | |
184 base::Bind(&AddRequestTaskTest::AddRequestDone, base::Unretained(this))); | |
185 task.Run(); | |
186 PumpLoop(); | |
187 EXPECT_TRUE(callback_called()); | |
188 EXPECT_EQ(ItemActionStatus::ALREADY_EXISTS, last_status()); | |
189 | |
190 store.GetRequests(base::Bind(&AddRequestTaskTest::GetRequestsCallback, | |
191 base::Unretained(this))); | |
192 PumpLoop(); | |
193 ASSERT_EQ(1ul, last_requests().size()); | |
194 } | |
195 | |
196 } // namespace offline_pages | |
OLD | NEW |