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

Unified Diff: content/renderer/p2p/p2p_transport_impl_unittest.cc

Issue 10854131: Remove obsolete webkit_glue::P2PTransport interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 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
Index: content/renderer/p2p/p2p_transport_impl_unittest.cc
diff --git a/content/renderer/p2p/p2p_transport_impl_unittest.cc b/content/renderer/p2p/p2p_transport_impl_unittest.cc
deleted file mode 100644
index 0022ecea7668f514fe6f30927a339035cb8a2107..0000000000000000000000000000000000000000
--- a/content/renderer/p2p/p2p_transport_impl_unittest.cc
+++ /dev/null
@@ -1,530 +0,0 @@
-// Copyright (c) 2012 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 "content/renderer/p2p/p2p_transport_impl.h"
-
-#include "base/bind.h"
-#include "base/compiler_specific.h"
-#include "base/memory/ref_counted.h"
-#include "base/message_loop.h"
-#include "base/test/test_timeouts.h"
-#include "jingle/glue/fake_network_manager.h"
-#include "jingle/glue/fake_socket_factory.h"
-#include "jingle/glue/thread_wrapper.h"
-#include "net/base/completion_callback.h"
-#include "net/base/io_buffer.h"
-#include "net/base/net_errors.h"
-#include "net/base/net_util.h"
-#include "net/socket/socket.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using testing::_;
-using testing::AtMost;
-using testing::Exactly;
-using testing::InvokeWithoutArgs;
-
-using webkit_glue::P2PTransport;
-
-namespace {
-const char kTestAddress1[] = "192.168.15.12";
-const char kTestAddress2[] = "192.168.15.33";
-
-const char kTransportName1[] = "tr1";
-const char kTransportName2[] = "tr2";
-
-// Send 10 packets 10 bytes each. Packets are sent with 10ms delay
-// between packets (about 100 ms for 10 messages).
-const int kMessageSize = 10;
-const int kMessages = 10;
-const int kUdpWriteDelayMs = 10;
-const int kTcpDataSize = 10 * 1024;
-const int kTcpWriteDelayMs = 1;
-
-class UdpChannelTester : public base::RefCountedThreadSafe<UdpChannelTester> {
- public:
- UdpChannelTester(MessageLoop* message_loop,
- net::Socket* write_socket,
- net::Socket* read_socket)
- : message_loop_(message_loop),
- write_socket_(write_socket),
- read_socket_(read_socket),
- done_(false),
- write_errors_(0),
- read_errors_(0),
- packets_sent_(0),
- packets_received_(0),
- broken_packets_(0) {
- }
-
- void Start() {
- message_loop_->PostTask(
- FROM_HERE, base::Bind(&UdpChannelTester::DoStart, this));
- }
-
- void CheckResults() {
- EXPECT_EQ(0, write_errors_);
- EXPECT_EQ(0, read_errors_);
-
- EXPECT_EQ(0, broken_packets_);
-
- // Verify that we've received at least one packet.
- EXPECT_GT(packets_received_, 0);
- LOG(INFO) << "Received " << packets_received_ << " packets out of "
- << kMessages;
- }
-
- protected:
- friend class base::RefCountedThreadSafe<UdpChannelTester>;
- virtual ~UdpChannelTester() {}
-
- void Done() {
- done_ = true;
- message_loop_->PostTask(FROM_HERE, MessageLoop::QuitClosure());
- }
-
- void DoStart() {
- DoRead();
- DoWrite();
- }
-
- void DoWrite() {
- if (packets_sent_ >= kMessages) {
- Done();
- return;
- }
-
- scoped_refptr<net::IOBuffer> packet(new net::IOBuffer(kMessageSize));
- memset(packet->data(), 123, kMessageSize);
- sent_packets_[packets_sent_] = packet;
- // Put index of this packet in the beginning of the packet body.
- memcpy(packet->data(), &packets_sent_, sizeof(packets_sent_));
-
- int result = write_socket_->Write(packet, kMessageSize,
- base::Bind(&UdpChannelTester::OnWritten,
- base::Unretained(this)));
- HandleWriteResult(result);
- }
-
- void OnWritten(int result) {
- HandleWriteResult(result);
- }
-
- void HandleWriteResult(int result) {
- if (result <= 0 && result != net::ERR_IO_PENDING) {
- LOG(ERROR) << "Received error " << result << " when trying to write";
- write_errors_++;
- Done();
- } else if (result > 0) {
- EXPECT_EQ(kMessageSize, result);
- packets_sent_++;
- message_loop_->PostDelayedTask(
- FROM_HERE, base::Bind(&UdpChannelTester::DoWrite, this),
- base::TimeDelta::FromMilliseconds(kUdpWriteDelayMs));
- }
- }
-
- void DoRead() {
- int result = 1;
- while (result > 0) {
- int kReadSize = kMessageSize * 2;
- read_buffer_ = new net::IOBuffer(kReadSize);
-
- result = read_socket_->Read(read_buffer_, kReadSize,
- base::Bind(&UdpChannelTester::OnRead,
- base::Unretained(this)));
- HandleReadResult(result);
- };
- }
-
- void OnRead(int result) {
- HandleReadResult(result);
- DoRead();
- }
-
- void HandleReadResult(int result) {
- if (result <= 0 && result != net::ERR_IO_PENDING) {
- // Error will be received after the socket is closed.
- if (!done_) {
- LOG(ERROR) << "Received error " << result << " when trying to read";
- read_errors_++;
- Done();
- }
- } else if (result > 0) {
- packets_received_++;
- if (kMessageSize != result) {
- // Invalid packet size;
- broken_packets_++;
- } else {
- // Validate packet body.
- int packet_id;
- memcpy(&packet_id, read_buffer_->data(), sizeof(packet_id));
- if (packet_id < 0 || packet_id >= kMessages) {
- broken_packets_++;
- } else {
- if (memcmp(read_buffer_->data(), sent_packets_[packet_id]->data(),
- kMessageSize) != 0)
- broken_packets_++;
- }
- }
- }
- }
-
- private:
- MessageLoop* message_loop_;
- net::Socket* write_socket_;
- net::Socket* read_socket_;
- bool done_;
-
- scoped_refptr<net::IOBuffer> sent_packets_[kMessages];
- scoped_refptr<net::IOBuffer> read_buffer_;
-
- int write_errors_;
- int read_errors_;
- int packets_sent_;
- int packets_received_;
- int broken_packets_;
-};
-
-class TcpChannelTester : public base::RefCountedThreadSafe<TcpChannelTester> {
- public:
- TcpChannelTester(MessageLoop* message_loop,
- net::Socket* write_socket,
- net::Socket* read_socket)
- : message_loop_(message_loop),
- write_socket_(write_socket),
- read_socket_(read_socket),
- done_(false),
- write_errors_(0),
- read_errors_(0) {
- }
-
- void Init() {
- // Initialize |send_buffer_|.
- send_buffer_ = new net::DrainableIOBuffer(new net::IOBuffer(kTcpDataSize),
- kTcpDataSize);
- for (int i = 0; i < kTcpDataSize; ++i) {
- send_buffer_->data()[i] = rand() % 256;
- }
- }
-
- void StartRead() {
- message_loop_->PostTask(
- FROM_HERE, base::Bind(&TcpChannelTester::DoRead, this));
- }
-
- void StartWrite() {
- message_loop_->PostTask(
- FROM_HERE, base::Bind(&TcpChannelTester::DoWrite, this));
- }
-
- void CheckResults() {
- EXPECT_EQ(0, write_errors_);
- EXPECT_EQ(0, read_errors_);
-
- EXPECT_EQ(0, send_buffer_->BytesRemaining());
-
- send_buffer_->SetOffset(0);
- EXPECT_EQ(kTcpDataSize, static_cast<int>(received_data_.size()));
- EXPECT_EQ(0, memcmp(send_buffer_->data(),
- &received_data_[0], received_data_.size()));
- }
-
- protected:
- friend class base::RefCountedThreadSafe<TcpChannelTester>;
- virtual ~TcpChannelTester() {}
-
- void Done() {
- done_ = true;
- message_loop_->PostTask(FROM_HERE, MessageLoop::QuitClosure());
- }
-
- void DoWrite() {
- if (send_buffer_->BytesRemaining() == 0) {
- return;
- }
-
- int result = write_socket_->Write(
- send_buffer_, send_buffer_->BytesRemaining(),
- base::Bind(&TcpChannelTester::OnWritten, base::Unretained(this)));
- HandleWriteResult(result);
- }
-
- void OnWritten(int result) {
- HandleWriteResult(result);
- }
-
- void HandleWriteResult(int result) {
- if (result <= 0 && result != net::ERR_IO_PENDING) {
- LOG(ERROR) << "Received error " << result << " when trying to write";
- write_errors_++;
- Done();
- } else if (result > 0) {
- send_buffer_->DidConsume(result);
- message_loop_->PostDelayedTask(
- FROM_HERE, base::Bind(&TcpChannelTester::DoWrite, this),
- base::TimeDelta::FromMilliseconds(kTcpWriteDelayMs));
- }
- }
-
- void DoRead() {
- int result = 1;
- while (result > 0) {
- int kReadSize = kMessageSize * 2;
- read_buffer_ = new net::IOBuffer(kReadSize);
-
- result = read_socket_->Read(
- read_buffer_, kReadSize,
- base::Bind(&TcpChannelTester::OnRead, base::Unretained(this)));
- HandleReadResult(result);
- };
- }
-
- void OnRead(int result) {
- HandleReadResult(result);
- DoRead();
- }
-
- void HandleReadResult(int result) {
- if (result <= 0 && result != net::ERR_IO_PENDING) {
- // Error will be received after the socket is closed.
- if (!done_) {
- LOG(ERROR) << "Received error " << result << " when trying to read";
- read_errors_++;
- Done();
- }
- } else if (result > 0) {
- received_data_.insert(received_data_.end(), read_buffer_->data(),
- read_buffer_->data() + result);
- if (static_cast<int>(received_data_.size()) == kTcpDataSize)
- Done();
- }
- }
-
- private:
- MessageLoop* message_loop_;
- net::Socket* write_socket_;
- net::Socket* read_socket_;
- bool done_;
-
- scoped_refptr<net::DrainableIOBuffer> send_buffer_;
- scoped_refptr<net::IOBuffer> read_buffer_;
-
- std::vector<char> sent_data_;
- std::vector<char> received_data_;
-
- int write_errors_;
- int read_errors_;
-};
-
-} // namespace
-
-namespace content {
-
-class MockP2PEventHandler : public P2PTransport::EventHandler {
- public:
- MOCK_METHOD1(OnCandidateReady, void(const std::string& address));
- MOCK_METHOD1(OnStateChange, void(P2PTransport::State state));
- MOCK_METHOD1(OnError, void(int error));
-};
-
-class P2PTransportImplTest : public testing::Test {
- public:
- void DestroyTransport() {
- transport1_.reset();
- transport2_.reset();
- }
-
- protected:
- virtual void SetUp() OVERRIDE {
- socket_manager_ = new jingle_glue::FakeSocketManager();
-
- net::IPAddressNumber ip;
- ASSERT_TRUE(net::ParseIPLiteralToNumber(kTestAddress1, &ip));
- transport1_.reset(new P2PTransportImpl(
- new jingle_glue::FakeNetworkManager(ip),
- new jingle_glue::FakeSocketFactory(socket_manager_, ip)));
-
- ASSERT_TRUE(net::ParseIPLiteralToNumber(kTestAddress2, &ip));
- transport2_.reset(new P2PTransportImpl(
- new jingle_glue::FakeNetworkManager(ip),
- new jingle_glue::FakeSocketFactory(socket_manager_, ip)));
- }
-
- virtual void TearDown() OVERRIDE {
- DestroyTransport();
- message_loop_.RunAllPending();
- }
-
- void Init(P2PTransport::Protocol protocol) {
- P2PTransport::Config config;
- ASSERT_TRUE(transport1_->Init(
- NULL, kTransportName1, protocol, config, &event_handler1_));
- ASSERT_TRUE(transport2_->Init(
- NULL, kTransportName2, protocol, config, &event_handler2_));
- }
-
- MessageLoop message_loop_;
-
- scoped_refptr<jingle_glue::FakeSocketManager> socket_manager_;
- scoped_ptr<P2PTransportImpl> transport1_;
- MockP2PEventHandler event_handler1_;
- scoped_ptr<P2PTransportImpl> transport2_;
- MockP2PEventHandler event_handler2_;
-};
-
-TEST_F(P2PTransportImplTest, Create) {
- Init(P2PTransport::PROTOCOL_UDP);
-
- EXPECT_CALL(event_handler1_, OnCandidateReady(_));
- EXPECT_CALL(event_handler2_, OnCandidateReady(_));
-
- message_loop_.RunAllPending();
-}
-
-ACTION_P(AddRemoteCandidate, transport) {
- EXPECT_TRUE(transport->AddRemoteCandidate(arg0));
-}
-
-TEST_F(P2PTransportImplTest, ConnectUdp) {
- Init(P2PTransport::PROTOCOL_UDP);
-
- EXPECT_CALL(event_handler1_, OnCandidateReady(_)).WillRepeatedly(
- AddRemoteCandidate(transport2_.get()));
- EXPECT_CALL(event_handler2_, OnCandidateReady(_)).WillRepeatedly(
- AddRemoteCandidate(transport1_.get()));
-
- message_loop_.RunAllPending();
-}
-
-TEST_F(P2PTransportImplTest, ConnectTcp) {
- Init(P2PTransport::PROTOCOL_TCP);
-
- EXPECT_CALL(event_handler1_, OnCandidateReady(_)).WillRepeatedly(
- AddRemoteCandidate(transport2_.get()));
- EXPECT_CALL(event_handler2_, OnCandidateReady(_)).WillRepeatedly(
- AddRemoteCandidate(transport1_.get()));
-
- message_loop_.RunAllPending();
-}
-
-TEST_F(P2PTransportImplTest, SendDataUdp) {
- Init(P2PTransport::PROTOCOL_UDP);
-
- EXPECT_CALL(event_handler1_, OnCandidateReady(_)).WillRepeatedly(
- AddRemoteCandidate(transport2_.get()));
- EXPECT_CALL(event_handler2_, OnCandidateReady(_)).WillRepeatedly(
- AddRemoteCandidate(transport1_.get()));
-
- // Transport may first become ether readable or writable, but
- // eventually it must be readable and writable.
- EXPECT_CALL(event_handler1_, OnStateChange(P2PTransport::STATE_READABLE))
- .Times(AtMost(1));
- EXPECT_CALL(event_handler1_, OnStateChange(P2PTransport::STATE_WRITABLE))
- .Times(AtMost(1));
- EXPECT_CALL(event_handler1_, OnStateChange(
- static_cast<P2PTransport::State>(P2PTransport::STATE_READABLE |
- P2PTransport::STATE_WRITABLE)))
- .Times(Exactly(1));
-
- EXPECT_CALL(event_handler2_, OnStateChange(P2PTransport::STATE_READABLE))
- .Times(AtMost(1));
- EXPECT_CALL(event_handler2_, OnStateChange(P2PTransport::STATE_WRITABLE))
- .Times(AtMost(1));
- EXPECT_CALL(event_handler2_, OnStateChange(
- static_cast<P2PTransport::State>(P2PTransport::STATE_READABLE |
- P2PTransport::STATE_WRITABLE)))
- .Times(Exactly(1));
-
- scoped_refptr<UdpChannelTester> channel_tester = new UdpChannelTester(
- &message_loop_, transport1_->GetChannel(), transport2_->GetChannel());
-
- message_loop_.PostDelayedTask(FROM_HERE, MessageLoop::QuitClosure(),
- TestTimeouts::action_max_timeout());
-
- channel_tester->Start();
- message_loop_.Run();
- channel_tester->CheckResults();
-}
-
-TEST_F(P2PTransportImplTest, SendDataTcp) {
- Init(P2PTransport::PROTOCOL_TCP);
-
- EXPECT_CALL(event_handler1_, OnCandidateReady(_)).WillRepeatedly(
- AddRemoteCandidate(transport2_.get()));
- EXPECT_CALL(event_handler2_, OnCandidateReady(_)).WillRepeatedly(
- AddRemoteCandidate(transport1_.get()));
-
- scoped_refptr<TcpChannelTester> channel_tester = new TcpChannelTester(
- &message_loop_, transport1_->GetChannel(), transport2_->GetChannel());
-
- // Transport may first become ether readable or writable, but
- // eventually it must be readable and writable.
- EXPECT_CALL(event_handler1_, OnStateChange(P2PTransport::STATE_READABLE))
- .Times(AtMost(1));
- EXPECT_CALL(event_handler1_, OnStateChange(P2PTransport::STATE_WRITABLE))
- .Times(AtMost(1));
- EXPECT_CALL(event_handler1_, OnStateChange(
- static_cast<P2PTransport::State>(P2PTransport::STATE_READABLE |
- P2PTransport::STATE_WRITABLE)))
- .Times(Exactly(1))
- .WillOnce(InvokeWithoutArgs(channel_tester.get(),
- &TcpChannelTester::StartWrite))
- .RetiresOnSaturation();
-
- EXPECT_CALL(event_handler2_, OnStateChange(P2PTransport::STATE_READABLE))
- .Times(AtMost(1));
- EXPECT_CALL(event_handler2_, OnStateChange(P2PTransport::STATE_WRITABLE))
- .Times(AtMost(1));
- EXPECT_CALL(event_handler2_, OnStateChange(
- static_cast<P2PTransport::State>(P2PTransport::STATE_READABLE |
- P2PTransport::STATE_WRITABLE)))
- .Times(Exactly(1))
- .WillOnce(InvokeWithoutArgs(channel_tester.get(),
- &TcpChannelTester::StartRead))
- .RetiresOnSaturation();
-
- message_loop_.PostDelayedTask(FROM_HERE, MessageLoop::QuitClosure(),
- TestTimeouts::action_max_timeout());
-
- channel_tester->Init();
- message_loop_.Run();
- channel_tester->CheckResults();
-}
-
-TEST_F(P2PTransportImplTest, DeleteFromCallback) {
- Init(P2PTransport::PROTOCOL_TCP);
-
- EXPECT_CALL(event_handler1_, OnCandidateReady(_)).WillRepeatedly(
- AddRemoteCandidate(transport2_.get()));
- EXPECT_CALL(event_handler2_, OnCandidateReady(_)).WillRepeatedly(
- AddRemoteCandidate(transport1_.get()));
-
- // Transport may first become ether readable or writable, but
- // eventually it must be readable and writable.
- EXPECT_CALL(event_handler1_, OnStateChange(P2PTransport::STATE_READABLE))
- .Times(AtMost(1));
- EXPECT_CALL(event_handler1_, OnStateChange(P2PTransport::STATE_WRITABLE))
- .Times(AtMost(1));
- EXPECT_CALL(event_handler1_, OnStateChange(
- static_cast<P2PTransport::State>(P2PTransport::STATE_READABLE |
- P2PTransport::STATE_WRITABLE)))
- .Times(AtMost(1));
-
- EXPECT_CALL(event_handler2_, OnStateChange(P2PTransport::STATE_READABLE))
- .Times(AtMost(1));
- EXPECT_CALL(event_handler2_, OnStateChange(P2PTransport::STATE_WRITABLE))
- .Times(AtMost(1));
- EXPECT_CALL(event_handler2_, OnStateChange(
- static_cast<P2PTransport::State>(P2PTransport::STATE_READABLE |
- P2PTransport::STATE_WRITABLE)))
- .Times(Exactly(1))
- .WillOnce(DoAll(
- InvokeWithoutArgs(this, &P2PTransportImplTest::DestroyTransport),
- InvokeWithoutArgs(&message_loop_, &MessageLoop::Quit)));
-
- message_loop_.Run();
-}
-
-} // namespace content

Powered by Google App Engine
This is Rietveld 408576698