xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/http2/http2_constants_test.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 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/http2/http2_constants.h"
6 
7 #include "quiche/common/platform/api/quiche_test.h"
8 
9 namespace http2 {
10 namespace test {
11 namespace {
12 
13 class Http2ConstantsTest : public quiche::test::QuicheTest {};
14 
TEST(Http2ConstantsTest,Http2FrameType)15 TEST(Http2ConstantsTest, Http2FrameType) {
16   EXPECT_EQ(Http2FrameType::DATA, static_cast<Http2FrameType>(0));
17   EXPECT_EQ(Http2FrameType::HEADERS, static_cast<Http2FrameType>(1));
18   EXPECT_EQ(Http2FrameType::PRIORITY, static_cast<Http2FrameType>(2));
19   EXPECT_EQ(Http2FrameType::RST_STREAM, static_cast<Http2FrameType>(3));
20   EXPECT_EQ(Http2FrameType::SETTINGS, static_cast<Http2FrameType>(4));
21   EXPECT_EQ(Http2FrameType::PUSH_PROMISE, static_cast<Http2FrameType>(5));
22   EXPECT_EQ(Http2FrameType::PING, static_cast<Http2FrameType>(6));
23   EXPECT_EQ(Http2FrameType::GOAWAY, static_cast<Http2FrameType>(7));
24   EXPECT_EQ(Http2FrameType::WINDOW_UPDATE, static_cast<Http2FrameType>(8));
25   EXPECT_EQ(Http2FrameType::CONTINUATION, static_cast<Http2FrameType>(9));
26   EXPECT_EQ(Http2FrameType::ALTSVC, static_cast<Http2FrameType>(10));
27 }
28 
TEST(Http2ConstantsTest,Http2FrameTypeToString)29 TEST(Http2ConstantsTest, Http2FrameTypeToString) {
30   EXPECT_EQ("DATA", Http2FrameTypeToString(Http2FrameType::DATA));
31   EXPECT_EQ("HEADERS", Http2FrameTypeToString(Http2FrameType::HEADERS));
32   EXPECT_EQ("PRIORITY", Http2FrameTypeToString(Http2FrameType::PRIORITY));
33   EXPECT_EQ("RST_STREAM", Http2FrameTypeToString(Http2FrameType::RST_STREAM));
34   EXPECT_EQ("SETTINGS", Http2FrameTypeToString(Http2FrameType::SETTINGS));
35   EXPECT_EQ("PUSH_PROMISE",
36             Http2FrameTypeToString(Http2FrameType::PUSH_PROMISE));
37   EXPECT_EQ("PING", Http2FrameTypeToString(Http2FrameType::PING));
38   EXPECT_EQ("GOAWAY", Http2FrameTypeToString(Http2FrameType::GOAWAY));
39   EXPECT_EQ("WINDOW_UPDATE",
40             Http2FrameTypeToString(Http2FrameType::WINDOW_UPDATE));
41   EXPECT_EQ("CONTINUATION",
42             Http2FrameTypeToString(Http2FrameType::CONTINUATION));
43   EXPECT_EQ("ALTSVC", Http2FrameTypeToString(Http2FrameType::ALTSVC));
44 
45   EXPECT_EQ("DATA", Http2FrameTypeToString(0));
46   EXPECT_EQ("HEADERS", Http2FrameTypeToString(1));
47   EXPECT_EQ("PRIORITY", Http2FrameTypeToString(2));
48   EXPECT_EQ("RST_STREAM", Http2FrameTypeToString(3));
49   EXPECT_EQ("SETTINGS", Http2FrameTypeToString(4));
50   EXPECT_EQ("PUSH_PROMISE", Http2FrameTypeToString(5));
51   EXPECT_EQ("PING", Http2FrameTypeToString(6));
52   EXPECT_EQ("GOAWAY", Http2FrameTypeToString(7));
53   EXPECT_EQ("WINDOW_UPDATE", Http2FrameTypeToString(8));
54   EXPECT_EQ("CONTINUATION", Http2FrameTypeToString(9));
55   EXPECT_EQ("ALTSVC", Http2FrameTypeToString(10));
56 
57   EXPECT_EQ("UnknownFrameType(99)", Http2FrameTypeToString(99));
58 }
59 
TEST(Http2ConstantsTest,Http2FrameFlag)60 TEST(Http2ConstantsTest, Http2FrameFlag) {
61   EXPECT_EQ(Http2FrameFlag::END_STREAM, static_cast<Http2FrameFlag>(0x01));
62   EXPECT_EQ(Http2FrameFlag::ACK, static_cast<Http2FrameFlag>(0x01));
63   EXPECT_EQ(Http2FrameFlag::END_HEADERS, static_cast<Http2FrameFlag>(0x04));
64   EXPECT_EQ(Http2FrameFlag::PADDED, static_cast<Http2FrameFlag>(0x08));
65   EXPECT_EQ(Http2FrameFlag::PRIORITY, static_cast<Http2FrameFlag>(0x20));
66 
67   EXPECT_EQ(Http2FrameFlag::END_STREAM, 0x01);
68   EXPECT_EQ(Http2FrameFlag::ACK, 0x01);
69   EXPECT_EQ(Http2FrameFlag::END_HEADERS, 0x04);
70   EXPECT_EQ(Http2FrameFlag::PADDED, 0x08);
71   EXPECT_EQ(Http2FrameFlag::PRIORITY, 0x20);
72 }
73 
TEST(Http2ConstantsTest,Http2FrameFlagsToString)74 TEST(Http2ConstantsTest, Http2FrameFlagsToString) {
75   // Single flags...
76 
77   // 0b00000001
78   EXPECT_EQ("END_STREAM", Http2FrameFlagsToString(Http2FrameType::DATA,
79                                                   Http2FrameFlag::END_STREAM));
80   EXPECT_EQ("END_STREAM",
81             Http2FrameFlagsToString(Http2FrameType::HEADERS, 0x01));
82   EXPECT_EQ("ACK", Http2FrameFlagsToString(Http2FrameType::SETTINGS,
83                                            Http2FrameFlag::ACK));
84   EXPECT_EQ("ACK", Http2FrameFlagsToString(Http2FrameType::PING, 0x01));
85 
86   // 0b00000010
87   EXPECT_EQ("0x02", Http2FrameFlagsToString(0xff, 0x02));
88 
89   // 0b00000100
90   EXPECT_EQ("END_HEADERS",
91             Http2FrameFlagsToString(Http2FrameType::HEADERS,
92                                     Http2FrameFlag::END_HEADERS));
93   EXPECT_EQ("END_HEADERS",
94             Http2FrameFlagsToString(Http2FrameType::PUSH_PROMISE, 0x04));
95   EXPECT_EQ("END_HEADERS", Http2FrameFlagsToString(0x09, 0x04));
96   EXPECT_EQ("0x04", Http2FrameFlagsToString(0xff, 0x04));
97 
98   // 0b00001000
99   EXPECT_EQ("PADDED", Http2FrameFlagsToString(Http2FrameType::DATA,
100                                               Http2FrameFlag::PADDED));
101   EXPECT_EQ("PADDED", Http2FrameFlagsToString(Http2FrameType::HEADERS, 0x08));
102   EXPECT_EQ("PADDED", Http2FrameFlagsToString(0x05, 0x08));
103   EXPECT_EQ("0x08", Http2FrameFlagsToString(0xff, Http2FrameFlag::PADDED));
104 
105   // 0b00010000
106   EXPECT_EQ("0x10", Http2FrameFlagsToString(Http2FrameType::SETTINGS, 0x10));
107 
108   // 0b00100000
109   EXPECT_EQ("PRIORITY", Http2FrameFlagsToString(Http2FrameType::HEADERS, 0x20));
110   EXPECT_EQ("0x20",
111             Http2FrameFlagsToString(Http2FrameType::PUSH_PROMISE, 0x20));
112 
113   // 0b01000000
114   EXPECT_EQ("0x40", Http2FrameFlagsToString(0xff, 0x40));
115 
116   // 0b10000000
117   EXPECT_EQ("0x80", Http2FrameFlagsToString(0xff, 0x80));
118 
119   // Combined flags...
120 
121   EXPECT_EQ("END_STREAM|PADDED|0xf6",
122             Http2FrameFlagsToString(Http2FrameType::DATA, 0xff));
123   EXPECT_EQ("END_STREAM|END_HEADERS|PADDED|PRIORITY|0xd2",
124             Http2FrameFlagsToString(Http2FrameType::HEADERS, 0xff));
125   EXPECT_EQ("0xff", Http2FrameFlagsToString(Http2FrameType::PRIORITY, 0xff));
126   EXPECT_EQ("0xff", Http2FrameFlagsToString(Http2FrameType::RST_STREAM, 0xff));
127   EXPECT_EQ("ACK|0xfe",
128             Http2FrameFlagsToString(Http2FrameType::SETTINGS, 0xff));
129   EXPECT_EQ("END_HEADERS|PADDED|0xf3",
130             Http2FrameFlagsToString(Http2FrameType::PUSH_PROMISE, 0xff));
131   EXPECT_EQ("ACK|0xfe", Http2FrameFlagsToString(Http2FrameType::PING, 0xff));
132   EXPECT_EQ("0xff", Http2FrameFlagsToString(Http2FrameType::GOAWAY, 0xff));
133   EXPECT_EQ("0xff",
134             Http2FrameFlagsToString(Http2FrameType::WINDOW_UPDATE, 0xff));
135   EXPECT_EQ("END_HEADERS|0xfb",
136             Http2FrameFlagsToString(Http2FrameType::CONTINUATION, 0xff));
137   EXPECT_EQ("0xff", Http2FrameFlagsToString(Http2FrameType::ALTSVC, 0xff));
138   EXPECT_EQ("0xff", Http2FrameFlagsToString(0xff, 0xff));
139 }
140 
TEST(Http2ConstantsTest,Http2ErrorCode)141 TEST(Http2ConstantsTest, Http2ErrorCode) {
142   EXPECT_EQ(Http2ErrorCode::HTTP2_NO_ERROR, static_cast<Http2ErrorCode>(0x0));
143   EXPECT_EQ(Http2ErrorCode::PROTOCOL_ERROR, static_cast<Http2ErrorCode>(0x1));
144   EXPECT_EQ(Http2ErrorCode::INTERNAL_ERROR, static_cast<Http2ErrorCode>(0x2));
145   EXPECT_EQ(Http2ErrorCode::FLOW_CONTROL_ERROR,
146             static_cast<Http2ErrorCode>(0x3));
147   EXPECT_EQ(Http2ErrorCode::SETTINGS_TIMEOUT, static_cast<Http2ErrorCode>(0x4));
148   EXPECT_EQ(Http2ErrorCode::STREAM_CLOSED, static_cast<Http2ErrorCode>(0x5));
149   EXPECT_EQ(Http2ErrorCode::FRAME_SIZE_ERROR, static_cast<Http2ErrorCode>(0x6));
150   EXPECT_EQ(Http2ErrorCode::REFUSED_STREAM, static_cast<Http2ErrorCode>(0x7));
151   EXPECT_EQ(Http2ErrorCode::CANCEL, static_cast<Http2ErrorCode>(0x8));
152   EXPECT_EQ(Http2ErrorCode::COMPRESSION_ERROR,
153             static_cast<Http2ErrorCode>(0x9));
154   EXPECT_EQ(Http2ErrorCode::CONNECT_ERROR, static_cast<Http2ErrorCode>(0xa));
155   EXPECT_EQ(Http2ErrorCode::ENHANCE_YOUR_CALM,
156             static_cast<Http2ErrorCode>(0xb));
157   EXPECT_EQ(Http2ErrorCode::INADEQUATE_SECURITY,
158             static_cast<Http2ErrorCode>(0xc));
159   EXPECT_EQ(Http2ErrorCode::HTTP_1_1_REQUIRED,
160             static_cast<Http2ErrorCode>(0xd));
161 }
162 
TEST(Http2ConstantsTest,Http2ErrorCodeToString)163 TEST(Http2ConstantsTest, Http2ErrorCodeToString) {
164   EXPECT_EQ("NO_ERROR", Http2ErrorCodeToString(Http2ErrorCode::HTTP2_NO_ERROR));
165   EXPECT_EQ("NO_ERROR", Http2ErrorCodeToString(0x0));
166   EXPECT_EQ("PROTOCOL_ERROR",
167             Http2ErrorCodeToString(Http2ErrorCode::PROTOCOL_ERROR));
168   EXPECT_EQ("PROTOCOL_ERROR", Http2ErrorCodeToString(0x1));
169   EXPECT_EQ("INTERNAL_ERROR",
170             Http2ErrorCodeToString(Http2ErrorCode::INTERNAL_ERROR));
171   EXPECT_EQ("INTERNAL_ERROR", Http2ErrorCodeToString(0x2));
172   EXPECT_EQ("FLOW_CONTROL_ERROR",
173             Http2ErrorCodeToString(Http2ErrorCode::FLOW_CONTROL_ERROR));
174   EXPECT_EQ("FLOW_CONTROL_ERROR", Http2ErrorCodeToString(0x3));
175   EXPECT_EQ("SETTINGS_TIMEOUT",
176             Http2ErrorCodeToString(Http2ErrorCode::SETTINGS_TIMEOUT));
177   EXPECT_EQ("SETTINGS_TIMEOUT", Http2ErrorCodeToString(0x4));
178   EXPECT_EQ("STREAM_CLOSED",
179             Http2ErrorCodeToString(Http2ErrorCode::STREAM_CLOSED));
180   EXPECT_EQ("STREAM_CLOSED", Http2ErrorCodeToString(0x5));
181   EXPECT_EQ("FRAME_SIZE_ERROR",
182             Http2ErrorCodeToString(Http2ErrorCode::FRAME_SIZE_ERROR));
183   EXPECT_EQ("FRAME_SIZE_ERROR", Http2ErrorCodeToString(0x6));
184   EXPECT_EQ("REFUSED_STREAM",
185             Http2ErrorCodeToString(Http2ErrorCode::REFUSED_STREAM));
186   EXPECT_EQ("REFUSED_STREAM", Http2ErrorCodeToString(0x7));
187   EXPECT_EQ("CANCEL", Http2ErrorCodeToString(Http2ErrorCode::CANCEL));
188   EXPECT_EQ("CANCEL", Http2ErrorCodeToString(0x8));
189   EXPECT_EQ("COMPRESSION_ERROR",
190             Http2ErrorCodeToString(Http2ErrorCode::COMPRESSION_ERROR));
191   EXPECT_EQ("COMPRESSION_ERROR", Http2ErrorCodeToString(0x9));
192   EXPECT_EQ("CONNECT_ERROR",
193             Http2ErrorCodeToString(Http2ErrorCode::CONNECT_ERROR));
194   EXPECT_EQ("CONNECT_ERROR", Http2ErrorCodeToString(0xa));
195   EXPECT_EQ("ENHANCE_YOUR_CALM",
196             Http2ErrorCodeToString(Http2ErrorCode::ENHANCE_YOUR_CALM));
197   EXPECT_EQ("ENHANCE_YOUR_CALM", Http2ErrorCodeToString(0xb));
198   EXPECT_EQ("INADEQUATE_SECURITY",
199             Http2ErrorCodeToString(Http2ErrorCode::INADEQUATE_SECURITY));
200   EXPECT_EQ("INADEQUATE_SECURITY", Http2ErrorCodeToString(0xc));
201   EXPECT_EQ("HTTP_1_1_REQUIRED",
202             Http2ErrorCodeToString(Http2ErrorCode::HTTP_1_1_REQUIRED));
203   EXPECT_EQ("HTTP_1_1_REQUIRED", Http2ErrorCodeToString(0xd));
204 
205   EXPECT_EQ("UnknownErrorCode(0x123)", Http2ErrorCodeToString(0x123));
206 }
207 
TEST(Http2ConstantsTest,Http2SettingsParameter)208 TEST(Http2ConstantsTest, Http2SettingsParameter) {
209   EXPECT_EQ(Http2SettingsParameter::HEADER_TABLE_SIZE,
210             static_cast<Http2SettingsParameter>(0x1));
211   EXPECT_EQ(Http2SettingsParameter::ENABLE_PUSH,
212             static_cast<Http2SettingsParameter>(0x2));
213   EXPECT_EQ(Http2SettingsParameter::MAX_CONCURRENT_STREAMS,
214             static_cast<Http2SettingsParameter>(0x3));
215   EXPECT_EQ(Http2SettingsParameter::INITIAL_WINDOW_SIZE,
216             static_cast<Http2SettingsParameter>(0x4));
217   EXPECT_EQ(Http2SettingsParameter::MAX_FRAME_SIZE,
218             static_cast<Http2SettingsParameter>(0x5));
219   EXPECT_EQ(Http2SettingsParameter::MAX_HEADER_LIST_SIZE,
220             static_cast<Http2SettingsParameter>(0x6));
221 
222   EXPECT_TRUE(IsSupportedHttp2SettingsParameter(
223       Http2SettingsParameter::HEADER_TABLE_SIZE));
224   EXPECT_TRUE(
225       IsSupportedHttp2SettingsParameter(Http2SettingsParameter::ENABLE_PUSH));
226   EXPECT_TRUE(IsSupportedHttp2SettingsParameter(
227       Http2SettingsParameter::MAX_CONCURRENT_STREAMS));
228   EXPECT_TRUE(IsSupportedHttp2SettingsParameter(
229       Http2SettingsParameter::INITIAL_WINDOW_SIZE));
230   EXPECT_TRUE(IsSupportedHttp2SettingsParameter(
231       Http2SettingsParameter::MAX_FRAME_SIZE));
232   EXPECT_TRUE(IsSupportedHttp2SettingsParameter(
233       Http2SettingsParameter::MAX_HEADER_LIST_SIZE));
234 
235   EXPECT_FALSE(IsSupportedHttp2SettingsParameter(
236       static_cast<Http2SettingsParameter>(0)));
237   EXPECT_FALSE(IsSupportedHttp2SettingsParameter(
238       static_cast<Http2SettingsParameter>(7)));
239 }
240 
TEST(Http2ConstantsTest,Http2SettingsParameterToString)241 TEST(Http2ConstantsTest, Http2SettingsParameterToString) {
242   EXPECT_EQ("HEADER_TABLE_SIZE",
243             Http2SettingsParameterToString(
244                 Http2SettingsParameter::HEADER_TABLE_SIZE));
245   EXPECT_EQ("HEADER_TABLE_SIZE", Http2SettingsParameterToString(0x1));
246   EXPECT_EQ("ENABLE_PUSH", Http2SettingsParameterToString(
247                                Http2SettingsParameter::ENABLE_PUSH));
248   EXPECT_EQ("ENABLE_PUSH", Http2SettingsParameterToString(0x2));
249   EXPECT_EQ("MAX_CONCURRENT_STREAMS",
250             Http2SettingsParameterToString(
251                 Http2SettingsParameter::MAX_CONCURRENT_STREAMS));
252   EXPECT_EQ("MAX_CONCURRENT_STREAMS", Http2SettingsParameterToString(0x3));
253   EXPECT_EQ("INITIAL_WINDOW_SIZE",
254             Http2SettingsParameterToString(
255                 Http2SettingsParameter::INITIAL_WINDOW_SIZE));
256   EXPECT_EQ("INITIAL_WINDOW_SIZE", Http2SettingsParameterToString(0x4));
257   EXPECT_EQ("MAX_FRAME_SIZE", Http2SettingsParameterToString(
258                                   Http2SettingsParameter::MAX_FRAME_SIZE));
259   EXPECT_EQ("MAX_FRAME_SIZE", Http2SettingsParameterToString(0x5));
260   EXPECT_EQ("MAX_HEADER_LIST_SIZE",
261             Http2SettingsParameterToString(
262                 Http2SettingsParameter::MAX_HEADER_LIST_SIZE));
263   EXPECT_EQ("MAX_HEADER_LIST_SIZE", Http2SettingsParameterToString(0x6));
264 
265   EXPECT_EQ("UnknownSettingsParameter(0x123)",
266             Http2SettingsParameterToString(0x123));
267 }
268 
269 }  // namespace
270 }  // namespace test
271 }  // namespace http2
272