| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/tools/flip_server/spdy_interface.h" | 5 #include "net/tools/flip_server/spdy_interface.h" |
| 6 | 6 |
| 7 #include <list> | 7 #include <list> |
| 8 | 8 |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/strings/string_piece.h" | 10 #include "base/strings/string_piece.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 using ::testing::InvokeWithoutArgs; | 25 using ::testing::InvokeWithoutArgs; |
| 26 using ::testing::Return; | 26 using ::testing::Return; |
| 27 using ::testing::SaveArg; | 27 using ::testing::SaveArg; |
| 28 using ::testing::Values; | 28 using ::testing::Values; |
| 29 | 29 |
| 30 namespace { | 30 namespace { |
| 31 | 31 |
| 32 struct StringSaver { | 32 struct StringSaver { |
| 33 public: | 33 public: |
| 34 StringSaver() : data(NULL), size(0) {} | 34 StringSaver() : data(NULL), size(0) {} |
| 35 void Save() { | 35 void Save() { string = std::string(data, size); } |
| 36 string = std::string(data, size); | |
| 37 } | |
| 38 | 36 |
| 39 const char* data; | 37 const char* data; |
| 40 size_t size; | 38 size_t size; |
| 41 std::string string; | 39 std::string string; |
| 42 }; | 40 }; |
| 43 | 41 |
| 44 class SpdyFramerVisitor : public BufferedSpdyFramerVisitorInterface { | 42 class SpdyFramerVisitor : public BufferedSpdyFramerVisitorInterface { |
| 45 public: | 43 public: |
| 46 virtual ~SpdyFramerVisitor() {} | 44 virtual ~SpdyFramerVisitor() {} |
| 47 MOCK_METHOD1(OnError, void(SpdyFramer::SpdyError)); | 45 MOCK_METHOD1(OnError, void(SpdyFramer::SpdyError)); |
| 48 MOCK_METHOD2(OnStreamError, void(SpdyStreamId, const std::string&)); | 46 MOCK_METHOD2(OnStreamError, void(SpdyStreamId, const std::string&)); |
| 49 MOCK_METHOD7(OnSynStream, void(SpdyStreamId, | 47 MOCK_METHOD7(OnSynStream, |
| 50 SpdyStreamId, | 48 void(SpdyStreamId, |
| 51 SpdyPriority, | 49 SpdyStreamId, |
| 52 uint8, | 50 SpdyPriority, |
| 53 bool, | 51 uint8, |
| 54 bool, | 52 bool, |
| 55 const SpdyHeaderBlock&)); | 53 bool, |
| 54 const SpdyHeaderBlock&)); |
| 56 MOCK_METHOD3(OnSynStream, void(SpdyStreamId, bool, const SpdyHeaderBlock&)); | 55 MOCK_METHOD3(OnSynStream, void(SpdyStreamId, bool, const SpdyHeaderBlock&)); |
| 57 MOCK_METHOD3(OnSynReply, void(SpdyStreamId, bool, const SpdyHeaderBlock&)); | 56 MOCK_METHOD3(OnSynReply, void(SpdyStreamId, bool, const SpdyHeaderBlock&)); |
| 58 MOCK_METHOD3(OnHeaders, void(SpdyStreamId, bool, const SpdyHeaderBlock&)); | 57 MOCK_METHOD3(OnHeaders, void(SpdyStreamId, bool, const SpdyHeaderBlock&)); |
| 59 MOCK_METHOD3(OnDataFrameHeader, void(SpdyStreamId, size_t, bool)); | 58 MOCK_METHOD3(OnDataFrameHeader, void(SpdyStreamId, size_t, bool)); |
| 60 MOCK_METHOD4(OnStreamFrameData, void(SpdyStreamId, | 59 MOCK_METHOD4(OnStreamFrameData, void(SpdyStreamId, |
| 61 const char*, | 60 const char*, |
| 62 size_t, | 61 size_t, |
| 63 bool)); | 62 bool)); |
| 64 MOCK_METHOD1(OnSettings, void(bool clear_persisted)); | 63 MOCK_METHOD1(OnSettings, void(bool clear_persisted)); |
| 65 MOCK_METHOD3(OnSetting, void(SpdySettingsIds, uint8, uint32)); | 64 MOCK_METHOD3(OnSetting, void(SpdySettingsIds, uint8, uint32)); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 77 MemoryCache* memory_cache, | 76 MemoryCache* memory_cache, |
| 78 FlipAcceptor* acceptor, | 77 FlipAcceptor* acceptor, |
| 79 std::string log_prefix) | 78 std::string log_prefix) |
| 80 : SMConnection(epoll_server, | 79 : SMConnection(epoll_server, |
| 81 ssl_state, | 80 ssl_state, |
| 82 memory_cache, | 81 memory_cache, |
| 83 acceptor, | 82 acceptor, |
| 84 log_prefix) {} | 83 log_prefix) {} |
| 85 | 84 |
| 86 MOCK_METHOD0(Cleanup, void()); | 85 MOCK_METHOD0(Cleanup, void()); |
| 87 MOCK_METHOD8(InitSMConnection, void(SMConnectionPoolInterface*, | 86 MOCK_METHOD8(InitSMConnection, |
| 88 SMInterface*, | 87 void(SMConnectionPoolInterface*, |
| 89 EpollServer*, | 88 SMInterface*, |
| 90 int, | 89 EpollServer*, |
| 91 std::string, | 90 int, |
| 92 std::string, | 91 std::string, |
| 93 std::string, | 92 std::string, |
| 94 bool)); | 93 std::string, |
| 94 bool)); |
| 95 }; | 95 }; |
| 96 | 96 |
| 97 // This class is almost SpdySM, except one function. | 97 // This class is almost SpdySM, except one function. |
| 98 // This class is the test target of tests in this file. | 98 // This class is the test target of tests in this file. |
| 99 class TestSpdySM : public SpdySM { | 99 class TestSpdySM : public SpdySM { |
| 100 public: | 100 public: |
| 101 virtual ~TestSpdySM() {} | 101 virtual ~TestSpdySM() {} |
| 102 TestSpdySM(SMConnection* connection, | 102 TestSpdySM(SMConnection* connection, |
| 103 SMInterface* sm_http_interface, | 103 SMInterface* sm_http_interface, |
| 104 EpollServer* epoll_server, | 104 EpollServer* epoll_server, |
| 105 MemoryCache* memory_cache, | 105 MemoryCache* memory_cache, |
| 106 FlipAcceptor* acceptor, | 106 FlipAcceptor* acceptor, |
| 107 SpdyMajorVersion version) | 107 SpdyMajorVersion version) |
| 108 : SpdySM(connection, | 108 : SpdySM(connection, |
| 109 sm_http_interface, | 109 sm_http_interface, |
| 110 epoll_server, | 110 epoll_server, |
| 111 memory_cache, | 111 memory_cache, |
| 112 acceptor, | 112 acceptor, |
| 113 version) {} | 113 version) {} |
| 114 | 114 |
| 115 MOCK_METHOD2(FindOrMakeNewSMConnectionInterface, | 115 MOCK_METHOD2(FindOrMakeNewSMConnectionInterface, |
| 116 SMInterface*(const std::string&, const std::string&)); | 116 SMInterface*(const std::string&, const std::string&)); |
| 117 }; | 117 }; |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 }; | 188 }; |
| 189 | 189 |
| 190 class SpdySMProxyTest : public SpdySMTestBase { | 190 class SpdySMProxyTest : public SpdySMTestBase { |
| 191 public: | 191 public: |
| 192 SpdySMProxyTest() : SpdySMTestBase(FLIP_HANDLER_PROXY) {} | 192 SpdySMProxyTest() : SpdySMTestBase(FLIP_HANDLER_PROXY) {} |
| 193 virtual ~SpdySMProxyTest() {} | 193 virtual ~SpdySMProxyTest() {} |
| 194 }; | 194 }; |
| 195 | 195 |
| 196 class SpdySMServerTest : public SpdySMTestBase { | 196 class SpdySMServerTest : public SpdySMTestBase { |
| 197 public: | 197 public: |
| 198 SpdySMServerTest(): SpdySMTestBase(FLIP_HANDLER_SPDY_SERVER) {} | 198 SpdySMServerTest() : SpdySMTestBase(FLIP_HANDLER_SPDY_SERVER) {} |
| 199 virtual ~SpdySMServerTest() {} | 199 virtual ~SpdySMServerTest() {} |
| 200 }; | 200 }; |
| 201 | 201 |
| 202 INSTANTIATE_TEST_CASE_P(SpdySMProxyTest, | 202 INSTANTIATE_TEST_CASE_P(SpdySMProxyTest, |
| 203 SpdySMProxyTest, | 203 SpdySMProxyTest, |
| 204 Values(SPDY2, SPDY3, SPDY4)); | 204 Values(SPDY2, SPDY3, SPDY4)); |
| 205 INSTANTIATE_TEST_CASE_P(SpdySMServerTest, | 205 INSTANTIATE_TEST_CASE_P(SpdySMServerTest, SpdySMServerTest, Values(SPDY2)); |
| 206 SpdySMServerTest, | |
| 207 Values(SPDY2)); | |
| 208 | 206 |
| 209 TEST_P(SpdySMProxyTest, InitSMConnection) { | 207 TEST_P(SpdySMProxyTest, InitSMConnection) { |
| 210 { | 208 { |
| 211 InSequence s; | 209 InSequence s; |
| 212 EXPECT_CALL(*connection_, InitSMConnection(_, _, _, _, _, _, _, _)); | 210 EXPECT_CALL(*connection_, InitSMConnection(_, _, _, _, _, _, _, _)); |
| 213 } | 211 } |
| 214 interface_->InitSMConnection(NULL, | 212 interface_->InitSMConnection( |
| 215 NULL, | 213 NULL, NULL, epoll_server_.get(), -1, "", "", "", false); |
| 216 epoll_server_.get(), | |
| 217 -1, | |
| 218 "", | |
| 219 "", | |
| 220 "", | |
| 221 false); | |
| 222 } | 214 } |
| 223 | 215 |
| 224 TEST_P(SpdySMProxyTest, OnSynStream_SPDY2) { | 216 TEST_P(SpdySMProxyTest, OnSynStream_SPDY2) { |
| 225 if (GetParam() != SPDY2) { | 217 if (GetParam() != SPDY2) { |
| 226 // This test case is for SPDY2. | 218 // This test case is for SPDY2. |
| 227 return; | 219 return; |
| 228 } | 220 } |
| 229 BufferedSpdyFramerVisitorInterface* visitor = interface_.get(); | 221 BufferedSpdyFramerVisitorInterface* visitor = interface_.get(); |
| 230 scoped_ptr<MockSMInterface> mock_interface(new MockSMInterface); | 222 scoped_ptr<MockSMInterface> mock_interface(new MockSMInterface); |
| 231 uint32 stream_id = 92; | 223 uint32 stream_id = 92; |
| 232 uint32 associated_id = 43; | 224 uint32 associated_id = 43; |
| 233 std::string expected = "GET /path HTTP/1.0\r\n" | 225 std::string expected = "GET /path HTTP/1.0\r\n" |
| 234 "Host: 127.0.0.1\r\n" | 226 "Host: 127.0.0.1\r\n" |
| 235 "hoge: fuga\r\n\r\n"; | 227 "hoge: fuga\r\n\r\n"; |
| 236 SpdyHeaderBlock block; | 228 SpdyHeaderBlock block; |
| 237 block["method"] = "GET"; | 229 block["method"] = "GET"; |
| 238 block["url"] = "/path"; | 230 block["url"] = "/path"; |
| 239 block["scheme"] = "http"; | 231 block["scheme"] = "http"; |
| 240 block["version"] = "HTTP/1.0"; | 232 block["version"] = "HTTP/1.0"; |
| 241 block["hoge"] = "fuga"; | 233 block["hoge"] = "fuga"; |
| 242 StringSaver saver; | 234 StringSaver saver; |
| 243 { | 235 { |
| 244 InSequence s; | 236 InSequence s; |
| 245 EXPECT_CALL(*interface_, | 237 EXPECT_CALL(*interface_, FindOrMakeNewSMConnectionInterface(_, _)) |
| 246 FindOrMakeNewSMConnectionInterface(_, _)) | |
| 247 .WillOnce(Return(mock_interface.get())); | 238 .WillOnce(Return(mock_interface.get())); |
| 248 EXPECT_CALL(*mock_interface, SetStreamID(stream_id)); | 239 EXPECT_CALL(*mock_interface, SetStreamID(stream_id)); |
| 249 EXPECT_CALL(*mock_interface, ProcessWriteInput(_, _)) | 240 EXPECT_CALL(*mock_interface, ProcessWriteInput(_, _)) |
| 250 .WillOnce(DoAll(SaveArg<0>(&saver.data), | 241 .WillOnce(DoAll(SaveArg<0>(&saver.data), |
| 251 SaveArg<1>(&saver.size), | 242 SaveArg<1>(&saver.size), |
| 252 InvokeWithoutArgs(&saver, &StringSaver::Save), | 243 InvokeWithoutArgs(&saver, &StringSaver::Save), |
| 253 Return(0))); | 244 Return(0))); |
| 254 } | 245 } |
| 255 visitor->OnSynStream(stream_id, associated_id, 0, 0, false, false, block); | 246 visitor->OnSynStream(stream_id, associated_id, 0, 0, false, false, block); |
| 256 ASSERT_EQ(expected, saver.string); | 247 ASSERT_EQ(expected, saver.string); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 SpdyHeaderBlock block; | 294 SpdyHeaderBlock block; |
| 304 testing::MockFunction<void(int)> checkpoint; // NOLINT | 295 testing::MockFunction<void(int)> checkpoint; // NOLINT |
| 305 | 296 |
| 306 scoped_ptr<SpdyFrame> frame(spdy_framer_->CreatePingFrame(12)); | 297 scoped_ptr<SpdyFrame> frame(spdy_framer_->CreatePingFrame(12)); |
| 307 block["method"] = "GET"; | 298 block["method"] = "GET"; |
| 308 block["url"] = "http://www.example.com/path"; | 299 block["url"] = "http://www.example.com/path"; |
| 309 block["scheme"] = "http"; | 300 block["scheme"] = "http"; |
| 310 block["version"] = "HTTP/1.0"; | 301 block["version"] = "HTTP/1.0"; |
| 311 { | 302 { |
| 312 InSequence s; | 303 InSequence s; |
| 313 EXPECT_CALL(*interface_, | 304 EXPECT_CALL(*interface_, FindOrMakeNewSMConnectionInterface(_, _)) |
| 314 FindOrMakeNewSMConnectionInterface(_, _)) | |
| 315 .WillOnce(Return(mock_interface.get())); | 305 .WillOnce(Return(mock_interface.get())); |
| 316 EXPECT_CALL(*mock_interface, SetStreamID(stream_id)); | 306 EXPECT_CALL(*mock_interface, SetStreamID(stream_id)); |
| 317 EXPECT_CALL(*mock_interface, ProcessWriteInput(_, _)).Times(1); | 307 EXPECT_CALL(*mock_interface, ProcessWriteInput(_, _)).Times(1); |
| 318 EXPECT_CALL(checkpoint, Call(0)); | 308 EXPECT_CALL(checkpoint, Call(0)); |
| 319 EXPECT_CALL(*mock_interface, | 309 EXPECT_CALL(*mock_interface, |
| 320 ProcessWriteInput(frame->data(), frame->size())).Times(1); | 310 ProcessWriteInput(frame->data(), frame->size())).Times(1); |
| 321 } | 311 } |
| 322 | 312 |
| 323 visitor->OnSynStream(stream_id, associated_id, 0, 0, false, false, block); | 313 visitor->OnSynStream(stream_id, associated_id, 0, 0, false, false, block); |
| 324 checkpoint.Call(0); | 314 checkpoint.Call(0); |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 TEST_P(SpdySMProxyTest, PostAcceptHook) { | 403 TEST_P(SpdySMProxyTest, PostAcceptHook) { |
| 414 interface_->PostAcceptHook(); | 404 interface_->PostAcceptHook(); |
| 415 | 405 |
| 416 ASSERT_EQ(1u, connection_->output_list()->size()); | 406 ASSERT_EQ(1u, connection_->output_list()->size()); |
| 417 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); | 407 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); |
| 418 DataFrame* df = *i++; | 408 DataFrame* df = *i++; |
| 419 | 409 |
| 420 { | 410 { |
| 421 InSequence s; | 411 InSequence s; |
| 422 EXPECT_CALL(*spdy_framer_visitor_, OnSettings(false)); | 412 EXPECT_CALL(*spdy_framer_visitor_, OnSettings(false)); |
| 423 EXPECT_CALL(*spdy_framer_visitor_, OnSetting( | 413 EXPECT_CALL(*spdy_framer_visitor_, |
| 424 SETTINGS_MAX_CONCURRENT_STREAMS, 0u, 100u)); | 414 OnSetting(SETTINGS_MAX_CONCURRENT_STREAMS, 0u, 100u)); |
| 425 } | 415 } |
| 426 spdy_framer_->ProcessInput(df->data, df->size); | 416 spdy_framer_->ProcessInput(df->data, df->size); |
| 427 } | 417 } |
| 428 | 418 |
| 429 TEST_P(SpdySMProxyTest, NewStream) { | 419 TEST_P(SpdySMProxyTest, NewStream) { |
| 430 // TODO(yhirano): SpdySM::NewStream leads to crash when | 420 // TODO(yhirano): SpdySM::NewStream leads to crash when |
| 431 // acceptor_->flip_handler_type_ != FLIP_HANDLER_SPDY_SERVER. | 421 // acceptor_->flip_handler_type_ != FLIP_HANDLER_SPDY_SERVER. |
| 432 // It should be fixed though I don't know the solution now. | 422 // It should be fixed though I don't know the solution now. |
| 433 } | 423 } |
| 434 | 424 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 458 const char* actual_data; | 448 const char* actual_data; |
| 459 size_t actual_size; | 449 size_t actual_size; |
| 460 testing::MockFunction<void(int)> checkpoint; // NOLINT | 450 testing::MockFunction<void(int)> checkpoint; // NOLINT |
| 461 | 451 |
| 462 interface_->SendErrorNotFound(stream_id); | 452 interface_->SendErrorNotFound(stream_id); |
| 463 | 453 |
| 464 ASSERT_EQ(2u, connection_->output_list()->size()); | 454 ASSERT_EQ(2u, connection_->output_list()->size()); |
| 465 | 455 |
| 466 { | 456 { |
| 467 InSequence s; | 457 InSequence s; |
| 468 EXPECT_CALL(*spdy_framer_visitor_, | 458 EXPECT_CALL(*spdy_framer_visitor_, OnSynReply(stream_id, false, _)) |
| 469 OnSynReply(stream_id, false, _)) | |
| 470 .WillOnce(SaveArg<2>(&actual_header_block)); | 459 .WillOnce(SaveArg<2>(&actual_header_block)); |
| 471 EXPECT_CALL(checkpoint, Call(0)); | 460 EXPECT_CALL(checkpoint, Call(0)); |
| 472 EXPECT_CALL(*spdy_framer_visitor_, | 461 EXPECT_CALL(*spdy_framer_visitor_, |
| 473 OnDataFrameHeader(stream_id, _, true)); | 462 OnDataFrameHeader(stream_id, _, true)); |
| 474 EXPECT_CALL(*spdy_framer_visitor_, | 463 EXPECT_CALL(*spdy_framer_visitor_, |
| 475 OnStreamFrameData(stream_id, _, _, false)).Times(1) | 464 OnStreamFrameData(stream_id, _, _, false)).Times(1) |
| 476 .WillOnce(DoAll(SaveArg<1>(&actual_data), | 465 .WillOnce(DoAll(SaveArg<1>(&actual_data), |
| 477 SaveArg<2>(&actual_size))); | 466 SaveArg<2>(&actual_size))); |
| 478 EXPECT_CALL(*spdy_framer_visitor_, | 467 EXPECT_CALL(*spdy_framer_visitor_, |
| 479 OnStreamFrameData(stream_id, NULL, 0, true)).Times(1); | 468 OnStreamFrameData(stream_id, NULL, 0, true)).Times(1); |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 679 ASSERT_EQ(1u, connection_->output_list()->size()); | 668 ASSERT_EQ(1u, connection_->output_list()->size()); |
| 680 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); | 669 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); |
| 681 DataFrame* df = *i++; | 670 DataFrame* df = *i++; |
| 682 | 671 |
| 683 { | 672 { |
| 684 InSequence s; | 673 InSequence s; |
| 685 EXPECT_CALL(*spdy_framer_visitor_, | 674 EXPECT_CALL(*spdy_framer_visitor_, |
| 686 OnDataFrameHeader(stream_id, _, false)); | 675 OnDataFrameHeader(stream_id, _, false)); |
| 687 EXPECT_CALL(*spdy_framer_visitor_, | 676 EXPECT_CALL(*spdy_framer_visitor_, |
| 688 OnStreamFrameData(stream_id, _, _, false)) | 677 OnStreamFrameData(stream_id, _, _, false)) |
| 689 .WillOnce(DoAll(SaveArg<1>(&actual_data), | 678 .WillOnce(DoAll(SaveArg<1>(&actual_data), SaveArg<2>(&actual_size))); |
| 690 SaveArg<2>(&actual_size))); | |
| 691 } | 679 } |
| 692 | 680 |
| 693 spdy_framer_->ProcessInput(df->data, df->size); | 681 spdy_framer_->ProcessInput(df->data, df->size); |
| 694 ASSERT_EQ(1, spdy_framer_->frames_received()); | 682 ASSERT_EQ(1, spdy_framer_->frames_received()); |
| 695 ASSERT_EQ("hello", StringPiece(actual_data, actual_size)); | 683 ASSERT_EQ("hello", StringPiece(actual_data, actual_size)); |
| 696 } | 684 } |
| 697 | 685 |
| 698 TEST_P(SpdySMProxyTest, SendLongDataFrame) { | 686 TEST_P(SpdySMProxyTest, SendLongDataFrame) { |
| 699 uint32 stream_id = 133; | 687 uint32 stream_id = 133; |
| 700 SpdyDataFlags flags = DATA_FLAG_NONE; | 688 SpdyDataFlags flags = DATA_FLAG_NONE; |
| 701 const char* actual_data; | 689 const char* actual_data; |
| 702 size_t actual_size; | 690 size_t actual_size; |
| 703 | 691 |
| 704 std::string data = | 692 std::string data = std::string(kSpdySegmentSize, 'a') + |
| 705 std::string(kSpdySegmentSize, 'a') + | 693 std::string(kSpdySegmentSize, 'b') + "c"; |
| 706 std::string(kSpdySegmentSize, 'b') + | |
| 707 "c"; | |
| 708 interface_->SendDataFrame(stream_id, data.data(), data.size(), flags, true); | 694 interface_->SendDataFrame(stream_id, data.data(), data.size(), flags, true); |
| 709 | 695 |
| 710 { | 696 { |
| 711 InSequence s; | 697 InSequence s; |
| 712 for (int i = 0; i < 3; ++i) { | 698 for (int i = 0; i < 3; ++i) { |
| 713 EXPECT_CALL(*spdy_framer_visitor_, | 699 EXPECT_CALL(*spdy_framer_visitor_, |
| 714 OnDataFrameHeader(stream_id, _, false)); | 700 OnDataFrameHeader(stream_id, _, false)); |
| 715 EXPECT_CALL(*spdy_framer_visitor_, | 701 EXPECT_CALL(*spdy_framer_visitor_, |
| 716 OnStreamFrameData(stream_id, _, _, false)) | 702 OnStreamFrameData(stream_id, _, _, false)) |
| 717 .WillOnce(DoAll(SaveArg<1>(&actual_data), | 703 .WillOnce(DoAll(SaveArg<1>(&actual_data), |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 824 const char* actual_data; | 810 const char* actual_data; |
| 825 size_t actual_size; | 811 size_t actual_size; |
| 826 testing::MockFunction<void(int)> checkpoint; // NOLINT | 812 testing::MockFunction<void(int)> checkpoint; // NOLINT |
| 827 | 813 |
| 828 interface_->NewStream(stream_id, 0, "nonexistingfile"); | 814 interface_->NewStream(stream_id, 0, "nonexistingfile"); |
| 829 | 815 |
| 830 ASSERT_EQ(2u, connection_->output_list()->size()); | 816 ASSERT_EQ(2u, connection_->output_list()->size()); |
| 831 | 817 |
| 832 { | 818 { |
| 833 InSequence s; | 819 InSequence s; |
| 834 EXPECT_CALL(*spdy_framer_visitor_, | 820 EXPECT_CALL(*spdy_framer_visitor_, OnSynReply(stream_id, false, _)) |
| 835 OnSynReply(stream_id, false, _)) | |
| 836 .WillOnce(SaveArg<2>(&actual_header_block)); | 821 .WillOnce(SaveArg<2>(&actual_header_block)); |
| 837 EXPECT_CALL(checkpoint, Call(0)); | 822 EXPECT_CALL(checkpoint, Call(0)); |
| 838 EXPECT_CALL(*spdy_framer_visitor_, | 823 EXPECT_CALL(*spdy_framer_visitor_, |
| 839 OnDataFrameHeader(stream_id, _, true)); | 824 OnDataFrameHeader(stream_id, _, true)); |
| 840 EXPECT_CALL(*spdy_framer_visitor_, | 825 EXPECT_CALL(*spdy_framer_visitor_, |
| 841 OnStreamFrameData(stream_id, _, _, false)).Times(1) | 826 OnStreamFrameData(stream_id, _, _, false)).Times(1) |
| 842 .WillOnce(DoAll(SaveArg<1>(&actual_data), | 827 .WillOnce(DoAll(SaveArg<1>(&actual_data), |
| 843 SaveArg<2>(&actual_size))); | 828 SaveArg<2>(&actual_size))); |
| 844 EXPECT_CALL(*spdy_framer_visitor_, | 829 EXPECT_CALL(*spdy_framer_visitor_, |
| 845 OnStreamFrameData(stream_id, NULL, 0, true)).Times(1); | 830 OnStreamFrameData(stream_id, NULL, 0, true)).Times(1); |
| 846 } | 831 } |
| 847 | 832 |
| 848 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); | 833 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); |
| 849 DataFrame* df = *i++; | 834 DataFrame* df = *i++; |
| 850 spdy_framer_->ProcessInput(df->data, df->size); | 835 spdy_framer_->ProcessInput(df->data, df->size); |
| 851 checkpoint.Call(0); | 836 checkpoint.Call(0); |
| 852 df = *i++; | 837 df = *i++; |
| 853 spdy_framer_->ProcessInput(df->data, df->size); | 838 spdy_framer_->ProcessInput(df->data, df->size); |
| 854 | 839 |
| 855 ASSERT_EQ(2, spdy_framer_->frames_received()); | 840 ASSERT_EQ(2, spdy_framer_->frames_received()); |
| 856 ASSERT_EQ(2u, actual_header_block.size()); | 841 ASSERT_EQ(2u, actual_header_block.size()); |
| 857 ASSERT_EQ("404 Not Found", actual_header_block["status"]); | 842 ASSERT_EQ("404 Not Found", actual_header_block["status"]); |
| 858 ASSERT_EQ("HTTP/1.1", actual_header_block["version"]); | 843 ASSERT_EQ("HTTP/1.1", actual_header_block["version"]); |
| 859 ASSERT_EQ("wtf?", StringPiece(actual_data, actual_size)); | 844 ASSERT_EQ("wtf?", StringPiece(actual_data, actual_size)); |
| 860 } | 845 } |
| 861 | 846 |
| 862 } // namespace | 847 } // namespace |
| 863 | 848 |
| 864 } // namespace net | 849 } // namespace net |
| OLD | NEW |