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