Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(196)

Side by Side Diff: net/spdy/spdy_framer_test.cc

Issue 10448083: Fix out of order SYN_STEAM frames. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix willchan's comments Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698