xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/core/quic_version_manager_test.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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