| 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 |