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

Side by Side Diff: net/ftp/ftp_network_transaction_unittest.cc

Issue 895853003: Update from https://crrev.com/314320 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 10 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 | « net/ftp/ftp_network_transaction.cc ('k') | net/http/http_cache.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "net/ftp/ftp_network_transaction.h" 5 #include "net/ftp/ftp_network_transaction.h"
6 6
7 #include "build/build_config.h" 7 #include "build/build_config.h"
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
(...skipping 23 matching lines...) Expand all
34 class FtpSocketDataProvider : public DynamicSocketDataProvider { 34 class FtpSocketDataProvider : public DynamicSocketDataProvider {
35 public: 35 public:
36 enum State { 36 enum State {
37 NONE, 37 NONE,
38 PRE_USER, 38 PRE_USER,
39 PRE_PASSWD, 39 PRE_PASSWD,
40 PRE_SYST, 40 PRE_SYST,
41 PRE_PWD, 41 PRE_PWD,
42 PRE_TYPE, 42 PRE_TYPE,
43 PRE_SIZE, 43 PRE_SIZE,
44 PRE_EPSV, 44 PRE_LIST_EPSV,
45 PRE_PASV, 45 PRE_LIST_PASV,
46 PRE_LIST, 46 PRE_LIST,
47 PRE_RETR, 47 PRE_RETR,
48 PRE_RETR_EPSV, 48 PRE_RETR_EPSV,
49 PRE_RETR_PASV, 49 PRE_RETR_PASV,
50 PRE_CWD_EPSV,
51 PRE_CWD_PASV,
52 PRE_CWD, 50 PRE_CWD,
53 PRE_QUIT, 51 PRE_QUIT,
54 PRE_NOPASV, 52 PRE_NOPASV,
55 QUIT 53 QUIT
56 }; 54 };
57 55
58 FtpSocketDataProvider() 56 FtpSocketDataProvider()
59 : failure_injection_state_(NONE), 57 : failure_injection_state_(NONE),
60 multiline_welcome_(false), 58 multiline_welcome_(false),
61 use_epsv_(true), 59 use_epsv_(true),
(...skipping 16 matching lines...) Expand all
78 return Verify("PASS chrome@example.com\r\n", data, PRE_SYST, 76 return Verify("PASS chrome@example.com\r\n", data, PRE_SYST,
79 multiline_welcome_ ? response_multi : response_one); 77 multiline_welcome_ ? response_multi : response_one);
80 } 78 }
81 case PRE_SYST: 79 case PRE_SYST:
82 return Verify("SYST\r\n", data, PRE_PWD, "215 UNIX\r\n"); 80 return Verify("SYST\r\n", data, PRE_PWD, "215 UNIX\r\n");
83 case PRE_PWD: 81 case PRE_PWD:
84 return Verify("PWD\r\n", data, PRE_TYPE, 82 return Verify("PWD\r\n", data, PRE_TYPE,
85 "257 \"/\" is your current location\r\n"); 83 "257 \"/\" is your current location\r\n");
86 case PRE_TYPE: 84 case PRE_TYPE:
87 return Verify(std::string("TYPE ") + data_type_ + "\r\n", data, 85 return Verify(std::string("TYPE ") + data_type_ + "\r\n", data,
88 use_epsv_ ? PRE_EPSV : PRE_PASV, 86 PRE_SIZE, "200 TYPE set successfully\r\n");
89 "200 TYPE set successfully\r\n"); 87 case PRE_LIST_EPSV:
90 case PRE_EPSV: 88 return Verify("EPSV\r\n", data, PRE_LIST,
91 return Verify("EPSV\r\n", data, PRE_SIZE,
92 "227 Entering Extended Passive Mode (|||31744|)\r\n"); 89 "227 Entering Extended Passive Mode (|||31744|)\r\n");
93 case PRE_CWD_EPSV: 90 case PRE_LIST_PASV:
94 return Verify("EPSV\r\n", data, PRE_CWD, 91 return Verify("PASV\r\n", data, PRE_LIST,
95 "227 Entering Extended Passive Mode (|||31744|)\r\n"); 92 "227 Entering Passive Mode 127,0,0,1,123,456\r\n");
96 case PRE_RETR_EPSV: 93 case PRE_RETR_EPSV:
97 return Verify("EPSV\r\n", data, PRE_RETR, 94 return Verify("EPSV\r\n", data, PRE_RETR,
98 "227 Entering Extended Passive Mode (|||31744|)\r\n"); 95 "227 Entering Extended Passive Mode (|||31744|)\r\n");
99 case PRE_CWD_PASV:
100 return Verify("PASV\r\n", data, PRE_CWD,
101 "227 Entering Passive Mode 127,0,0,1,123,456\r\n");
102 case PRE_RETR_PASV: 96 case PRE_RETR_PASV:
103 return Verify("PASV\r\n", data, PRE_RETR, 97 return Verify("PASV\r\n", data, PRE_RETR,
104 "227 Entering Passive Mode 127,0,0,1,123,456\r\n"); 98 "227 Entering Passive Mode 127,0,0,1,123,456\r\n");
105 case PRE_PASV:
106 return Verify("PASV\r\n", data, PRE_SIZE,
107 "227 Entering Passive Mode 127,0,0,1,123,456\r\n");
108 case PRE_NOPASV: 99 case PRE_NOPASV:
109 // Use unallocated 599 FTP error code to make sure it falls into the 100 // Use unallocated 599 FTP error code to make sure it falls into the
110 // generic ERR_FTP_FAILED bucket. 101 // generic ERR_FTP_FAILED bucket.
111 return Verify("PASV\r\n", data, PRE_QUIT, 102 return Verify("PASV\r\n", data, PRE_QUIT,
112 "599 fail\r\n"); 103 "599 fail\r\n");
113 case PRE_QUIT: 104 case PRE_QUIT:
114 return Verify("QUIT\r\n", data, QUIT, "221 Goodbye.\r\n"); 105 return Verify("QUIT\r\n", data, QUIT, "221 Goodbye.\r\n");
115 default: 106 default:
116 NOTREACHED() << "State not handled " << state(); 107 NOTREACHED() << "State not handled " << state();
117 return MockWriteResult(ASYNC, ERR_UNEXPECTED); 108 return MockWriteResult(ASYNC, ERR_UNEXPECTED);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 class FtpSocketDataProviderDirectoryListing : public FtpSocketDataProvider { 195 class FtpSocketDataProviderDirectoryListing : public FtpSocketDataProvider {
205 public: 196 public:
206 FtpSocketDataProviderDirectoryListing() { 197 FtpSocketDataProviderDirectoryListing() {
207 } 198 }
208 199
209 MockWriteResult OnWrite(const std::string& data) override { 200 MockWriteResult OnWrite(const std::string& data) override {
210 if (InjectFault()) 201 if (InjectFault())
211 return MockWriteResult(ASYNC, data.length()); 202 return MockWriteResult(ASYNC, data.length());
212 switch (state()) { 203 switch (state()) {
213 case PRE_SIZE: 204 case PRE_SIZE:
214 return Verify("SIZE /\r\n", data, 205 return Verify("SIZE /\r\n", data, PRE_CWD,
215 use_epsv() ? PRE_CWD_EPSV : PRE_CWD_PASV,
216 "550 I can only retrieve regular files\r\n"); 206 "550 I can only retrieve regular files\r\n");
217 case PRE_CWD: 207 case PRE_CWD:
218 return Verify("CWD /\r\n", data, PRE_LIST, "200 OK\r\n"); 208 return Verify("CWD /\r\n", data,
209 use_epsv() ? PRE_LIST_EPSV : PRE_LIST_PASV, "200 OK\r\n");
219 case PRE_LIST: 210 case PRE_LIST:
220 return Verify("LIST -l\r\n", data, PRE_QUIT, "200 OK\r\n"); 211 return Verify("LIST -l\r\n", data, PRE_QUIT, "200 OK\r\n");
221 default: 212 default:
222 return FtpSocketDataProvider::OnWrite(data); 213 return FtpSocketDataProvider::OnWrite(data);
223 } 214 }
224 } 215 }
225 216
226 private: 217 private:
227 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderDirectoryListing); 218 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderDirectoryListing);
228 }; 219 };
229 220
230 class FtpSocketDataProviderDirectoryListingWithPasvFallback 221 class FtpSocketDataProviderDirectoryListingWithPasvFallback
231 : public FtpSocketDataProviderDirectoryListing { 222 : public FtpSocketDataProviderDirectoryListing {
232 public: 223 public:
233 FtpSocketDataProviderDirectoryListingWithPasvFallback() { 224 FtpSocketDataProviderDirectoryListingWithPasvFallback() {
234 } 225 }
235 226
236 MockWriteResult OnWrite(const std::string& data) override { 227 MockWriteResult OnWrite(const std::string& data) override {
237 if (InjectFault()) 228 if (InjectFault())
238 return MockWriteResult(ASYNC, data.length()); 229 return MockWriteResult(ASYNC, data.length());
239 switch (state()) { 230 switch (state()) {
240 case PRE_EPSV: 231 case PRE_LIST_EPSV:
241 return Verify("EPSV\r\n", data, PRE_PASV, 232 return Verify("EPSV\r\n", data, PRE_LIST_PASV,
242 "500 no EPSV for you\r\n"); 233 "500 no EPSV for you\r\n");
243 case PRE_SIZE: 234 case PRE_SIZE:
244 return Verify("SIZE /\r\n", data, PRE_CWD_PASV, 235 return Verify("SIZE /\r\n", data, PRE_CWD,
245 "550 I can only retrieve regular files\r\n"); 236 "550 I can only retrieve regular files\r\n");
246 default: 237 default:
247 return FtpSocketDataProviderDirectoryListing::OnWrite(data); 238 return FtpSocketDataProviderDirectoryListing::OnWrite(data);
248 } 239 }
249 } 240 }
250 241
251 private: 242 private:
252 DISALLOW_COPY_AND_ASSIGN( 243 DISALLOW_COPY_AND_ASSIGN(
253 FtpSocketDataProviderDirectoryListingWithPasvFallback); 244 FtpSocketDataProviderDirectoryListingWithPasvFallback);
254 }; 245 };
(...skipping 26 matching lines...) Expand all
281 272
282 MockWriteResult OnWrite(const std::string& data) override { 273 MockWriteResult OnWrite(const std::string& data) override {
283 if (InjectFault()) 274 if (InjectFault())
284 return MockWriteResult(ASYNC, data.length()); 275 return MockWriteResult(ASYNC, data.length());
285 switch (state()) { 276 switch (state()) {
286 case PRE_SYST: 277 case PRE_SYST:
287 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n"); 278 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n");
288 case PRE_PWD: 279 case PRE_PWD:
289 return Verify("PWD\r\n", data, PRE_TYPE, 280 return Verify("PWD\r\n", data, PRE_TYPE,
290 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n"); 281 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n");
291 case PRE_EPSV: 282 case PRE_LIST_EPSV:
292 return Verify("EPSV\r\n", data, PRE_PASV, "500 Invalid command\r\n"); 283 return Verify("EPSV\r\n", data, PRE_LIST_PASV,
284 "500 Invalid command\r\n");
293 case PRE_SIZE: 285 case PRE_SIZE:
294 return Verify("SIZE ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_CWD_PASV, 286 return Verify("SIZE ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_CWD,
295 "550 I can only retrieve regular files\r\n"); 287 "550 I can only retrieve regular files\r\n");
296 case PRE_CWD: 288 case PRE_CWD:
297 return Verify("CWD ANONYMOUS_ROOT:[dir]\r\n", data, PRE_LIST, 289 return Verify("CWD ANONYMOUS_ROOT:[dir]\r\n", data,
298 "200 OK\r\n"); 290 use_epsv() ? PRE_LIST_EPSV : PRE_LIST_PASV, "200 OK\r\n");
299 case PRE_LIST: 291 case PRE_LIST:
300 return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n"); 292 return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n");
301 default: 293 default:
302 return FtpSocketDataProvider::OnWrite(data); 294 return FtpSocketDataProvider::OnWrite(data);
303 } 295 }
304 } 296 }
305 297
306 private: 298 private:
307 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderVMSDirectoryListing); 299 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderVMSDirectoryListing);
308 }; 300 };
309 301
310 class FtpSocketDataProviderVMSDirectoryListingRootDirectory 302 class FtpSocketDataProviderVMSDirectoryListingRootDirectory
311 : public FtpSocketDataProvider { 303 : public FtpSocketDataProvider {
312 public: 304 public:
313 FtpSocketDataProviderVMSDirectoryListingRootDirectory() { 305 FtpSocketDataProviderVMSDirectoryListingRootDirectory() {
314 } 306 }
315 307
316 MockWriteResult OnWrite(const std::string& data) override { 308 MockWriteResult OnWrite(const std::string& data) override {
317 if (InjectFault()) 309 if (InjectFault())
318 return MockWriteResult(ASYNC, data.length()); 310 return MockWriteResult(ASYNC, data.length());
319 switch (state()) { 311 switch (state()) {
320 case PRE_SYST: 312 case PRE_SYST:
321 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n"); 313 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n");
322 case PRE_PWD: 314 case PRE_PWD:
323 return Verify("PWD\r\n", data, PRE_TYPE, 315 return Verify("PWD\r\n", data, PRE_TYPE,
324 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n"); 316 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n");
325 case PRE_EPSV: 317 case PRE_LIST_EPSV:
326 return Verify("EPSV\r\n", data, PRE_PASV, 318 return Verify("EPSV\r\n", data, PRE_LIST_PASV,
327 "500 EPSV command unknown\r\n"); 319 "500 EPSV command unknown\r\n");
328 case PRE_SIZE: 320 case PRE_SIZE:
329 return Verify("SIZE ANONYMOUS_ROOT\r\n", data, PRE_CWD_PASV, 321 return Verify("SIZE ANONYMOUS_ROOT\r\n", data, PRE_CWD,
330 "550 I can only retrieve regular files\r\n"); 322 "550 I can only retrieve regular files\r\n");
331 case PRE_CWD: 323 case PRE_CWD:
332 return Verify("CWD ANONYMOUS_ROOT:[000000]\r\n", data, PRE_LIST, 324 return Verify("CWD ANONYMOUS_ROOT:[000000]\r\n", data,
333 "200 OK\r\n"); 325 use_epsv() ? PRE_LIST_EPSV : PRE_LIST_PASV, "200 OK\r\n");
334 case PRE_LIST: 326 case PRE_LIST:
335 return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n"); 327 return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n");
336 default: 328 default:
337 return FtpSocketDataProvider::OnWrite(data); 329 return FtpSocketDataProvider::OnWrite(data);
338 } 330 }
339 } 331 }
340 332
341 private: 333 private:
342 DISALLOW_COPY_AND_ASSIGN( 334 DISALLOW_COPY_AND_ASSIGN(
343 FtpSocketDataProviderVMSDirectoryListingRootDirectory); 335 FtpSocketDataProviderVMSDirectoryListingRootDirectory);
344 }; 336 };
345 337
346 class FtpSocketDataProviderFileDownloadWithFileTypecode 338 class FtpSocketDataProviderFileDownloadWithFileTypecode
347 : public FtpSocketDataProvider { 339 : public FtpSocketDataProvider {
348 public: 340 public:
349 FtpSocketDataProviderFileDownloadWithFileTypecode() { 341 FtpSocketDataProviderFileDownloadWithFileTypecode() {
350 } 342 }
351 343
352 MockWriteResult OnWrite(const std::string& data) override { 344 MockWriteResult OnWrite(const std::string& data) override {
353 if (InjectFault()) 345 if (InjectFault())
354 return MockWriteResult(ASYNC, data.length()); 346 return MockWriteResult(ASYNC, data.length());
355 switch (state()) { 347 switch (state()) {
356 case PRE_SIZE: 348 case PRE_SIZE:
357 return Verify("SIZE /file\r\n", data, PRE_RETR, 349 return Verify("SIZE /file\r\n", data,
358 "213 18\r\n"); 350 use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV, "213 18\r\n");
359 case PRE_RETR: 351 case PRE_RETR:
360 return Verify("RETR /file\r\n", data, PRE_QUIT, "200 OK\r\n"); 352 return Verify("RETR /file\r\n", data, PRE_QUIT, "200 OK\r\n");
361 default: 353 default:
362 return FtpSocketDataProvider::OnWrite(data); 354 return FtpSocketDataProvider::OnWrite(data);
363 } 355 }
364 } 356 }
365 357
366 private: 358 private:
367 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownloadWithFileTypecode); 359 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownloadWithFileTypecode);
368 }; 360 };
369 361
370 class FtpSocketDataProviderFileDownload : public FtpSocketDataProvider { 362 class FtpSocketDataProviderFileDownload : public FtpSocketDataProvider {
371 public: 363 public:
372 FtpSocketDataProviderFileDownload() { 364 FtpSocketDataProviderFileDownload() {
373 } 365 }
374 366
375 MockWriteResult OnWrite(const std::string& data) override { 367 MockWriteResult OnWrite(const std::string& data) override {
376 if (InjectFault()) 368 if (InjectFault())
377 return MockWriteResult(ASYNC, data.length()); 369 return MockWriteResult(ASYNC, data.length());
378 switch (state()) { 370 switch (state()) {
379 case PRE_SIZE: 371 case PRE_SIZE:
380 return Verify("SIZE /file\r\n", data, PRE_CWD, 372 return Verify("SIZE /file\r\n", data, PRE_CWD, "213 18\r\n");
381 "213 18\r\n");
382 case PRE_CWD: 373 case PRE_CWD:
383 return Verify("CWD /file\r\n", data, 374 return Verify("CWD /file\r\n", data,
384 use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV, 375 use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV,
385 "550 Not a directory\r\n"); 376 "550 Not a directory\r\n");
386 case PRE_RETR: 377 case PRE_RETR:
387 return Verify("RETR /file\r\n", data, PRE_QUIT, "200 OK\r\n"); 378 return Verify("RETR /file\r\n", data, PRE_QUIT, "200 OK\r\n");
388 default: 379 default:
389 return FtpSocketDataProvider::OnWrite(data); 380 return FtpSocketDataProvider::OnWrite(data);
390 } 381 }
391 } 382 }
392 383
393 private: 384 private:
394 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownload); 385 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownload);
395 }; 386 };
396 387
397 class FtpSocketDataProviderFileNotFound : public FtpSocketDataProvider { 388 class FtpSocketDataProviderFileNotFound : public FtpSocketDataProvider {
398 public: 389 public:
399 FtpSocketDataProviderFileNotFound() { 390 FtpSocketDataProviderFileNotFound() {
400 } 391 }
401 392
402 MockWriteResult OnWrite(const std::string& data) override { 393 MockWriteResult OnWrite(const std::string& data) override {
403 if (InjectFault()) 394 if (InjectFault())
404 return MockWriteResult(ASYNC, data.length()); 395 return MockWriteResult(ASYNC, data.length());
405 switch (state()) { 396 switch (state()) {
406 case PRE_SIZE: 397 case PRE_SIZE:
407 return Verify("SIZE /file\r\n", data, 398 return Verify("SIZE /file\r\n", data, PRE_CWD,
408 use_epsv() ? PRE_CWD_EPSV : PRE_CWD_PASV,
409 "550 File Not Found\r\n"); 399 "550 File Not Found\r\n");
410 case PRE_CWD: 400 case PRE_CWD:
411 return Verify("CWD /file\r\n", data, 401 return Verify("CWD /file\r\n", data,
412 use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV, 402 use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV,
413 "550 File Not Found\r\n"); 403 "550 File Not Found\r\n");
414 case PRE_RETR: 404 case PRE_RETR:
415 return Verify("RETR /file\r\n", data, PRE_QUIT, 405 return Verify("RETR /file\r\n", data, PRE_QUIT,
416 "550 File Not Found\r\n"); 406 "550 File Not Found\r\n");
417 default: 407 default:
418 return FtpSocketDataProvider::OnWrite(data); 408 return FtpSocketDataProvider::OnWrite(data);
419 } 409 }
420 } 410 }
421 411
422 private: 412 private:
423 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileNotFound); 413 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileNotFound);
424 }; 414 };
425 415
426 class FtpSocketDataProviderFileDownloadWithPasvFallback 416 class FtpSocketDataProviderFileDownloadWithPasvFallback
427 : public FtpSocketDataProviderFileDownload { 417 : public FtpSocketDataProviderFileDownload {
428 public: 418 public:
429 FtpSocketDataProviderFileDownloadWithPasvFallback() { 419 FtpSocketDataProviderFileDownloadWithPasvFallback() {
430 } 420 }
431 421
432 MockWriteResult OnWrite(const std::string& data) override { 422 MockWriteResult OnWrite(const std::string& data) override {
433 if (InjectFault()) 423 if (InjectFault())
434 return MockWriteResult(ASYNC, data.length()); 424 return MockWriteResult(ASYNC, data.length());
435 switch (state()) { 425 switch (state()) {
436 case PRE_EPSV: 426 case PRE_RETR_EPSV:
437 return Verify("EPSV\r\n", data, PRE_PASV, 427 return Verify("EPSV\r\n", data, PRE_RETR_PASV, "500 No can do\r\n");
438 "500 No can do\r\n");
439 case PRE_CWD: 428 case PRE_CWD:
440 return Verify("CWD /file\r\n", data, PRE_RETR_PASV, 429 return Verify("CWD /file\r\n", data,
430 use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV,
441 "550 Not a directory\r\n"); 431 "550 Not a directory\r\n");
442 default: 432 default:
443 return FtpSocketDataProviderFileDownload::OnWrite(data); 433 return FtpSocketDataProviderFileDownload::OnWrite(data);
444 } 434 }
445 } 435 }
446 436
447 private: 437 private:
448 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownloadWithPasvFallback); 438 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownloadWithPasvFallback);
449 }; 439 };
450 440
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 494
505 MockWriteResult OnWrite(const std::string& data) override { 495 MockWriteResult OnWrite(const std::string& data) override {
506 if (InjectFault()) 496 if (InjectFault())
507 return MockWriteResult(ASYNC, data.length()); 497 return MockWriteResult(ASYNC, data.length());
508 switch (state()) { 498 switch (state()) {
509 case PRE_SYST: 499 case PRE_SYST:
510 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n"); 500 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n");
511 case PRE_PWD: 501 case PRE_PWD:
512 return Verify("PWD\r\n", data, PRE_TYPE, 502 return Verify("PWD\r\n", data, PRE_TYPE,
513 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n"); 503 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n");
514 case PRE_EPSV: 504 case PRE_LIST_EPSV:
515 return Verify("EPSV\r\n", data, PRE_PASV, 505 return Verify("EPSV\r\n", data, PRE_LIST_PASV,
516 "500 EPSV command unknown\r\n"); 506 "500 EPSV command unknown\r\n");
517 case PRE_SIZE: 507 case PRE_SIZE:
518 return Verify("SIZE ANONYMOUS_ROOT:[000000]file\r\n", data, PRE_CWD, 508 return Verify("SIZE ANONYMOUS_ROOT:[000000]file\r\n", data, PRE_CWD,
519 "213 18\r\n"); 509 "213 18\r\n");
520 case PRE_CWD: 510 case PRE_CWD:
521 return Verify("CWD ANONYMOUS_ROOT:[file]\r\n", data, PRE_RETR_PASV, 511 return Verify("CWD ANONYMOUS_ROOT:[file]\r\n", data,
512 use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV,
522 "550 Not a directory\r\n"); 513 "550 Not a directory\r\n");
523 case PRE_RETR: 514 case PRE_RETR:
524 return Verify("RETR ANONYMOUS_ROOT:[000000]file\r\n", data, PRE_QUIT, 515 return Verify("RETR ANONYMOUS_ROOT:[000000]file\r\n", data, PRE_QUIT,
525 "200 OK\r\n"); 516 "200 OK\r\n");
526 default: 517 default:
527 return FtpSocketDataProvider::OnWrite(data); 518 return FtpSocketDataProvider::OnWrite(data);
528 } 519 }
529 } 520 }
530 521
531 private: 522 private:
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 size_t epsv_response_length, 637 size_t epsv_response_length,
647 State expected_state) 638 State expected_state)
648 : epsv_response_(epsv_response), 639 : epsv_response_(epsv_response),
649 epsv_response_length_(epsv_response_length), 640 epsv_response_length_(epsv_response_length),
650 expected_state_(expected_state) {} 641 expected_state_(expected_state) {}
651 642
652 MockWriteResult OnWrite(const std::string& data) override { 643 MockWriteResult OnWrite(const std::string& data) override {
653 if (InjectFault()) 644 if (InjectFault())
654 return MockWriteResult(ASYNC, data.length()); 645 return MockWriteResult(ASYNC, data.length());
655 switch (state()) { 646 switch (state()) {
656 case PRE_EPSV: 647 case PRE_RETR_EPSV:
657 return Verify("EPSV\r\n", data, expected_state_, 648 return Verify("EPSV\r\n", data, expected_state_,
658 epsv_response_, epsv_response_length_); 649 epsv_response_, epsv_response_length_);
659 default: 650 default:
660 return FtpSocketDataProviderFileDownload::OnWrite(data); 651 return FtpSocketDataProviderFileDownload::OnWrite(data);
661 } 652 }
662 } 653 }
663 654
664 private: 655 private:
665 const char* epsv_response_; 656 const char* epsv_response_;
666 const size_t epsv_response_length_; 657 const size_t epsv_response_length_;
667 const State expected_state_; 658 const State expected_state_;
668 659
669 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderEvilEpsv); 660 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderEvilEpsv);
670 }; 661 };
671 662
672 class FtpSocketDataProviderEvilPasv 663 class FtpSocketDataProviderEvilPasv
673 : public FtpSocketDataProviderFileDownloadWithPasvFallback { 664 : public FtpSocketDataProviderFileDownloadWithPasvFallback {
674 public: 665 public:
675 FtpSocketDataProviderEvilPasv(const char* pasv_response, State expected_state) 666 FtpSocketDataProviderEvilPasv(const char* pasv_response, State expected_state)
676 : pasv_response_(pasv_response), 667 : pasv_response_(pasv_response),
677 expected_state_(expected_state) { 668 expected_state_(expected_state) {
678 } 669 }
679 670
680 MockWriteResult OnWrite(const std::string& data) override { 671 MockWriteResult OnWrite(const std::string& data) override {
681 if (InjectFault()) 672 if (InjectFault())
682 return MockWriteResult(ASYNC, data.length()); 673 return MockWriteResult(ASYNC, data.length());
683 switch (state()) { 674 switch (state()) {
684 case PRE_PASV: 675 case PRE_RETR_PASV:
685 return Verify("PASV\r\n", data, expected_state_, pasv_response_); 676 return Verify("PASV\r\n", data, expected_state_, pasv_response_);
686 default: 677 default:
687 return FtpSocketDataProviderFileDownloadWithPasvFallback::OnWrite(data); 678 return FtpSocketDataProviderFileDownloadWithPasvFallback::OnWrite(data);
688 } 679 }
689 } 680 }
690 681
691 private: 682 private:
692 const char* pasv_response_; 683 const char* pasv_response_;
693 const State expected_state_; 684 const State expected_state_;
694 685
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
800 } 791 }
801 792
802 FtpRequestInfo GetRequestInfo(const std::string& url) { 793 FtpRequestInfo GetRequestInfo(const std::string& url) {
803 FtpRequestInfo info; 794 FtpRequestInfo info;
804 info.url = GURL(url); 795 info.url = GURL(url);
805 return info; 796 return info;
806 } 797 }
807 798
808 void ExecuteTransaction(FtpSocketDataProvider* ctrl_socket, 799 void ExecuteTransaction(FtpSocketDataProvider* ctrl_socket,
809 const char* request, 800 const char* request,
810 int data_socket,
811 int expected_result) { 801 int expected_result) {
812 // Expect EPSV usage for non-IPv4 control connections. 802 // Expect EPSV usage for non-IPv4 control connections.
813 ctrl_socket->set_use_epsv((GetFamily() != AF_INET)); 803 ctrl_socket->set_use_epsv((GetFamily() != AF_INET));
814 804
815 mock_socket_factory_.AddSocketDataProvider(ctrl_socket); 805 mock_socket_factory_.AddSocketDataProvider(ctrl_socket);
816 806
817 std::string mock_data("mock-data"); 807 std::string mock_data("mock-data");
818 MockRead data_reads[] = { 808 MockRead data_reads[] = {
819 // Usually FTP servers close the data connection after the entire data has 809 // Usually FTP servers close the data connection after the entire data has
820 // been received. 810 // been received.
821 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 811 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
822 MockRead(mock_data.c_str()), 812 MockRead(mock_data.c_str()),
823 }; 813 };
824 814
825 ScopedVector<StaticSocketDataProvider> data_sockets; 815 scoped_ptr<StaticSocketDataProvider> data_socket(
826 data_sockets.reserve(data_socket); 816 new StaticSocketDataProvider(data_reads, arraysize(data_reads), NULL,
827 for (int i = 0; i < data_socket + 1; i++) { 817 0));
828 // We only read from one data socket, other ones are dummy. 818 mock_socket_factory_.AddSocketDataProvider(data_socket.get());
829 if (i == data_socket) {
830 data_sockets.push_back(new StaticSocketDataProvider(
831 data_reads, arraysize(data_reads), NULL, 0));
832 } else {
833 data_sockets.push_back(new StaticSocketDataProvider);
834 }
835 mock_socket_factory_.AddSocketDataProvider(data_sockets[i]);
836 }
837
838 FtpRequestInfo request_info = GetRequestInfo(request); 819 FtpRequestInfo request_info = GetRequestInfo(request);
839 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState()); 820 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState());
840 ASSERT_EQ(ERR_IO_PENDING, 821 ASSERT_EQ(ERR_IO_PENDING,
841 transaction_.Start(&request_info, callback_.callback(), 822 transaction_.Start(&request_info, callback_.callback(),
842 BoundNetLog())); 823 BoundNetLog()));
843 EXPECT_NE(LOAD_STATE_IDLE, transaction_.GetLoadState()); 824 EXPECT_NE(LOAD_STATE_IDLE, transaction_.GetLoadState());
844 ASSERT_EQ(expected_result, callback_.WaitForResult()); 825 ASSERT_EQ(expected_result, callback_.WaitForResult());
845 if (expected_result == OK) { 826 if (expected_result == OK) {
846 scoped_refptr<IOBuffer> io_buffer(new IOBuffer(kBufferSize)); 827 scoped_refptr<IOBuffer> io_buffer(new IOBuffer(kBufferSize));
847 memset(io_buffer->data(), 0, kBufferSize); 828 memset(io_buffer->data(), 0, kBufferSize);
(...skipping 17 matching lines...) Expand all
865 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState()); 846 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState());
866 } 847 }
867 848
868 void TransactionFailHelper(FtpSocketDataProvider* ctrl_socket, 849 void TransactionFailHelper(FtpSocketDataProvider* ctrl_socket,
869 const char* request, 850 const char* request,
870 FtpSocketDataProvider::State state, 851 FtpSocketDataProvider::State state,
871 FtpSocketDataProvider::State next_state, 852 FtpSocketDataProvider::State next_state,
872 const char* response, 853 const char* response,
873 int expected_result) { 854 int expected_result) {
874 ctrl_socket->InjectFailure(state, next_state, response); 855 ctrl_socket->InjectFailure(state, next_state, response);
875 ExecuteTransaction(ctrl_socket, request, 1, expected_result); 856 ExecuteTransaction(ctrl_socket, request, expected_result);
876 } 857 }
877 858
878 scoped_ptr<MockHostResolver> host_resolver_; 859 scoped_ptr<MockHostResolver> host_resolver_;
879 scoped_refptr<FtpNetworkSession> session_; 860 scoped_refptr<FtpNetworkSession> session_;
880 MockClientSocketFactory mock_socket_factory_; 861 MockClientSocketFactory mock_socket_factory_;
881 FtpNetworkTransaction transaction_; 862 FtpNetworkTransaction transaction_;
882 TestCompletionCallback callback_; 863 TestCompletionCallback callback_;
883 }; 864 };
884 865
885 TEST_P(FtpNetworkTransactionTest, FailedLookup) { 866 TEST_P(FtpNetworkTransactionTest, FailedLookup) {
(...skipping 20 matching lines...) Expand all
906 887
907 host_resolver_->rules()->AddSimulatedFailure("[::1]"); 888 host_resolver_->rules()->AddSimulatedFailure("[::1]");
908 889
909 // We start a transaction that is expected to fail with ERR_INVALID_RESPONSE. 890 // We start a transaction that is expected to fail with ERR_INVALID_RESPONSE.
910 // The important part of this test is to make sure that we don't fail with 891 // The important part of this test is to make sure that we don't fail with
911 // ERR_NAME_NOT_RESOLVED, since that would mean the decorated hostname 892 // ERR_NAME_NOT_RESOLVED, since that would mean the decorated hostname
912 // was used. 893 // was used.
913 FtpSocketDataProviderEvilSize ctrl_socket( 894 FtpSocketDataProviderEvilSize ctrl_socket(
914 "213 99999999999999999999999999999999\r\n", 895 "213 99999999999999999999999999999999\r\n",
915 FtpSocketDataProvider::PRE_QUIT); 896 FtpSocketDataProvider::PRE_QUIT);
916 ExecuteTransaction(&ctrl_socket, "ftp://[::1]/file", 1, ERR_INVALID_RESPONSE); 897 ExecuteTransaction(&ctrl_socket, "ftp://[::1]/file", ERR_INVALID_RESPONSE);
917 } 898 }
918 899
919 TEST_P(FtpNetworkTransactionTest, DirectoryTransaction) { 900 TEST_P(FtpNetworkTransactionTest, DirectoryTransaction) {
920 FtpSocketDataProviderDirectoryListing ctrl_socket; 901 FtpSocketDataProviderDirectoryListing ctrl_socket;
921 ExecuteTransaction(&ctrl_socket, "ftp://host", 1, OK); 902 ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
922 903
923 EXPECT_TRUE(transaction_.GetResponseInfo()->is_directory_listing); 904 EXPECT_TRUE(transaction_.GetResponseInfo()->is_directory_listing);
924 EXPECT_EQ(-1, transaction_.GetResponseInfo()->expected_content_size); 905 EXPECT_EQ(-1, transaction_.GetResponseInfo()->expected_content_size);
925 EXPECT_EQ((GetFamily() == AF_INET) ? "127.0.0.1" : "::1", 906 EXPECT_EQ((GetFamily() == AF_INET) ? "127.0.0.1" : "::1",
926 transaction_.GetResponseInfo()->socket_address.host()); 907 transaction_.GetResponseInfo()->socket_address.host());
927 EXPECT_EQ(21, transaction_.GetResponseInfo()->socket_address.port()); 908 EXPECT_EQ(21, transaction_.GetResponseInfo()->socket_address.port());
928 } 909 }
929 910
930 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionWithPasvFallback) { 911 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionWithPasvFallback) {
931 FtpSocketDataProviderDirectoryListingWithPasvFallback ctrl_socket; 912 FtpSocketDataProviderDirectoryListingWithPasvFallback ctrl_socket;
932 ExecuteTransaction(&ctrl_socket, "ftp://host", 1, OK); 913 ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
933 914
934 EXPECT_TRUE(transaction_.GetResponseInfo()->is_directory_listing); 915 EXPECT_TRUE(transaction_.GetResponseInfo()->is_directory_listing);
935 EXPECT_EQ(-1, transaction_.GetResponseInfo()->expected_content_size); 916 EXPECT_EQ(-1, transaction_.GetResponseInfo()->expected_content_size);
936 } 917 }
937 918
938 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionWithTypecode) { 919 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionWithTypecode) {
939 FtpSocketDataProviderDirectoryListing ctrl_socket; 920 FtpSocketDataProviderDirectoryListing ctrl_socket;
940 ExecuteTransaction(&ctrl_socket, "ftp://host;type=d", 1, OK); 921 ExecuteTransaction(&ctrl_socket, "ftp://host;type=d", OK);
941 922
942 EXPECT_TRUE(transaction_.GetResponseInfo()->is_directory_listing); 923 EXPECT_TRUE(transaction_.GetResponseInfo()->is_directory_listing);
943 EXPECT_EQ(-1, transaction_.GetResponseInfo()->expected_content_size); 924 EXPECT_EQ(-1, transaction_.GetResponseInfo()->expected_content_size);
944 } 925 }
945 926
946 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionMultilineWelcome) { 927 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionMultilineWelcome) {
947 FtpSocketDataProviderDirectoryListing ctrl_socket; 928 FtpSocketDataProviderDirectoryListing ctrl_socket;
948 ctrl_socket.set_multiline_welcome(true); 929 ctrl_socket.set_multiline_welcome(true);
949 ExecuteTransaction(&ctrl_socket, "ftp://host", 1, OK); 930 ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
950 } 931 }
951 932
952 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionShortReads2) { 933 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionShortReads2) {
953 FtpSocketDataProviderDirectoryListing ctrl_socket; 934 FtpSocketDataProviderDirectoryListing ctrl_socket;
954 ctrl_socket.set_short_read_limit(2); 935 ctrl_socket.set_short_read_limit(2);
955 ExecuteTransaction(&ctrl_socket, "ftp://host", 1, OK); 936 ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
956 } 937 }
957 938
958 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionShortReads5) { 939 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionShortReads5) {
959 FtpSocketDataProviderDirectoryListing ctrl_socket; 940 FtpSocketDataProviderDirectoryListing ctrl_socket;
960 ctrl_socket.set_short_read_limit(5); 941 ctrl_socket.set_short_read_limit(5);
961 ExecuteTransaction(&ctrl_socket, "ftp://host", 1, OK); 942 ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
962 } 943 }
963 944
964 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionMultilineWelcomeShort) { 945 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionMultilineWelcomeShort) {
965 FtpSocketDataProviderDirectoryListing ctrl_socket; 946 FtpSocketDataProviderDirectoryListing ctrl_socket;
966 // The client will not consume all three 230 lines. That's good, we want to 947 // The client will not consume all three 230 lines. That's good, we want to
967 // test that scenario. 948 // test that scenario.
968 ctrl_socket.allow_unconsumed_reads(true); 949 ctrl_socket.allow_unconsumed_reads(true);
969 ctrl_socket.set_multiline_welcome(true); 950 ctrl_socket.set_multiline_welcome(true);
970 ctrl_socket.set_short_read_limit(5); 951 ctrl_socket.set_short_read_limit(5);
971 ExecuteTransaction(&ctrl_socket, "ftp://host", 1, OK); 952 ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
972 } 953 }
973 954
974 // Regression test for http://crbug.com/60555. 955 // Regression test for http://crbug.com/60555.
975 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionZeroSize) { 956 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionZeroSize) {
976 FtpSocketDataProviderDirectoryListingZeroSize ctrl_socket; 957 FtpSocketDataProviderDirectoryListingZeroSize ctrl_socket;
977 ExecuteTransaction(&ctrl_socket, "ftp://host", 0, OK); 958 ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
978 } 959 }
979 960
980 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionVMS) { 961 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionVMS) {
981 FtpSocketDataProviderVMSDirectoryListing ctrl_socket; 962 FtpSocketDataProviderVMSDirectoryListing ctrl_socket;
982 ExecuteTransaction(&ctrl_socket, "ftp://host/dir", 1, OK); 963 ExecuteTransaction(&ctrl_socket, "ftp://host/dir", OK);
983 } 964 }
984 965
985 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionVMSRootDirectory) { 966 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionVMSRootDirectory) {
986 FtpSocketDataProviderVMSDirectoryListingRootDirectory ctrl_socket; 967 FtpSocketDataProviderVMSDirectoryListingRootDirectory ctrl_socket;
987 ExecuteTransaction(&ctrl_socket, "ftp://host", 1, OK); 968 ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
988 } 969 }
989 970
990 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionTransferStarting) { 971 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionTransferStarting) {
991 FtpSocketDataProviderDirectoryListingTransferStarting ctrl_socket; 972 FtpSocketDataProviderDirectoryListingTransferStarting ctrl_socket;
992 ExecuteTransaction(&ctrl_socket, "ftp://host", 1, OK); 973 ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
993 } 974 }
994 975
995 TEST_P(FtpNetworkTransactionTest, DownloadTransaction) { 976 TEST_P(FtpNetworkTransactionTest, DownloadTransaction) {
996 FtpSocketDataProviderFileDownload ctrl_socket; 977 FtpSocketDataProviderFileDownload ctrl_socket;
997 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK); 978 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
998 979
999 // We pass an artificial value of 18 as a response to the SIZE command. 980 // We pass an artificial value of 18 as a response to the SIZE command.
1000 EXPECT_EQ(18, transaction_.GetResponseInfo()->expected_content_size); 981 EXPECT_EQ(18, transaction_.GetResponseInfo()->expected_content_size);
1001 EXPECT_EQ((GetFamily() == AF_INET) ? "127.0.0.1" : "::1", 982 EXPECT_EQ((GetFamily() == AF_INET) ? "127.0.0.1" : "::1",
1002 transaction_.GetResponseInfo()->socket_address.host()); 983 transaction_.GetResponseInfo()->socket_address.host());
1003 EXPECT_EQ(21, transaction_.GetResponseInfo()->socket_address.port()); 984 EXPECT_EQ(21, transaction_.GetResponseInfo()->socket_address.port());
1004 } 985 }
1005 986
1006 TEST_P(FtpNetworkTransactionTest, DownloadTransactionWithPasvFallback) { 987 TEST_P(FtpNetworkTransactionTest, DownloadTransactionWithPasvFallback) {
1007 FtpSocketDataProviderFileDownloadWithPasvFallback ctrl_socket; 988 FtpSocketDataProviderFileDownloadWithPasvFallback ctrl_socket;
1008 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK); 989 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
1009 990
1010 // We pass an artificial value of 18 as a response to the SIZE command. 991 // We pass an artificial value of 18 as a response to the SIZE command.
1011 EXPECT_EQ(18, transaction_.GetResponseInfo()->expected_content_size); 992 EXPECT_EQ(18, transaction_.GetResponseInfo()->expected_content_size);
1012 } 993 }
1013 994
1014 TEST_P(FtpNetworkTransactionTest, DownloadTransactionWithTypecodeA) { 995 TEST_P(FtpNetworkTransactionTest, DownloadTransactionWithTypecodeA) {
1015 FtpSocketDataProviderFileDownloadWithFileTypecode ctrl_socket; 996 FtpSocketDataProviderFileDownloadWithFileTypecode ctrl_socket;
1016 ctrl_socket.set_data_type('A'); 997 ctrl_socket.set_data_type('A');
1017 ExecuteTransaction(&ctrl_socket, "ftp://host/file;type=a", 0, OK); 998 ExecuteTransaction(&ctrl_socket, "ftp://host/file;type=a", OK);
1018 999
1019 // We pass an artificial value of 18 as a response to the SIZE command. 1000 // We pass an artificial value of 18 as a response to the SIZE command.
1020 EXPECT_EQ(18, transaction_.GetResponseInfo()->expected_content_size); 1001 EXPECT_EQ(18, transaction_.GetResponseInfo()->expected_content_size);
1021 } 1002 }
1022 1003
1023 TEST_P(FtpNetworkTransactionTest, DownloadTransactionWithTypecodeI) { 1004 TEST_P(FtpNetworkTransactionTest, DownloadTransactionWithTypecodeI) {
1024 FtpSocketDataProviderFileDownloadWithFileTypecode ctrl_socket; 1005 FtpSocketDataProviderFileDownloadWithFileTypecode ctrl_socket;
1025 ExecuteTransaction(&ctrl_socket, "ftp://host/file;type=i", 0, OK); 1006 ExecuteTransaction(&ctrl_socket, "ftp://host/file;type=i", OK);
1026 1007
1027 // We pass an artificial value of 18 as a response to the SIZE command. 1008 // We pass an artificial value of 18 as a response to the SIZE command.
1028 EXPECT_EQ(18, transaction_.GetResponseInfo()->expected_content_size); 1009 EXPECT_EQ(18, transaction_.GetResponseInfo()->expected_content_size);
1029 } 1010 }
1030 1011
1031 TEST_P(FtpNetworkTransactionTest, DownloadTransactionMultilineWelcome) { 1012 TEST_P(FtpNetworkTransactionTest, DownloadTransactionMultilineWelcome) {
1032 FtpSocketDataProviderFileDownload ctrl_socket; 1013 FtpSocketDataProviderFileDownload ctrl_socket;
1033 ctrl_socket.set_multiline_welcome(true); 1014 ctrl_socket.set_multiline_welcome(true);
1034 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK); 1015 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
1035 } 1016 }
1036 1017
1037 TEST_P(FtpNetworkTransactionTest, DownloadTransactionShortReads2) { 1018 TEST_P(FtpNetworkTransactionTest, DownloadTransactionShortReads2) {
1038 FtpSocketDataProviderFileDownload ctrl_socket; 1019 FtpSocketDataProviderFileDownload ctrl_socket;
1039 ctrl_socket.set_short_read_limit(2); 1020 ctrl_socket.set_short_read_limit(2);
1040 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK); 1021 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
1041 } 1022 }
1042 1023
1043 TEST_P(FtpNetworkTransactionTest, DownloadTransactionShortReads5) { 1024 TEST_P(FtpNetworkTransactionTest, DownloadTransactionShortReads5) {
1044 FtpSocketDataProviderFileDownload ctrl_socket; 1025 FtpSocketDataProviderFileDownload ctrl_socket;
1045 ctrl_socket.set_short_read_limit(5); 1026 ctrl_socket.set_short_read_limit(5);
1046 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK); 1027 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
1047 } 1028 }
1048 1029
1049 TEST_P(FtpNetworkTransactionTest, DownloadTransactionZeroSize) { 1030 TEST_P(FtpNetworkTransactionTest, DownloadTransactionZeroSize) {
1050 FtpSocketDataProviderFileDownloadZeroSize ctrl_socket; 1031 FtpSocketDataProviderFileDownloadZeroSize ctrl_socket;
1051 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK); 1032 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
1052 } 1033 }
1053 1034
1054 TEST_P(FtpNetworkTransactionTest, DownloadTransactionCWD451) { 1035 TEST_P(FtpNetworkTransactionTest, DownloadTransactionCWD451) {
1055 FtpSocketDataProviderFileDownloadCWD451 ctrl_socket; 1036 FtpSocketDataProviderFileDownloadCWD451 ctrl_socket;
1056 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK); 1037 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
1057 } 1038 }
1058 1039
1059 TEST_P(FtpNetworkTransactionTest, DownloadTransactionVMS) { 1040 TEST_P(FtpNetworkTransactionTest, DownloadTransactionVMS) {
1060 FtpSocketDataProviderVMSFileDownload ctrl_socket; 1041 FtpSocketDataProviderVMSFileDownload ctrl_socket;
1061 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK); 1042 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
1062 } 1043 }
1063 1044
1064 TEST_P(FtpNetworkTransactionTest, DownloadTransactionTransferStarting) { 1045 TEST_P(FtpNetworkTransactionTest, DownloadTransactionTransferStarting) {
1065 FtpSocketDataProviderFileDownloadTransferStarting ctrl_socket; 1046 FtpSocketDataProviderFileDownloadTransferStarting ctrl_socket;
1066 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK); 1047 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
1067 } 1048 }
1068 1049
1069 TEST_P(FtpNetworkTransactionTest, DownloadTransactionInvalidResponse) { 1050 TEST_P(FtpNetworkTransactionTest, DownloadTransactionInvalidResponse) {
1070 FtpSocketDataProviderFileDownloadInvalidResponse ctrl_socket; 1051 FtpSocketDataProviderFileDownloadInvalidResponse ctrl_socket;
1071 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_INVALID_RESPONSE); 1052 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
1072 } 1053 }
1073 1054
1074 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilPasvReallyBadFormat) { 1055 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilPasvReallyBadFormat) {
1075 FtpSocketDataProviderEvilPasv ctrl_socket("227 Portscan (127,0,0,\r\n", 1056 FtpSocketDataProviderEvilPasv ctrl_socket("227 Portscan (127,0,0,\r\n",
1076 FtpSocketDataProvider::PRE_QUIT); 1057 FtpSocketDataProvider::PRE_QUIT);
1077 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_INVALID_RESPONSE); 1058 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
1078 } 1059 }
1079 1060
1080 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort1) { 1061 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort1) {
1081 FtpSocketDataProviderEvilPasv ctrl_socket("227 Portscan (127,0,0,1,0,22)\r\n", 1062 FtpSocketDataProviderEvilPasv ctrl_socket("227 Portscan (127,0,0,1,0,22)\r\n",
1082 FtpSocketDataProvider::PRE_QUIT); 1063 FtpSocketDataProvider::PRE_QUIT);
1083 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_UNSAFE_PORT); 1064 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
1084 } 1065 }
1085 1066
1086 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort2) { 1067 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort2) {
1087 // Still unsafe. 1 * 256 + 2 = 258, which is < 1024. 1068 // Still unsafe. 1 * 256 + 2 = 258, which is < 1024.
1088 FtpSocketDataProviderEvilPasv ctrl_socket("227 Portscan (127,0,0,1,1,2)\r\n", 1069 FtpSocketDataProviderEvilPasv ctrl_socket("227 Portscan (127,0,0,1,1,2)\r\n",
1089 FtpSocketDataProvider::PRE_QUIT); 1070 FtpSocketDataProvider::PRE_QUIT);
1090 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_UNSAFE_PORT); 1071 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
1091 } 1072 }
1092 1073
1093 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort3) { 1074 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort3) {
1094 // Still unsafe. 3 * 256 + 4 = 772, which is < 1024. 1075 // Still unsafe. 3 * 256 + 4 = 772, which is < 1024.
1095 FtpSocketDataProviderEvilPasv ctrl_socket("227 Portscan (127,0,0,1,3,4)\r\n", 1076 FtpSocketDataProviderEvilPasv ctrl_socket("227 Portscan (127,0,0,1,3,4)\r\n",
1096 FtpSocketDataProvider::PRE_QUIT); 1077 FtpSocketDataProvider::PRE_QUIT);
1097 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_UNSAFE_PORT); 1078 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
1098 } 1079 }
1099 1080
1100 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort4) { 1081 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort4) {
1101 // Unsafe. 8 * 256 + 1 = 2049, which is used by nfs. 1082 // Unsafe. 8 * 256 + 1 = 2049, which is used by nfs.
1102 FtpSocketDataProviderEvilPasv ctrl_socket("227 Portscan (127,0,0,1,8,1)\r\n", 1083 FtpSocketDataProviderEvilPasv ctrl_socket("227 Portscan (127,0,0,1,8,1)\r\n",
1103 FtpSocketDataProvider::PRE_QUIT); 1084 FtpSocketDataProvider::PRE_QUIT);
1104 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_UNSAFE_PORT); 1085 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
1105 } 1086 }
1106 1087
1107 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafeHost) { 1088 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafeHost) {
1108 FtpSocketDataProviderEvilPasv ctrl_socket( 1089 FtpSocketDataProviderEvilPasv ctrl_socket(
1109 "227 Portscan (10,1,2,3,123,456)\r\n", FtpSocketDataProvider::PRE_SIZE); 1090 "227 Portscan (10,1,2,3,123,456)\r\n", FtpSocketDataProvider::PRE_RETR);
1110 ctrl_socket.set_use_epsv(GetFamily() != AF_INET); 1091 ctrl_socket.set_use_epsv(GetFamily() != AF_INET);
1111 std::string mock_data("mock-data"); 1092 std::string mock_data("mock-data");
1112 MockRead data_reads[] = { 1093 MockRead data_reads[] = {
1113 MockRead(mock_data.c_str()), 1094 MockRead(mock_data.c_str()),
1114 }; 1095 };
1115 StaticSocketDataProvider data_socket1; 1096 StaticSocketDataProvider data_socket1;
1116 StaticSocketDataProvider data_socket2(data_reads, arraysize(data_reads), 1097 StaticSocketDataProvider data_socket2(data_reads, arraysize(data_reads),
1117 NULL, 0); 1098 NULL, 0);
1118 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket); 1099 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket);
1119 mock_socket_factory_.AddSocketDataProvider(&data_socket1); 1100 mock_socket_factory_.AddSocketDataProvider(&data_socket1);
(...skipping 22 matching lines...) Expand all
1142 } 1123 }
1143 } 1124 }
1144 1125
1145 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvReallyBadFormat1) { 1126 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvReallyBadFormat1) {
1146 // This test makes no sense for IPv4 connections (we don't use EPSV there). 1127 // This test makes no sense for IPv4 connections (we don't use EPSV there).
1147 if (GetFamily() == AF_INET) 1128 if (GetFamily() == AF_INET)
1148 return; 1129 return;
1149 1130
1150 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (|||22)\r\n", 1131 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (|||22)\r\n",
1151 FtpSocketDataProvider::PRE_QUIT); 1132 FtpSocketDataProvider::PRE_QUIT);
1152 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_INVALID_RESPONSE); 1133 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
1153 } 1134 }
1154 1135
1155 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvReallyBadFormat2) { 1136 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvReallyBadFormat2) {
1156 // This test makes no sense for IPv4 connections (we don't use EPSV there). 1137 // This test makes no sense for IPv4 connections (we don't use EPSV there).
1157 if (GetFamily() == AF_INET) 1138 if (GetFamily() == AF_INET)
1158 return; 1139 return;
1159 1140
1160 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (||\r\n", 1141 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (||\r\n",
1161 FtpSocketDataProvider::PRE_QUIT); 1142 FtpSocketDataProvider::PRE_QUIT);
1162 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_INVALID_RESPONSE); 1143 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
1163 } 1144 }
1164 1145
1165 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvReallyBadFormat3) { 1146 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvReallyBadFormat3) {
1166 // This test makes no sense for IPv4 connections (we don't use EPSV there). 1147 // This test makes no sense for IPv4 connections (we don't use EPSV there).
1167 if (GetFamily() == AF_INET) 1148 if (GetFamily() == AF_INET)
1168 return; 1149 return;
1169 1150
1170 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan\r\n", 1151 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan\r\n",
1171 FtpSocketDataProvider::PRE_QUIT); 1152 FtpSocketDataProvider::PRE_QUIT);
1172 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_INVALID_RESPONSE); 1153 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
1173 } 1154 }
1174 1155
1175 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvReallyBadFormat4) { 1156 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvReallyBadFormat4) {
1176 // This test makes no sense for IPv4 connections (we don't use EPSV there). 1157 // This test makes no sense for IPv4 connections (we don't use EPSV there).
1177 if (GetFamily() == AF_INET) 1158 if (GetFamily() == AF_INET)
1178 return; 1159 return;
1179 1160
1180 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (||||)\r\n", 1161 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (||||)\r\n",
1181 FtpSocketDataProvider::PRE_QUIT); 1162 FtpSocketDataProvider::PRE_QUIT);
1182 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_INVALID_RESPONSE); 1163 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
1183 } 1164 }
1184 1165
1185 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvReallyBadFormat5) { 1166 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvReallyBadFormat5) {
1186 // This test makes no sense for IPv4 connections (we don't use EPSV there). 1167 // This test makes no sense for IPv4 connections (we don't use EPSV there).
1187 if (GetFamily() == AF_INET) 1168 if (GetFamily() == AF_INET)
1188 return; 1169 return;
1189 1170
1190 // Breaking the string in the next line prevents MSVC warning C4125. 1171 // Breaking the string in the next line prevents MSVC warning C4125.
1191 const char response[] = "227 Portscan (\0\0\031" "773\0)\r\n"; 1172 const char response[] = "227 Portscan (\0\0\031" "773\0)\r\n";
1192 FtpSocketDataProviderEvilEpsv ctrl_socket(response, sizeof(response)-1, 1173 FtpSocketDataProviderEvilEpsv ctrl_socket(response, sizeof(response)-1,
1193 FtpSocketDataProvider::PRE_QUIT); 1174 FtpSocketDataProvider::PRE_QUIT);
1194 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_INVALID_RESPONSE); 1175 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
1195 } 1176 }
1196 1177
1197 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvUnsafePort1) { 1178 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvUnsafePort1) {
1198 // This test makes no sense for IPv4 connections (we don't use EPSV there). 1179 // This test makes no sense for IPv4 connections (we don't use EPSV there).
1199 if (GetFamily() == AF_INET) 1180 if (GetFamily() == AF_INET)
1200 return; 1181 return;
1201 1182
1202 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (|||22|)\r\n", 1183 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (|||22|)\r\n",
1203 FtpSocketDataProvider::PRE_QUIT); 1184 FtpSocketDataProvider::PRE_QUIT);
1204 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_UNSAFE_PORT); 1185 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
1205 } 1186 }
1206 1187
1207 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvUnsafePort2) { 1188 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvUnsafePort2) {
1208 // This test makes no sense for IPv4 connections (we don't use EPSV there). 1189 // This test makes no sense for IPv4 connections (we don't use EPSV there).
1209 if (GetFamily() == AF_INET) 1190 if (GetFamily() == AF_INET)
1210 return; 1191 return;
1211 1192
1212 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (|||258|)\r\n", 1193 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (|||258|)\r\n",
1213 FtpSocketDataProvider::PRE_QUIT); 1194 FtpSocketDataProvider::PRE_QUIT);
1214 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_UNSAFE_PORT); 1195 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
1215 } 1196 }
1216 1197
1217 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvUnsafePort3) { 1198 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvUnsafePort3) {
1218 // This test makes no sense for IPv4 connections (we don't use EPSV there). 1199 // This test makes no sense for IPv4 connections (we don't use EPSV there).
1219 if (GetFamily() == AF_INET) 1200 if (GetFamily() == AF_INET)
1220 return; 1201 return;
1221 1202
1222 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (|||772|)\r\n", 1203 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (|||772|)\r\n",
1223 FtpSocketDataProvider::PRE_QUIT); 1204 FtpSocketDataProvider::PRE_QUIT);
1224 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_UNSAFE_PORT); 1205 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
1225 } 1206 }
1226 1207
1227 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvUnsafePort4) { 1208 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvUnsafePort4) {
1228 // This test makes no sense for IPv4 connections (we don't use EPSV there). 1209 // This test makes no sense for IPv4 connections (we don't use EPSV there).
1229 if (GetFamily() == AF_INET) 1210 if (GetFamily() == AF_INET)
1230 return; 1211 return;
1231 1212
1232 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (|||2049|)\r\n", 1213 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (|||2049|)\r\n",
1233 FtpSocketDataProvider::PRE_QUIT); 1214 FtpSocketDataProvider::PRE_QUIT);
1234 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_UNSAFE_PORT); 1215 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
1235 } 1216 }
1236 1217
1237 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvWeirdSep) { 1218 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvWeirdSep) {
1238 // This test makes no sense for IPv4 connections (we don't use EPSV there). 1219 // This test makes no sense for IPv4 connections (we don't use EPSV there).
1239 if (GetFamily() == AF_INET) 1220 if (GetFamily() == AF_INET)
1240 return; 1221 return;
1241 1222
1242 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan ($$$31744$)\r\n", 1223 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan ($$$31744$)\r\n",
1243 FtpSocketDataProvider::PRE_SIZE); 1224 FtpSocketDataProvider::PRE_RETR);
1244 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK); 1225 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
1245 } 1226 }
1246 1227
1247 TEST_P(FtpNetworkTransactionTest, 1228 TEST_P(FtpNetworkTransactionTest,
1248 DownloadTransactionEvilEpsvWeirdSepUnsafePort) { 1229 DownloadTransactionEvilEpsvWeirdSepUnsafePort) {
1249 // This test makes no sense for IPv4 connections (we don't use EPSV there). 1230 // This test makes no sense for IPv4 connections (we don't use EPSV there).
1250 if (GetFamily() == AF_INET) 1231 if (GetFamily() == AF_INET)
1251 return; 1232 return;
1252 1233
1253 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan ($$$317$)\r\n", 1234 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan ($$$317$)\r\n",
1254 FtpSocketDataProvider::PRE_QUIT); 1235 FtpSocketDataProvider::PRE_QUIT);
1255 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_UNSAFE_PORT); 1236 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
1256 } 1237 }
1257 1238
1258 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvIllegalHost) { 1239 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvIllegalHost) {
1259 // This test makes no sense for IPv4 connections (we don't use EPSV there). 1240 // This test makes no sense for IPv4 connections (we don't use EPSV there).
1260 if (GetFamily() == AF_INET) 1241 if (GetFamily() == AF_INET)
1261 return; 1242 return;
1262 1243
1263 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (|2|::1|31744|)\r\n", 1244 FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (|2|::1|31744|)\r\n",
1264 FtpSocketDataProvider::PRE_QUIT); 1245 FtpSocketDataProvider::PRE_QUIT);
1265 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_INVALID_RESPONSE); 1246 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
1266 } 1247 }
1267 1248
1268 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilLoginBadUsername) { 1249 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilLoginBadUsername) {
1269 FtpSocketDataProviderEvilLogin ctrl_socket("hello%0Aworld", "test"); 1250 FtpSocketDataProviderEvilLogin ctrl_socket("hello%0Aworld", "test");
1270 ExecuteTransaction(&ctrl_socket, "ftp://hello%0Aworld:test@host/file", 1, OK); 1251 ExecuteTransaction(&ctrl_socket, "ftp://hello%0Aworld:test@host/file", OK);
1271 } 1252 }
1272 1253
1273 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilLoginBadPassword) { 1254 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilLoginBadPassword) {
1274 FtpSocketDataProviderEvilLogin ctrl_socket("test", "hello%0Dworld"); 1255 FtpSocketDataProviderEvilLogin ctrl_socket("test", "hello%0Dworld");
1275 ExecuteTransaction(&ctrl_socket, "ftp://test:hello%0Dworld@host/file", 1, OK); 1256 ExecuteTransaction(&ctrl_socket, "ftp://test:hello%0Dworld@host/file", OK);
1276 } 1257 }
1277 1258
1278 TEST_P(FtpNetworkTransactionTest, DownloadTransactionSpaceInLogin) { 1259 TEST_P(FtpNetworkTransactionTest, DownloadTransactionSpaceInLogin) {
1279 FtpSocketDataProviderEvilLogin ctrl_socket("hello world", "test"); 1260 FtpSocketDataProviderEvilLogin ctrl_socket("hello world", "test");
1280 ExecuteTransaction(&ctrl_socket, "ftp://hello%20world:test@host/file", 1, OK); 1261 ExecuteTransaction(&ctrl_socket, "ftp://hello%20world:test@host/file", OK);
1281 } 1262 }
1282 1263
1283 TEST_P(FtpNetworkTransactionTest, DownloadTransactionSpaceInPassword) { 1264 TEST_P(FtpNetworkTransactionTest, DownloadTransactionSpaceInPassword) {
1284 FtpSocketDataProviderEvilLogin ctrl_socket("test", "hello world"); 1265 FtpSocketDataProviderEvilLogin ctrl_socket("test", "hello world");
1285 ExecuteTransaction(&ctrl_socket, "ftp://test:hello%20world@host/file", 1, OK); 1266 ExecuteTransaction(&ctrl_socket, "ftp://test:hello%20world@host/file", OK);
1286 } 1267 }
1287 1268
1288 TEST_P(FtpNetworkTransactionTest, EvilRestartUser) { 1269 TEST_P(FtpNetworkTransactionTest, EvilRestartUser) {
1289 FtpSocketDataProvider ctrl_socket1; 1270 FtpSocketDataProvider ctrl_socket1;
1290 ctrl_socket1.InjectFailure(FtpSocketDataProvider::PRE_PASSWD, 1271 ctrl_socket1.InjectFailure(FtpSocketDataProvider::PRE_PASSWD,
1291 FtpSocketDataProvider::PRE_QUIT, 1272 FtpSocketDataProvider::PRE_QUIT,
1292 "530 Login authentication failed\r\n"); 1273 "530 Login authentication failed\r\n");
1293 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket1); 1274 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket1);
1294 1275
1295 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file"); 1276 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file");
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1350 transaction_.RestartWithAuth( 1331 transaction_.RestartWithAuth(
1351 AuthCredentials(base::ASCIIToUTF16("innocent"), 1332 AuthCredentials(base::ASCIIToUTF16("innocent"),
1352 base::ASCIIToUTF16("foo\nownz0red")), 1333 base::ASCIIToUTF16("foo\nownz0red")),
1353 callback_.callback())); 1334 callback_.callback()));
1354 EXPECT_EQ(ERR_MALFORMED_IDENTITY, callback_.WaitForResult()); 1335 EXPECT_EQ(ERR_MALFORMED_IDENTITY, callback_.WaitForResult());
1355 } 1336 }
1356 1337
1357 TEST_P(FtpNetworkTransactionTest, Escaping) { 1338 TEST_P(FtpNetworkTransactionTest, Escaping) {
1358 FtpSocketDataProviderEscaping ctrl_socket; 1339 FtpSocketDataProviderEscaping ctrl_socket;
1359 ExecuteTransaction(&ctrl_socket, "ftp://host/%20%21%22%23%24%25%79%80%81", 1340 ExecuteTransaction(&ctrl_socket, "ftp://host/%20%21%22%23%24%25%79%80%81",
1360 1, OK); 1341 OK);
1361 } 1342 }
1362 1343
1363 // Test for http://crbug.com/23794. 1344 // Test for http://crbug.com/23794.
1364 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilSize) { 1345 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilSize) {
1365 // Try to overflow int64 in the response. 1346 // Try to overflow int64 in the response.
1366 FtpSocketDataProviderEvilSize ctrl_socket( 1347 FtpSocketDataProviderEvilSize ctrl_socket(
1367 "213 99999999999999999999999999999999\r\n", 1348 "213 99999999999999999999999999999999\r\n",
1368 FtpSocketDataProvider::PRE_QUIT); 1349 FtpSocketDataProvider::PRE_QUIT);
1369 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_INVALID_RESPONSE); 1350 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
1370 } 1351 }
1371 1352
1372 // Test for http://crbug.com/36360. 1353 // Test for http://crbug.com/36360.
1373 TEST_P(FtpNetworkTransactionTest, DownloadTransactionBigSize) { 1354 TEST_P(FtpNetworkTransactionTest, DownloadTransactionBigSize) {
1374 // Pass a valid, but large file size. The transaction should not fail. 1355 // Pass a valid, but large file size. The transaction should not fail.
1375 FtpSocketDataProviderEvilSize ctrl_socket( 1356 FtpSocketDataProviderEvilSize ctrl_socket(
1376 "213 3204427776\r\n", 1357 "213 3204427776\r\n",
1377 FtpSocketDataProvider::PRE_CWD); 1358 FtpSocketDataProvider::PRE_CWD);
1378 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK); 1359 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
1379 EXPECT_EQ(3204427776LL, 1360 EXPECT_EQ(3204427776LL,
1380 transaction_.GetResponseInfo()->expected_content_size); 1361 transaction_.GetResponseInfo()->expected_content_size);
1381 } 1362 }
1382 1363
1383 // Regression test for http://crbug.com/25023. 1364 // Regression test for http://crbug.com/25023.
1384 TEST_P(FtpNetworkTransactionTest, CloseConnection) { 1365 TEST_P(FtpNetworkTransactionTest, CloseConnection) {
1385 FtpSocketDataProviderCloseConnection ctrl_socket; 1366 FtpSocketDataProviderCloseConnection ctrl_socket;
1386 ExecuteTransaction(&ctrl_socket, "ftp://host", 1, ERR_EMPTY_RESPONSE); 1367 ExecuteTransaction(&ctrl_socket, "ftp://host", ERR_EMPTY_RESPONSE);
1387 } 1368 }
1388 1369
1389 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionFailUser) { 1370 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionFailUser) {
1390 FtpSocketDataProviderDirectoryListing ctrl_socket; 1371 FtpSocketDataProviderDirectoryListing ctrl_socket;
1391 // Use unallocated 599 FTP error code to make sure it falls into the generic 1372 // Use unallocated 599 FTP error code to make sure it falls into the generic
1392 // ERR_FTP_FAILED bucket. 1373 // ERR_FTP_FAILED bucket.
1393 TransactionFailHelper(&ctrl_socket, 1374 TransactionFailHelper(&ctrl_socket,
1394 "ftp://host", 1375 "ftp://host",
1395 FtpSocketDataProvider::PRE_USER, 1376 FtpSocketDataProvider::PRE_USER,
1396 FtpSocketDataProvider::PRE_QUIT, 1377 FtpSocketDataProvider::PRE_QUIT,
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1456 } 1437 }
1457 1438
1458 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionFailEpsv) { 1439 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionFailEpsv) {
1459 // This test makes no sense for IPv4 connections (we don't use EPSV there). 1440 // This test makes no sense for IPv4 connections (we don't use EPSV there).
1460 if (GetFamily() == AF_INET) 1441 if (GetFamily() == AF_INET)
1461 return; 1442 return;
1462 1443
1463 FtpSocketDataProviderDirectoryListing ctrl_socket; 1444 FtpSocketDataProviderDirectoryListing ctrl_socket;
1464 // Use unallocated 599 FTP error code to make sure it falls into the generic 1445 // Use unallocated 599 FTP error code to make sure it falls into the generic
1465 // ERR_FTP_FAILED bucket. 1446 // ERR_FTP_FAILED bucket.
1466 TransactionFailHelper(&ctrl_socket, 1447 TransactionFailHelper(
1467 "ftp://host", 1448 &ctrl_socket, "ftp://host", FtpSocketDataProvider::PRE_LIST_EPSV,
1468 FtpSocketDataProvider::PRE_EPSV, 1449 FtpSocketDataProvider::PRE_NOPASV, "599 fail\r\n", ERR_FTP_FAILED);
1469 FtpSocketDataProvider::PRE_NOPASV,
1470 "599 fail\r\n",
1471 ERR_FTP_FAILED);
1472 } 1450 }
1473 1451
1474 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionFailCwd) { 1452 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionFailCwd) {
1475 FtpSocketDataProviderDirectoryListing ctrl_socket; 1453 FtpSocketDataProviderDirectoryListing ctrl_socket;
1476 // Use unallocated 599 FTP error code to make sure it falls into the generic 1454 // Use unallocated 599 FTP error code to make sure it falls into the generic
1477 // ERR_FTP_FAILED bucket. 1455 // ERR_FTP_FAILED bucket.
1478 TransactionFailHelper(&ctrl_socket, 1456 TransactionFailHelper(&ctrl_socket,
1479 "ftp://host", 1457 "ftp://host",
1480 FtpSocketDataProvider::PRE_CWD, 1458 FtpSocketDataProvider::PRE_CWD,
1481 FtpSocketDataProvider::PRE_QUIT, 1459 FtpSocketDataProvider::PRE_QUIT,
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
1554 } 1532 }
1555 1533
1556 TEST_P(FtpNetworkTransactionTest, DownloadTransactionFailEpsv) { 1534 TEST_P(FtpNetworkTransactionTest, DownloadTransactionFailEpsv) {
1557 // This test makes no sense for IPv4 connections (we don't use EPSV there). 1535 // This test makes no sense for IPv4 connections (we don't use EPSV there).
1558 if (GetFamily() == AF_INET) 1536 if (GetFamily() == AF_INET)
1559 return; 1537 return;
1560 1538
1561 FtpSocketDataProviderFileDownload ctrl_socket; 1539 FtpSocketDataProviderFileDownload ctrl_socket;
1562 // Use unallocated 599 FTP error code to make sure it falls into the generic 1540 // Use unallocated 599 FTP error code to make sure it falls into the generic
1563 // ERR_FTP_FAILED bucket. 1541 // ERR_FTP_FAILED bucket.
1564 TransactionFailHelper(&ctrl_socket, 1542 TransactionFailHelper(
1565 "ftp://host/file", 1543 &ctrl_socket, "ftp://host/file", FtpSocketDataProvider::PRE_RETR_EPSV,
1566 FtpSocketDataProvider::PRE_EPSV, 1544 FtpSocketDataProvider::PRE_NOPASV, "599 fail\r\n", ERR_FTP_FAILED);
1567 FtpSocketDataProvider::PRE_NOPASV,
1568 "599 fail\r\n",
1569 ERR_FTP_FAILED);
1570 } 1545 }
1571 1546
1572 TEST_P(FtpNetworkTransactionTest, DownloadTransactionFailRetr) { 1547 TEST_P(FtpNetworkTransactionTest, DownloadTransactionFailRetr) {
1573 FtpSocketDataProviderFileDownload ctrl_socket; 1548 FtpSocketDataProviderFileDownload ctrl_socket;
1574 // Use unallocated 599 FTP error code to make sure it falls into the generic 1549 // Use unallocated 599 FTP error code to make sure it falls into the generic
1575 // ERR_FTP_FAILED bucket. 1550 // ERR_FTP_FAILED bucket.
1576 TransactionFailHelper(&ctrl_socket, 1551 TransactionFailHelper(&ctrl_socket,
1577 "ftp://host/file", 1552 "ftp://host/file",
1578 FtpSocketDataProvider::PRE_RETR, 1553 FtpSocketDataProvider::PRE_RETR,
1579 FtpSocketDataProvider::PRE_QUIT, 1554 FtpSocketDataProvider::PRE_QUIT,
1580 "599 fail\r\n", 1555 "599 fail\r\n",
1581 ERR_FTP_FAILED); 1556 ERR_FTP_FAILED);
1582 } 1557 }
1583 1558
1584 TEST_P(FtpNetworkTransactionTest, FileNotFound) { 1559 TEST_P(FtpNetworkTransactionTest, FileNotFound) {
1585 FtpSocketDataProviderFileNotFound ctrl_socket; 1560 FtpSocketDataProviderFileNotFound ctrl_socket;
1586 ExecuteTransaction(&ctrl_socket, "ftp://host/file", 2, ERR_FTP_FAILED); 1561 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_FTP_FAILED);
1587 } 1562 }
1588 1563
1589 // Test for http://crbug.com/38845. 1564 // Test for http://crbug.com/38845.
1590 TEST_P(FtpNetworkTransactionTest, ZeroLengthDirInPWD) { 1565 TEST_P(FtpNetworkTransactionTest, ZeroLengthDirInPWD) {
1591 FtpSocketDataProviderFileDownload ctrl_socket; 1566 FtpSocketDataProviderFileDownload ctrl_socket;
1592 TransactionFailHelper(&ctrl_socket, 1567 TransactionFailHelper(&ctrl_socket,
1593 "ftp://host/file", 1568 "ftp://host/file",
1594 FtpSocketDataProvider::PRE_PWD, 1569 FtpSocketDataProvider::PRE_PWD,
1595 FtpSocketDataProvider::PRE_TYPE, 1570 FtpSocketDataProvider::PRE_TYPE,
1596 "257 \"\"\r\n", 1571 "257 \"\"\r\n",
1597 OK); 1572 OK);
1598 } 1573 }
1599 1574
1600 INSTANTIATE_TEST_CASE_P(FTP, 1575 INSTANTIATE_TEST_CASE_P(FTP,
1601 FtpNetworkTransactionTest, 1576 FtpNetworkTransactionTest,
1602 ::testing::Values(AF_INET, AF_INET6)); 1577 ::testing::Values(AF_INET, AF_INET6));
1603 1578
1604 } // namespace net 1579 } // namespace net
OLDNEW
« no previous file with comments | « net/ftp/ftp_network_transaction.cc ('k') | net/http/http_cache.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698