123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- // Copyright 2019 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 "net/socket/client_socket_pool.h"
- #include <string>
- #include <vector>
- #include "base/test/scoped_feature_list.h"
- #include "net/base/features.h"
- #include "net/base/host_port_pair.h"
- #include "net/base/network_isolation_key.h"
- #include "net/base/privacy_mode.h"
- #include "net/base/schemeful_site.h"
- #include "net/dns/public/secure_dns_policy.h"
- #include "testing/gtest/include/gtest/gtest.h"
- #include "url/gurl.h"
- #include "url/scheme_host_port.h"
- #include "url/url_constants.h"
- namespace net {
- namespace {
- TEST(ClientSocketPool, GroupIdOperators) {
- base::test::ScopedFeatureList feature_list;
- feature_list.InitAndEnableFeature(
- features::kPartitionConnectionsByNetworkIsolationKey);
- // Each of these lists is in "<" order, as defined by Group::operator< on the
- // corresponding field.
- const uint16_t kPorts[] = {
- 80,
- 81,
- 443,
- };
- const char* kSchemes[] = {
- url::kHttpScheme,
- url::kHttpsScheme,
- };
- const char* kHosts[] = {
- "a",
- "b",
- "c",
- };
- const PrivacyMode kPrivacyModes[] = {
- PrivacyMode::PRIVACY_MODE_DISABLED,
- PrivacyMode::PRIVACY_MODE_ENABLED,
- };
- const SchemefulSite kSiteA(GURL("http://a.test/"));
- const SchemefulSite kSiteB(GURL("http://b.test/"));
- const NetworkIsolationKey kNetworkIsolationKeys[] = {
- NetworkIsolationKey(kSiteA, kSiteA),
- NetworkIsolationKey(kSiteB, kSiteB),
- };
- const SecureDnsPolicy kDisableSecureDnsValues[] = {SecureDnsPolicy::kAllow,
- SecureDnsPolicy::kDisable};
- // All previously created |group_ids|. They should all be less than the
- // current group under consideration.
- std::vector<ClientSocketPool::GroupId> group_ids;
- // Iterate through all sets of group ids, from least to greatest.
- for (const auto& port : kPorts) {
- SCOPED_TRACE(port);
- for (const char* scheme : kSchemes) {
- SCOPED_TRACE(scheme);
- for (const char* host : kHosts) {
- SCOPED_TRACE(host);
- for (const auto& privacy_mode : kPrivacyModes) {
- SCOPED_TRACE(privacy_mode);
- for (const auto& network_isolation_key : kNetworkIsolationKeys) {
- SCOPED_TRACE(network_isolation_key.ToDebugString());
- for (const auto& secure_dns_policy : kDisableSecureDnsValues) {
- ClientSocketPool::GroupId group_id(
- url::SchemeHostPort(scheme, host, port), privacy_mode,
- network_isolation_key, secure_dns_policy);
- for (const auto& lower_group_id : group_ids) {
- EXPECT_FALSE(lower_group_id == group_id);
- EXPECT_TRUE(lower_group_id < group_id);
- EXPECT_FALSE(group_id < lower_group_id);
- }
- group_ids.push_back(group_id);
- // Compare |group_id| to itself. Use two different copies of
- // |group_id|'s value, since to protect against bugs where an
- // object only equals itself.
- EXPECT_TRUE(group_ids.back() == group_id);
- EXPECT_FALSE(group_ids.back() < group_id);
- EXPECT_FALSE(group_id < group_ids.back());
- }
- }
- }
- }
- }
- }
- }
- TEST(ClientSocketPool, GroupIdToString) {
- base::test::ScopedFeatureList feature_list;
- feature_list.InitAndEnableFeature(
- features::kPartitionConnectionsByNetworkIsolationKey);
- EXPECT_EQ("http://foo <null null>",
- ClientSocketPool::GroupId(
- url::SchemeHostPort(url::kHttpScheme, "foo", 80),
- PrivacyMode::PRIVACY_MODE_DISABLED, NetworkIsolationKey(),
- SecureDnsPolicy::kAllow)
- .ToString());
- EXPECT_EQ("http://bar:443 <null null>",
- ClientSocketPool::GroupId(
- url::SchemeHostPort(url::kHttpScheme, "bar", 443),
- PrivacyMode::PRIVACY_MODE_DISABLED, NetworkIsolationKey(),
- SecureDnsPolicy::kAllow)
- .ToString());
- EXPECT_EQ("pm/http://bar <null null>",
- ClientSocketPool::GroupId(
- url::SchemeHostPort(url::kHttpScheme, "bar", 80),
- PrivacyMode::PRIVACY_MODE_ENABLED, NetworkIsolationKey(),
- SecureDnsPolicy::kAllow)
- .ToString());
- EXPECT_EQ("https://foo:80 <null null>",
- ClientSocketPool::GroupId(
- url::SchemeHostPort(url::kHttpsScheme, "foo", 80),
- PrivacyMode::PRIVACY_MODE_DISABLED, NetworkIsolationKey(),
- SecureDnsPolicy::kAllow)
- .ToString());
- EXPECT_EQ("https://bar <null null>",
- ClientSocketPool::GroupId(
- url::SchemeHostPort(url::kHttpsScheme, "bar", 443),
- PrivacyMode::PRIVACY_MODE_DISABLED, NetworkIsolationKey(),
- SecureDnsPolicy::kAllow)
- .ToString());
- EXPECT_EQ("pm/https://bar:80 <null null>",
- ClientSocketPool::GroupId(
- url::SchemeHostPort(url::kHttpsScheme, "bar", 80),
- PrivacyMode::PRIVACY_MODE_ENABLED, NetworkIsolationKey(),
- SecureDnsPolicy::kAllow)
- .ToString());
- EXPECT_EQ("https://foo <https://foo.test https://bar.test>",
- ClientSocketPool::GroupId(
- url::SchemeHostPort(url::kHttpsScheme, "foo", 443),
- PrivacyMode::PRIVACY_MODE_DISABLED,
- NetworkIsolationKey(SchemefulSite(GURL("https://foo.test")),
- SchemefulSite(GURL("https://bar.test"))),
- SecureDnsPolicy::kAllow)
- .ToString());
- EXPECT_EQ("dsd/pm/https://bar:80 <null null>",
- ClientSocketPool::GroupId(
- url::SchemeHostPort(url::kHttpsScheme, "bar", 80),
- PrivacyMode::PRIVACY_MODE_ENABLED, NetworkIsolationKey(),
- SecureDnsPolicy::kDisable)
- .ToString());
- }
- TEST(ClientSocketPool, PartitionConnectionsByNetworkIsolationKeyDisabled) {
- const SchemefulSite kSiteFoo(GURL("https://foo.com"));
- const SchemefulSite kSiteBar(GURL("https://bar.com"));
- base::test::ScopedFeatureList feature_list;
- feature_list.InitAndDisableFeature(
- features::kPartitionConnectionsByNetworkIsolationKey);
- ClientSocketPool::GroupId group_id1(
- url::SchemeHostPort(url::kHttpsScheme, "foo", 443),
- PrivacyMode::PRIVACY_MODE_DISABLED,
- NetworkIsolationKey(kSiteFoo, kSiteFoo), SecureDnsPolicy::kAllow);
- ClientSocketPool::GroupId group_id2(
- url::SchemeHostPort(url::kHttpsScheme, "foo", 443),
- PrivacyMode::PRIVACY_MODE_DISABLED,
- NetworkIsolationKey(kSiteBar, kSiteBar), SecureDnsPolicy::kAllow);
- EXPECT_FALSE(group_id1.network_isolation_key().IsFullyPopulated());
- EXPECT_FALSE(group_id2.network_isolation_key().IsFullyPopulated());
- EXPECT_EQ(group_id1.network_isolation_key(),
- group_id2.network_isolation_key());
- EXPECT_EQ(group_id1, group_id2);
- EXPECT_EQ("https://foo", group_id1.ToString());
- EXPECT_EQ("https://foo", group_id2.ToString());
- }
- } // namespace
- } // namespace net
|