Chromium Code Reviews| Index: net/ftp/ftp_network_transaction_unittest.cc |
| diff --git a/net/ftp/ftp_network_transaction_unittest.cc b/net/ftp/ftp_network_transaction_unittest.cc |
| index ba765a721e7d28f568e82ec50f61e9fdc16b2b6f..94b6986f7e15d1d3fe7b4fe2383caec9cf8a6fb9 100644 |
| --- a/net/ftp/ftp_network_transaction_unittest.cc |
| +++ b/net/ftp/ftp_network_transaction_unittest.cc |
| @@ -47,6 +47,7 @@ class FtpMockControlSocket : public DynamicMockSocket { |
| PRE_MDTM, |
| PRE_LIST, |
| PRE_RETR, |
| + PRE_PASV2, |
| PRE_CWD, |
| PRE_QUIT, |
| QUIT |
| @@ -83,9 +84,14 @@ class FtpMockControlSocket : public DynamicMockSocket { |
| case PRE_PASV: |
| return Verify("PASV\r\n", data, PRE_SIZE, |
| "227 Entering Passive Mode 127,0,0,1,123,456\r\n"); |
| + case PRE_PASV2: |
| + // Parser should also accept format without parentheses. |
| + return Verify("PASV\r\n", data, PRE_CWD, |
| + "227 Entering Passive Mode 127,0,0,1,123,456\r\n"); |
| case PRE_QUIT: |
| return Verify("QUIT\r\n", data, QUIT, "221 Goodbye.\r\n"); |
| default: |
| + NOTREACHED() << "State not handled " << state(); |
| return MockWriteResult(true, ERR_UNEXPECTED); |
| } |
| } |
| @@ -170,8 +176,9 @@ class FtpMockControlSocketDirectoryListing : public FtpMockControlSocket { |
| return Verify("MDTM /\r\n", data, PRE_RETR, |
| "213 20070221112533\r\n"); |
| case PRE_RETR: |
| - return Verify("RETR /\r\n", data, PRE_CWD, |
| + return Verify("RETR /\r\n", data, PRE_PASV2, |
| "550 Can't download directory\r\n"); |
| + |
| case PRE_CWD: |
| return Verify("CWD /\r\n", data, PRE_LIST, "200 OK\r\n"); |
| case PRE_LIST: |
| @@ -207,7 +214,7 @@ class FtpMockControlSocketVMSDirectoryListing : public FtpMockControlSocket { |
| return Verify("MDTM ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_RETR, |
| "213 20070221112533\r\n"); |
| case PRE_RETR: |
| - return Verify("RETR ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_CWD, |
| + return Verify("RETR ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_PASV2, |
| "550 Can't download directory\r\n"); |
| case PRE_CWD: |
| return Verify("CWD ANONYMOUS_ROOT:[dir]\r\n", data, PRE_LIST, |
| @@ -245,7 +252,7 @@ class FtpMockControlSocketVMSDirectoryListingRootDirectory |
| return Verify("MDTM ANONYMOUS_ROOT\r\n", data, PRE_RETR, |
| "213 20070221112533\r\n"); |
| case PRE_RETR: |
| - return Verify("RETR ANONYMOUS_ROOT\r\n", data, PRE_CWD, |
| + return Verify("RETR ANONYMOUS_ROOT\r\n", data, PRE_PASV2, |
| "550 Can't download directory\r\n"); |
| case PRE_CWD: |
| return Verify("CWD ANONYMOUS_ROOT:[000000]\r\n", data, PRE_LIST, |
| @@ -517,9 +524,13 @@ class FtpNetworkTransactionTest : public PlatformTest { |
| MockRead data_reads[] = { |
| MockRead(mock_data.c_str()), |
| }; |
| - StaticMockSocket data_socket(data_reads, NULL); |
| + // For compatibility with FileZilla, the transaction code will use two data |
| + // socket for directory requests. For more info see http://crbug.com/25316. |
|
eroman
2009/10/21 16:57:52
nit: socket --> sockets
|
| + StaticMockSocket data_socket1(data_reads, NULL); |
| + StaticMockSocket data_socket2(data_reads, NULL); |
| mock_socket_factory_.AddMockSocket(ctrl_socket); |
| - mock_socket_factory_.AddMockSocket(&data_socket); |
| + mock_socket_factory_.AddMockSocket(&data_socket1); |
| + mock_socket_factory_.AddMockSocket(&data_socket2); |
| FtpRequestInfo request_info = GetRequestInfo(request); |
| EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState()); |
| ASSERT_EQ(ERR_IO_PENDING, |
| @@ -918,6 +929,16 @@ TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailMdtm) { |
| OK); |
| } |
| +TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailPasv2) { |
| + FtpMockControlSocketDirectoryListing ctrl_socket; |
| + TransactionFailHelper(&ctrl_socket, |
| + "ftp://host", |
| + FtpMockControlSocket::PRE_PASV2, |
| + FtpMockControlSocket::PRE_QUIT, |
| + "500 failed pasv2\r\n", |
| + ERR_FAILED); |
| +} |
| + |
| TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailCwd) { |
| FtpMockControlSocketDirectoryListing ctrl_socket; |
| TransactionFailHelper(&ctrl_socket, |
| @@ -1033,7 +1054,7 @@ TEST_F(FtpNetworkTransactionTest, DownloadTransactionFileNotFound) { |
| TransactionFailHelper(&ctrl_socket, |
| "ftp://host/file", |
| FtpMockControlSocket::PRE_RETR, |
| - FtpMockControlSocket::PRE_CWD, |
| + FtpMockControlSocket::PRE_PASV2, |
| "550 cannot open file\r\n", |
| ERR_FILE_NOT_FOUND); |
| } |