1 // Copyright 2020 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_CHROMEOS_NET_NETWORK_DIAGNOSTICS_FAKE_NETWORK_CONTEXT_H_ 6 #define CHROME_BROWSER_CHROMEOS_NET_NETWORK_DIAGNOSTICS_FAKE_NETWORK_CONTEXT_H_ 7 8 #include <deque> 9 #include <memory> 10 11 #include "chrome/browser/chromeos/net/network_diagnostics/fake_host_resolver.h" 12 #include "chrome/browser/chromeos/net/network_diagnostics/fake_tcp_connected_socket.h" 13 #include "services/network/test/test_network_context.h" 14 15 namespace chromeos { 16 namespace network_diagnostics { 17 18 // Used in unit tests, the FakeNetworkContext class simulates the behavior of a 19 // network context. 20 class FakeNetworkContext : public network::TestNetworkContext { 21 public: 22 FakeNetworkContext(); 23 ~FakeNetworkContext() override; 24 25 // network::TestNetworkContext: 26 void CreateHostResolver( 27 const base::Optional<net::DnsConfigOverrides>& config_overrides, 28 mojo::PendingReceiver<network::mojom::HostResolver> receiver) override; 29 30 void CreateTCPConnectedSocket( 31 const base::Optional<net::IPEndPoint>& local_addr, 32 const net::AddressList& remote_addr_list, 33 network::mojom::TCPConnectedSocketOptionsPtr tcp_connected_socket_options, 34 const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, 35 mojo::PendingReceiver<network::mojom::TCPConnectedSocket> socket, 36 mojo::PendingRemote<network::mojom::SocketObserver> observer, 37 CreateTCPConnectedSocketCallback callback) override; 38 39 // Sets the fake TCP connect code. 40 void SetTCPConnectCode(base::Optional<net::Error>& tcp_connect_code); 41 42 // Sets the fake TLS upgrade code. 43 void SetTLSUpgradeCode(base::Optional<net::Error>& tls_upgrade_code); 44 45 // Sets the fake dns results. set_fake_dns_results(std::deque<FakeHostResolver::DnsResult * > fake_dns_results)46 void set_fake_dns_results( 47 std::deque<FakeHostResolver::DnsResult*> fake_dns_results) { 48 fake_dns_results_ = std::move(fake_dns_results); 49 } 50 51 // If set to true, the binding pipe will be disconnected when attempting to 52 // connect. set_disconnect_during_host_resolution(bool disconnect)53 void set_disconnect_during_host_resolution(bool disconnect) { 54 host_resolution_disconnect_ = disconnect; 55 } 56 57 // If set to true, the binding pipe will be disconnected when attempting to 58 // connect. set_disconnect_during_tcp_connection_attempt(bool disconnect)59 void set_disconnect_during_tcp_connection_attempt(bool disconnect) { 60 tcp_connection_attempt_disconnect_ = disconnect; 61 } 62 63 // If set to true, the binding pipe will be disconnected when attempting to 64 // connect. set_disconnect_during_tls_upgrade_attempt(bool disconnect)65 void set_disconnect_during_tls_upgrade_attempt(bool disconnect) { 66 tls_upgrade_attempt_disconnect_ = disconnect; 67 } 68 69 private: 70 // Fake host resolver. 71 std::unique_ptr<FakeHostResolver> resolver_; 72 // Fake DNS lookup results. 73 std::deque<FakeHostResolver::DnsResult*> fake_dns_results_; 74 // Provides the TCP socket functionality for tests. 75 std::unique_ptr<FakeTCPConnectedSocket> fake_tcp_connected_socket_; 76 // TCP connect code corresponding to the connection attempt. 77 net::Error tcp_connect_code_ = net::OK; 78 // Used to mimic the scenario where network::mojom::HostResolver receiver 79 // is disconnected. 80 bool host_resolution_disconnect_ = false; 81 // Used to mimic the scenario where network::mojom::TCPConnectedSocket 82 // receiver is disconnected. 83 bool tcp_connection_attempt_disconnect_ = false; 84 // Used to mimic the scenario where network::mojom::TLSClientSocket receiver 85 // is disconnected. 86 bool tls_upgrade_attempt_disconnect_ = false; 87 }; 88 89 } // namespace network_diagnostics 90 } // namespace chromeos 91 92 #endif // CHROME_BROWSER_CHROMEOS_NET_NETWORK_DIAGNOSTICS_FAKE_NETWORK_CONTEXT_H_ 93