| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |