|  | // Copyright 2013 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/quic/quic_http_utils.h" | 
|  |  | 
|  | #include <limits> | 
|  |  | 
|  | #include "net/third_party/quic/platform/api/quic_endian.h" | 
|  | #include "net/third_party/quiche/src/spdy/core/spdy_alt_svc_wire_format.h" | 
|  | #include "starboard/types.h" | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  |  | 
|  | namespace net { | 
|  | namespace test { | 
|  |  | 
|  | TEST(QuicHttpUtilsTest, ConvertRequestPriorityToQuicPriority) { | 
|  | EXPECT_EQ(0u, ConvertRequestPriorityToQuicPriority(HIGHEST)); | 
|  | EXPECT_EQ(1u, ConvertRequestPriorityToQuicPriority(MEDIUM)); | 
|  | EXPECT_EQ(2u, ConvertRequestPriorityToQuicPriority(LOW)); | 
|  | EXPECT_EQ(3u, ConvertRequestPriorityToQuicPriority(LOWEST)); | 
|  | EXPECT_EQ(4u, ConvertRequestPriorityToQuicPriority(IDLE)); | 
|  | } | 
|  |  | 
|  | TEST(QuicHttpUtilsTest, ConvertQuicPriorityToRequestPriority) { | 
|  | EXPECT_EQ(HIGHEST, ConvertQuicPriorityToRequestPriority(0)); | 
|  | EXPECT_EQ(MEDIUM, ConvertQuicPriorityToRequestPriority(1)); | 
|  | EXPECT_EQ(LOW, ConvertQuicPriorityToRequestPriority(2)); | 
|  | EXPECT_EQ(LOWEST, ConvertQuicPriorityToRequestPriority(3)); | 
|  | EXPECT_EQ(IDLE, ConvertQuicPriorityToRequestPriority(4)); | 
|  | // These are invalid values, but we should still handle them | 
|  | // gracefully. TODO(rtenneti): should we test for all possible values of | 
|  | // uint32_t? | 
|  | for (int i = 5; i < std::numeric_limits<uint8_t>::max(); ++i) { | 
|  | EXPECT_EQ(IDLE, ConvertQuicPriorityToRequestPriority(i)); | 
|  | } | 
|  | } | 
|  |  | 
|  | TEST(QuicHttpUtilsTest, FilterSupportedAltSvcVersions) { | 
|  | quic::QuicTransportVersionVector supported_versions = { | 
|  | quic::QUIC_VERSION_46, quic::QUIC_VERSION_39, quic::QUIC_VERSION_44}; | 
|  |  | 
|  | std::vector<uint32_t> alt_svc_versions_google = {quic::QUIC_VERSION_44, | 
|  | quic::QUIC_VERSION_43}; | 
|  | std::vector<uint32_t> alt_svc_versions_ietf = { | 
|  | QuicVersionToQuicVersionLabel(quic::QUIC_VERSION_44), | 
|  | QuicVersionToQuicVersionLabel(quic::QUIC_VERSION_43)}; | 
|  |  | 
|  | quic::QuicTransportVersionVector supported_alt_svc_versions = { | 
|  | quic::QUIC_VERSION_44}; | 
|  | spdy::SpdyAltSvcWireFormat::AlternativeService altsvc; | 
|  |  | 
|  | altsvc.protocol_id = "quic"; | 
|  | altsvc.version = alt_svc_versions_google; | 
|  | EXPECT_EQ(supported_alt_svc_versions, | 
|  | FilterSupportedAltSvcVersions(altsvc, supported_versions, true)); | 
|  | EXPECT_EQ(supported_alt_svc_versions, | 
|  | FilterSupportedAltSvcVersions(altsvc, supported_versions, false)); | 
|  |  | 
|  | altsvc.protocol_id = "hq"; | 
|  | altsvc.version = alt_svc_versions_ietf; | 
|  | EXPECT_EQ(supported_alt_svc_versions, | 
|  | FilterSupportedAltSvcVersions(altsvc, supported_versions, true)); | 
|  | EXPECT_EQ(quic::QuicTransportVersionVector(), | 
|  | FilterSupportedAltSvcVersions(altsvc, supported_versions, false)); | 
|  |  | 
|  | altsvc.protocol_id = "invalid_protocol"; | 
|  | altsvc.version = alt_svc_versions_ietf; | 
|  | EXPECT_EQ(quic::QuicTransportVersionVector(), | 
|  | FilterSupportedAltSvcVersions(altsvc, supported_versions, true)); | 
|  | EXPECT_EQ(quic::QuicTransportVersionVector(), | 
|  | FilterSupportedAltSvcVersions(altsvc, supported_versions, false)); | 
|  | } | 
|  |  | 
|  | }  // namespace test | 
|  | }  // namespace net |