OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "google_apis/drive/request_sender.h" | 5 #include "google_apis/drive/request_sender.h" |
6 | 6 |
7 #include "base/sequenced_task_runner.h" | 7 #include "base/sequenced_task_runner.h" |
8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
9 #include "google_apis/drive/base_requests.h" | 9 #include "google_apis/drive/base_requests.h" |
10 #include "google_apis/drive/dummy_auth_service.h" | 10 #include "google_apis/drive/dummy_auth_service.h" |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 } // namespace | 132 } // namespace |
133 | 133 |
134 TEST_F(RequestSenderTest, StartAndFinishRequest) { | 134 TEST_F(RequestSenderTest, StartAndFinishRequest) { |
135 bool start_called = false; | 135 bool start_called = false; |
136 FinishReason finish_reason = NONE; | 136 FinishReason finish_reason = NONE; |
137 TestRequest* request = new TestRequest(&request_sender_, | 137 TestRequest* request = new TestRequest(&request_sender_, |
138 &start_called, | 138 &start_called, |
139 &finish_reason); | 139 &finish_reason); |
140 base::WeakPtr<AuthenticatedRequestInterface> weak_ptr = request->GetWeakPtr(); | 140 base::WeakPtr<AuthenticatedRequestInterface> weak_ptr = request->GetWeakPtr(); |
141 | 141 |
142 base::Closure cancel_closure = request_sender_.StartRequestWithRetry(request); | 142 base::Closure cancel_closure = |
| 143 request_sender_.StartRequestWithAuthRetry(request); |
143 EXPECT_TRUE(!cancel_closure.is_null()); | 144 EXPECT_TRUE(!cancel_closure.is_null()); |
144 | 145 |
145 // Start is called with the specified access token. Let it succeed. | 146 // Start is called with the specified access token. Let it succeed. |
146 EXPECT_TRUE(start_called); | 147 EXPECT_TRUE(start_called); |
147 EXPECT_EQ(kTestAccessToken, request->passed_access_token()); | 148 EXPECT_EQ(kTestAccessToken, request->passed_access_token()); |
148 request->FinishRequestWithSuccess(); | 149 request->FinishRequestWithSuccess(); |
149 EXPECT_FALSE(weak_ptr); // The request object is deleted. | 150 EXPECT_FALSE(weak_ptr); // The request object is deleted. |
150 | 151 |
151 // It is safe to run the cancel closure even after the request is finished. | 152 // It is safe to run the cancel closure even after the request is finished. |
152 // It is just no-op. The TestRequest::Cancel method is not called. | 153 // It is just no-op. The TestRequest::Cancel method is not called. |
153 cancel_closure.Run(); | 154 cancel_closure.Run(); |
154 EXPECT_EQ(SUCCESS, finish_reason); | 155 EXPECT_EQ(SUCCESS, finish_reason); |
155 } | 156 } |
156 | 157 |
157 TEST_F(RequestSenderTest, StartAndCancelRequest) { | 158 TEST_F(RequestSenderTest, StartAndCancelRequest) { |
158 bool start_called = false; | 159 bool start_called = false; |
159 FinishReason finish_reason = NONE; | 160 FinishReason finish_reason = NONE; |
160 TestRequest* request = new TestRequest(&request_sender_, | 161 TestRequest* request = new TestRequest(&request_sender_, |
161 &start_called, | 162 &start_called, |
162 &finish_reason); | 163 &finish_reason); |
163 base::WeakPtr<AuthenticatedRequestInterface> weak_ptr = request->GetWeakPtr(); | 164 base::WeakPtr<AuthenticatedRequestInterface> weak_ptr = request->GetWeakPtr(); |
164 | 165 |
165 base::Closure cancel_closure = request_sender_.StartRequestWithRetry(request); | 166 base::Closure cancel_closure = |
| 167 request_sender_.StartRequestWithAuthRetry(request); |
166 EXPECT_TRUE(!cancel_closure.is_null()); | 168 EXPECT_TRUE(!cancel_closure.is_null()); |
167 EXPECT_TRUE(start_called); | 169 EXPECT_TRUE(start_called); |
168 | 170 |
169 cancel_closure.Run(); | 171 cancel_closure.Run(); |
170 EXPECT_EQ(CANCEL, finish_reason); | 172 EXPECT_EQ(CANCEL, finish_reason); |
171 EXPECT_FALSE(weak_ptr); // The request object is deleted. | 173 EXPECT_FALSE(weak_ptr); // The request object is deleted. |
172 } | 174 } |
173 | 175 |
174 TEST_F(RequestSenderTest, NoRefreshToken) { | 176 TEST_F(RequestSenderTest, NoRefreshToken) { |
175 auth_service_->ClearRefreshToken(); | 177 auth_service_->ClearRefreshToken(); |
176 auth_service_->ClearAccessToken(); | 178 auth_service_->ClearAccessToken(); |
177 | 179 |
178 bool start_called = false; | 180 bool start_called = false; |
179 FinishReason finish_reason = NONE; | 181 FinishReason finish_reason = NONE; |
180 TestRequest* request = new TestRequest(&request_sender_, | 182 TestRequest* request = new TestRequest(&request_sender_, |
181 &start_called, | 183 &start_called, |
182 &finish_reason); | 184 &finish_reason); |
183 base::WeakPtr<AuthenticatedRequestInterface> weak_ptr = request->GetWeakPtr(); | 185 base::WeakPtr<AuthenticatedRequestInterface> weak_ptr = request->GetWeakPtr(); |
184 | 186 |
185 base::Closure cancel_closure = request_sender_.StartRequestWithRetry(request); | 187 base::Closure cancel_closure = |
| 188 request_sender_.StartRequestWithAuthRetry(request); |
186 EXPECT_TRUE(!cancel_closure.is_null()); | 189 EXPECT_TRUE(!cancel_closure.is_null()); |
187 | 190 |
188 // The request is not started at all because no access token is obtained. | 191 // The request is not started at all because no access token is obtained. |
189 EXPECT_FALSE(start_called); | 192 EXPECT_FALSE(start_called); |
190 EXPECT_EQ(AUTH_FAILURE, finish_reason); | 193 EXPECT_EQ(AUTH_FAILURE, finish_reason); |
191 EXPECT_FALSE(weak_ptr); // The request object is deleted. | 194 EXPECT_FALSE(weak_ptr); // The request object is deleted. |
192 } | 195 } |
193 | 196 |
194 TEST_F(RequestSenderTest, ValidRefreshTokenAndNoAccessToken) { | 197 TEST_F(RequestSenderTest, ValidRefreshTokenAndNoAccessToken) { |
195 auth_service_->ClearAccessToken(); | 198 auth_service_->ClearAccessToken(); |
196 | 199 |
197 bool start_called = false; | 200 bool start_called = false; |
198 FinishReason finish_reason = NONE; | 201 FinishReason finish_reason = NONE; |
199 TestRequest* request = new TestRequest(&request_sender_, | 202 TestRequest* request = new TestRequest(&request_sender_, |
200 &start_called, | 203 &start_called, |
201 &finish_reason); | 204 &finish_reason); |
202 base::WeakPtr<AuthenticatedRequestInterface> weak_ptr = request->GetWeakPtr(); | 205 base::WeakPtr<AuthenticatedRequestInterface> weak_ptr = request->GetWeakPtr(); |
203 | 206 |
204 base::Closure cancel_closure = request_sender_.StartRequestWithRetry(request); | 207 base::Closure cancel_closure = |
| 208 request_sender_.StartRequestWithAuthRetry(request); |
205 EXPECT_TRUE(!cancel_closure.is_null()); | 209 EXPECT_TRUE(!cancel_closure.is_null()); |
206 | 210 |
207 // Access token should indicate that this is the first retry. | 211 // Access token should indicate that this is the first retry. |
208 EXPECT_TRUE(start_called); | 212 EXPECT_TRUE(start_called); |
209 EXPECT_EQ(kTestAccessToken + std::string("1"), | 213 EXPECT_EQ(kTestAccessToken + std::string("1"), |
210 request->passed_access_token()); | 214 request->passed_access_token()); |
211 request->FinishRequestWithSuccess(); | 215 request->FinishRequestWithSuccess(); |
212 EXPECT_EQ(SUCCESS, finish_reason); | 216 EXPECT_EQ(SUCCESS, finish_reason); |
213 EXPECT_FALSE(weak_ptr); // The request object is deleted. | 217 EXPECT_FALSE(weak_ptr); // The request object is deleted. |
214 } | 218 } |
215 | 219 |
216 TEST_F(RequestSenderTest, AccessTokenRejectedSeveralTimes) { | 220 TEST_F(RequestSenderTest, AccessTokenRejectedSeveralTimes) { |
217 bool start_called = false; | 221 bool start_called = false; |
218 FinishReason finish_reason = NONE; | 222 FinishReason finish_reason = NONE; |
219 TestRequest* request = new TestRequest(&request_sender_, | 223 TestRequest* request = new TestRequest(&request_sender_, |
220 &start_called, | 224 &start_called, |
221 &finish_reason); | 225 &finish_reason); |
222 base::WeakPtr<AuthenticatedRequestInterface> weak_ptr = request->GetWeakPtr(); | 226 base::WeakPtr<AuthenticatedRequestInterface> weak_ptr = request->GetWeakPtr(); |
223 | 227 |
224 base::Closure cancel_closure = request_sender_.StartRequestWithRetry(request); | 228 base::Closure cancel_closure = |
| 229 request_sender_.StartRequestWithAuthRetry(request); |
225 EXPECT_TRUE(!cancel_closure.is_null()); | 230 EXPECT_TRUE(!cancel_closure.is_null()); |
226 | 231 |
227 EXPECT_TRUE(start_called); | 232 EXPECT_TRUE(start_called); |
228 EXPECT_EQ(kTestAccessToken, request->passed_access_token()); | 233 EXPECT_EQ(kTestAccessToken, request->passed_access_token()); |
229 // Emulate the case that the access token was rejected by the remote service. | 234 // Emulate the case that the access token was rejected by the remote service. |
230 request->passed_reauth_callback().Run(request); | 235 request->passed_reauth_callback().Run(request); |
231 // New access token is fetched. Let it fail once again. | 236 // New access token is fetched. Let it fail once again. |
232 EXPECT_EQ(kTestAccessToken + std::string("1"), | 237 EXPECT_EQ(kTestAccessToken + std::string("1"), |
233 request->passed_access_token()); | 238 request->passed_access_token()); |
234 request->passed_reauth_callback().Run(request); | 239 request->passed_reauth_callback().Run(request); |
235 // Once more. | 240 // Once more. |
236 EXPECT_EQ(kTestAccessToken + std::string("2"), | 241 EXPECT_EQ(kTestAccessToken + std::string("2"), |
237 request->passed_access_token()); | 242 request->passed_access_token()); |
238 request->passed_reauth_callback().Run(request); | 243 request->passed_reauth_callback().Run(request); |
239 | 244 |
240 // Currently, limit for the retry is controlled in each request object, not | 245 // Currently, limit for the retry is controlled in each request object, not |
241 // by the RequestSender. So with this TestRequest, RequestSender retries | 246 // by the RequestSender. So with this TestRequest, RequestSender retries |
242 // infinitely. Let it succeed/ | 247 // infinitely. Let it succeed/ |
243 EXPECT_EQ(kTestAccessToken + std::string("3"), | 248 EXPECT_EQ(kTestAccessToken + std::string("3"), |
244 request->passed_access_token()); | 249 request->passed_access_token()); |
245 request->FinishRequestWithSuccess(); | 250 request->FinishRequestWithSuccess(); |
246 EXPECT_EQ(SUCCESS, finish_reason); | 251 EXPECT_EQ(SUCCESS, finish_reason); |
247 EXPECT_FALSE(weak_ptr); | 252 EXPECT_FALSE(weak_ptr); |
248 } | 253 } |
249 | 254 |
250 } // namespace google_apis | 255 } // namespace google_apis |
OLD | NEW |