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