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/buffered_spdy_framer.h" | 5 #include "net/spdy/buffered_spdy_framer.h" |
6 | 6 |
7 #include "net/spdy/spdy_test_util_spdy2.h" | 7 #include "net/spdy/spdy_test_util_spdy2.h" |
8 #include "testing/platform_test.h" | 8 #include "testing/platform_test.h" |
9 | 9 |
10 using namespace net::test_spdy2; | 10 using namespace net::test_spdy2; |
11 | 11 |
12 namespace net { | 12 namespace net { |
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_(2), | 19 : buffered_spdy_framer_(2, true), |
20 error_count_(0), | 20 error_count_(0), |
21 setting_count_(0), | 21 setting_count_(0), |
22 syn_frame_count_(0), | 22 syn_frame_count_(0), |
23 syn_reply_frame_count_(0), | 23 syn_reply_frame_count_(0), |
24 headers_frame_count_(0), | 24 headers_frame_count_(0), |
25 header_stream_id_(-1) { | 25 header_stream_id_(-1) { |
26 } | 26 } |
27 | 27 |
28 void OnError(SpdyFramer::SpdyError error_code) { | 28 void OnError(SpdyFramer::SpdyError error_code) { |
29 LOG(INFO) << "SpdyFramer Error: " << error_code; | 29 LOG(INFO) << "SpdyFramer Error: " << error_code; |
30 error_count_++; | 30 error_count_++; |
31 } | 31 } |
32 | 32 |
33 void OnStreamError(SpdyStreamId stream_id, | 33 void OnStreamError(SpdyStreamId stream_id, |
34 const std::string& description) { | 34 const std::string& description) { |
35 LOG(INFO) << "SpdyFramer Error on stream: " << stream_id << " " | 35 LOG(INFO) << "SpdyFramer Error on stream: " << stream_id << " " |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 if (it->second.compare(it2->second) != 0) { | 167 if (it->second.compare(it2->second) != 0) { |
168 LOG(ERROR) << "Expected header named '" << it->first | 168 LOG(ERROR) << "Expected header named '" << it->first |
169 << "' to have a value of '" << it->second | 169 << "' to have a value of '" << it->second |
170 << "'. The actual value received was '" << it2->second | 170 << "'. The actual value received was '" << it2->second |
171 << "'."; | 171 << "'."; |
172 return false; | 172 return false; |
173 } | 173 } |
174 } | 174 } |
175 return true; | 175 return true; |
176 } | 176 } |
177 | |
178 private: | |
179 SpdyTestStateHelper spdy_state_; | |
180 }; | 177 }; |
181 | 178 |
182 TEST_F(BufferedSpdyFramerSpdy2Test, OnSetting) { | 179 TEST_F(BufferedSpdyFramerSpdy2Test, OnSetting) { |
183 SpdyFramer framer(2); | 180 SpdyFramer framer(2); |
184 SettingsMap settings; | 181 SettingsMap settings; |
185 settings[SETTINGS_UPLOAD_BANDWIDTH] = | 182 settings[SETTINGS_UPLOAD_BANDWIDTH] = |
186 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 0x00000002); | 183 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 0x00000002); |
187 settings[SETTINGS_DOWNLOAD_BANDWIDTH] = | 184 settings[SETTINGS_DOWNLOAD_BANDWIDTH] = |
188 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 0x00000003); | 185 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 0x00000003); |
189 | 186 |
190 scoped_ptr<SpdyFrame> control_frame(framer.CreateSettings(settings)); | 187 scoped_ptr<SpdyFrame> control_frame(framer.CreateSettings(settings)); |
191 TestBufferedSpdyVisitor visitor; | 188 TestBufferedSpdyVisitor visitor; |
192 | 189 |
193 visitor.SimulateInFramer( | 190 visitor.SimulateInFramer( |
194 reinterpret_cast<unsigned char*>(control_frame->data()), | 191 reinterpret_cast<unsigned char*>(control_frame->data()), |
195 control_frame->length() + SpdyControlFrame::kHeaderSize); | 192 control_frame->length() + SpdyControlFrame::kHeaderSize); |
196 EXPECT_EQ(0, visitor.error_count_); | 193 EXPECT_EQ(0, visitor.error_count_); |
197 EXPECT_EQ(2, visitor.setting_count_); | 194 EXPECT_EQ(2, visitor.setting_count_); |
198 } | 195 } |
199 | 196 |
200 TEST_F(BufferedSpdyFramerSpdy2Test, ReadSynStreamHeaderBlock) { | 197 TEST_F(BufferedSpdyFramerSpdy2Test, ReadSynStreamHeaderBlock) { |
201 SpdyHeaderBlock headers; | 198 SpdyHeaderBlock headers; |
202 headers["aa"] = "vv"; | 199 headers["aa"] = "vv"; |
203 headers["bb"] = "ww"; | 200 headers["bb"] = "ww"; |
204 BufferedSpdyFramer framer(2); | 201 BufferedSpdyFramer framer(2, true); |
205 scoped_ptr<SpdySynStreamControlFrame> control_frame( | 202 scoped_ptr<SpdySynStreamControlFrame> control_frame( |
206 framer.CreateSynStream(1, // stream_id | 203 framer.CreateSynStream(1, // stream_id |
207 0, // associated_stream_id | 204 0, // associated_stream_id |
208 1, // priority | 205 1, // priority |
209 0, // credential_slot | 206 0, // credential_slot |
210 CONTROL_FLAG_NONE, | 207 CONTROL_FLAG_NONE, |
211 true, // compress | 208 true, // compress |
212 &headers)); | 209 &headers)); |
213 EXPECT_TRUE(control_frame.get() != NULL); | 210 EXPECT_TRUE(control_frame.get() != NULL); |
214 | 211 |
215 TestBufferedSpdyVisitor visitor; | 212 TestBufferedSpdyVisitor visitor; |
216 visitor.SimulateInFramer( | 213 visitor.SimulateInFramer( |
217 reinterpret_cast<unsigned char*>(control_frame.get()->data()), | 214 reinterpret_cast<unsigned char*>(control_frame.get()->data()), |
218 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); | 215 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); |
219 EXPECT_EQ(0, visitor.error_count_); | 216 EXPECT_EQ(0, visitor.error_count_); |
220 EXPECT_EQ(1, visitor.syn_frame_count_); | 217 EXPECT_EQ(1, visitor.syn_frame_count_); |
221 EXPECT_EQ(0, visitor.syn_reply_frame_count_); | 218 EXPECT_EQ(0, visitor.syn_reply_frame_count_); |
222 EXPECT_EQ(0, visitor.headers_frame_count_); | 219 EXPECT_EQ(0, visitor.headers_frame_count_); |
223 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); | 220 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); |
224 } | 221 } |
225 | 222 |
226 TEST_F(BufferedSpdyFramerSpdy2Test, ReadSynReplyHeaderBlock) { | 223 TEST_F(BufferedSpdyFramerSpdy2Test, ReadSynReplyHeaderBlock) { |
227 SpdyHeaderBlock headers; | 224 SpdyHeaderBlock headers; |
228 headers["alpha"] = "beta"; | 225 headers["alpha"] = "beta"; |
229 headers["gamma"] = "delta"; | 226 headers["gamma"] = "delta"; |
230 BufferedSpdyFramer framer(2); | 227 BufferedSpdyFramer framer(2, true); |
231 scoped_ptr<SpdySynReplyControlFrame> control_frame( | 228 scoped_ptr<SpdySynReplyControlFrame> control_frame( |
232 framer.CreateSynReply(1, // stream_id | 229 framer.CreateSynReply(1, // stream_id |
233 CONTROL_FLAG_NONE, | 230 CONTROL_FLAG_NONE, |
234 true, // compress | 231 true, // compress |
235 &headers)); | 232 &headers)); |
236 EXPECT_TRUE(control_frame.get() != NULL); | 233 EXPECT_TRUE(control_frame.get() != NULL); |
237 | 234 |
238 TestBufferedSpdyVisitor visitor; | 235 TestBufferedSpdyVisitor visitor; |
239 visitor.SimulateInFramer( | 236 visitor.SimulateInFramer( |
240 reinterpret_cast<unsigned char*>(control_frame.get()->data()), | 237 reinterpret_cast<unsigned char*>(control_frame.get()->data()), |
241 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); | 238 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); |
242 EXPECT_EQ(0, visitor.error_count_); | 239 EXPECT_EQ(0, visitor.error_count_); |
243 EXPECT_EQ(0, visitor.syn_frame_count_); | 240 EXPECT_EQ(0, visitor.syn_frame_count_); |
244 EXPECT_EQ(1, visitor.syn_reply_frame_count_); | 241 EXPECT_EQ(1, visitor.syn_reply_frame_count_); |
245 EXPECT_EQ(0, visitor.headers_frame_count_); | 242 EXPECT_EQ(0, visitor.headers_frame_count_); |
246 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); | 243 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); |
247 } | 244 } |
248 | 245 |
249 TEST_F(BufferedSpdyFramerSpdy2Test, ReadHeadersHeaderBlock) { | 246 TEST_F(BufferedSpdyFramerSpdy2Test, ReadHeadersHeaderBlock) { |
250 SpdyHeaderBlock headers; | 247 SpdyHeaderBlock headers; |
251 headers["alpha"] = "beta"; | 248 headers["alpha"] = "beta"; |
252 headers["gamma"] = "delta"; | 249 headers["gamma"] = "delta"; |
253 BufferedSpdyFramer framer(2); | 250 BufferedSpdyFramer framer(2, true); |
254 scoped_ptr<SpdyHeadersControlFrame> control_frame( | 251 scoped_ptr<SpdyHeadersControlFrame> control_frame( |
255 framer.CreateHeaders(1, // stream_id | 252 framer.CreateHeaders(1, // stream_id |
256 CONTROL_FLAG_NONE, | 253 CONTROL_FLAG_NONE, |
257 true, // compress | 254 true, // compress |
258 &headers)); | 255 &headers)); |
259 EXPECT_TRUE(control_frame.get() != NULL); | 256 EXPECT_TRUE(control_frame.get() != NULL); |
260 | 257 |
261 TestBufferedSpdyVisitor visitor; | 258 TestBufferedSpdyVisitor visitor; |
262 visitor.SimulateInFramer( | 259 visitor.SimulateInFramer( |
263 reinterpret_cast<unsigned char*>(control_frame.get()->data()), | 260 reinterpret_cast<unsigned char*>(control_frame.get()->data()), |
264 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); | 261 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); |
265 EXPECT_EQ(0, visitor.error_count_); | 262 EXPECT_EQ(0, visitor.error_count_); |
266 EXPECT_EQ(0, visitor.syn_frame_count_); | 263 EXPECT_EQ(0, visitor.syn_frame_count_); |
267 EXPECT_EQ(0, visitor.syn_reply_frame_count_); | 264 EXPECT_EQ(0, visitor.syn_reply_frame_count_); |
268 EXPECT_EQ(1, visitor.headers_frame_count_); | 265 EXPECT_EQ(1, visitor.headers_frame_count_); |
269 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); | 266 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); |
270 } | 267 } |
271 } // namespace net | 268 } // namespace net |
OLD | NEW |