OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/spdy/spdy_protocol.h" | 5 #include "net/spdy/spdy_protocol.h" |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "net/spdy/spdy_bitmasks.h" | 8 #include "net/spdy/spdy_bitmasks.h" |
9 #include "net/spdy/spdy_framer.h" | 9 #include "net/spdy/spdy_framer.h" |
10 #include "testing/platform_test.h" | 10 #include "testing/platform_test.h" |
(...skipping 27 matching lines...) Expand all Loading... | |
38 using spdy::SpdySynReplyControlFrame; | 38 using spdy::SpdySynReplyControlFrame; |
39 using spdy::SpdySynStreamControlFrame; | 39 using spdy::SpdySynStreamControlFrame; |
40 using spdy::SpdyWindowUpdateControlFrame; | 40 using spdy::SpdyWindowUpdateControlFrame; |
41 using spdy::WINDOW_UPDATE; | 41 using spdy::WINDOW_UPDATE; |
42 using spdy::kLengthMask; | 42 using spdy::kLengthMask; |
43 using spdy::kStreamIdMask; | 43 using spdy::kStreamIdMask; |
44 | 44 |
45 namespace { | 45 namespace { |
46 | 46 |
47 // Default SPDY version for unit tests. | 47 // Default SPDY version for unit tests. |
48 const int SPDY_VERSION_FOR_TESTS = 3; | 48 int SPDY_VERSION_FOR_TESTS = 2; |
Ryan Hamilton
2012/03/13 19:59:12
Ditto on my advice from the other test about makin
ramant (doing other things)
2012/03/13 21:43:02
Done.
| |
49 | |
50 enum SpdyProtocolTestTypes { | |
51 SPDY2, | |
52 SPDY3, | |
53 }; | |
54 | |
55 class SpdyProtocolTest | |
56 : public ::testing::TestWithParam<SpdyProtocolTestTypes> { | |
57 protected: | |
58 virtual void SetUp() { | |
59 SPDY_VERSION_FOR_TESTS = (GetParam() == SPDY2) ? 2 : 3; | |
60 } | |
61 | |
62 virtual void TearDown() {} | |
63 | |
64 }; | |
65 | |
66 class SpdyProtocolDeathTest | |
Ryan Hamilton
2012/03/13 19:59:12
I might be missing something, but if this class is
ramant (doing other things)
2012/03/13 21:43:02
Done.
| |
67 : public ::testing::TestWithParam<SpdyProtocolTestTypes> { | |
68 protected: | |
69 virtual void SetUp() { | |
70 SPDY_VERSION_FOR_TESTS = (GetParam() == SPDY2) ? 2 : 3; | |
71 } | |
72 | |
73 virtual void TearDown() {} | |
74 | |
75 }; | |
76 | |
77 //----------------------------------------------------------------------------- | |
78 // All tests are run with two different SPDY versions: SPDY/2 and SPDY/3. | |
79 INSTANTIATE_TEST_CASE_P(SpdyProtocolTests, | |
80 SpdyProtocolTest, | |
81 ::testing::Values(SPDY2, SPDY3)); | |
49 | 82 |
50 // Test our protocol constants | 83 // Test our protocol constants |
51 TEST(SpdyProtocolSpdy3Test, ProtocolConstants) { | 84 TEST(SpdyProtocolTest, ProtocolConstants) { |
Ryan Hamilton
2012/03/13 19:59:12
Can the various TEST()s be replaced with TEST_P()s
ramant (doing other things)
2012/03/13 21:43:02
Done.
| |
52 EXPECT_EQ(8u, SpdyFrame::kHeaderSize); | 85 EXPECT_EQ(8u, SpdyFrame::kHeaderSize); |
53 EXPECT_EQ(8u, SpdyDataFrame::size()); | 86 EXPECT_EQ(8u, SpdyDataFrame::size()); |
54 EXPECT_EQ(8u, SpdyControlFrame::kHeaderSize); | 87 EXPECT_EQ(8u, SpdyControlFrame::kHeaderSize); |
55 EXPECT_EQ(18u, SpdySynStreamControlFrame::size()); | 88 EXPECT_EQ(18u, SpdySynStreamControlFrame::size()); |
56 EXPECT_EQ(12u, SpdySynReplyControlFrame::size()); | 89 EXPECT_EQ(12u, SpdySynReplyControlFrame::size()); |
57 EXPECT_EQ(16u, SpdyRstStreamControlFrame::size()); | 90 EXPECT_EQ(16u, SpdyRstStreamControlFrame::size()); |
58 EXPECT_EQ(12u, SpdySettingsControlFrame::size()); | 91 EXPECT_EQ(12u, SpdySettingsControlFrame::size()); |
59 EXPECT_EQ(12u, SpdyPingControlFrame::size()); | 92 EXPECT_EQ(12u, SpdyPingControlFrame::size()); |
60 EXPECT_EQ(12u, SpdyGoAwayControlFrame::size()); | 93 EXPECT_EQ(12u, SpdyGoAwayControlFrame::size()); |
61 EXPECT_EQ(12u, SpdyHeadersControlFrame::size()); | 94 EXPECT_EQ(12u, SpdyHeadersControlFrame::size()); |
62 EXPECT_EQ(16u, SpdyWindowUpdateControlFrame::size()); | 95 EXPECT_EQ(16u, SpdyWindowUpdateControlFrame::size()); |
63 EXPECT_EQ(4u, sizeof(FlagsAndLength)); | 96 EXPECT_EQ(4u, sizeof(FlagsAndLength)); |
64 EXPECT_EQ(1, SYN_STREAM); | 97 EXPECT_EQ(1, SYN_STREAM); |
65 EXPECT_EQ(2, SYN_REPLY); | 98 EXPECT_EQ(2, SYN_REPLY); |
66 EXPECT_EQ(3, RST_STREAM); | 99 EXPECT_EQ(3, RST_STREAM); |
67 EXPECT_EQ(4, SETTINGS); | 100 EXPECT_EQ(4, SETTINGS); |
68 EXPECT_EQ(5, NOOP); | 101 EXPECT_EQ(5, NOOP); |
69 EXPECT_EQ(6, PING); | 102 EXPECT_EQ(6, PING); |
70 EXPECT_EQ(7, GOAWAY); | 103 EXPECT_EQ(7, GOAWAY); |
71 EXPECT_EQ(8, HEADERS); | 104 EXPECT_EQ(8, HEADERS); |
72 EXPECT_EQ(9, WINDOW_UPDATE); | 105 EXPECT_EQ(9, WINDOW_UPDATE); |
73 } | 106 } |
74 | 107 |
75 // Test some of the protocol helper functions | 108 // Test some of the protocol helper functions |
76 TEST(SpdyProtocolSpdy3Test, FrameStructs) { | 109 TEST(SpdyProtocolTest, FrameStructs) { |
77 SpdyFrame frame(SpdyFrame::kHeaderSize); | 110 SpdyFrame frame(SpdyFrame::kHeaderSize); |
78 frame.set_length(12345); | 111 frame.set_length(12345); |
79 frame.set_flags(10); | 112 frame.set_flags(10); |
80 EXPECT_EQ(12345u, frame.length()); | 113 EXPECT_EQ(12345u, frame.length()); |
81 EXPECT_EQ(10u, frame.flags()); | 114 EXPECT_EQ(10u, frame.flags()); |
82 EXPECT_FALSE(frame.is_control_frame()); | 115 EXPECT_FALSE(frame.is_control_frame()); |
83 | 116 |
84 frame.set_length(0); | 117 frame.set_length(0); |
85 frame.set_flags(10); | 118 frame.set_flags(10); |
86 EXPECT_EQ(0u, frame.length()); | 119 EXPECT_EQ(0u, frame.length()); |
87 EXPECT_EQ(10u, frame.flags()); | 120 EXPECT_EQ(10u, frame.flags()); |
88 EXPECT_FALSE(frame.is_control_frame()); | 121 EXPECT_FALSE(frame.is_control_frame()); |
89 } | 122 } |
90 | 123 |
91 TEST(SpdyProtocolSpdy3Test, DataFrameStructs) { | 124 TEST(SpdyProtocolTest, DataFrameStructs) { |
92 SpdyDataFrame data_frame; | 125 SpdyDataFrame data_frame; |
93 data_frame.set_stream_id(12345); | 126 data_frame.set_stream_id(12345); |
94 EXPECT_EQ(12345u, data_frame.stream_id()); | 127 EXPECT_EQ(12345u, data_frame.stream_id()); |
95 } | 128 } |
96 | 129 |
97 TEST(SpdyProtocolSpdy3Test, ControlFrameStructs) { | 130 TEST_P(SpdyProtocolTest, ControlFrameStructs) { |
98 SpdyFramer framer(SPDY_VERSION_FOR_TESTS); | 131 SpdyFramer framer(SPDY_VERSION_FOR_TESTS); |
99 SpdyHeaderBlock headers; | 132 SpdyHeaderBlock headers; |
100 | 133 |
101 scoped_ptr<SpdySynStreamControlFrame> syn_frame( | 134 scoped_ptr<SpdySynStreamControlFrame> syn_frame( |
102 framer.CreateSynStream(123, 456, 2, CONTROL_FLAG_FIN, false, &headers)); | 135 framer.CreateSynStream(123, 456, 2, CONTROL_FLAG_FIN, false, &headers)); |
103 EXPECT_EQ(framer.protocol_version(), syn_frame->version()); | 136 EXPECT_EQ(framer.protocol_version(), syn_frame->version()); |
104 EXPECT_TRUE(syn_frame->is_control_frame()); | 137 EXPECT_TRUE(syn_frame->is_control_frame()); |
105 EXPECT_EQ(SYN_STREAM, syn_frame->type()); | 138 EXPECT_EQ(SYN_STREAM, syn_frame->type()); |
106 EXPECT_EQ(123u, syn_frame->stream_id()); | 139 EXPECT_EQ(123u, syn_frame->stream_id()); |
107 EXPECT_EQ(456u, syn_frame->associated_stream_id()); | 140 EXPECT_EQ(456u, syn_frame->associated_stream_id()); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
164 | 197 |
165 scoped_ptr<SpdyWindowUpdateControlFrame> window_update_frame( | 198 scoped_ptr<SpdyWindowUpdateControlFrame> window_update_frame( |
166 framer.CreateWindowUpdate(123, 456)); | 199 framer.CreateWindowUpdate(123, 456)); |
167 EXPECT_EQ(framer.protocol_version(), window_update_frame->version()); | 200 EXPECT_EQ(framer.protocol_version(), window_update_frame->version()); |
168 EXPECT_TRUE(window_update_frame->is_control_frame()); | 201 EXPECT_TRUE(window_update_frame->is_control_frame()); |
169 EXPECT_EQ(WINDOW_UPDATE, window_update_frame->type()); | 202 EXPECT_EQ(WINDOW_UPDATE, window_update_frame->type()); |
170 EXPECT_EQ(123u, window_update_frame->stream_id()); | 203 EXPECT_EQ(123u, window_update_frame->stream_id()); |
171 EXPECT_EQ(456u, window_update_frame->delta_window_size()); | 204 EXPECT_EQ(456u, window_update_frame->delta_window_size()); |
172 } | 205 } |
173 | 206 |
174 TEST(SpdyProtocolSpdy3Test, TestDataFrame) { | 207 TEST(SpdyProtocolTest, TestDataFrame) { |
175 SpdyDataFrame frame; | 208 SpdyDataFrame frame; |
176 | 209 |
177 // Set the stream ID to various values. | 210 // Set the stream ID to various values. |
178 frame.set_stream_id(0); | 211 frame.set_stream_id(0); |
179 EXPECT_EQ(0u, frame.stream_id()); | 212 EXPECT_EQ(0u, frame.stream_id()); |
180 EXPECT_FALSE(frame.is_control_frame()); | 213 EXPECT_FALSE(frame.is_control_frame()); |
181 frame.set_stream_id(~0 & kStreamIdMask); | 214 frame.set_stream_id(~0 & kStreamIdMask); |
182 EXPECT_EQ(~0 & kStreamIdMask, frame.stream_id()); | 215 EXPECT_EQ(~0 & kStreamIdMask, frame.stream_id()); |
183 EXPECT_FALSE(frame.is_control_frame()); | 216 EXPECT_FALSE(frame.is_control_frame()); |
184 | 217 |
(...skipping 22 matching lines...) Expand all Loading... | |
207 frame.set_flags(all_flags); | 240 frame.set_flags(all_flags); |
208 flags = frame.flags(); | 241 flags = frame.flags(); |
209 EXPECT_EQ(all_flags, flags); | 242 EXPECT_EQ(all_flags, flags); |
210 EXPECT_EQ(length, frame.length()); | 243 EXPECT_EQ(length, frame.length()); |
211 frame.set_flags(5u); | 244 frame.set_flags(5u); |
212 EXPECT_EQ(5u, frame.flags()); | 245 EXPECT_EQ(5u, frame.flags()); |
213 EXPECT_EQ(length, frame.length()); | 246 EXPECT_EQ(length, frame.length()); |
214 } | 247 } |
215 | 248 |
216 // Test various types of SETTINGS frames. | 249 // Test various types of SETTINGS frames. |
217 TEST(SpdyProtocolSpdy3Test, TestSpdySettingsFrame) { | 250 TEST_P(SpdyProtocolTest, TestSpdySettingsFrame) { |
218 SpdyFramer framer(SPDY_VERSION_FOR_TESTS); | 251 SpdyFramer framer(SPDY_VERSION_FOR_TESTS); |
219 | 252 |
220 // Create a settings frame with no settings. | 253 // Create a settings frame with no settings. |
221 SpdySettings settings; | 254 SpdySettings settings; |
222 scoped_ptr<SpdySettingsControlFrame> settings_frame( | 255 scoped_ptr<SpdySettingsControlFrame> settings_frame( |
223 framer.CreateSettings(settings)); | 256 framer.CreateSettings(settings)); |
224 EXPECT_EQ(framer.protocol_version(), settings_frame->version()); | 257 EXPECT_EQ(framer.protocol_version(), settings_frame->version()); |
225 EXPECT_TRUE(settings_frame->is_control_frame()); | 258 EXPECT_TRUE(settings_frame->is_control_frame()); |
226 EXPECT_EQ(SETTINGS, settings_frame->type()); | 259 EXPECT_EQ(SETTINGS, settings_frame->type()); |
227 EXPECT_EQ(0u, settings_frame->num_entries()); | 260 EXPECT_EQ(0u, settings_frame->num_entries()); |
(...skipping 27 matching lines...) Expand all Loading... | |
255 uint32 value = it->second; | 288 uint32 value = it->second; |
256 EXPECT_EQ(ids[pos].flags(), parsed.flags()); | 289 EXPECT_EQ(ids[pos].flags(), parsed.flags()); |
257 EXPECT_EQ(ids[pos].id(), parsed.id()); | 290 EXPECT_EQ(ids[pos].id(), parsed.id()); |
258 EXPECT_EQ(static_cast<uint32>(pos), value); | 291 EXPECT_EQ(static_cast<uint32>(pos), value); |
259 ++it; | 292 ++it; |
260 ++pos; | 293 ++pos; |
261 } | 294 } |
262 } | 295 } |
263 } | 296 } |
264 | 297 |
265 TEST(SpdyProtocolSpdy3Test, HasHeaderBlock) { | 298 TEST(SpdyProtocolTest, HasHeaderBlock) { |
266 SpdyControlFrame frame(SpdyControlFrame::kHeaderSize); | 299 SpdyControlFrame frame(SpdyControlFrame::kHeaderSize); |
267 for (SpdyControlType type = SYN_STREAM; | 300 for (SpdyControlType type = SYN_STREAM; |
268 type < NUM_CONTROL_FRAME_TYPES; | 301 type < NUM_CONTROL_FRAME_TYPES; |
269 type = static_cast<SpdyControlType>(type + 1)) { | 302 type = static_cast<SpdyControlType>(type + 1)) { |
270 frame.set_type(type); | 303 frame.set_type(type); |
271 if (type == SYN_STREAM || type == SYN_REPLY || type == HEADERS) { | 304 if (type == SYN_STREAM || type == SYN_REPLY || type == HEADERS) { |
272 EXPECT_TRUE(frame.has_header_block()); | 305 EXPECT_TRUE(frame.has_header_block()); |
273 } else { | 306 } else { |
274 EXPECT_FALSE(frame.has_header_block()); | 307 EXPECT_FALSE(frame.has_header_block()); |
275 } | 308 } |
276 } | 309 } |
277 } | 310 } |
278 | 311 |
312 //----------------------------------------------------------------------------- | |
313 // All tests are run with two different SPDY versions: SPDY/2 and SPDY/3. | |
314 INSTANTIATE_TEST_CASE_P(SpdyProtocolDeathTests, | |
315 SpdyProtocolDeathTest, | |
316 ::testing::Values(SPDY2, SPDY3)); | |
317 | |
279 // Make sure that overflows both die in debug mode, and do not cause problems | 318 // Make sure that overflows both die in debug mode, and do not cause problems |
280 // in opt mode. Note: The EXPECT_DEBUG_DEATH call does not work on Win32 yet, | 319 // in opt mode. Note: The EXPECT_DEBUG_DEATH call does not work on Win32 yet, |
281 // so we comment it out. | 320 // so we comment it out. |
282 TEST(SpdyProtocolDeathSpdy3Test, TestDataFrame) { | 321 TEST(SpdyProtocolDeathTest, TestDataFrame) { |
283 SpdyDataFrame frame; | 322 SpdyDataFrame frame; |
284 | 323 |
285 frame.set_stream_id(0); | 324 frame.set_stream_id(0); |
286 // TODO(mbelshe): implement EXPECT_DEBUG_DEATH on windows. | 325 // TODO(mbelshe): implement EXPECT_DEBUG_DEATH on windows. |
287 #if !defined(WIN32) && defined(GTEST_HAS_DEATH_TEST) | 326 #if !defined(WIN32) && defined(GTEST_HAS_DEATH_TEST) |
288 #if !defined(DCHECK_ALWAYS_ON) | 327 #if !defined(DCHECK_ALWAYS_ON) |
289 EXPECT_DEBUG_DEATH(frame.set_stream_id(~0), ""); | 328 EXPECT_DEBUG_DEATH(frame.set_stream_id(~0), ""); |
290 #else | 329 #else |
291 EXPECT_DEATH(frame.set_stream_id(~0), ""); | 330 EXPECT_DEATH(frame.set_stream_id(~0), ""); |
292 #endif | 331 #endif |
293 #endif | 332 #endif |
294 EXPECT_FALSE(frame.is_control_frame()); | 333 EXPECT_FALSE(frame.is_control_frame()); |
295 | 334 |
296 frame.set_flags(0); | 335 frame.set_flags(0); |
297 #if !defined(WIN32) && defined(GTEST_HAS_DEATH_TEST) | 336 #if !defined(WIN32) && defined(GTEST_HAS_DEATH_TEST) |
298 #if !defined(DCHECK_ALWAYS_ON) | 337 #if !defined(DCHECK_ALWAYS_ON) |
299 EXPECT_DEBUG_DEATH(frame.set_length(~0), ""); | 338 EXPECT_DEBUG_DEATH(frame.set_length(~0), ""); |
300 #else | 339 #else |
301 EXPECT_DEATH(frame.set_length(~0), ""); | 340 EXPECT_DEATH(frame.set_length(~0), ""); |
302 #endif | 341 #endif |
303 #endif | 342 #endif |
304 EXPECT_EQ(0, frame.flags()); | 343 EXPECT_EQ(0, frame.flags()); |
305 } | 344 } |
306 | 345 |
307 TEST(SpdyProtocolDeathSpdy3Test, TestSpdyControlFrameStreamId) { | 346 TEST(SpdyProtocolDeathTest, TestSpdyControlFrameStreamId) { |
308 SpdyControlFrame frame_store(SpdySynStreamControlFrame::size()); | 347 SpdyControlFrame frame_store(SpdySynStreamControlFrame::size()); |
309 memset(frame_store.data(), '1', SpdyControlFrame::kHeaderSize); | 348 memset(frame_store.data(), '1', SpdyControlFrame::kHeaderSize); |
310 SpdySynStreamControlFrame* frame = | 349 SpdySynStreamControlFrame* frame = |
311 reinterpret_cast<SpdySynStreamControlFrame*>(&frame_store); | 350 reinterpret_cast<SpdySynStreamControlFrame*>(&frame_store); |
312 | 351 |
313 // Set the stream ID to various values. | 352 // Set the stream ID to various values. |
314 frame->set_stream_id(0); | 353 frame->set_stream_id(0); |
315 EXPECT_EQ(0u, frame->stream_id()); | 354 EXPECT_EQ(0u, frame->stream_id()); |
316 EXPECT_FALSE(frame->is_control_frame()); | 355 EXPECT_FALSE(frame->is_control_frame()); |
317 frame->set_stream_id(kStreamIdMask); | 356 frame->set_stream_id(kStreamIdMask); |
318 EXPECT_EQ(kStreamIdMask, frame->stream_id()); | 357 EXPECT_EQ(kStreamIdMask, frame->stream_id()); |
319 EXPECT_FALSE(frame->is_control_frame()); | 358 EXPECT_FALSE(frame->is_control_frame()); |
320 } | 359 } |
321 | 360 |
322 TEST(SpdyProtocolDeathSpdy3Test, TestSpdyControlFrameVersion) { | 361 TEST(SpdyProtocolDeathTest, TestSpdyControlFrameVersion) { |
323 const unsigned int kVersionMask = 0x7fff; | 362 const unsigned int kVersionMask = 0x7fff; |
324 SpdyControlFrame frame(SpdySynStreamControlFrame::size()); | 363 SpdyControlFrame frame(SpdySynStreamControlFrame::size()); |
325 memset(frame.data(), '1', SpdyControlFrame::kHeaderSize); | 364 memset(frame.data(), '1', SpdyControlFrame::kHeaderSize); |
326 | 365 |
327 // Set the version to various values, and make sure it does not affect the | 366 // Set the version to various values, and make sure it does not affect the |
328 // type. | 367 // type. |
329 frame.set_type(SYN_STREAM); | 368 frame.set_type(SYN_STREAM); |
330 frame.set_version(0); | 369 frame.set_version(0); |
331 EXPECT_EQ(0, frame.version()); | 370 EXPECT_EQ(0, frame.version()); |
332 EXPECT_TRUE(frame.is_control_frame()); | 371 EXPECT_TRUE(frame.is_control_frame()); |
333 EXPECT_EQ(SYN_STREAM, frame.type()); | 372 EXPECT_EQ(SYN_STREAM, frame.type()); |
334 | 373 |
335 SpdySynStreamControlFrame* syn_stream = | 374 SpdySynStreamControlFrame* syn_stream = |
336 reinterpret_cast<SpdySynStreamControlFrame*>(&frame); | 375 reinterpret_cast<SpdySynStreamControlFrame*>(&frame); |
337 syn_stream->set_stream_id(~0 & kVersionMask); | 376 syn_stream->set_stream_id(~0 & kVersionMask); |
338 EXPECT_EQ(~0 & kVersionMask, syn_stream->stream_id()); | 377 EXPECT_EQ(~0 & kVersionMask, syn_stream->stream_id()); |
339 EXPECT_TRUE(frame.is_control_frame()); | 378 EXPECT_TRUE(frame.is_control_frame()); |
340 EXPECT_EQ(SYN_STREAM, frame.type()); | 379 EXPECT_EQ(SYN_STREAM, frame.type()); |
341 } | 380 } |
342 | 381 |
343 TEST(SpdyProtocolDeathSpdy3Test, TestSpdyControlFrameType) { | 382 TEST_P(SpdyProtocolDeathTest, TestSpdyControlFrameType) { |
344 SpdyControlFrame frame(SpdyControlFrame::kHeaderSize); | 383 SpdyControlFrame frame(SpdyControlFrame::kHeaderSize); |
345 memset(frame.data(), 255, SpdyControlFrame::kHeaderSize); | 384 memset(frame.data(), 255, SpdyControlFrame::kHeaderSize); |
346 | 385 |
347 // type() should be out of bounds. | 386 // type() should be out of bounds. |
348 EXPECT_FALSE(frame.AppearsToBeAValidControlFrame()); | 387 EXPECT_FALSE(frame.AppearsToBeAValidControlFrame()); |
349 | 388 |
350 frame.set_version(SPDY_VERSION_FOR_TESTS); | 389 frame.set_version(SPDY_VERSION_FOR_TESTS); |
351 uint16 version = frame.version(); | 390 uint16 version = frame.version(); |
352 | 391 |
353 for (int i = SYN_STREAM; i <= spdy::WINDOW_UPDATE; ++i) { | 392 for (int i = SYN_STREAM; i <= spdy::WINDOW_UPDATE; ++i) { |
354 frame.set_type(static_cast<SpdyControlType>(i)); | 393 frame.set_type(static_cast<SpdyControlType>(i)); |
355 EXPECT_EQ(i, static_cast<int>(frame.type())); | 394 EXPECT_EQ(i, static_cast<int>(frame.type())); |
356 if (i == spdy::NOOP) { | 395 if (SPDY_VERSION_FOR_TESTS != 2 && i == spdy::NOOP) { |
357 // NOOP frames aren't 'valid'. | 396 // NOOP frames aren't 'valid'. |
358 EXPECT_FALSE(frame.AppearsToBeAValidControlFrame()); | 397 EXPECT_FALSE(frame.AppearsToBeAValidControlFrame()); |
359 } else { | 398 } else { |
360 EXPECT_TRUE(frame.AppearsToBeAValidControlFrame()); | 399 EXPECT_TRUE(frame.AppearsToBeAValidControlFrame()); |
361 } | 400 } |
362 // Make sure setting type does not alter the version block. | 401 // Make sure setting type does not alter the version block. |
363 EXPECT_EQ(version, frame.version()); | 402 EXPECT_EQ(version, frame.version()); |
364 EXPECT_TRUE(frame.is_control_frame()); | 403 EXPECT_TRUE(frame.is_control_frame()); |
365 } | 404 } |
366 } | 405 } |
367 | 406 |
368 TEST(SpdyProtocolDeathSpdy3Test, TestRstStreamStatusBounds) { | 407 TEST_P(SpdyProtocolDeathTest, TestRstStreamStatusBounds) { |
369 SpdyFramer framer(SPDY_VERSION_FOR_TESTS); | 408 SpdyFramer framer(SPDY_VERSION_FOR_TESTS); |
370 scoped_ptr<SpdyRstStreamControlFrame> rst_frame; | 409 scoped_ptr<SpdyRstStreamControlFrame> rst_frame; |
371 | 410 |
372 rst_frame.reset(framer.CreateRstStream(123, spdy::PROTOCOL_ERROR)); | 411 rst_frame.reset(framer.CreateRstStream(123, spdy::PROTOCOL_ERROR)); |
373 EXPECT_EQ(spdy::PROTOCOL_ERROR, rst_frame->status()); | 412 EXPECT_EQ(spdy::PROTOCOL_ERROR, rst_frame->status()); |
374 | 413 |
375 rst_frame->set_status(spdy::INVALID); | 414 rst_frame->set_status(spdy::INVALID); |
376 EXPECT_EQ(spdy::INVALID, rst_frame->status()); | 415 EXPECT_EQ(spdy::INVALID, rst_frame->status()); |
377 | 416 |
378 rst_frame->set_status( | 417 rst_frame->set_status( |
379 static_cast<spdy::SpdyStatusCodes>(spdy::INVALID - 1)); | 418 static_cast<spdy::SpdyStatusCodes>(spdy::INVALID - 1)); |
380 EXPECT_EQ(spdy::INVALID, rst_frame->status()); | 419 EXPECT_EQ(spdy::INVALID, rst_frame->status()); |
381 | 420 |
382 rst_frame->set_status(spdy::NUM_STATUS_CODES); | 421 rst_frame->set_status(spdy::NUM_STATUS_CODES); |
383 EXPECT_EQ(spdy::INVALID, rst_frame->status()); | 422 EXPECT_EQ(spdy::INVALID, rst_frame->status()); |
384 } | 423 } |
385 | 424 |
386 } // namespace | 425 } // namespace |
OLD | NEW |