blob: cd0755a978c3fb09544129872009ea97788d56aa [file] [log] [blame]
// 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 "net/base/host_port_pair.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace net {
namespace {
TEST(ClientSocketPool, GroupIdOperators) {
// Each of these lists is in "<" order, as defined by Group::operator< on the
// corresponding field.
// HostPortPair::operator< compares port before host.
const HostPortPair kHostPortPairs[] = {
{"b", 79}, {"a", 80}, {"b", 80}, {"c", 81}, {"a", 443}, {"c", 443},
};
const ClientSocketPool::SocketType kSocketTypes[] = {
ClientSocketPool::SocketType::kHttp,
ClientSocketPool::SocketType::kSsl,
ClientSocketPool::SocketType::kSslVersionInterferenceProbe,
ClientSocketPool::SocketType::kFtp,
};
const bool kPrivacyModes[] = {false, true};
// 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& host_port_pair : kHostPortPairs) {
SCOPED_TRACE(host_port_pair.ToString());
for (const auto& socket_type : kSocketTypes) {
SCOPED_TRACE(static_cast<int>(socket_type));
for (const auto& privacy_mode : kPrivacyModes) {
SCOPED_TRACE(privacy_mode);
ClientSocketPool::GroupId group_id(host_port_pair, socket_type,
privacy_mode);
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) {
EXPECT_EQ("foo:80",
ClientSocketPool::GroupId(HostPortPair("foo", 80),
ClientSocketPool::SocketType::kHttp,
false /* privacy_mode */)
.ToString());
EXPECT_EQ("bar:443",
ClientSocketPool::GroupId(HostPortPair("bar", 443),
ClientSocketPool::SocketType::kHttp,
false /* privacy_mode */)
.ToString());
EXPECT_EQ("pm/bar:80",
ClientSocketPool::GroupId(HostPortPair("bar", 80),
ClientSocketPool::SocketType::kHttp,
true /* privacy_mode */)
.ToString());
EXPECT_EQ("ssl/foo:80",
ClientSocketPool::GroupId(HostPortPair("foo", 80),
ClientSocketPool::SocketType::kSsl,
false /* privacy_mode */)
.ToString());
EXPECT_EQ("ssl/bar:443",
ClientSocketPool::GroupId(HostPortPair("bar", 443),
ClientSocketPool::SocketType::kSsl,
false /* privacy_mode */)
.ToString());
EXPECT_EQ("pm/ssl/bar:80",
ClientSocketPool::GroupId(HostPortPair("bar", 80),
ClientSocketPool::SocketType::kSsl,
true /* privacy_mode */)
.ToString());
EXPECT_EQ("version-interference-probe/ssl/foo:443",
ClientSocketPool::GroupId(
HostPortPair("foo", 443),
ClientSocketPool::SocketType::kSslVersionInterferenceProbe,
false /* privacy_mode */)
.ToString());
EXPECT_EQ("pm/version-interference-probe/ssl/bar:444",
ClientSocketPool::GroupId(
HostPortPair("bar", 444),
ClientSocketPool::SocketType::kSslVersionInterferenceProbe,
true /* privacy_mode */)
.ToString());
EXPECT_EQ("ftp/foo:80",
ClientSocketPool::GroupId(HostPortPair("foo", 80),
ClientSocketPool::SocketType::kFtp,
false /* privacy_mode */)
.ToString());
EXPECT_EQ("pm/ftp/bar:81",
ClientSocketPool::GroupId(HostPortPair("bar", 81),
ClientSocketPool::SocketType::kFtp,
true /* privacy_mode */)
.ToString());
}
} // namespace
} // namespace net