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_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 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_(3), | 19 : buffered_spdy_framer_(3, 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(BufferedSpdyFramerSpdy3Test, OnSetting) { | 179 TEST_F(BufferedSpdyFramerSpdy3Test, OnSetting) { |
183 SpdyFramer framer(3); | 180 SpdyFramer framer(3); |
| 181 framer.set_enable_compression(false); |
184 SettingsMap settings; | 182 SettingsMap settings; |
185 settings[SETTINGS_UPLOAD_BANDWIDTH] = | 183 settings[SETTINGS_UPLOAD_BANDWIDTH] = |
186 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 0x00000002); | 184 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 0x00000002); |
187 settings[SETTINGS_DOWNLOAD_BANDWIDTH] = | 185 settings[SETTINGS_DOWNLOAD_BANDWIDTH] = |
188 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 0x00000003); | 186 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 0x00000003); |
189 | 187 |
190 scoped_ptr<SpdyFrame> control_frame(framer.CreateSettings(settings)); | 188 scoped_ptr<SpdyFrame> control_frame(framer.CreateSettings(settings)); |
191 TestBufferedSpdyVisitor visitor; | 189 TestBufferedSpdyVisitor visitor; |
192 | 190 |
193 visitor.SimulateInFramer( | 191 visitor.SimulateInFramer( |
194 reinterpret_cast<unsigned char*>(control_frame->data()), | 192 reinterpret_cast<unsigned char*>(control_frame->data()), |
195 control_frame->length() + SpdyControlFrame::kHeaderSize); | 193 control_frame->length() + SpdyControlFrame::kHeaderSize); |
196 EXPECT_EQ(0, visitor.error_count_); | 194 EXPECT_EQ(0, visitor.error_count_); |
197 EXPECT_EQ(2, visitor.setting_count_); | 195 EXPECT_EQ(2, visitor.setting_count_); |
198 } | 196 } |
199 | 197 |
200 TEST_F(BufferedSpdyFramerSpdy3Test, ReadSynStreamHeaderBlock) { | 198 TEST_F(BufferedSpdyFramerSpdy3Test, ReadSynStreamHeaderBlock) { |
201 SpdyHeaderBlock headers; | 199 SpdyHeaderBlock headers; |
202 headers["aa"] = "vv"; | 200 headers["aa"] = "vv"; |
203 headers["bb"] = "ww"; | 201 headers["bb"] = "ww"; |
204 BufferedSpdyFramer framer(3); | 202 BufferedSpdyFramer framer(3, true); |
205 scoped_ptr<SpdySynStreamControlFrame> control_frame( | 203 scoped_ptr<SpdySynStreamControlFrame> control_frame( |
206 framer.CreateSynStream(1, // stream_id | 204 framer.CreateSynStream(1, // stream_id |
207 0, // associated_stream_id | 205 0, // associated_stream_id |
208 1, // priority | 206 1, // priority |
209 0, // credential_slot | 207 0, // credential_slot |
210 CONTROL_FLAG_NONE, | 208 CONTROL_FLAG_NONE, |
211 true, // compress | 209 true, // compress |
212 &headers)); | 210 &headers)); |
213 EXPECT_TRUE(control_frame.get() != NULL); | 211 EXPECT_TRUE(control_frame.get() != NULL); |
214 | 212 |
215 TestBufferedSpdyVisitor visitor; | 213 TestBufferedSpdyVisitor visitor; |
216 visitor.SimulateInFramer( | 214 visitor.SimulateInFramer( |
217 reinterpret_cast<unsigned char*>(control_frame.get()->data()), | 215 reinterpret_cast<unsigned char*>(control_frame.get()->data()), |
218 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); | 216 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); |
219 EXPECT_EQ(0, visitor.error_count_); | 217 EXPECT_EQ(0, visitor.error_count_); |
220 EXPECT_EQ(1, visitor.syn_frame_count_); | 218 EXPECT_EQ(1, visitor.syn_frame_count_); |
221 EXPECT_EQ(0, visitor.syn_reply_frame_count_); | 219 EXPECT_EQ(0, visitor.syn_reply_frame_count_); |
222 EXPECT_EQ(0, visitor.headers_frame_count_); | 220 EXPECT_EQ(0, visitor.headers_frame_count_); |
223 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); | 221 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); |
224 } | 222 } |
225 | 223 |
226 TEST_F(BufferedSpdyFramerSpdy3Test, ReadSynReplyHeaderBlock) { | 224 TEST_F(BufferedSpdyFramerSpdy3Test, ReadSynReplyHeaderBlock) { |
227 SpdyHeaderBlock headers; | 225 SpdyHeaderBlock headers; |
228 headers["alpha"] = "beta"; | 226 headers["alpha"] = "beta"; |
229 headers["gamma"] = "delta"; | 227 headers["gamma"] = "delta"; |
230 BufferedSpdyFramer framer(3); | 228 BufferedSpdyFramer framer(3, true); |
231 scoped_ptr<SpdySynReplyControlFrame> control_frame( | 229 scoped_ptr<SpdySynReplyControlFrame> control_frame( |
232 framer.CreateSynReply(1, // stream_id | 230 framer.CreateSynReply(1, // stream_id |
233 CONTROL_FLAG_NONE, | 231 CONTROL_FLAG_NONE, |
234 true, // compress | 232 true, // compress |
235 &headers)); | 233 &headers)); |
236 EXPECT_TRUE(control_frame.get() != NULL); | 234 EXPECT_TRUE(control_frame.get() != NULL); |
237 | 235 |
238 TestBufferedSpdyVisitor visitor; | 236 TestBufferedSpdyVisitor visitor; |
239 visitor.SimulateInFramer( | 237 visitor.SimulateInFramer( |
240 reinterpret_cast<unsigned char*>(control_frame.get()->data()), | 238 reinterpret_cast<unsigned char*>(control_frame.get()->data()), |
241 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); | 239 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); |
242 EXPECT_EQ(0, visitor.error_count_); | 240 EXPECT_EQ(0, visitor.error_count_); |
243 EXPECT_EQ(0, visitor.syn_frame_count_); | 241 EXPECT_EQ(0, visitor.syn_frame_count_); |
244 EXPECT_EQ(1, visitor.syn_reply_frame_count_); | 242 EXPECT_EQ(1, visitor.syn_reply_frame_count_); |
245 EXPECT_EQ(0, visitor.headers_frame_count_); | 243 EXPECT_EQ(0, visitor.headers_frame_count_); |
246 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); | 244 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); |
247 } | 245 } |
248 | 246 |
249 TEST_F(BufferedSpdyFramerSpdy3Test, ReadHeadersHeaderBlock) { | 247 TEST_F(BufferedSpdyFramerSpdy3Test, ReadHeadersHeaderBlock) { |
250 SpdyHeaderBlock headers; | 248 SpdyHeaderBlock headers; |
251 headers["alpha"] = "beta"; | 249 headers["alpha"] = "beta"; |
252 headers["gamma"] = "delta"; | 250 headers["gamma"] = "delta"; |
253 BufferedSpdyFramer framer(3); | 251 BufferedSpdyFramer framer(3, true); |
254 scoped_ptr<SpdyHeadersControlFrame> control_frame( | 252 scoped_ptr<SpdyHeadersControlFrame> control_frame( |
255 framer.CreateHeaders(1, // stream_id | 253 framer.CreateHeaders(1, // stream_id |
256 CONTROL_FLAG_NONE, | 254 CONTROL_FLAG_NONE, |
257 true, // compress | 255 true, // compress |
258 &headers)); | 256 &headers)); |
259 EXPECT_TRUE(control_frame.get() != NULL); | 257 EXPECT_TRUE(control_frame.get() != NULL); |
260 | 258 |
261 TestBufferedSpdyVisitor visitor; | 259 TestBufferedSpdyVisitor visitor; |
262 visitor.SimulateInFramer( | 260 visitor.SimulateInFramer( |
263 reinterpret_cast<unsigned char*>(control_frame.get()->data()), | 261 reinterpret_cast<unsigned char*>(control_frame.get()->data()), |
264 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); | 262 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); |
265 EXPECT_EQ(0, visitor.error_count_); | 263 EXPECT_EQ(0, visitor.error_count_); |
266 EXPECT_EQ(0, visitor.syn_frame_count_); | 264 EXPECT_EQ(0, visitor.syn_frame_count_); |
267 EXPECT_EQ(0, visitor.syn_reply_frame_count_); | 265 EXPECT_EQ(0, visitor.syn_reply_frame_count_); |
268 EXPECT_EQ(1, visitor.headers_frame_count_); | 266 EXPECT_EQ(1, visitor.headers_frame_count_); |
269 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); | 267 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); |
270 } | 268 } |
271 } // namespace net | 269 } // namespace net |
OLD | NEW |