blob: 7f9453457fc94b064a152f5f41979c9485e873a1 [file] [log] [blame]
// Copyright (c) 2010 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.
//
// HttpAlternateProtocols is an in-memory data structure used for keeping track
// of which HTTP HostPortPairs have an alternate protocol that can be used
// instead of HTTP on a different port.
#include "net/http/http_alternate_protocols.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace net {
namespace {
TEST(HttpAlternateProtocols, Basic) {
HttpAlternateProtocols alternate_protocols;
HostPortPair test_host_port_pair;
test_host_port_pair.host = "foo";
test_host_port_pair.port = 80;
EXPECT_FALSE(
alternate_protocols.HasAlternateProtocolFor(test_host_port_pair));
alternate_protocols.SetAlternateProtocolFor(test_host_port_pair,
443,
HttpAlternateProtocols::NPN_SPDY);
ASSERT_TRUE(alternate_protocols.HasAlternateProtocolFor(test_host_port_pair));
const HttpAlternateProtocols::PortProtocolPair alternate =
alternate_protocols.GetAlternateProtocolFor(test_host_port_pair);
EXPECT_EQ(443, alternate.port);
EXPECT_EQ(HttpAlternateProtocols::NPN_SPDY, alternate.protocol);
}
TEST(HttpAlternateProtocols, SetBroken) {
HttpAlternateProtocols alternate_protocols;
HostPortPair test_host_port_pair;
test_host_port_pair.host = "foo";
test_host_port_pair.port = 80;
alternate_protocols.MarkBrokenAlternateProtocolFor(test_host_port_pair);
ASSERT_TRUE(alternate_protocols.HasAlternateProtocolFor(test_host_port_pair));
HttpAlternateProtocols::PortProtocolPair alternate =
alternate_protocols.GetAlternateProtocolFor(test_host_port_pair);
EXPECT_EQ(HttpAlternateProtocols::BROKEN, alternate.protocol);
alternate_protocols.SetAlternateProtocolFor(
test_host_port_pair,
1234,
HttpAlternateProtocols::NPN_SPDY),
alternate = alternate_protocols.GetAlternateProtocolFor(test_host_port_pair);
EXPECT_EQ(HttpAlternateProtocols::BROKEN, alternate.protocol)
<< "Second attempt should be ignored.";
}
} // namespace
} // namespace net