| 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <iostream> | 6 #include <iostream> |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "net/spdy/spdy_framer.h" | 10 #include "net/spdy/spdy_framer.h" |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 MOCK_METHOD3(OnControlFrameHeaderData, bool(SpdyStreamId stream_id, | 32 MOCK_METHOD3(OnControlFrameHeaderData, bool(SpdyStreamId stream_id, |
| 33 const char* header_data, | 33 const char* header_data, |
| 34 size_t len)); | 34 size_t len)); |
| 35 MOCK_METHOD2(OnCredentialFrameData, bool(const char* header_data, | 35 MOCK_METHOD2(OnCredentialFrameData, bool(const char* header_data, |
| 36 size_t len)); | 36 size_t len)); |
| 37 MOCK_METHOD1(OnDataFrameHeader, void(const SpdyDataFrame* frame)); | 37 MOCK_METHOD1(OnDataFrameHeader, void(const SpdyDataFrame* frame)); |
| 38 MOCK_METHOD3(OnStreamFrameData, void(SpdyStreamId stream_id, | 38 MOCK_METHOD3(OnStreamFrameData, void(SpdyStreamId stream_id, |
| 39 const char* data, | 39 const char* data, |
| 40 size_t len)); | 40 size_t len)); |
| 41 MOCK_METHOD3(OnSetting, void(SpdySettingsIds id, uint8 flags, uint32 value)); | 41 MOCK_METHOD3(OnSetting, void(SpdySettingsIds id, uint8 flags, uint32 value)); |
| 42 MOCK_METHOD2(OnControlFrameCompressed, |
| 43 void(const SpdyControlFrame& uncompressed_frame, |
| 44 const SpdyControlFrame& compressed_frame)); |
| 42 }; | 45 }; |
| 43 | 46 |
| 44 class SpdyFramerTestUtil { | 47 class SpdyFramerTestUtil { |
| 45 public: | 48 public: |
| 46 // Decompress a single frame using the decompression context held by | 49 // Decompress a single frame using the decompression context held by |
| 47 // the SpdyFramer. The implemention is meant for use only in tests | 50 // the SpdyFramer. The implemention is meant for use only in tests |
| 48 // and will CHECK fail if the input is anything other than a single, | 51 // and will CHECK fail if the input is anything other than a single, |
| 49 // well-formed compressed frame. | 52 // well-formed compressed frame. |
| 50 // | 53 // |
| 51 // Returns a new decompressed SpdyFrame. | 54 // Returns a new decompressed SpdyFrame. |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 LOG(FATAL) << "Unexpected data frame header"; | 128 LOG(FATAL) << "Unexpected data frame header"; |
| 126 } | 129 } |
| 127 virtual void OnStreamFrameData(SpdyStreamId stream_id, | 130 virtual void OnStreamFrameData(SpdyStreamId stream_id, |
| 128 const char* data, | 131 const char* data, |
| 129 size_t len) { | 132 size_t len) { |
| 130 LOG(FATAL); | 133 LOG(FATAL); |
| 131 } | 134 } |
| 132 virtual void OnSetting(SpdySettingsIds id, uint8 flags, uint32 value) { | 135 virtual void OnSetting(SpdySettingsIds id, uint8 flags, uint32 value) { |
| 133 LOG(FATAL); | 136 LOG(FATAL); |
| 134 } | 137 } |
| 138 virtual void OnControlFrameCompressed( |
| 139 const SpdyControlFrame& uncompressed_frame, |
| 140 const SpdyControlFrame& compressed_frame) { |
| 141 } |
| 135 | 142 |
| 136 char* ReleaseBuffer() { | 143 char* ReleaseBuffer() { |
| 137 CHECK(finished_); | 144 CHECK(finished_); |
| 138 return buffer_.release(); | 145 return buffer_.release(); |
| 139 } | 146 } |
| 140 | 147 |
| 141 size_t size() const { | 148 size_t size() const { |
| 142 CHECK(finished_); | 149 CHECK(finished_); |
| 143 return size_; | 150 return size_; |
| 144 } | 151 } |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 DLOG(FATAL); // Error! | 322 DLOG(FATAL); // Error! |
| 316 } | 323 } |
| 317 if (frame->flags() & CONTROL_FLAG_FIN) | 324 if (frame->flags() & CONTROL_FLAG_FIN) |
| 318 ++fin_flag_count_; | 325 ++fin_flag_count_; |
| 319 } | 326 } |
| 320 | 327 |
| 321 virtual void OnSetting(SpdySettingsIds id, uint8 flags, uint32 value) { | 328 virtual void OnSetting(SpdySettingsIds id, uint8 flags, uint32 value) { |
| 322 setting_count_++; | 329 setting_count_++; |
| 323 } | 330 } |
| 324 | 331 |
| 332 virtual void OnControlFrameCompressed( |
| 333 const SpdyControlFrame& uncompressed_frame, |
| 334 const SpdyControlFrame& compressed_frame) { |
| 335 } |
| 336 |
| 325 bool OnControlFrameHeaderData(SpdyStreamId stream_id, | 337 bool OnControlFrameHeaderData(SpdyStreamId stream_id, |
| 326 const char* header_data, | 338 const char* header_data, |
| 327 size_t len) { | 339 size_t len) { |
| 328 ++control_frame_header_data_count_; | 340 ++control_frame_header_data_count_; |
| 329 CHECK_EQ(header_stream_id_, stream_id); | 341 CHECK_EQ(header_stream_id_, stream_id); |
| 330 if (len == 0) { | 342 if (len == 0) { |
| 331 ++zero_length_control_frame_header_data_count_; | 343 ++zero_length_control_frame_header_data_count_; |
| 332 // Indicates end-of-header-block. | 344 // Indicates end-of-header-block. |
| 333 CHECK(header_buffer_valid_); | 345 CHECK(header_buffer_valid_); |
| 334 bool parsed_headers = framer_.ParseHeaderBlockInBuffer( | 346 bool parsed_headers = framer_.ParseHeaderBlockInBuffer( |
| (...skipping 2678 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3013 } | 3025 } |
| 3014 } | 3026 } |
| 3015 | 3027 |
| 3016 TEST_P(SpdyFramerTest, EmptySynStream) { | 3028 TEST_P(SpdyFramerTest, EmptySynStream) { |
| 3017 SpdyHeaderBlock headers; | 3029 SpdyHeaderBlock headers; |
| 3018 | 3030 |
| 3019 testing::StrictMock<test::MockVisitor> visitor; | 3031 testing::StrictMock<test::MockVisitor> visitor; |
| 3020 SpdyFramer framer(spdy_version_); | 3032 SpdyFramer framer(spdy_version_); |
| 3021 framer.set_visitor(&visitor); | 3033 framer.set_visitor(&visitor); |
| 3022 | 3034 |
| 3035 EXPECT_CALL(visitor, OnControlFrameCompressed(_, _)); |
| 3023 scoped_ptr<SpdySynStreamControlFrame> | 3036 scoped_ptr<SpdySynStreamControlFrame> |
| 3024 frame(framer.CreateSynStream(1, 0, 1, 0, CONTROL_FLAG_NONE, true, | 3037 frame(framer.CreateSynStream(1, 0, 1, 0, CONTROL_FLAG_NONE, true, |
| 3025 &headers)); | 3038 &headers)); |
| 3026 // Adjust size to remove the name/value block. | 3039 // Adjust size to remove the name/value block. |
| 3027 frame->set_length( | 3040 frame->set_length( |
| 3028 SpdySynStreamControlFrame::size() - SpdyFrame::kHeaderSize); | 3041 SpdySynStreamControlFrame::size() - SpdyFrame::kHeaderSize); |
| 3029 | 3042 |
| 3030 EXPECT_CALL(visitor, OnControl(_)); | 3043 EXPECT_CALL(visitor, OnControl(_)); |
| 3031 EXPECT_CALL(visitor, OnControlFrameHeaderData(1, NULL, 0)); | 3044 EXPECT_CALL(visitor, OnControlFrameHeaderData(1, NULL, 0)); |
| 3032 | 3045 |
| 3033 size_t frame_size = frame->length() + SpdyFrame::kHeaderSize; | 3046 size_t frame_size = frame->length() + SpdyFrame::kHeaderSize; |
| 3034 framer.ProcessInput(frame->data(), frame_size); | 3047 framer.ProcessInput(frame->data(), frame_size); |
| 3035 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); | 3048 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); |
| 3036 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()); | 3049 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()); |
| 3037 } | 3050 } |
| 3038 | 3051 |
| 3039 TEST_P(SpdyFramerTest, SettingsFlagsAndId) { | 3052 TEST_P(SpdyFramerTest, SettingsFlagsAndId) { |
| 3040 const uint32 kId = 0x020304; | 3053 const uint32 kId = 0x020304; |
| 3041 const uint32 kFlags = 0x01; | 3054 const uint32 kFlags = 0x01; |
| 3042 const uint32 kWireFormat = htonl(IsSpdy2() ? 0x04030201 : 0x01020304); | 3055 const uint32 kWireFormat = htonl(IsSpdy2() ? 0x04030201 : 0x01020304); |
| 3043 | 3056 |
| 3044 SettingsFlagsAndId id_and_flags = | 3057 SettingsFlagsAndId id_and_flags = |
| 3045 SettingsFlagsAndId::FromWireFormat(spdy_version_, kWireFormat); | 3058 SettingsFlagsAndId::FromWireFormat(spdy_version_, kWireFormat); |
| 3046 EXPECT_EQ(kId, id_and_flags.id()); | 3059 EXPECT_EQ(kId, id_and_flags.id()); |
| 3047 EXPECT_EQ(kFlags, id_and_flags.flags()); | 3060 EXPECT_EQ(kFlags, id_and_flags.flags()); |
| 3048 EXPECT_EQ(kWireFormat, id_and_flags.GetWireFormat(spdy_version_)); | 3061 EXPECT_EQ(kWireFormat, id_and_flags.GetWireFormat(spdy_version_)); |
| 3049 } | 3062 } |
| 3050 | 3063 |
| 3051 } // namespace net | 3064 } // namespace net |
| OLD | NEW |