123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- // Copyright 2016 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 <stdint.h>
- #include <cstring>
- #include <string>
- #include "base/bind.h"
- #include "base/check.h"
- #include "base/memory/ref_counted.h"
- #include "base/test/task_environment.h"
- #include "chromecast/net/fake_stream_socket.h"
- #include "net/base/io_buffer.h"
- #include "net/base/ip_endpoint.h"
- #include "net/base/net_errors.h"
- #include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace chromecast {
- namespace {
- const char kIpAddress1[] = "192.168.0.1";
- const uint16_t kPort1 = 10001;
- const char kIpAddress2[] = "192.168.0.2";
- const uint16_t kPort2 = 10002;
- net::IPAddress IpLiteralToIpAddress(const std::string& ip_literal) {
- net::IPAddress ip_address;
- CHECK(ip_address.AssignFromIPLiteral(ip_literal));
- return ip_address;
- }
- void Callback(int error_code) {}
- } // namespace
- class FakeStreamSocketTest : public ::testing::Test {
- public:
- FakeStreamSocketTest()
- : endpoint_1_(IpLiteralToIpAddress(kIpAddress1), kPort1),
- socket_1_(endpoint_1_),
- endpoint_2_(IpLiteralToIpAddress(kIpAddress2), kPort2),
- socket_2_(endpoint_2_) {}
- ~FakeStreamSocketTest() override {}
- base::test::TaskEnvironment task_environment_;
- net::IPEndPoint endpoint_1_;
- FakeStreamSocket socket_1_;
- net::IPEndPoint endpoint_2_;
- FakeStreamSocket socket_2_;
- };
- TEST_F(FakeStreamSocketTest, GetLocalAddress) {
- net::IPEndPoint local_address;
- ASSERT_EQ(net::OK, socket_1_.GetLocalAddress(&local_address));
- EXPECT_EQ(endpoint_1_, local_address);
- }
- TEST_F(FakeStreamSocketTest, GetPeerAddressWithoutPeer) {
- net::IPEndPoint peer_address;
- EXPECT_EQ(net::ERR_SOCKET_NOT_CONNECTED,
- socket_1_.GetPeerAddress(&peer_address));
- }
- TEST_F(FakeStreamSocketTest, GetPeerAddressWithPeer) {
- socket_1_.SetPeer(&socket_2_);
- socket_2_.SetPeer(&socket_1_);
- net::IPEndPoint peer_address;
- ASSERT_EQ(net::OK, socket_1_.GetPeerAddress(&peer_address));
- EXPECT_EQ(endpoint_2_, peer_address);
- }
- TEST_F(FakeStreamSocketTest, ReadAndWriteWithoutPeer) {
- auto io_buffer = base::MakeRefCounted<net::IOBuffer>(1);
- EXPECT_EQ(net::ERR_IO_PENDING,
- socket_1_.Read(io_buffer.get(), 1, base::BindOnce(&Callback)));
- EXPECT_EQ(net::ERR_SOCKET_NOT_CONNECTED,
- socket_1_.Write(io_buffer.get(), 1, base::BindOnce(&Callback),
- TRAFFIC_ANNOTATION_FOR_TESTS));
- }
- TEST_F(FakeStreamSocketTest, ReadAndWriteWithPeer) {
- socket_1_.SetPeer(&socket_2_);
- socket_2_.SetPeer(&socket_1_);
- const std::string kData("DATA");
- auto send_buffer = base::MakeRefCounted<net::StringIOBuffer>(kData);
- ASSERT_EQ(
- static_cast<int>(kData.size()),
- socket_1_.Write(send_buffer.get(), kData.size(),
- base::BindOnce(&Callback), TRAFFIC_ANNOTATION_FOR_TESTS));
- auto receive_buffer = base::MakeRefCounted<net::IOBuffer>(kData.size());
- ASSERT_EQ(static_cast<int>(kData.size()),
- socket_2_.Read(receive_buffer.get(), kData.size(),
- base::BindOnce(&Callback)));
- EXPECT_EQ(0, std::memcmp(kData.data(), receive_buffer->data(), kData.size()));
- }
- TEST_F(FakeStreamSocketTest, ReadAndWritePending) {
- socket_1_.SetPeer(&socket_2_);
- socket_2_.SetPeer(&socket_1_);
- const std::string kData("DATA");
- auto receive_buffer = base::MakeRefCounted<net::IOBuffer>(kData.size());
- ASSERT_EQ(net::ERR_IO_PENDING,
- socket_2_.Read(receive_buffer.get(), kData.size(),
- base::BindOnce(&Callback)));
- auto send_buffer = base::MakeRefCounted<net::StringIOBuffer>(kData);
- ASSERT_EQ(
- static_cast<int>(kData.size()),
- socket_1_.Write(send_buffer.get(), kData.size(),
- base::BindOnce(&Callback), TRAFFIC_ANNOTATION_FOR_TESTS));
- EXPECT_EQ(0, std::memcmp(kData.data(), receive_buffer->data(), kData.size()));
- }
- TEST_F(FakeStreamSocketTest, ReadAndWriteLargeData) {
- socket_1_.SetPeer(&socket_2_);
- socket_2_.SetPeer(&socket_1_);
- // Send 1 MB of data between sockets.
- const std::string kData("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef");
- auto send_buffer = base::MakeRefCounted<net::StringIOBuffer>(kData);
- const int kWriteCount = 1024 * 1024 / kData.size();
- for (int i = 0; i < kWriteCount; i++) {
- ASSERT_EQ(static_cast<int>(kData.size()),
- socket_1_.Write(send_buffer.get(), kData.size(),
- base::BindOnce(&Callback),
- TRAFFIC_ANNOTATION_FOR_TESTS));
- }
- auto receive_buffer = base::MakeRefCounted<net::IOBuffer>(1024);
- for (int i = 0; i < 1024; i++) {
- ASSERT_EQ(1024, socket_2_.Read(receive_buffer.get(), 1024,
- base::BindOnce(&Callback)));
- }
- }
- } // namespace chromecast
|