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

Side by Side Diff: google_apis/drive/request_sender_unittest.cc

Issue 1218773003: Implement a DRIVE_REQUEST_TOO_LARGE backoff. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased. Created 5 years, 5 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
OLDNEW
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698