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() == 5u,
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::Q050());
33 expected_parsed_versions.push_back(ParsedQuicVersion::Q046());
34
35 EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions());
36
37 EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()),
38 manager.GetSupportedVersions());
39 EXPECT_TRUE(manager.GetSupportedVersionsWithOnlyHttp3().empty());
40 EXPECT_THAT(manager.GetSupportedAlpns(), ElementsAre("h3-Q050", "h3-Q046"));
41
42 QuicEnableVersion(ParsedQuicVersion::Draft29());
43 expected_parsed_versions.insert(expected_parsed_versions.begin(),
44 ParsedQuicVersion::Draft29());
45 EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions());
46 EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()),
47 manager.GetSupportedVersions());
48 EXPECT_EQ(1u, manager.GetSupportedVersionsWithOnlyHttp3().size());
49 EXPECT_EQ(CurrentSupportedHttp3Versions(),
50 manager.GetSupportedVersionsWithOnlyHttp3());
51 EXPECT_THAT(manager.GetSupportedAlpns(),
52 ElementsAre("h3-29", "h3-Q050", "h3-Q046"));
53
54 QuicEnableVersion(ParsedQuicVersion::RFCv1());
55 expected_parsed_versions.insert(expected_parsed_versions.begin(),
56 ParsedQuicVersion::RFCv1());
57 EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions());
58 EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()),
59 manager.GetSupportedVersions());
60 EXPECT_EQ(2u, manager.GetSupportedVersionsWithOnlyHttp3().size());
61 EXPECT_EQ(CurrentSupportedHttp3Versions(),
62 manager.GetSupportedVersionsWithOnlyHttp3());
63 EXPECT_THAT(manager.GetSupportedAlpns(),
64 ElementsAre("h3", "h3-29", "h3-Q050", "h3-Q046"));
65
66 QuicEnableVersion(ParsedQuicVersion::RFCv2());
67 expected_parsed_versions.insert(expected_parsed_versions.begin(),
68 ParsedQuicVersion::RFCv2());
69 EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions());
70 EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()),
71 manager.GetSupportedVersions());
72 EXPECT_EQ(3u, manager.GetSupportedVersionsWithOnlyHttp3().size());
73 EXPECT_EQ(CurrentSupportedHttp3Versions(),
74 manager.GetSupportedVersionsWithOnlyHttp3());
75 EXPECT_THAT(manager.GetSupportedAlpns(),
76 ElementsAre("h3", "h3-29", "h3-Q050", "h3-Q046"));
77 }
78
79 } // namespace
80 } // namespace test
81 } // namespace quic
82