diff options
author | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-23 19:38:55 +0000 |
---|---|---|
committer | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-23 19:38:55 +0000 |
commit | a6e6d3f773898d4ed2f949a873362c3dfaee5a09 (patch) | |
tree | ba578863ee246306af433417b6772a4849f435a9 | |
parent | b2216523c76507845fc82274e4481ad710d3dea6 (diff) | |
download | chromium_src-a6e6d3f773898d4ed2f949a873362c3dfaee5a09.zip chromium_src-a6e6d3f773898d4ed2f949a873362c3dfaee5a09.tar.gz chromium_src-a6e6d3f773898d4ed2f949a873362c3dfaee5a09.tar.bz2 |
Fix one source of flakiness of FTP tests.
It turns out that similarly to RETR case, we can get two responses
for LIST command, if the transfer finishes quickly enough.
TEST=net_unittests
BUG=25045
Review URL: http://codereview.chromium.org/436002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@32823 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | net/ftp/ftp_network_transaction.cc | 3 | ||||
-rw-r--r-- | net/ftp/ftp_network_transaction_unittest.cc | 30 | ||||
-rw-r--r-- | net/url_request/url_request_unittest.cc | 3 |
3 files changed, 34 insertions, 2 deletions
diff --git a/net/ftp/ftp_network_transaction.cc b/net/ftp/ftp_network_transaction.cc index bfb526e..1dfc99b 100644 --- a/net/ftp/ftp_network_transaction.cc +++ b/net/ftp/ftp_network_transaction.cc @@ -282,6 +282,9 @@ int FtpNetworkTransaction::ProcessCtrlResponse() { case COMMAND_RETR: rv = ProcessResponseRETR(response); break; + case COMMAND_LIST: + rv = ProcessResponseLIST(response); + break; default: // Multiple responses for other commands are invalid. return Stop(ERR_INVALID_RESPONSE); diff --git a/net/ftp/ftp_network_transaction_unittest.cc b/net/ftp/ftp_network_transaction_unittest.cc index 95c4e46..9745763 100644 --- a/net/ftp/ftp_network_transaction_unittest.cc +++ b/net/ftp/ftp_network_transaction_unittest.cc @@ -401,6 +401,31 @@ class FtpSocketDataProviderFileDownloadTransferStarting DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownloadTransferStarting); }; +class FtpSocketDataProviderDirectoryListingTransferStarting + : public FtpSocketDataProviderDirectoryListing { + public: + FtpSocketDataProviderDirectoryListingTransferStarting() { + } + + virtual MockWriteResult OnWrite(const std::string& data) { + if (InjectFault()) + return MockWriteResult(true, data.length()); + switch (state()) { + case PRE_LIST: + return Verify("LIST\r\n", data, PRE_QUIT, + "125-Data connection already open.\r\n" + "125 Transfer starting.\r\n" + "226 Transfer complete.\r\n"); + default: + return FtpSocketDataProviderDirectoryListing::OnWrite(data); + } + } + + private: + DISALLOW_COPY_AND_ASSIGN( + FtpSocketDataProviderDirectoryListingTransferStarting); +}; + class FtpSocketDataProviderFileDownloadInvalidResponse : public FtpSocketDataProviderFileDownload { public: @@ -641,6 +666,11 @@ TEST_F(FtpNetworkTransactionTest, DirectoryTransactionVMSRootDirectory) { ExecuteTransaction(&ctrl_socket, "ftp://host", OK); } +TEST_F(FtpNetworkTransactionTest, DirectoryTransactionTransferStarting) { + FtpSocketDataProviderDirectoryListingTransferStarting ctrl_socket; + ExecuteTransaction(&ctrl_socket, "ftp://host", OK); +} + TEST_F(FtpNetworkTransactionTest, DownloadTransaction) { FtpSocketDataProviderFileDownload ctrl_socket; ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK); diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc index 16af0d0..5b42ac2 100644 --- a/net/url_request/url_request_unittest.cc +++ b/net/url_request/url_request_unittest.cc @@ -1910,8 +1910,7 @@ class URLRequestTestFTP : public URLRequestTest { // static scoped_refptr<FTPTestServer> URLRequestTestFTP::server_; -// Flaky, see http://crbug.com/25045. -TEST_F(URLRequestTestFTP, FLAKY_FTPDirectoryListing) { +TEST_F(URLRequestTestFTP, FTPDirectoryListing) { ASSERT_TRUE(NULL != server_.get()); TestDelegate d; { |