Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(465)

Unified Diff: remoting/protocol/fake_stream_socket.cc

Issue 580243003: Cleanup Fake* classes in remoting/protocol (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@sctp
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/protocol/fake_stream_socket.h ('k') | remoting/protocol/message_reader_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/protocol/fake_stream_socket.cc
diff --git a/remoting/protocol/fake_stream_socket.cc b/remoting/protocol/fake_stream_socket.cc
new file mode 100644
index 0000000000000000000000000000000000000000..58f11a09b719ff84eda4876e5c122772b32e50e4
--- /dev/null
+++ b/remoting/protocol/fake_stream_socket.cc
@@ -0,0 +1,277 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "remoting/protocol/fake_stream_socket.h"
+
+#include "base/bind.h"
+#include "base/single_thread_task_runner.h"
+#include "base/thread_task_runner_handle.h"
+#include "net/base/address_list.h"
+#include "net/base/io_buffer.h"
+#include "net/base/net_errors.h"
+#include "net/base/net_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace remoting {
+namespace protocol {
+
+FakeStreamSocket::FakeStreamSocket()
+ : async_write_(false),
+ write_pending_(false),
+ write_limit_(0),
+ next_write_error_(net::OK),
+ next_read_error_(net::OK),
+ read_buffer_size_(0),
+ input_pos_(0),
+ task_runner_(base::ThreadTaskRunnerHandle::Get()),
+ weak_factory_(this) {
+}
+
+FakeStreamSocket::~FakeStreamSocket() {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+}
+
+void FakeStreamSocket::AppendInputData(const std::string& data) {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+ input_data_.insert(input_data_.end(), data.begin(), data.end());
+ // Complete pending read if any.
+ if (!read_callback_.is_null()) {
+ int result = std::min(read_buffer_size_,
+ static_cast<int>(input_data_.size() - input_pos_));
+ EXPECT_GT(result, 0);
+ memcpy(read_buffer_->data(),
+ &(*input_data_.begin()) + input_pos_, result);
+ input_pos_ += result;
+ read_buffer_ = NULL;
+
+ net::CompletionCallback callback = read_callback_;
+ read_callback_.Reset();
+ callback.Run(result);
+ }
+}
+
+void FakeStreamSocket::PairWith(FakeStreamSocket* peer_socket) {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+ peer_socket_ = peer_socket->GetWeakPtr();
+ peer_socket->peer_socket_ = GetWeakPtr();
+}
+
+base::WeakPtr<FakeStreamSocket> FakeStreamSocket::GetWeakPtr() {
+ return weak_factory_.GetWeakPtr();
+}
+
+int FakeStreamSocket::Read(net::IOBuffer* buf, int buf_len,
+ const net::CompletionCallback& callback) {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+
+ if (next_read_error_ != net::OK) {
+ int r = next_read_error_;
+ next_read_error_ = net::OK;
+ return r;
+ }
+
+ if (input_pos_ < static_cast<int>(input_data_.size())) {
+ int result = std::min(buf_len,
+ static_cast<int>(input_data_.size()) - input_pos_);
+ memcpy(buf->data(), &(*input_data_.begin()) + input_pos_, result);
+ input_pos_ += result;
+ return result;
+ } else {
+ read_buffer_ = buf;
+ read_buffer_size_ = buf_len;
+ read_callback_ = callback;
+ return net::ERR_IO_PENDING;
+ }
+}
+
+int FakeStreamSocket::Write(net::IOBuffer* buf, int buf_len,
+ const net::CompletionCallback& callback) {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+ EXPECT_FALSE(write_pending_);
+
+ if (write_limit_ > 0)
+ buf_len = std::min(write_limit_, buf_len);
+
+ if (async_write_) {
+ task_runner_->PostTask(FROM_HERE, base::Bind(
+ &FakeStreamSocket::DoAsyncWrite, weak_factory_.GetWeakPtr(),
+ scoped_refptr<net::IOBuffer>(buf), buf_len, callback));
+ write_pending_ = true;
+ return net::ERR_IO_PENDING;
+ } else {
+ if (next_write_error_ != net::OK) {
+ int r = next_write_error_;
+ next_write_error_ = net::OK;
+ return r;
+ }
+
+ DoWrite(buf, buf_len);
+ return buf_len;
+ }
+}
+
+void FakeStreamSocket::DoAsyncWrite(scoped_refptr<net::IOBuffer> buf,
+ int buf_len,
+ const net::CompletionCallback& callback) {
+ write_pending_ = false;
+
+ if (next_write_error_ != net::OK) {
+ int r = next_write_error_;
+ next_write_error_ = net::OK;
+ callback.Run(r);
+ return;
+ }
+
+ DoWrite(buf.get(), buf_len);
+ callback.Run(buf_len);
+}
+
+void FakeStreamSocket::DoWrite(net::IOBuffer* buf, int buf_len) {
+ written_data_.insert(written_data_.end(),
+ buf->data(), buf->data() + buf_len);
+
+ if (peer_socket_.get()) {
+ task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&FakeStreamSocket::AppendInputData,
+ peer_socket_,
+ std::string(buf->data(), buf->data() + buf_len)));
+ }
+}
+
+int FakeStreamSocket::SetReceiveBufferSize(int32 size) {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+ NOTIMPLEMENTED();
+ return net::ERR_NOT_IMPLEMENTED;
+}
+
+int FakeStreamSocket::SetSendBufferSize(int32 size) {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+ NOTIMPLEMENTED();
+ return net::ERR_NOT_IMPLEMENTED;
+}
+
+int FakeStreamSocket::Connect(const net::CompletionCallback& callback) {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+ return net::OK;
+}
+
+void FakeStreamSocket::Disconnect() {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+ peer_socket_.reset();
+}
+
+bool FakeStreamSocket::IsConnected() const {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+ return true;
+}
+
+bool FakeStreamSocket::IsConnectedAndIdle() const {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+ NOTIMPLEMENTED();
+ return false;
+}
+
+int FakeStreamSocket::GetPeerAddress(net::IPEndPoint* address) const {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+ net::IPAddressNumber ip(net::kIPv4AddressSize);
+ *address = net::IPEndPoint(ip, 0);
+ return net::OK;
+}
+
+int FakeStreamSocket::GetLocalAddress(net::IPEndPoint* address) const {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+ NOTIMPLEMENTED();
+ return net::ERR_NOT_IMPLEMENTED;
+}
+
+const net::BoundNetLog& FakeStreamSocket::NetLog() const {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+ return net_log_;
+}
+
+void FakeStreamSocket::SetSubresourceSpeculation() {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+ NOTIMPLEMENTED();
+}
+
+void FakeStreamSocket::SetOmniboxSpeculation() {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+ NOTIMPLEMENTED();
+}
+
+bool FakeStreamSocket::WasEverUsed() const {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+ NOTIMPLEMENTED();
+ return true;
+}
+
+bool FakeStreamSocket::UsingTCPFastOpen() const {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+ NOTIMPLEMENTED();
+ return true;
+}
+
+bool FakeStreamSocket::WasNpnNegotiated() const {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+ return false;
+}
+
+net::NextProto FakeStreamSocket::GetNegotiatedProtocol() const {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+ NOTIMPLEMENTED();
+ return net::kProtoUnknown;
+}
+
+bool FakeStreamSocket::GetSSLInfo(net::SSLInfo* ssl_info) {
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread());
+ return false;
+}
+
+FakeStreamChannelFactory::FakeStreamChannelFactory()
+ : task_runner_(base::ThreadTaskRunnerHandle::Get()),
+ asynchronous_create_(false),
+ fail_create_(false),
+ weak_factory_(this) {
+}
+
+FakeStreamChannelFactory::~FakeStreamChannelFactory() {}
+
+FakeStreamSocket* FakeStreamChannelFactory::GetFakeChannel(
+ const std::string& name) {
+ return channels_[name].get();
+}
+
+void FakeStreamChannelFactory::CreateChannel(
+ const std::string& name,
+ const ChannelCreatedCallback& callback) {
+ scoped_ptr<FakeStreamSocket> channel(new FakeStreamSocket());
+ channels_[name] = channel->GetWeakPtr();
+
+ if (fail_create_)
+ channel.reset();
+
+ if (asynchronous_create_) {
+ task_runner_->PostTask(FROM_HERE, base::Bind(
+ &FakeStreamChannelFactory::NotifyChannelCreated,
+ weak_factory_.GetWeakPtr(), base::Passed(&channel), name, callback));
+ } else {
+ NotifyChannelCreated(channel.Pass(), name, callback);
+ }
+}
+
+void FakeStreamChannelFactory::NotifyChannelCreated(
+ scoped_ptr<FakeStreamSocket> owned_channel,
+ const std::string& name,
+ const ChannelCreatedCallback& callback) {
+ if (channels_.find(name) != channels_.end())
+ callback.Run(owned_channel.PassAs<net::StreamSocket>());
+}
+
+void FakeStreamChannelFactory::CancelChannelCreation(const std::string& name) {
+ channels_.erase(name);
+}
+
+} // namespace protocol
+} // namespace remoting
« no previous file with comments | « remoting/protocol/fake_stream_socket.h ('k') | remoting/protocol/message_reader_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698