• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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