| // Copyright 2019 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef PATCHPANEL_MOCK_DATAPATH_H_ |
| #define PATCHPANEL_MOCK_DATAPATH_H_ |
| |
| #include <optional> |
| #include <string> |
| #include <string_view> |
| #include <vector> |
| |
| #include <chromeos/net-base/mac_address.h> |
| #include <gmock/gmock.h> |
| |
| #include "patchpanel/datapath.h" |
| #include "patchpanel/iptables.h" |
| #include "patchpanel/shill_client.h" |
| |
| namespace patchpanel { |
| |
| // ARC networking data path configuration utility. |
| class MockDatapath : public Datapath { |
| public: |
| MockDatapath(MinijailedProcessRunner* process_runner, System* system); |
| MockDatapath(const MockDatapath&) = delete; |
| MockDatapath& operator=(const MockDatapath&) = delete; |
| |
| ~MockDatapath() override; |
| |
| MOCK_METHOD(bool, |
| NetnsAttachName, |
| (std::string_view netns_name, pid_t netns_pid), |
| (override)); |
| MOCK_METHOD(bool, NetnsDeleteName, (std::string_view netns_name), (override)); |
| |
| MOCK_METHOD(bool, |
| AddBridge, |
| (std::string_view ifname, const net_base::IPv4CIDR& cidr), |
| (override)); |
| MOCK_METHOD(void, RemoveBridge, (std::string_view ifname), (override)); |
| MOCK_METHOD(bool, |
| AddToBridge, |
| (std::string_view br_ifname, std::string_view ifname), |
| (override)); |
| |
| MOCK_METHOD(std::string, |
| AddTunTap, |
| (std::string_view name, |
| const std::optional<net_base::MacAddress>& mac_addr, |
| const std::optional<net_base::IPv4CIDR>& ipv4_cidr, |
| std::string_view user, |
| DeviceMode dev_mode), |
| (override)); |
| MOCK_METHOD(void, |
| RemoveTunTap, |
| (std::string_view ifname, DeviceMode dev_mode), |
| (override)); |
| MOCK_METHOD(bool, |
| ConnectVethPair, |
| (pid_t pid, |
| std::string_view netns_name, |
| std::string_view veth_ifname, |
| std::string_view peer_ifname, |
| net_base::MacAddress remote_mac_addr, |
| const net_base::IPv4CIDR& remote_ipv4_cidr, |
| const std::optional<net_base::IPv6CIDR>& remote_ipv6_cidr, |
| bool remote_multicast_flag, |
| bool up), |
| (override)); |
| MOCK_METHOD(void, RemoveInterface, (std::string_view ifname), (override)); |
| MOCK_METHOD(void, |
| StartRoutingDevice, |
| (const ShillClient::Device& shill_device, |
| std::string_view int_ifname, |
| TrafficSource source, |
| bool static_ipv6), |
| (override)); |
| MOCK_METHOD(void, |
| StartRoutingDeviceAsUser, |
| (std::string_view int_ifname, |
| TrafficSource source, |
| const net_base::IPv4Address& int_ipv4_addr, |
| std::optional<net_base::IPv4Address> peer_ipv4_addr, |
| std::optional<net_base::IPv6Address> int_ipv6_addr, |
| std::optional<net_base::IPv6Address> peer_ipv6_addr), |
| (override)); |
| MOCK_METHOD(void, |
| StopRoutingDevice, |
| (std::string_view int_ifname, TrafficSource source), |
| (override)); |
| MOCK_METHOD(bool, |
| MaskInterfaceFlags, |
| (std::string_view ifname, uint16_t on, uint16_t off), |
| (override)); |
| MOCK_METHOD(bool, |
| AddIPv4RouteToTable, |
| (std::string_view ifname, |
| const net_base::IPv4CIDR& ipv4_cidr, |
| int table_id), |
| (override)); |
| MOCK_METHOD(void, |
| DeleteIPv4RouteFromTable, |
| (std::string_view ifname, |
| const net_base::IPv4CIDR& ipv4_cidr, |
| int table_id), |
| (override)); |
| MOCK_METHOD(bool, |
| AddIPv4Route, |
| (const net_base::IPv4Address& gateway_addr, |
| const net_base::IPv4CIDR& cidr), |
| (override)); |
| MOCK_METHOD(bool, |
| SetConntrackHelpers, |
| (const bool enable_helpers), |
| (override)); |
| MOCK_METHOD(bool, |
| SetRouteLocalnet, |
| (std::string_view ifname, const bool enable), |
| (override)); |
| MOCK_METHOD(std::string, |
| DumpIptables, |
| (IpFamily family, Iptables::Table table), |
| (override)); |
| MOCK_METHOD(bool, |
| ModprobeAll, |
| (const std::vector<std::string>& modules), |
| (override)); |
| MOCK_METHOD(void, |
| AddInboundIPv4DNAT, |
| (AutoDNATTarget auto_dnat_target, |
| const ShillClient::Device& shill_device, |
| const net_base::IPv4Address& ipv4_addr), |
| (override)); |
| MOCK_METHOD(void, |
| RemoveInboundIPv4DNAT, |
| (AutoDNATTarget auto_dnat_target, |
| const ShillClient::Device& shill_device, |
| const net_base::IPv4Address& ipv4_addr), |
| (override)); |
| MOCK_METHOD(void, EnableQoSDetection, (), (override)); |
| MOCK_METHOD(void, DisableQoSDetection, (), (override)); |
| MOCK_METHOD(void, EnableQoSApplyingDSCP, (std::string_view), (override)); |
| MOCK_METHOD(void, DisableQoSApplyingDSCP, (std::string_view), (override)); |
| MOCK_METHOD(void, |
| UpdateDoHProvidersForQoS, |
| (IpFamily, const std::vector<net_base::IPAddress>&), |
| (override)); |
| MOCK_METHOD(void, AddBorealisQoSRule, (std::string_view), (override)); |
| MOCK_METHOD(void, RemoveBorealisQoSRule, (std::string_view), (override)); |
| bool AddAdbPortAccessRule(std::string_view ifname) override { return true; } |
| void DeleteAdbPortAccessRule(std::string_view ifname) override {} |
| MOCK_METHOD(bool, |
| CheckChain, |
| (IpFamily family, Iptables::Table table, std::string_view chain), |
| (override)); |
| MOCK_METHOD(bool, |
| AddChain, |
| (IpFamily family, Iptables::Table table, std::string_view chain), |
| (override)); |
| MOCK_METHOD(bool, |
| RemoveChain, |
| (IpFamily family, Iptables::Table table, std::string_view chain), |
| (override)); |
| MOCK_METHOD(bool, |
| FlushChain, |
| (IpFamily family, Iptables::Table table, std::string_view chain), |
| (override)); |
| MOCK_METHOD(bool, |
| ModifyChain, |
| (IpFamily family, |
| Iptables::Table table, |
| Iptables::Command command, |
| std::string_view chain, |
| bool log_failures), |
| (override)); |
| MOCK_METHOD(bool, |
| ModifyClatAcceptRules, |
| (Iptables::Command command, std::string_view ifname), |
| (override)); |
| MOCK_METHOD(bool, |
| ModifyIptables, |
| (IpFamily family, |
| Iptables::Table table, |
| Iptables::Command command, |
| std::string_view chain, |
| const std::vector<std::string_view>& argv, |
| bool log_failures), |
| (override)); |
| MOCK_METHOD(bool, |
| AddIPv6NeighborProxy, |
| (std::string_view ifname, const net_base::IPv6Address& ipv6_addr), |
| (override)); |
| MOCK_METHOD(void, |
| RemoveIPv6NeighborProxy, |
| (std::string_view ifname, const net_base::IPv6Address& ipv6_addr), |
| (override)); |
| MOCK_METHOD(bool, |
| AddIPv6HostRoute, |
| (std::string_view ifname, |
| const net_base::IPv6CIDR& ipv6_cidr, |
| const std::optional<net_base::IPv6Address>& src_addr), |
| (override)); |
| MOCK_METHOD(void, |
| RemoveIPv6HostRoute, |
| (const net_base::IPv6CIDR& ipv6_cidr), |
| (override)); |
| MOCK_METHOD(void, |
| StartConnectionPinning, |
| (const ShillClient::Device&), |
| (override)); |
| MOCK_METHOD(void, |
| StopConnectionPinning, |
| (const ShillClient::Device&), |
| (override)); |
| MOCK_METHOD(void, |
| StartSourceIPv6PrefixEnforcement, |
| (const ShillClient::Device&), |
| (override)); |
| MOCK_METHOD(void, |
| StopSourceIPv6PrefixEnforcement, |
| (const ShillClient::Device&), |
| (override)); |
| MOCK_METHOD(void, |
| UpdateSourceEnforcementIPv6Prefix, |
| (const ShillClient::Device&, |
| const std::vector<net_base::IPv6CIDR>&), |
| (override)); |
| MOCK_METHOD(bool, |
| StartDownstreamNetwork, |
| (const DownstreamNetworkInfo&), |
| (override)); |
| MOCK_METHOD(void, |
| StopDownstreamNetwork, |
| (const DownstreamNetworkInfo&), |
| (override)); |
| }; |
| |
| } // namespace patchpanel |
| |
| #endif // PATCHPANEL_MOCK_DATAPATH_H_ |