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

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

Issue 9618002: SPDY - integration of spdy/3 code. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 9 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
« no previous file with comments | « net/spdy/buffered_spdy_framer_spdy2_unittest.cc ('k') | net/spdy/spdy_bitmasks.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "net/spdy/buffered_spdy_framer.h" 5 #include "net/spdy/buffered_spdy_framer.h"
6 6
7 #include "net/spdy/spdy_test_util_spdy3.h" 7 #include "net/spdy/spdy_test_util_spdy3.h"
8 #include "testing/platform_test.h" 8 #include "testing/platform_test.h"
9 9
10 using namespace net::test_spdy3; 10 using namespace net::test_spdy3;
11 11
12 namespace spdy { 12 namespace spdy {
13 13
14 namespace { 14 namespace {
15 15
16 class TestBufferedSpdyVisitor : public BufferedSpdyFramerVisitorInterface { 16 class TestBufferedSpdyVisitor : public BufferedSpdyFramerVisitorInterface {
17 public: 17 public:
18 TestBufferedSpdyVisitor() 18 TestBufferedSpdyVisitor()
19 : buffered_spdy_framer_(3), 19 : buffered_spdy_framer_(3),
20 error_count_(0), 20 error_count_(0),
21 setting_count_(0),
21 syn_frame_count_(0), 22 syn_frame_count_(0),
22 syn_reply_frame_count_(0), 23 syn_reply_frame_count_(0),
23 headers_frame_count_(0), 24 headers_frame_count_(0),
24 header_stream_id_(-1) { 25 header_stream_id_(-1) {
25 } 26 }
26 27
27 void OnError(int error_code) { 28 void OnError(int error_code) {
28 LOG(INFO) << "SpdyFramer Error: " << error_code; 29 LOG(INFO) << "SpdyFramer Error: " << error_code;
29 error_count_++; 30 error_count_++;
30 } 31 }
(...skipping 28 matching lines...) Expand all
59 headers_frame_count_++; 60 headers_frame_count_++;
60 headers_ = *headers; 61 headers_ = *headers;
61 } 62 }
62 63
63 void OnStreamFrameData(SpdyStreamId stream_id, 64 void OnStreamFrameData(SpdyStreamId stream_id,
64 const char* data, 65 const char* data,
65 size_t len) { 66 size_t len) {
66 LOG(FATAL) << "Unexpected OnStreamFrameData call."; 67 LOG(FATAL) << "Unexpected OnStreamFrameData call.";
67 } 68 }
68 69
70 void OnSetting(SpdySettingsIds id, uint8 flags, uint32 value) {
71 setting_count_++;
72 }
73
69 bool OnCredentialFrameData(const char*, size_t) { 74 bool OnCredentialFrameData(const char*, size_t) {
70 LOG(FATAL) << "Unexpected OnCredentialFrameData call."; 75 LOG(FATAL) << "Unexpected OnCredentialFrameData call.";
71 return false; 76 return false;
72 } 77 }
73 78
74 void OnDataFrameHeader(const SpdyDataFrame* frame) { 79 void OnDataFrameHeader(const SpdyDataFrame* frame) {
75 LOG(FATAL) << "Unexpected OnDataFrameHeader call."; 80 LOG(FATAL) << "Unexpected OnDataFrameHeader call.";
76 } 81 }
77 82
78 void OnControl(const SpdyControlFrame* frame) { 83 void OnControl(const SpdyControlFrame* frame) {
79 uint32 type = frame->type(); 84 uint32 type = frame->type();
80 switch (type) { 85 switch (type) {
81 case SYN_STREAM: 86 case SYN_STREAM:
82 case SYN_REPLY: 87 case SYN_REPLY:
83 case HEADERS: 88 case HEADERS:
84 header_stream_id_ = SpdyFramer::GetControlFrameStreamId(frame); 89 header_stream_id_ = SpdyFramer::GetControlFrameStreamId(frame);
85 EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream); 90 EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream);
86 buffered_spdy_framer_.OnControl(frame); 91 buffered_spdy_framer_.OnControl(frame);
87 break; 92 break;
88 default: 93 default:
89 LOG(FATAL) << "Unexpected frame type." << type; 94 LOG(FATAL) << "Unexpected frame type." << type;
90 } 95 }
91 } 96 }
92 97
93 void OnRstStream(const spdy::SpdyRstStreamControlFrame& frame) {} 98 void OnRstStream(const spdy::SpdyRstStreamControlFrame& frame) {}
94 void OnGoAway(const spdy::SpdyGoAwayControlFrame& frame) {} 99 void OnGoAway(const spdy::SpdyGoAwayControlFrame& frame) {}
95 void OnPing(const spdy::SpdyPingControlFrame& frame) {} 100 void OnPing(const spdy::SpdyPingControlFrame& frame) {}
96 void OnSettings(const spdy::SpdySettingsControlFrame& frame) {}
97 void OnWindowUpdate(const spdy::SpdyWindowUpdateControlFrame& frame) {} 101 void OnWindowUpdate(const spdy::SpdyWindowUpdateControlFrame& frame) {}
98 void OnCredential(const spdy::SpdyCredentialControlFrame& frame) {} 102 void OnCredential(const spdy::SpdyCredentialControlFrame& frame) {}
99 103
100 // Convenience function which runs a framer simulation with particular input. 104 // Convenience function which runs a framer simulation with particular input.
101 void SimulateInFramer(const unsigned char* input, size_t size) { 105 void SimulateInFramer(const unsigned char* input, size_t size) {
102 buffered_spdy_framer_.set_visitor(this); 106 buffered_spdy_framer_.set_visitor(this);
103 size_t input_remaining = size; 107 size_t input_remaining = size;
104 const char* input_ptr = reinterpret_cast<const char*>(input); 108 const char* input_ptr = reinterpret_cast<const char*>(input);
105 while (input_remaining > 0 && 109 while (input_remaining > 0 &&
106 buffered_spdy_framer_.error_code() == SpdyFramer::SPDY_NO_ERROR) { 110 buffered_spdy_framer_.error_code() == SpdyFramer::SPDY_NO_ERROR) {
107 // To make the tests more interesting, we feed random (amd small) chunks 111 // To make the tests more interesting, we feed random (amd small) chunks
108 // into the framer. This simulates getting strange-sized reads from 112 // into the framer. This simulates getting strange-sized reads from
109 // the socket. 113 // the socket.
110 const size_t kMaxReadSize = 32; 114 const size_t kMaxReadSize = 32;
111 size_t bytes_read = 115 size_t bytes_read =
112 (rand() % std::min(input_remaining, kMaxReadSize)) + 1; 116 (rand() % std::min(input_remaining, kMaxReadSize)) + 1;
113 size_t bytes_processed = 117 size_t bytes_processed =
114 buffered_spdy_framer_.ProcessInput(input_ptr, bytes_read); 118 buffered_spdy_framer_.ProcessInput(input_ptr, bytes_read);
115 input_remaining -= bytes_processed; 119 input_remaining -= bytes_processed;
116 input_ptr += bytes_processed; 120 input_ptr += bytes_processed;
117 if (buffered_spdy_framer_.state() == SpdyFramer::SPDY_DONE) 121 if (buffered_spdy_framer_.state() == SpdyFramer::SPDY_DONE)
118 buffered_spdy_framer_.Reset(); 122 buffered_spdy_framer_.Reset();
119 } 123 }
120 } 124 }
121 125
122 BufferedSpdyFramer buffered_spdy_framer_; 126 BufferedSpdyFramer buffered_spdy_framer_;
123 127
124 // Counters from the visitor callbacks. 128 // Counters from the visitor callbacks.
125 int error_count_; 129 int error_count_;
130 int setting_count_;
126 int syn_frame_count_; 131 int syn_frame_count_;
127 int syn_reply_frame_count_; 132 int syn_reply_frame_count_;
128 int headers_frame_count_; 133 int headers_frame_count_;
129 134
130 // Header block streaming state: 135 // Header block streaming state:
131 SpdyStreamId header_stream_id_; 136 SpdyStreamId header_stream_id_;
132 137
133 // Headers from OnSyn, OnSynReply and OnHeaders for verification. 138 // Headers from OnSyn, OnSynReply and OnHeaders for verification.
134 SpdyHeaderBlock headers_; 139 SpdyHeaderBlock headers_;
135 }; 140 };
(...skipping 27 matching lines...) Expand all
163 << "' to have a value of '" << it->second 168 << "' to have a value of '" << it->second
164 << "'. The actual value received was '" << it2->second 169 << "'. The actual value received was '" << it2->second
165 << "'."; 170 << "'.";
166 return false; 171 return false;
167 } 172 }
168 } 173 }
169 return true; 174 return true;
170 } 175 }
171 }; 176 };
172 177
178 TEST_F(BufferedSpdyFramerSpdy3Test, OnSetting) {
179 EnableCompression(false);
180
181 SpdyFramer framer(3);
182 SpdySettings settings;
183 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 1), 0x00000002));
184 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 1), 0x00000003));
185
186 scoped_ptr<SpdyFrame> control_frame(framer.CreateSettings(settings));
187 TestBufferedSpdyVisitor visitor;
188
189 visitor.SimulateInFramer(
190 reinterpret_cast<unsigned char*>(control_frame->data()),
191 control_frame->length() + SpdyControlFrame::kHeaderSize);
192 EXPECT_EQ(1, visitor.error_count_);
193 EXPECT_EQ(1, visitor.setting_count_);
194 }
195
173 TEST_F(BufferedSpdyFramerSpdy3Test, ReadSynStreamHeaderBlock) { 196 TEST_F(BufferedSpdyFramerSpdy3Test, ReadSynStreamHeaderBlock) {
174 EnableCompression(false); 197 EnableCompression(false);
175 198
176 SpdyHeaderBlock headers; 199 SpdyHeaderBlock headers;
177 headers["aa"] = "vv"; 200 headers["aa"] = "vv";
178 headers["bb"] = "ww"; 201 headers["bb"] = "ww";
179 BufferedSpdyFramer framer(3); 202 BufferedSpdyFramer framer(3);
180 scoped_ptr<SpdySynStreamControlFrame> control_frame( 203 scoped_ptr<SpdySynStreamControlFrame> control_frame(
181 framer.CreateSynStream(1, // stream_id 204 framer.CreateSynStream(1, // stream_id
182 0, // associated_stream_id 205 0, // associated_stream_id
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 visitor.SimulateInFramer( 263 visitor.SimulateInFramer(
241 reinterpret_cast<unsigned char*>(control_frame.get()->data()), 264 reinterpret_cast<unsigned char*>(control_frame.get()->data()),
242 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); 265 control_frame.get()->length() + SpdyControlFrame::kHeaderSize);
243 EXPECT_EQ(0, visitor.error_count_); 266 EXPECT_EQ(0, visitor.error_count_);
244 EXPECT_EQ(0, visitor.syn_frame_count_); 267 EXPECT_EQ(0, visitor.syn_frame_count_);
245 EXPECT_EQ(0, visitor.syn_reply_frame_count_); 268 EXPECT_EQ(0, visitor.syn_reply_frame_count_);
246 EXPECT_EQ(1, visitor.headers_frame_count_); 269 EXPECT_EQ(1, visitor.headers_frame_count_);
247 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); 270 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_));
248 } 271 }
249 } // namespace spdy 272 } // namespace spdy
OLDNEW
« no previous file with comments | « net/spdy/buffered_spdy_framer_spdy2_unittest.cc ('k') | net/spdy/spdy_bitmasks.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698