blob: 9d2118c76169db6fa75efd5fbd9a31fb3b6538b2 [file] [log] [blame] [edit]
// Copyright 2024 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net-base/network_config.h"
#include <vector>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "net-base/http_url.h"
#include "net-base/ip_address.h"
#include "net-base/ipv4_address.h"
#include "net-base/ipv6_address.h"
using testing::Test;
namespace net_base {
TEST(NetworkConfigTest, MergeAddress) {
NetworkConfig ipv4_config;
ipv4_config.ipv4_address = IPv4CIDR::CreateFromCIDRString("192.168.1.0/24");
ipv4_config.ipv4_gateway = IPv4Address::CreateFromString("192.168.1.1");
ipv4_config.ipv4_broadcast = IPv4Address::CreateFromString("192.168.1.255");
ipv4_config.rfc3442_routes =
std::vector<std::pair<net_base::IPv4CIDR, net_base::IPv4Address>>{
{*net_base::IPv4CIDR::CreateFromCIDRString("10.1.0.0/16"),
*net_base::IPv4Address::CreateFromString("192.168.1.2")}};
NetworkConfig ipv6_config;
ipv6_config.ipv6_addresses = {*IPv6CIDR::CreateFromCIDRString("fd00::/64")};
ipv6_config.ipv6_gateway = IPv6Address::CreateFromString("fd00::1");
NetworkConfig merged_config =
NetworkConfig::Merge(&ipv4_config, &ipv6_config);
EXPECT_EQ(merged_config.ipv4_address, ipv4_config.ipv4_address);
EXPECT_EQ(merged_config.ipv4_gateway, ipv4_config.ipv4_gateway);
EXPECT_EQ(merged_config.ipv4_broadcast, ipv4_config.ipv4_broadcast);
EXPECT_EQ(merged_config.ipv6_blackhole_route,
ipv4_config.ipv6_blackhole_route);
EXPECT_EQ(merged_config.rfc3442_routes, ipv4_config.rfc3442_routes);
EXPECT_EQ(merged_config.ipv6_addresses, ipv6_config.ipv6_addresses);
EXPECT_EQ(merged_config.ipv6_gateway, ipv6_config.ipv6_gateway);
}
TEST(NetworkConfigTest, MergeIncludedExcludedRoutes) {
NetworkConfig ipv4_config;
ipv4_config.included_route_prefixes = {
*IPCIDR::CreateFromCIDRString("10.1.0.0/16")};
ipv4_config.excluded_route_prefixes = {
*IPCIDR::CreateFromCIDRString("10.2.0.0/16")};
NetworkConfig ipv6_config;
ipv6_config.included_route_prefixes = {
*IPCIDR::CreateFromCIDRString("fd01::/16"),
*IPCIDR::CreateFromCIDRString("fd02::/16")};
ipv6_config.excluded_route_prefixes = {
*IPCIDR::CreateFromCIDRString("fd03::/16")};
NetworkConfig merged_config = NetworkConfig::Merge(nullptr, &ipv6_config);
EXPECT_EQ(merged_config.included_route_prefixes,
ipv6_config.included_route_prefixes);
EXPECT_EQ(merged_config.excluded_route_prefixes,
ipv6_config.excluded_route_prefixes);
merged_config = NetworkConfig::Merge(&ipv4_config, &ipv6_config);
EXPECT_EQ(merged_config.included_route_prefixes,
(std::vector<IPCIDR>{ipv4_config.included_route_prefixes[0],
ipv6_config.included_route_prefixes[0],
ipv6_config.included_route_prefixes[1]}));
EXPECT_EQ(merged_config.excluded_route_prefixes,
(std::vector<IPCIDR>{ipv4_config.excluded_route_prefixes[0],
ipv6_config.excluded_route_prefixes[0]}));
}
TEST(NetworkConfigTest, MergeDNS) {
NetworkConfig ipv4_config;
ipv4_config.dns_servers = {*IPAddress::CreateFromString("8.8.8.8")};
ipv4_config.dns_search_domains = {"example1.com", "example2.com"};
NetworkConfig ipv6_config;
ipv6_config.dns_servers = {
*IPAddress::CreateFromString("2001:4860:4860:0:0:0:0:8888")};
ipv6_config.dns_search_domains = {"example2.com", "example3.com"};
NetworkConfig merged_config =
NetworkConfig::Merge(&ipv4_config, &ipv6_config);
EXPECT_EQ(merged_config.dns_servers,
(std::vector<IPAddress>{ipv6_config.dns_servers[0],
ipv4_config.dns_servers[0]}));
EXPECT_EQ(merged_config.dns_search_domains,
(std::vector<std::string>{"example2.com", "example3.com",
"example1.com"}));
}
TEST(NetworkConfigTest, MergeMTU) {
NetworkConfig ipv4_config;
ipv4_config.mtu = 1000; // less than |kMinIPv6MTU|
NetworkConfig ipv6_config;
ipv6_config.mtu = 1500;
NetworkConfig merged_config = NetworkConfig::Merge(&ipv4_config, nullptr);
EXPECT_EQ(merged_config.mtu, ipv4_config.mtu);
merged_config = NetworkConfig::Merge(nullptr, &ipv6_config);
EXPECT_EQ(merged_config.mtu, ipv6_config.mtu);
// The minimum MTU for dual stack NetworkConfig is |kMinIPv6MTU|.
merged_config = NetworkConfig::Merge(&ipv4_config, &ipv6_config);
EXPECT_EQ(merged_config.mtu, NetworkConfig::kMinIPv6MTU);
}
TEST(NetworkConfigTest, MergeCaptivePortalURI) {
NetworkConfig ipv4_config;
ipv4_config.captive_portal_uri =
HttpUrl::CreateFromString("https://example.org/api/v4");
NetworkConfig ipv6_config;
ipv6_config.captive_portal_uri =
HttpUrl::CreateFromString("https://example.org/api/v6");
NetworkConfig merged_config = NetworkConfig::Merge(&ipv4_config, nullptr);
EXPECT_EQ(merged_config.captive_portal_uri, ipv4_config.captive_portal_uri);
merged_config = NetworkConfig::Merge(&ipv4_config, &ipv6_config);
EXPECT_EQ(merged_config.captive_portal_uri, ipv6_config.captive_portal_uri);
}
} // namespace net_base