blob: 2b28ff32fee8c4d4e7102d8aa3f2e32e69ec2065 [file] [log] [blame]
// Copyright 2017 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 "net/dns/dns_socket_allocator.h"
#include "net/base/ip_endpoint.h"
#include "net/base/net_errors.h"
#include "net/log/net_log_source.h"
#include "net/socket/client_socket_factory.h"
#include "net/socket/datagram_client_socket.h"
#include "net/socket/socket_test_util.h"
#include "net/test/gtest_util.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace net {
namespace {
const IPEndPoint kEndpoint0(IPAddress(1, 2, 3, 4), 578);
const IPEndPoint kEndpoint1(IPAddress(2, 3, 4, 5), 678);
class DnsSocketAllocatorTest : public ::testing::Test {
protected:
void SetUp() override {
allocator_ = std::make_unique<DnsSocketAllocator>(
&socket_factory_, nameservers_, nullptr /* net_log */);
}
MockClientSocketFactory socket_factory_;
std::vector<IPEndPoint> nameservers_ = {kEndpoint0, kEndpoint1};
std::unique_ptr<DnsSocketAllocator> allocator_;
};
TEST_F(DnsSocketAllocatorTest, CreateConnectedUdpSocket) {
// Prep socket factory for a single do-nothing socket.
StaticSocketDataProvider data_provider;
socket_factory_.AddSocketDataProvider(&data_provider);
int connection_error = ERR_FAILED;
std::unique_ptr<DatagramClientSocket> socket =
allocator_->CreateConnectedUdpSocket(1 /* server_index */,
&connection_error);
ASSERT_TRUE(socket);
EXPECT_THAT(connection_error, test::IsOk());
IPEndPoint peer_address;
ASSERT_THAT(socket->GetPeerAddress(&peer_address), test::IsOk());
EXPECT_EQ(peer_address, kEndpoint1);
}
TEST_F(DnsSocketAllocatorTest, CreateConnectedUdpSocket_ConnectError) {
// Prep socket factory for a single socket with connection failure.
MockConnect connect_data;
connect_data.result = ERR_INSUFFICIENT_RESOURCES;
StaticSocketDataProvider data_provider;
data_provider.set_connect_data(connect_data);
socket_factory_.AddSocketDataProvider(&data_provider);
int connection_error = OK;
std::unique_ptr<DatagramClientSocket> socket =
allocator_->CreateConnectedUdpSocket(0 /* server_index */,
&connection_error);
EXPECT_FALSE(socket);
EXPECT_THAT(connection_error, test::IsError(ERR_INSUFFICIENT_RESOURCES));
}
TEST_F(DnsSocketAllocatorTest, CreateTcpSocket) {
// Prep socket factory for a single do-nothing socket.
StaticSocketDataProvider data_provider;
socket_factory_.AddSocketDataProvider(&data_provider);
std::unique_ptr<StreamSocket> socket =
allocator_->CreateTcpSocket(1 /* server_index */, NetLogSource());
EXPECT_TRUE(socket);
}
} // namespace
} // namespace net