diff options
author | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-08 15:48:40 +0000 |
---|---|---|
committer | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-08 15:48:40 +0000 |
commit | dc5146bf943e7b7a0bcc7d77e25abc1a14687654 (patch) | |
tree | 07c06025ca3917bdf582d5f491cb4ceda744bdd2 /net/ftp/ftp_network_transaction_unittest.cc | |
parent | e1a0c893378d37d7a1c7f145638780a2ded2530c (diff) | |
download | chromium_src-dc5146bf943e7b7a0bcc7d77e25abc1a14687654.zip chromium_src-dc5146bf943e7b7a0bcc7d77e25abc1a14687654.tar.gz chromium_src-dc5146bf943e7b7a0bcc7d77e25abc1a14687654.tar.bz2 |
Correctly handle multiple control response lines in new FTP transaction
After this change it should correctly handle all cases of multiple 230 welcome responses. It also fixes some other related bugs.
TEST=Covered by net_unittests.
BUG=none
Review URL: http://codereview.chromium.org/149211
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20148 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/ftp/ftp_network_transaction_unittest.cc')
-rw-r--r-- | net/ftp/ftp_network_transaction_unittest.cc | 41 |
1 files changed, 38 insertions, 3 deletions
diff --git a/net/ftp/ftp_network_transaction_unittest.cc b/net/ftp/ftp_network_transaction_unittest.cc index 51cf77b..c81fc0f 100644 --- a/net/ftp/ftp_network_transaction_unittest.cc +++ b/net/ftp/ftp_network_transaction_unittest.cc @@ -44,7 +44,9 @@ class FtpMockControlSocket : public DynamicMockSocket { QUIT }; - FtpMockControlSocket() : failure_injection_state_(NONE) { + FtpMockControlSocket() + : failure_injection_state_(NONE), + multiline_welcome_(false) { Init(); } @@ -56,8 +58,12 @@ class FtpMockControlSocket : public DynamicMockSocket { return Verify("USER anonymous\r\n", data, PRE_PASSWD, "331 Password needed\r\n"); case PRE_PASSWD: - return Verify("PASS chrome@example.com\r\n", data, PRE_SYST, - "230 Welcome\r\n"); + { + const char* response_one = "230 Welcome\r\n"; + const char* response_multi = "230 One\r\n230 Two\r\n230 Three\r\n"; + return Verify("PASS chrome@example.com\r\n", data, PRE_SYST, + multiline_welcome_ ? response_multi : response_one); + } case PRE_SYST: return Verify("SYST\r\n", data, PRE_PWD, "215 UNIX\r\n"); case PRE_PWD: @@ -95,6 +101,10 @@ class FtpMockControlSocket : public DynamicMockSocket { Init(); } + void set_multiline_welcome(bool multiline) { + multiline_welcome_ = multiline; + } + protected: void Init() { state_ = PRE_USER; @@ -130,6 +140,9 @@ class FtpMockControlSocket : public DynamicMockSocket { State failure_injection_next_state_; const char* fault_response_; + // If true, we will send multiple 230 lines as response after PASS. + bool multiline_welcome_; + DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocket); }; @@ -293,6 +306,12 @@ TEST_F(FtpNetworkTransactionTest, DirectoryTransaction) { ExecuteTransaction(&ctrl_socket, "ftp://host", OK); } +TEST_F(FtpNetworkTransactionTest, DirectoryTransactionMultilineWelcome) { + FtpMockControlSocketDirectoryListing ctrl_socket; + ctrl_socket.set_multiline_welcome(true); + ExecuteTransaction(&ctrl_socket, "ftp://host", OK); +} + TEST_F(FtpNetworkTransactionTest, DirectoryTransactionShortReads2) { FtpMockControlSocketDirectoryListing ctrl_socket; ctrl_socket.set_short_read_limit(2); @@ -305,11 +324,27 @@ TEST_F(FtpNetworkTransactionTest, DirectoryTransactionShortReads5) { ExecuteTransaction(&ctrl_socket, "ftp://host", OK); } +TEST_F(FtpNetworkTransactionTest, DirectoryTransactionMultilineWelcomeShort) { + FtpMockControlSocketDirectoryListing ctrl_socket; + // The client will not consume all three 230 lines. That's good, we want to + // test that scenario. + ctrl_socket.allow_unconsumed_reads(true); + ctrl_socket.set_multiline_welcome(true); + ctrl_socket.set_short_read_limit(5); + ExecuteTransaction(&ctrl_socket, "ftp://host", OK); +} + TEST_F(FtpNetworkTransactionTest, DownloadTransaction) { FtpMockControlSocketFileDownload ctrl_socket; ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK); } +TEST_F(FtpNetworkTransactionTest, DownloadTransactionMultilineWelcome) { + FtpMockControlSocketFileDownload ctrl_socket; + ctrl_socket.set_multiline_welcome(true); + ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK); +} + TEST_F(FtpNetworkTransactionTest, DownloadTransactionShortReads2) { FtpMockControlSocketFileDownload ctrl_socket; ctrl_socket.set_short_read_limit(2); |