| Index: content/browser/renderer_host/p2p/socket_host_tcp_unittest.cc
|
| ===================================================================
|
| --- content/browser/renderer_host/p2p/socket_host_tcp_unittest.cc (revision 205587)
|
| +++ content/browser/renderer_host/p2p/socket_host_tcp_unittest.cc (working copy)
|
| @@ -8,6 +8,7 @@
|
|
|
| #include "base/sys_byteorder.h"
|
| #include "content/browser/renderer_host/p2p/socket_host_test_utils.h"
|
| +#include "content/browser/renderer_host/p2p/ssltcp_helper.h"
|
| #include "net/socket/stream_socket.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| @@ -21,12 +22,12 @@
|
|
|
| class P2PSocketHostTcpTest : public testing::Test {
|
| protected:
|
| - virtual void SetUp() OVERRIDE {
|
| + void SetUp(bool ssl) {
|
| EXPECT_CALL(sender_, Send(
|
| MatchMessage(static_cast<uint32>(P2PMsg_OnSocketCreated::ID))))
|
| .WillOnce(DoAll(DeleteArg<0>(), Return(true)));
|
|
|
| - socket_host_.reset(new P2PSocketHostTcp(&sender_, 0));
|
| + socket_host_.reset(new P2PSocketHostTcp(&sender_, 0, ssl));
|
| socket_ = new FakeSocket(&sent_data_);
|
| socket_->SetLocalAddress(ParseAddress(kTestLocalIpAddress, kTestPort1));
|
| socket_host_->socket_.reset(socket_);
|
| @@ -61,12 +62,12 @@
|
|
|
| class P2PSocketHostStunTcpTest : public testing::Test {
|
| protected:
|
| - virtual void SetUp() OVERRIDE {
|
| + void SetUp(bool ssl) {
|
| EXPECT_CALL(sender_, Send(
|
| MatchMessage(static_cast<uint32>(P2PMsg_OnSocketCreated::ID))))
|
| .WillOnce(DoAll(DeleteArg<0>(), Return(true)));
|
|
|
| - socket_host_.reset(new P2PSocketHostStunTcp(&sender_, 0));
|
| + socket_host_.reset(new P2PSocketHostStunTcp(&sender_, 0, ssl));
|
| socket_ = new FakeSocket(&sent_data_);
|
| socket_->SetLocalAddress(ParseAddress(kTestLocalIpAddress, kTestPort1));
|
| socket_host_->socket_.reset(socket_);
|
| @@ -102,6 +103,7 @@
|
| // Verify that we can send STUN message and that they are formatted
|
| // properly.
|
| TEST_F(P2PSocketHostTcpTest, SendStunNoAuth) {
|
| + SetUp(false);
|
| EXPECT_CALL(sender_, Send(
|
| MatchMessage(static_cast<uint32>(P2PMsg_OnSendComplete::ID))))
|
| .Times(3)
|
| @@ -130,9 +132,44 @@
|
| EXPECT_EQ(expected_data, sent_data_);
|
| }
|
|
|
| +TEST_F(P2PSocketHostTcpTest, SendStunNoAuthSsl) {
|
| + SetUp(true);
|
| + EXPECT_CALL(sender_, Send(
|
| + MatchMessage(static_cast<uint32>(P2PMsg_OnSendComplete::ID))))
|
| + .Times(4)
|
| + .WillRepeatedly(DoAll(DeleteArg<0>(), Return(true)));
|
| +
|
| + std::vector<char> packet1;
|
| + CreateStunRequest(&packet1);
|
| + socket_host_->Send(dest_, packet1);
|
| +
|
| + std::vector<char> packet2;
|
| + CreateStunResponse(&packet2);
|
| + socket_host_->Send(dest_, packet2);
|
| +
|
| + std::vector<char> packet3;
|
| + CreateStunError(&packet3);
|
| + socket_host_->Send(dest_, packet3);
|
| +
|
| + std::string expected_data;
|
| + SsltcpHelper ssl_helper;
|
| + expected_data.append(IntToSize(ssl_helper.client_hello_message().size()));
|
| + expected_data.append(ssl_helper.client_hello_message().begin(),
|
| + ssl_helper.client_hello_message().end());
|
| + expected_data.append(IntToSize(packet1.size()));
|
| + expected_data.append(packet1.begin(), packet1.end());
|
| + expected_data.append(IntToSize(packet2.size()));
|
| + expected_data.append(packet2.begin(), packet2.end());
|
| + expected_data.append(IntToSize(packet3.size()));
|
| + expected_data.append(packet3.begin(), packet3.end());
|
| +
|
| + EXPECT_EQ(expected_data, sent_data_);
|
| +}
|
| +
|
| // Verify that we can receive STUN messages from the socket, and that
|
| // the messages are parsed properly.
|
| TEST_F(P2PSocketHostTcpTest, ReceiveStun) {
|
| + SetUp(false);
|
| EXPECT_CALL(sender_, Send(
|
| MatchMessage(static_cast<uint32>(P2PMsg_OnSendComplete::ID))))
|
| .Times(3)
|
| @@ -177,9 +214,60 @@
|
| }
|
| }
|
|
|
| +TEST_F(P2PSocketHostTcpTest, ReceiveStunSsl) {
|
| + SetUp(true);
|
| + EXPECT_CALL(sender_, Send(
|
| + MatchMessage(static_cast<uint32>(P2PMsg_OnSendComplete::ID))))
|
| + .Times(4)
|
| + .WillRepeatedly(DoAll(DeleteArg<0>(), Return(true)));
|
| +
|
| + std::vector<char> packet1;
|
| + CreateStunRequest(&packet1);
|
| + socket_host_->Send(dest_, packet1);
|
| +
|
| + std::vector<char> packet2;
|
| + CreateStunResponse(&packet2);
|
| + socket_host_->Send(dest_, packet2);
|
| +
|
| + std::vector<char> packet3;
|
| + CreateStunError(&packet3);
|
| + socket_host_->Send(dest_, packet3);
|
| +
|
| + std::string received_data;
|
| + SsltcpHelper ssl_helper;
|
| + received_data.append(IntToSize(ssl_helper.server_hello_message().size()));
|
| + received_data.append(ssl_helper.server_hello_message().begin(),
|
| + ssl_helper.server_hello_message().end());
|
| + received_data.append(IntToSize(packet1.size()));
|
| + received_data.append(packet1.begin(), packet1.end());
|
| + received_data.append(IntToSize(packet2.size()));
|
| + received_data.append(packet2.begin(), packet2.end());
|
| + received_data.append(IntToSize(packet3.size()));
|
| + received_data.append(packet3.begin(), packet3.end());
|
| +
|
| + EXPECT_CALL(sender_, Send(MatchPacketMessage(packet1)))
|
| + .WillOnce(DoAll(DeleteArg<0>(), Return(true)));
|
| + EXPECT_CALL(sender_, Send(MatchPacketMessage(packet2)))
|
| + .WillOnce(DoAll(DeleteArg<0>(), Return(true)));
|
| + EXPECT_CALL(sender_, Send(MatchPacketMessage(packet3)))
|
| + .WillOnce(DoAll(DeleteArg<0>(), Return(true)));
|
| +
|
| + size_t pos = 0;
|
| + size_t step_sizes[] = {3, 2, 1};
|
| + size_t step = 0;
|
| + while (pos < received_data.size()) {
|
| + size_t step_size = std::min(step_sizes[step], received_data.size() - pos);
|
| + socket_->AppendInputData(&received_data[pos], step_size);
|
| + pos += step_size;
|
| + if (++step >= arraysize(step_sizes))
|
| + step = 0;
|
| + }
|
| +}
|
| +
|
| // Verify that we can't send data before we've received STUN response
|
| // from the other side.
|
| TEST_F(P2PSocketHostTcpTest, SendDataNoAuth) {
|
| + SetUp(false);
|
| EXPECT_CALL(sender_, Send(
|
| MatchMessage(static_cast<uint32>(P2PMsg_OnError::ID))))
|
| .WillOnce(DoAll(DeleteArg<0>(), Return(true)));
|
| @@ -194,6 +282,7 @@
|
| // Verify that we can send data after we've received STUN response
|
| // from the other side.
|
| TEST_F(P2PSocketHostTcpTest, SendAfterStunRequest) {
|
| + SetUp(false);
|
| // Receive packet from |dest_|.
|
| std::vector<char> request_packet;
|
| CreateStunRequest(&request_packet);
|
| @@ -223,6 +312,7 @@
|
|
|
| // Verify that asynchronous writes are handled correctly.
|
| TEST_F(P2PSocketHostTcpTest, AsyncWrites) {
|
| + SetUp(false);
|
| base::MessageLoop message_loop;
|
|
|
| socket_->set_async_write(true);
|
| @@ -254,6 +344,7 @@
|
| // Verify that we can send STUN message and that they are formatted
|
| // properly.
|
| TEST_F(P2PSocketHostStunTcpTest, SendStunNoAuth) {
|
| + SetUp(false);
|
| EXPECT_CALL(sender_, Send(
|
| MatchMessage(static_cast<uint32>(P2PMsg_OnSendComplete::ID))))
|
| .Times(3)
|
| @@ -279,9 +370,40 @@
|
| EXPECT_EQ(expected_data, sent_data_);
|
| }
|
|
|
| +TEST_F(P2PSocketHostStunTcpTest, SendStunNoAuthSsl) {
|
| + SetUp(true);
|
| + EXPECT_CALL(sender_, Send(
|
| + MatchMessage(static_cast<uint32>(P2PMsg_OnSendComplete::ID))))
|
| + .Times(4)
|
| + .WillRepeatedly(DoAll(DeleteArg<0>(), Return(true)));
|
| +
|
| + std::vector<char> packet1;
|
| + CreateStunRequest(&packet1);
|
| + socket_host_->Send(dest_, packet1);
|
| +
|
| + std::vector<char> packet2;
|
| + CreateStunResponse(&packet2);
|
| + socket_host_->Send(dest_, packet2);
|
| +
|
| + std::vector<char> packet3;
|
| + CreateStunError(&packet3);
|
| + socket_host_->Send(dest_, packet3);
|
| +
|
| + std::string expected_data;
|
| + SsltcpHelper ssl_helper;
|
| + expected_data.append(ssl_helper.client_hello_message().begin(),
|
| + ssl_helper.client_hello_message().end());
|
| + expected_data.append(packet1.begin(), packet1.end());
|
| + expected_data.append(packet2.begin(), packet2.end());
|
| + expected_data.append(packet3.begin(), packet3.end());
|
| +
|
| + EXPECT_EQ(expected_data, sent_data_);
|
| +}
|
| +
|
| // Verify that we can receive STUN messages from the socket, and that
|
| // the messages are parsed properly.
|
| TEST_F(P2PSocketHostStunTcpTest, ReceiveStun) {
|
| + SetUp(false);
|
| EXPECT_CALL(sender_, Send(
|
| MatchMessage(static_cast<uint32>(P2PMsg_OnSendComplete::ID))))
|
| .Times(3)
|
| @@ -323,9 +445,56 @@
|
| }
|
| }
|
|
|
| +TEST_F(P2PSocketHostStunTcpTest, ReceiveStunSsl) {
|
| + SetUp(true);
|
| + EXPECT_CALL(sender_, Send(
|
| + MatchMessage(static_cast<uint32>(P2PMsg_OnSendComplete::ID))))
|
| + .Times(4)
|
| + .WillRepeatedly(DoAll(DeleteArg<0>(), Return(true)));
|
| +
|
| + std::vector<char> packet1;
|
| + CreateStunRequest(&packet1);
|
| + socket_host_->Send(dest_, packet1);
|
| +
|
| + std::vector<char> packet2;
|
| + CreateStunResponse(&packet2);
|
| + socket_host_->Send(dest_, packet2);
|
| +
|
| + std::vector<char> packet3;
|
| + CreateStunError(&packet3);
|
| + socket_host_->Send(dest_, packet3);
|
| +
|
| + std::string received_data;
|
| + SsltcpHelper ssl_helper;
|
| + received_data.append(ssl_helper.server_hello_message().begin(),
|
| + ssl_helper.server_hello_message().end());
|
| + received_data.append(packet1.begin(), packet1.end());
|
| + received_data.append(packet2.begin(), packet2.end());
|
| + received_data.append(packet3.begin(), packet3.end());
|
| +
|
| + EXPECT_CALL(sender_, Send(MatchPacketMessage(packet1)))
|
| + .WillOnce(DoAll(DeleteArg<0>(), Return(true)));
|
| + EXPECT_CALL(sender_, Send(MatchPacketMessage(packet2)))
|
| + .WillOnce(DoAll(DeleteArg<0>(), Return(true)));
|
| + EXPECT_CALL(sender_, Send(MatchPacketMessage(packet3)))
|
| + .WillOnce(DoAll(DeleteArg<0>(), Return(true)));
|
| +
|
| + size_t pos = 0;
|
| + size_t step_sizes[] = {3, 2, 1};
|
| + size_t step = 0;
|
| + while (pos < received_data.size()) {
|
| + size_t step_size = std::min(step_sizes[step], received_data.size() - pos);
|
| + socket_->AppendInputData(&received_data[pos], step_size);
|
| + pos += step_size;
|
| + if (++step >= arraysize(step_sizes))
|
| + step = 0;
|
| + }
|
| +}
|
| +
|
| // Verify that we can't send data before we've received STUN response
|
| // from the other side.
|
| TEST_F(P2PSocketHostStunTcpTest, SendDataNoAuth) {
|
| + SetUp(false);
|
| EXPECT_CALL(sender_, Send(
|
| MatchMessage(static_cast<uint32>(P2PMsg_OnError::ID))))
|
| .WillOnce(DoAll(DeleteArg<0>(), Return(true)));
|
| @@ -339,6 +508,7 @@
|
|
|
| // Verify that asynchronous writes are handled correctly.
|
| TEST_F(P2PSocketHostStunTcpTest, AsyncWrites) {
|
| + SetUp(false);
|
| base::MessageLoop message_loop;
|
|
|
| socket_->set_async_write(true);
|
|
|