1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net/base/port_util.h"
#include <array>
#include <string>
#include "base/test/metrics/histogram_tester.h"
#include "base/test/scoped_feature_list.h"
#include "net/base/features.h"
#include "net/base/ip_address.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace net {
TEST(NetUtilTest, SetExplicitlyAllowedPortsTest) {
const auto valid = std::to_array<std::vector<uint16_t>>({
{},
{1},
{1, 2},
{1, 2, 3},
{10, 11, 12, 13},
});
for (size_t i = 0; i < std::size(valid); ++i) {
SetExplicitlyAllowedPorts(valid[i]);
EXPECT_EQ(i, GetCountOfExplicitlyAllowedPorts());
}
}
TEST(NetUtilTest, RestrictedAbusePortsTest) {
base::HistogramTester histogram_tester;
base::test::ScopedFeatureList feature_list;
feature_list.InitAndEnableFeatureWithParameters(
features::kRestrictAbusePorts,
{{"restrict_ports", "12345,23456,34567"}, {"monitor_ports", "45678"}});
EXPECT_TRUE(IsPortAllowedForScheme(443, "https"));
for (int port : {12345, 23456, 34567}) {
EXPECT_FALSE(IsPortAllowedForScheme(port, "https"));
}
EXPECT_TRUE(IsPortAllowedForScheme(45678, "https"));
histogram_tester.ExpectTotalCount("Net.RestrictedPorts", 4);
histogram_tester.ExpectBucketCount("Net.RestrictedPorts", 12345, 1);
histogram_tester.ExpectBucketCount("Net.RestrictedPorts", 23456, 1);
histogram_tester.ExpectBucketCount("Net.RestrictedPorts", 34567, 1);
histogram_tester.ExpectBucketCount("Net.RestrictedPorts", 45678, 1);
}
TEST(NetUtilTest, RestrictedAbusePortsLocalhostTest) {
base::HistogramTester histogram_tester;
base::test::ScopedFeatureList feature_list;
feature_list.InitAndEnableFeatureWithParameters(
features::kRestrictAbusePortsOnLocalhost,
{{"localhost_restrict_ports", "12345,23456,34567"}});
ReloadLocalhostRestrictedPortsForTesting();
IPAddress public_address(8, 8, 8, 8);
EXPECT_TRUE(IsPortAllowedForIpEndpoint(IPEndPoint(public_address, 12345)));
EXPECT_TRUE(IsPortAllowedForIpEndpoint(IPEndPoint(public_address, 443)));
EXPECT_TRUE(
IsPortAllowedForIpEndpoint(IPEndPoint(IPAddress::IPv4Localhost(), 443)));
EXPECT_TRUE(
IsPortAllowedForIpEndpoint(IPEndPoint(IPAddress::IPv6Localhost(), 443)));
histogram_tester.ExpectTotalCount("Net.RestrictedLocalhostPorts", 0);
for (int port : {12345, 23456, 34567}) {
EXPECT_FALSE(IsPortAllowedForIpEndpoint(
IPEndPoint(IPAddress::IPv4Localhost(), port)));
EXPECT_FALSE(IsPortAllowedForIpEndpoint(
IPEndPoint(IPAddress::IPv6Localhost(), port)));
}
histogram_tester.ExpectTotalCount("Net.RestrictedLocalhostPorts", 6);
histogram_tester.ExpectBucketCount("Net.RestrictedLocalhostPorts", 12345, 2);
histogram_tester.ExpectBucketCount("Net.RestrictedLocalhostPorts", 23456, 2);
histogram_tester.ExpectBucketCount("Net.RestrictedLocalhostPorts", 34567, 2);
}
TEST(NetUtilTest, RestrictedAbusePortsLocalhostTestNoParamSet) {
base::HistogramTester histogram_tester;
base::test::ScopedFeatureList feature_list;
feature_list.InitAndEnableFeature(features::kRestrictAbusePortsOnLocalhost);
ReloadLocalhostRestrictedPortsForTesting();
IPAddress public_address(8, 8, 8, 8);
EXPECT_TRUE(IsPortAllowedForIpEndpoint(IPEndPoint(public_address, 12345)));
EXPECT_TRUE(IsPortAllowedForIpEndpoint(IPEndPoint(public_address, 443)));
EXPECT_TRUE(
IsPortAllowedForIpEndpoint(IPEndPoint(IPAddress::IPv4Localhost(), 443)));
EXPECT_TRUE(
IsPortAllowedForIpEndpoint(IPEndPoint(IPAddress::IPv6Localhost(), 443)));
histogram_tester.ExpectTotalCount("Net.RestrictedLocalhostPorts", 0);
for (int port : {12345, 23456, 34567}) {
EXPECT_TRUE(IsPortAllowedForIpEndpoint(
IPEndPoint(IPAddress::IPv4Localhost(), port)));
EXPECT_TRUE(IsPortAllowedForIpEndpoint(
IPEndPoint(IPAddress::IPv6Localhost(), port)));
}
histogram_tester.ExpectTotalCount("Net.RestrictedLocalhostPorts", 0);
}
} // namespace net
|