| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 using spdy::kLengthMask; | 43 using spdy::kLengthMask; |
| 44 using spdy::kSpdyProtocolVersion; | 44 using spdy::kSpdyProtocolVersion; |
| 45 using spdy::kStreamIdMask; | 45 using spdy::kStreamIdMask; |
| 46 | 46 |
| 47 namespace { | 47 namespace { |
| 48 | 48 |
| 49 // Test our protocol constants | 49 // Test our protocol constants |
| 50 TEST(SpdyProtocolTest, ProtocolConstants) { | 50 TEST(SpdyProtocolTest, ProtocolConstants) { |
| 51 EXPECT_EQ(8u, SpdyFrame::kHeaderSize); | 51 EXPECT_EQ(8u, SpdyFrame::kHeaderSize); |
| 52 EXPECT_EQ(8u, SpdyDataFrame::size()); | 52 EXPECT_EQ(8u, SpdyDataFrame::size()); |
| 53 EXPECT_EQ(8u, SpdyControlFrame::size()); | 53 EXPECT_EQ(8u, SpdyControlFrame::kHeaderSize); |
| 54 EXPECT_EQ(18u, SpdySynStreamControlFrame::size()); | 54 EXPECT_EQ(18u, SpdySynStreamControlFrame::size()); |
| 55 EXPECT_EQ(14u, SpdySynReplyControlFrame::size()); | 55 EXPECT_EQ(14u, SpdySynReplyControlFrame::size()); |
| 56 EXPECT_EQ(16u, SpdyRstStreamControlFrame::size()); | 56 EXPECT_EQ(16u, SpdyRstStreamControlFrame::size()); |
| 57 EXPECT_EQ(12u, SpdySettingsControlFrame::size()); | 57 EXPECT_EQ(12u, SpdySettingsControlFrame::size()); |
| 58 EXPECT_EQ(8u, SpdyNoOpControlFrame::size()); | 58 EXPECT_EQ(8u, SpdyNoOpControlFrame::size()); |
| 59 EXPECT_EQ(12u, SpdyPingControlFrame::size()); | 59 EXPECT_EQ(12u, SpdyPingControlFrame::size()); |
| 60 EXPECT_EQ(12u, SpdyGoAwayControlFrame::size()); | 60 EXPECT_EQ(12u, SpdyGoAwayControlFrame::size()); |
| 61 EXPECT_EQ(14u, SpdyHeadersControlFrame::size()); | 61 EXPECT_EQ(14u, SpdyHeadersControlFrame::size()); |
| 62 EXPECT_EQ(16u, SpdyWindowUpdateControlFrame::size()); | 62 EXPECT_EQ(16u, SpdyWindowUpdateControlFrame::size()); |
| 63 EXPECT_EQ(4u, sizeof(FlagsAndLength)); | 63 EXPECT_EQ(4u, sizeof(FlagsAndLength)); |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 EXPECT_EQ(parsed.flags(), ids[pos].flags()); | 258 EXPECT_EQ(parsed.flags(), ids[pos].flags()); |
| 259 EXPECT_EQ(parsed.id(), ids[pos].id()); | 259 EXPECT_EQ(parsed.id(), ids[pos].id()); |
| 260 EXPECT_EQ(value, static_cast<uint32>(pos)); | 260 EXPECT_EQ(value, static_cast<uint32>(pos)); |
| 261 ++it; | 261 ++it; |
| 262 ++pos; | 262 ++pos; |
| 263 } | 263 } |
| 264 } | 264 } |
| 265 } | 265 } |
| 266 | 266 |
| 267 TEST(SpdyProtocolTest, HasHeaderBlock) { | 267 TEST(SpdyProtocolTest, HasHeaderBlock) { |
| 268 SpdyControlFrame frame(SpdyControlFrame::size()); | 268 SpdyControlFrame frame(SpdyControlFrame::kHeaderSize); |
| 269 for (SpdyControlType type = SYN_STREAM; | 269 for (SpdyControlType type = SYN_STREAM; |
| 270 type < NUM_CONTROL_FRAME_TYPES; | 270 type < NUM_CONTROL_FRAME_TYPES; |
| 271 type = static_cast<SpdyControlType>(type + 1)) { | 271 type = static_cast<SpdyControlType>(type + 1)) { |
| 272 frame.set_type(type); | 272 frame.set_type(type); |
| 273 if (type == SYN_STREAM || type == SYN_REPLY || type == HEADERS) { | 273 if (type == SYN_STREAM || type == SYN_REPLY || type == HEADERS) { |
| 274 EXPECT_TRUE(frame.has_header_block()); | 274 EXPECT_TRUE(frame.has_header_block()); |
| 275 } else { | 275 } else { |
| 276 EXPECT_FALSE(frame.has_header_block()); | 276 EXPECT_FALSE(frame.has_header_block()); |
| 277 } | 277 } |
| 278 } | 278 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 301 EXPECT_DEBUG_DEATH(frame.set_length(~0), ""); | 301 EXPECT_DEBUG_DEATH(frame.set_length(~0), ""); |
| 302 #else | 302 #else |
| 303 EXPECT_DEATH(frame.set_length(~0), ""); | 303 EXPECT_DEATH(frame.set_length(~0), ""); |
| 304 #endif | 304 #endif |
| 305 #endif | 305 #endif |
| 306 EXPECT_EQ(0, frame.flags()); | 306 EXPECT_EQ(0, frame.flags()); |
| 307 } | 307 } |
| 308 | 308 |
| 309 TEST(SpdyProtocolDeathTest, TestSpdyControlFrameStreamId) { | 309 TEST(SpdyProtocolDeathTest, TestSpdyControlFrameStreamId) { |
| 310 SpdyControlFrame frame_store(SpdySynStreamControlFrame::size()); | 310 SpdyControlFrame frame_store(SpdySynStreamControlFrame::size()); |
| 311 memset(frame_store.data(), '1', SpdyControlFrame::size()); | 311 memset(frame_store.data(), '1', SpdyControlFrame::kHeaderSize); |
| 312 SpdySynStreamControlFrame* frame = | 312 SpdySynStreamControlFrame* frame = |
| 313 reinterpret_cast<SpdySynStreamControlFrame*>(&frame_store); | 313 reinterpret_cast<SpdySynStreamControlFrame*>(&frame_store); |
| 314 | 314 |
| 315 // Set the stream ID to various values. | 315 // Set the stream ID to various values. |
| 316 frame->set_stream_id(0); | 316 frame->set_stream_id(0); |
| 317 EXPECT_EQ(0u, frame->stream_id()); | 317 EXPECT_EQ(0u, frame->stream_id()); |
| 318 EXPECT_FALSE(frame->is_control_frame()); | 318 EXPECT_FALSE(frame->is_control_frame()); |
| 319 frame->set_stream_id(kStreamIdMask); | 319 frame->set_stream_id(kStreamIdMask); |
| 320 EXPECT_EQ(kStreamIdMask, frame->stream_id()); | 320 EXPECT_EQ(kStreamIdMask, frame->stream_id()); |
| 321 EXPECT_FALSE(frame->is_control_frame()); | 321 EXPECT_FALSE(frame->is_control_frame()); |
| 322 } | 322 } |
| 323 | 323 |
| 324 TEST(SpdyProtocolDeathTest, TestSpdyControlFrameVersion) { | 324 TEST(SpdyProtocolDeathTest, TestSpdyControlFrameVersion) { |
| 325 const unsigned int kVersionMask = 0x7fff; | 325 const unsigned int kVersionMask = 0x7fff; |
| 326 SpdyControlFrame frame(SpdySynStreamControlFrame::size()); | 326 SpdyControlFrame frame(SpdySynStreamControlFrame::size()); |
| 327 memset(frame.data(), '1', SpdyControlFrame::size()); | 327 memset(frame.data(), '1', SpdyControlFrame::kHeaderSize); |
| 328 | 328 |
| 329 // Set the version to various values, and make sure it does not affect the | 329 // Set the version to various values, and make sure it does not affect the |
| 330 // type. | 330 // type. |
| 331 frame.set_type(SYN_STREAM); | 331 frame.set_type(SYN_STREAM); |
| 332 frame.set_version(0); | 332 frame.set_version(0); |
| 333 EXPECT_EQ(0, frame.version()); | 333 EXPECT_EQ(0, frame.version()); |
| 334 EXPECT_TRUE(frame.is_control_frame()); | 334 EXPECT_TRUE(frame.is_control_frame()); |
| 335 EXPECT_EQ(SYN_STREAM, frame.type()); | 335 EXPECT_EQ(SYN_STREAM, frame.type()); |
| 336 | 336 |
| 337 SpdySynStreamControlFrame* syn_stream = | 337 SpdySynStreamControlFrame* syn_stream = |
| 338 reinterpret_cast<SpdySynStreamControlFrame*>(&frame); | 338 reinterpret_cast<SpdySynStreamControlFrame*>(&frame); |
| 339 syn_stream->set_stream_id(~0 & kVersionMask); | 339 syn_stream->set_stream_id(~0 & kVersionMask); |
| 340 EXPECT_EQ(~0 & kVersionMask, syn_stream->stream_id()); | 340 EXPECT_EQ(~0 & kVersionMask, syn_stream->stream_id()); |
| 341 EXPECT_TRUE(frame.is_control_frame()); | 341 EXPECT_TRUE(frame.is_control_frame()); |
| 342 EXPECT_EQ(SYN_STREAM, frame.type()); | 342 EXPECT_EQ(SYN_STREAM, frame.type()); |
| 343 } | 343 } |
| 344 | 344 |
| 345 TEST(SpdyProtocolDeathTest, TestSpdyControlFrameType) { | 345 TEST(SpdyProtocolDeathTest, TestSpdyControlFrameType) { |
| 346 SpdyControlFrame frame(SpdyControlFrame::size()); | 346 SpdyControlFrame frame(SpdyControlFrame::kHeaderSize); |
| 347 memset(frame.data(), 255, SpdyControlFrame::size()); | 347 memset(frame.data(), 255, SpdyControlFrame::kHeaderSize); |
| 348 | 348 |
| 349 // type() should be out of bounds. | 349 // type() should be out of bounds. |
| 350 EXPECT_FALSE(frame.AppearsToBeAValidControlFrame()); | 350 EXPECT_FALSE(frame.AppearsToBeAValidControlFrame()); |
| 351 | 351 |
| 352 uint16 version = frame.version(); | 352 uint16 version = frame.version(); |
| 353 | 353 |
| 354 for (int i = SYN_STREAM; i <= spdy::NOOP; ++i) { | 354 for (int i = SYN_STREAM; i <= spdy::NOOP; ++i) { |
| 355 frame.set_type(static_cast<SpdyControlType>(i)); | 355 frame.set_type(static_cast<SpdyControlType>(i)); |
| 356 EXPECT_EQ(i, static_cast<int>(frame.type())); | 356 EXPECT_EQ(i, static_cast<int>(frame.type())); |
| 357 EXPECT_TRUE(frame.AppearsToBeAValidControlFrame()); | 357 EXPECT_TRUE(frame.AppearsToBeAValidControlFrame()); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 373 | 373 |
| 374 rst_frame->set_status( | 374 rst_frame->set_status( |
| 375 static_cast<spdy::SpdyStatusCodes>(spdy::INVALID - 1)); | 375 static_cast<spdy::SpdyStatusCodes>(spdy::INVALID - 1)); |
| 376 EXPECT_EQ(spdy::INVALID, rst_frame->status()); | 376 EXPECT_EQ(spdy::INVALID, rst_frame->status()); |
| 377 | 377 |
| 378 rst_frame->set_status(spdy::NUM_STATUS_CODES); | 378 rst_frame->set_status(spdy::NUM_STATUS_CODES); |
| 379 EXPECT_EQ(spdy::INVALID, rst_frame->status()); | 379 EXPECT_EQ(spdy::INVALID, rst_frame->status()); |
| 380 } | 380 } |
| 381 | 381 |
| 382 } // namespace | 382 } // namespace |
| OLD | NEW |