1 // Copyright (c) 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "quiche/quic/core/quic_version_manager.h"
6
7 #include "absl/base/macros.h"
8 #include "quiche/quic/core/quic_versions.h"
9 #include "quiche/quic/platform/api/quic_flags.h"
10 #include "quiche/quic/platform/api/quic_test.h"
11
12 using ::testing::ElementsAre;
13
14 namespace quic {
15 namespace test {
16 namespace {
17
18 class QuicVersionManagerTest : public QuicTest {};
19
TEST_F(QuicVersionManagerTest,QuicVersionManager)20 TEST_F(QuicVersionManagerTest, QuicVersionManager) {
21 static_assert(SupportedVersions().size() == 4u,
22 "Supported versions out of sync");
23 for (const ParsedQuicVersion& version : AllSupportedVersions()) {
24 QuicEnableVersion(version);
25 }
26 QuicDisableVersion(ParsedQuicVersion::RFCv2());
27 QuicDisableVersion(ParsedQuicVersion::RFCv1());
28 QuicDisableVersion(ParsedQuicVersion::Draft29());
29 QuicVersionManager manager(AllSupportedVersions());
30
31 ParsedQuicVersionVector expected_parsed_versions;
32 expected_parsed_versions.push_back(ParsedQuicVersion::Q046());
33
34 EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions());
35
36 EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()),
37 manager.GetSupportedVersions());
38 EXPECT_TRUE(manager.GetSupportedVersionsWithOnlyHttp3().empty());
39 EXPECT_THAT(manager.GetSupportedAlpns(), ElementsAre("h3-Q046"));
40
41 QuicEnableVersion(ParsedQuicVersion::Draft29());
42 expected_parsed_versions.insert(expected_parsed_versions.begin(),
43 ParsedQuicVersion::Draft29());
44 EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions());
45 EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()),
46 manager.GetSupportedVersions());
47 EXPECT_EQ(1u, manager.GetSupportedVersionsWithOnlyHttp3().size());
48 EXPECT_EQ(CurrentSupportedHttp3Versions(),
49 manager.GetSupportedVersionsWithOnlyHttp3());
50 EXPECT_THAT(manager.GetSupportedAlpns(), ElementsAre("h3-29", "h3-Q046"));
51
52 QuicEnableVersion(ParsedQuicVersion::RFCv1());
53 expected_parsed_versions.insert(expected_parsed_versions.begin(),
54 ParsedQuicVersion::RFCv1());
55 EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions());
56 EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()),
57 manager.GetSupportedVersions());
58 EXPECT_EQ(2u, manager.GetSupportedVersionsWithOnlyHttp3().size());
59 EXPECT_EQ(CurrentSupportedHttp3Versions(),
60 manager.GetSupportedVersionsWithOnlyHttp3());
61 EXPECT_THAT(manager.GetSupportedAlpns(),
62 ElementsAre("h3", "h3-29", "h3-Q046"));
63
64 QuicEnableVersion(ParsedQuicVersion::RFCv2());
65 expected_parsed_versions.insert(expected_parsed_versions.begin(),
66 ParsedQuicVersion::RFCv2());
67 EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions());
68 EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()),
69 manager.GetSupportedVersions());
70 EXPECT_EQ(3u, manager.GetSupportedVersionsWithOnlyHttp3().size());
71 EXPECT_EQ(CurrentSupportedHttp3Versions(),
72 manager.GetSupportedVersionsWithOnlyHttp3());
73 EXPECT_THAT(manager.GetSupportedAlpns(),
74 ElementsAre("h3", "h3-29", "h3-Q046"));
75 }
76
77 } // namespace
78 } // namespace test
79 } // namespace quic
80