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/socket | |
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/socket')
-rw-r--r-- | net/socket/socket_test_util.cc | 24 | ||||
-rw-r--r-- | net/socket/socket_test_util.h | 10 |
2 files changed, 20 insertions, 14 deletions
diff --git a/net/socket/socket_test_util.cc b/net/socket/socket_test_util.cc index fc5ddf3..25de9d3 100644 --- a/net/socket/socket_test_util.cc +++ b/net/socket/socket_test_util.cc @@ -248,33 +248,33 @@ void StaticMockSocket::Reset() { } DynamicMockSocket::DynamicMockSocket() - : read_(false, ERR_UNEXPECTED), - has_read_(false), - short_read_limit_(0) { + : short_read_limit_(0), + allow_unconsumed_reads_(false) { } MockRead DynamicMockSocket::GetNextRead() { - if (!has_read_) + if (reads_.empty()) return MockRead(true, ERR_UNEXPECTED); - MockRead result = read_; + MockRead result = reads_.front(); if (short_read_limit_ == 0 || result.data_len <= short_read_limit_) { - has_read_ = false; + reads_.pop_front(); } else { result.data_len = short_read_limit_; - read_.data += result.data_len; - read_.data_len -= result.data_len; + reads_.front().data += result.data_len; + reads_.front().data_len -= result.data_len; } return result; } void DynamicMockSocket::Reset() { - has_read_ = false; + reads_.clear(); } void DynamicMockSocket::SimulateRead(const char* data) { - EXPECT_FALSE(has_read_) << "Unconsumed read: " << read_.data; - read_ = MockRead(data); - has_read_ = true; + if (!allow_unconsumed_reads_) { + EXPECT_TRUE(reads_.empty()) << "Unconsumed read: " << reads_.front().data; + } + reads_.push_back(MockRead(data)); } void MockClientSocketFactory::AddMockSocket(MockSocket* socket) { diff --git a/net/socket/socket_test_util.h b/net/socket/socket_test_util.h index fc288ad..93f9625 100644 --- a/net/socket/socket_test_util.h +++ b/net/socket/socket_test_util.h @@ -5,6 +5,7 @@ #ifndef NET_SOCKET_SOCKET_TEST_UTIL_H_ #define NET_SOCKET_SOCKET_TEST_UTIL_H_ +#include <deque> #include <string> #include <vector> @@ -124,18 +125,23 @@ class DynamicMockSocket : public MockSocket { int short_read_limit() const { return short_read_limit_; } void set_short_read_limit(int limit) { short_read_limit_ = limit; } + void allow_unconsumed_reads(bool allow) { allow_unconsumed_reads_ = allow; } + protected: // The next time there is a read from this socket, it will return |data|. // Before calling SimulateRead next time, the previous data must be consumed. void SimulateRead(const char* data); private: - MockRead read_; - bool has_read_; + std::deque<MockRead> reads_; // Max number of bytes we will read at a time. 0 means no limit. int short_read_limit_; + // If true, we'll not require the client to consume all data before we + // mock the next read. + bool allow_unconsumed_reads_; + DISALLOW_COPY_AND_ASSIGN(DynamicMockSocket); }; |