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