blob: 223082adafee422679ef71b4718d19d93f9c5bb3 [file] [log] [blame]
QUICHE teamfd50a402018-12-07 22:54:05 -05001// 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 "net/third_party/quiche/src/http2/http2_constants.h"
6
7#include "testing/gtest/include/gtest/gtest.h"
8
9namespace http2 {
10namespace test {
11namespace {
12
13class Http2ConstantsTest : public testing::Test {};
14
15TEST(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
29TEST(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
60TEST(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
74TEST(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
141TEST(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
163TEST(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
208TEST(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
241TEST(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