| Index: net/socket/socket_test_util.cc
|
| ===================================================================
|
| --- net/socket/socket_test_util.cc (revision 19144)
|
| +++ net/socket/socket_test_util.cc (working copy)
|
| @@ -66,7 +66,7 @@
|
| private:
|
| net::MockSocket* data_;
|
| int read_offset_;
|
| - net::MockRead* read_data_;
|
| + net::MockRead read_data_;
|
| bool need_read_data_;
|
| };
|
|
|
| @@ -151,7 +151,7 @@
|
| net::MockSocket* socket)
|
| : data_(socket),
|
| read_offset_(0),
|
| - read_data_(NULL),
|
| + read_data_(true, net::ERR_UNEXPECTED),
|
| need_read_data_(true) {
|
| DCHECK(data_);
|
| data_->Reset();
|
| @@ -172,17 +172,21 @@
|
| int MockTCPClientSocket::Read(net::IOBuffer* buf, int buf_len,
|
| net::CompletionCallback* callback) {
|
| DCHECK(!callback_);
|
| +
|
| + if (!IsConnected())
|
| + return net::ERR_UNEXPECTED;
|
| +
|
| if (need_read_data_) {
|
| read_data_ = data_->GetNextRead();
|
| need_read_data_ = false;
|
| }
|
| - int result = read_data_->result;
|
| - if (read_data_->data) {
|
| - if (read_data_->data_len - read_offset_ > 0) {
|
| - result = std::min(buf_len, read_data_->data_len - read_offset_);
|
| - memcpy(buf->data(), read_data_->data + read_offset_, result);
|
| + int result = read_data_.result;
|
| + if (read_data_.data) {
|
| + if (read_data_.data_len - read_offset_ > 0) {
|
| + result = std::min(buf_len, read_data_.data_len - read_offset_);
|
| + memcpy(buf->data(), read_data_.data + read_offset_, result);
|
| read_offset_ += result;
|
| - if (read_offset_ == read_data_->data_len) {
|
| + if (read_offset_ == read_data_.data_len) {
|
| need_read_data_ = true;
|
| read_offset_ = 0;
|
| }
|
| @@ -190,7 +194,7 @@
|
| result = 0; // EOF
|
| }
|
| }
|
| - if (read_data_->async) {
|
| + if (read_data_.async) {
|
| RunCallbackAsync(callback, result);
|
| return net::ERR_IO_PENDING;
|
| }
|
| @@ -203,6 +207,9 @@
|
| DCHECK(buf_len > 0);
|
| DCHECK(!callback_);
|
|
|
| + if (!IsConnected())
|
| + return net::ERR_UNEXPECTED;
|
| +
|
| std::string data(buf->data(), buf_len);
|
| net::MockWriteResult write_result = data_->OnWrite(data);
|
|
|
| @@ -298,8 +305,8 @@
|
|
|
| namespace net {
|
|
|
| -MockRead* StaticMockSocket::GetNextRead() {
|
| - return &reads_[read_index_++];
|
| +MockRead StaticMockSocket::GetNextRead() {
|
| + return reads_[read_index_++];
|
| }
|
|
|
| MockWriteResult StaticMockSocket::OnWrite(const std::string& data) {
|
| @@ -330,14 +337,22 @@
|
|
|
| DynamicMockSocket::DynamicMockSocket()
|
| : read_(false, ERR_UNEXPECTED),
|
| - has_read_(false) {
|
| + has_read_(false),
|
| + short_read_limit_(0) {
|
| }
|
|
|
| -MockRead* DynamicMockSocket::GetNextRead() {
|
| +MockRead DynamicMockSocket::GetNextRead() {
|
| if (!has_read_)
|
| - return unexpected_read();
|
| - has_read_ = false;
|
| - return &read_;
|
| + return MockRead(true, ERR_UNEXPECTED);
|
| + MockRead result = read_;
|
| + if (short_read_limit_ == 0 || result.data_len <= short_read_limit_) {
|
| + has_read_ = false;
|
| + } else {
|
| + result.data_len = short_read_limit_;
|
| + read_.data += result.data_len;
|
| + read_.data_len -= result.data_len;
|
| + }
|
| + return result;
|
| }
|
|
|
| void DynamicMockSocket::Reset() {
|
|
|