| 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 |