Commit 8f52ca70 authored by Kartik Hegde's avatar Kartik Hegde Committed by Commit Bot

network_diagnostics: Add fake host resolver

Introduce the fake host resolver class, used by unit tests, to avoid
duplication across multiple routines.

BUG=chromium:956783
TEST=none

Change-Id: I4a5e9b6f07de4b55a07e54cd46c8e879c3df080e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2434555Reviewed-by: default avatarSteven Bennetts <stevenjb@chromium.org>
Commit-Queue: Kartik Hegde <khegde@chromium.org>
Cr-Commit-Position: refs/heads/master@{#811918}
parent 13d6e370
......@@ -3413,6 +3413,8 @@ source_set("unit_tests") {
"net/network_diagnostics/dns_latency_routine_unittest.cc",
"net/network_diagnostics/dns_resolution_routine_unittest.cc",
"net/network_diagnostics/dns_resolver_present_routine_unittest.cc",
"net/network_diagnostics/fake_host_resolver.cc",
"net/network_diagnostics/fake_host_resolver.h",
"net/network_diagnostics/gateway_can_be_pinged_routine_unittest.cc",
"net/network_diagnostics/has_secure_wifi_connection_routine_unittest.cc",
"net/network_diagnostics/http_firewall_routine_unittest.cc",
......
// Copyright 2020 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/chromeos/net/network_diagnostics/fake_host_resolver.h"
#include <cstdint>
#include <utility>
#include "base/logging.h"
#include "base/notreached.h"
#include "base/optional.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "net/base/address_list.h"
#include "net/dns/public/resolve_error_info.h"
namespace chromeos {
namespace network_diagnostics {
FakeHostResolver::DnsResult::DnsResult(
int32_t result,
net::ResolveErrorInfo resolve_error_info,
base::Optional<net::AddressList> resolved_addresses)
: result_(result),
resolve_error_info_(resolve_error_info),
resolved_addresses_(resolved_addresses) {}
FakeHostResolver::DnsResult::~DnsResult() = default;
FakeHostResolver::FakeHostResolver(
mojo::PendingReceiver<network::mojom::HostResolver> receiver)
: receiver_(this, std::move(receiver)) {}
FakeHostResolver::~FakeHostResolver() = default;
void FakeHostResolver::ResolveHost(
const net::HostPortPair& host,
const net::NetworkIsolationKey& network_isolation_key,
network::mojom::ResolveHostParametersPtr optional_parameters,
mojo::PendingRemote<network::mojom::ResolveHostClient>
pending_response_client) {
mojo::Remote<network::mojom::ResolveHostClient> response_client(
std::move(pending_response_client));
DnsResult* result = fake_dns_results_.front();
DCHECK(result);
fake_dns_results_.pop_front();
response_client->OnComplete(result->result_, result->resolve_error_info_,
result->resolved_addresses_);
}
void FakeHostResolver::MdnsListen(
const net::HostPortPair& host,
net::DnsQueryType query_type,
mojo::PendingRemote<network::mojom::MdnsListenClient> response_client,
MdnsListenCallback callback) {
NOTIMPLEMENTED();
}
} // namespace network_diagnostics
} // namespace chromeos
// Copyright 2020 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.
#ifndef CHROME_BROWSER_CHROMEOS_NET_NETWORK_DIAGNOSTICS_FAKE_HOST_RESOLVER_H_
#define CHROME_BROWSER_CHROMEOS_NET_NETWORK_DIAGNOSTICS_FAKE_HOST_RESOLVER_H_
#include <deque>
#include "base/optional.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "net/base/address_list.h"
#include "net/dns/public/resolve_error_info.h"
#include "services/network/public/mojom/host_resolver.mojom.h"
namespace chromeos {
namespace network_diagnostics {
// Used in unit tests, the FakeHostResolver class simulates the behavior of a
// host resolver.
class FakeHostResolver : public network::mojom::HostResolver {
public:
struct DnsResult {
public:
DnsResult(int32_t result,
net::ResolveErrorInfo resolve_error_info,
base::Optional<net::AddressList> resolved_addresses);
~DnsResult();
int result_;
net::ResolveErrorInfo resolve_error_info_;
base::Optional<net::AddressList> resolved_addresses_;
};
FakeHostResolver(
mojo::PendingReceiver<network::mojom::HostResolver> receiver);
~FakeHostResolver() override;
// network::mojom::HostResolver
void ResolveHost(const net::HostPortPair& host,
const net::NetworkIsolationKey& network_isolation_key,
network::mojom::ResolveHostParametersPtr optional_parameters,
mojo::PendingRemote<network::mojom::ResolveHostClient>
pending_response_client) override;
void MdnsListen(
const net::HostPortPair& host,
net::DnsQueryType query_type,
mojo::PendingRemote<network::mojom::MdnsListenClient> response_client,
MdnsListenCallback callback) override;
// Sets the fake dns results.
void set_fake_dns_results(std::deque<DnsResult*> fake_dns_results) {
fake_dns_results_ = std::move(fake_dns_results);
}
private:
mojo::Receiver<network::mojom::HostResolver> receiver_;
// Use the list of fake dns results to fake different responses for multiple
// calls to the host_resolver's ResolveHost().
std::deque<DnsResult*> fake_dns_results_;
};
} // namespace network_diagnostics
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_NET_NETWORK_DIAGNOSTICS_FAKE_HOST_RESOLVER_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment