blob: 9ab8bf4ed3f382cbe6709897df11d02ea885c783 [file] [log] [blame]
// Copyright 2013 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 "chrome/browser/net/dns_probe_test_util.h"
#include <stdint.h>
#include <utility>
#include "chrome/browser/net/dns_probe_runner.h"
#include "net/base/ip_address.h"
namespace chrome_browser_net {
namespace {
static base::Optional<net::AddressList> AddressListForResponse(
FakeHostResolver::Response response) {
base::Optional<net::AddressList> resolved_addresses;
switch (response) {
case FakeHostResolver::kNoResponse:
break;
case FakeHostResolver::kEmptyResponse:
resolved_addresses = net::AddressList();
break;
case FakeHostResolver::kOneAddressResponse:
resolved_addresses =
net::AddressList(net::IPEndPoint(net::IPAddress(192, 168, 1, 1), 0));
break;
}
return resolved_addresses;
}
} // namespace
FakeHostResolver::FakeHostResolver(
network::mojom::HostResolverRequest resolver_request,
std::vector<SingleResult> result_list)
: binding_(this, std::move(resolver_request)), result_list_(result_list) {}
FakeHostResolver::FakeHostResolver(
network::mojom::HostResolverRequest resolver_request,
int32_t result,
Response response)
: FakeHostResolver(std::move(resolver_request),
{SingleResult(result, response)}) {}
FakeHostResolver::~FakeHostResolver() = default;
void FakeHostResolver::ResolveHost(
const net::HostPortPair& host,
network::mojom::ResolveHostParametersPtr optional_parameters,
network::mojom::ResolveHostClientPtr response_client) {
const SingleResult& cur_result = result_list_[next_result_];
if (next_result_ + 1 < result_list_.size())
next_result_++;
response_client->OnComplete(cur_result.result,
AddressListForResponse(cur_result.response));
}
void FakeHostResolver::MdnsListen(
const net::HostPortPair& host,
net::DnsQueryType query_type,
network::mojom::MdnsListenClientPtr response_client,
MdnsListenCallback callback) {
NOTREACHED();
}
HangingHostResolver::HangingHostResolver(
network::mojom::HostResolverRequest resolver_request)
: binding_(this, std::move(resolver_request)) {}
HangingHostResolver::~HangingHostResolver() = default;
void HangingHostResolver::ResolveHost(
const net::HostPortPair& host,
network::mojom::ResolveHostParametersPtr optional_parameters,
network::mojom::ResolveHostClientPtr response_client) {
// Intentionally do not call response_client->OnComplete, but hang onto the
// |response_client| since destroying that also causes the mojo
// set_connection_error_handler handler to be called.
response_client_ = std::move(response_client);
}
void HangingHostResolver::MdnsListen(
const net::HostPortPair& host,
net::DnsQueryType query_type,
network::mojom::MdnsListenClientPtr response_client,
MdnsListenCallback callback) {
NOTREACHED();
}
FakeHostResolverNetworkContext::FakeHostResolverNetworkContext(
std::vector<FakeHostResolver::SingleResult> system_result_list,
std::vector<FakeHostResolver::SingleResult> public_result_list)
: system_result_list_(std::move(system_result_list)),
public_result_list_(std::move(public_result_list)) {}
FakeHostResolverNetworkContext::~FakeHostResolverNetworkContext() = default;
void FakeHostResolverNetworkContext::CreateHostResolver(
const base::Optional<net::DnsConfigOverrides>& config_overrides,
network::mojom::HostResolverRequest request) {
ASSERT_TRUE(config_overrides);
if (!config_overrides->nameservers) {
if (!system_resolver_) {
system_resolver_ = std::make_unique<FakeHostResolver>(
std::move(request), system_result_list_);
}
} else {
if (!public_resolver_) {
public_resolver_ = std::make_unique<FakeHostResolver>(
std::move(request), public_result_list_);
}
}
}
FakeDnsConfigChangeManager::FakeDnsConfigChangeManager(
network::mojom::DnsConfigChangeManagerRequest request)
: binding_(this, std::move(request)) {}
FakeDnsConfigChangeManager::~FakeDnsConfigChangeManager() = default;
void FakeDnsConfigChangeManager::RequestNotifications(
network::mojom::DnsConfigChangeManagerClientPtr client) {
ASSERT_FALSE(client_);
client_ = std::move(client);
}
void FakeDnsConfigChangeManager::SimulateDnsConfigChange() {
ASSERT_TRUE(client_);
client_->OnSystemDnsConfigChanged();
}
} // namespace chrome_browser_net