| 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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 MOCK_METHOD6(OnSynStream, | 47 MOCK_METHOD6(OnSynStream, |
| 48 void(SpdyStreamId, | 48 void(SpdyStreamId, |
| 49 SpdyStreamId, | 49 SpdyStreamId, |
| 50 SpdyPriority, | 50 SpdyPriority, |
| 51 bool, | 51 bool, |
| 52 bool, | 52 bool, |
| 53 const SpdyHeaderBlock&)); | 53 const SpdyHeaderBlock&)); |
| 54 MOCK_METHOD3(OnSynReply, void(SpdyStreamId, bool, const SpdyHeaderBlock&)); | 54 MOCK_METHOD3(OnSynReply, void(SpdyStreamId, bool, const SpdyHeaderBlock&)); |
| 55 MOCK_METHOD3(OnHeaders, void(SpdyStreamId, bool, const SpdyHeaderBlock&)); | 55 MOCK_METHOD3(OnHeaders, void(SpdyStreamId, bool, const SpdyHeaderBlock&)); |
| 56 MOCK_METHOD3(OnDataFrameHeader, void(SpdyStreamId, size_t, bool)); | 56 MOCK_METHOD3(OnDataFrameHeader, void(SpdyStreamId, size_t, bool)); |
| 57 MOCK_METHOD4(OnStreamFrameData, void(SpdyStreamId, | 57 MOCK_METHOD4(OnStreamFrameData, |
| 58 const char*, | 58 void(SpdyStreamId, const char*, size_t, bool)); |
| 59 size_t, | |
| 60 bool)); | |
| 61 MOCK_METHOD1(OnSettings, void(bool clear_persisted)); | 59 MOCK_METHOD1(OnSettings, void(bool clear_persisted)); |
| 62 MOCK_METHOD3(OnSetting, void(SpdySettingsIds, uint8, uint32)); | 60 MOCK_METHOD3(OnSetting, void(SpdySettingsIds, uint8, uint32)); |
| 63 MOCK_METHOD2(OnPing, void(SpdyPingId unique_id, bool is_ack)); | 61 MOCK_METHOD2(OnPing, void(SpdyPingId unique_id, bool is_ack)); |
| 64 MOCK_METHOD2(OnRstStream, void(SpdyStreamId, SpdyRstStreamStatus)); | 62 MOCK_METHOD2(OnRstStream, void(SpdyStreamId, SpdyRstStreamStatus)); |
| 65 MOCK_METHOD2(OnGoAway, void(SpdyStreamId, SpdyGoAwayStatus)); | 63 MOCK_METHOD2(OnGoAway, void(SpdyStreamId, SpdyGoAwayStatus)); |
| 66 MOCK_METHOD2(OnWindowUpdate, void(SpdyStreamId, uint32)); | 64 MOCK_METHOD2(OnWindowUpdate, void(SpdyStreamId, uint32)); |
| 67 MOCK_METHOD2(OnPushPromise, void(SpdyStreamId, SpdyStreamId)); | 65 MOCK_METHOD2(OnPushPromise, void(SpdyStreamId, SpdyStreamId)); |
| 68 }; | 66 }; |
| 69 | 67 |
| 70 class FakeSMConnection : public SMConnection { | 68 class FakeSMConnection : public SMConnection { |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 | 211 |
| 214 TEST_P(SpdySMProxyTest, OnSynStream_SPDY2) { | 212 TEST_P(SpdySMProxyTest, OnSynStream_SPDY2) { |
| 215 if (GetParam() != SPDY2) { | 213 if (GetParam() != SPDY2) { |
| 216 // This test case is for SPDY2. | 214 // This test case is for SPDY2. |
| 217 return; | 215 return; |
| 218 } | 216 } |
| 219 BufferedSpdyFramerVisitorInterface* visitor = interface_.get(); | 217 BufferedSpdyFramerVisitorInterface* visitor = interface_.get(); |
| 220 scoped_ptr<MockSMInterface> mock_interface(new MockSMInterface); | 218 scoped_ptr<MockSMInterface> mock_interface(new MockSMInterface); |
| 221 uint32 stream_id = 92; | 219 uint32 stream_id = 92; |
| 222 uint32 associated_id = 43; | 220 uint32 associated_id = 43; |
| 223 std::string expected = "GET /path HTTP/1.0\r\n" | 221 std::string expected = |
| 222 "GET /path HTTP/1.0\r\n" |
| 224 "Host: 127.0.0.1\r\n" | 223 "Host: 127.0.0.1\r\n" |
| 225 "hoge: fuga\r\n\r\n"; | 224 "hoge: fuga\r\n\r\n"; |
| 226 SpdyHeaderBlock block; | 225 SpdyHeaderBlock block; |
| 227 block["method"] = "GET"; | 226 block["method"] = "GET"; |
| 228 block["url"] = "/path"; | 227 block["url"] = "/path"; |
| 229 block["scheme"] = "http"; | 228 block["scheme"] = "http"; |
| 230 block["version"] = "HTTP/1.0"; | 229 block["version"] = "HTTP/1.0"; |
| 231 block["hoge"] = "fuga"; | 230 block["hoge"] = "fuga"; |
| 232 StringSaver saver; | 231 StringSaver saver; |
| 233 { | 232 { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 247 | 246 |
| 248 TEST_P(SpdySMProxyTest, OnSynStream) { | 247 TEST_P(SpdySMProxyTest, OnSynStream) { |
| 249 if (GetParam() == SPDY2) { | 248 if (GetParam() == SPDY2) { |
| 250 // This test case is not for SPDY2. | 249 // This test case is not for SPDY2. |
| 251 return; | 250 return; |
| 252 } | 251 } |
| 253 BufferedSpdyFramerVisitorInterface* visitor = interface_.get(); | 252 BufferedSpdyFramerVisitorInterface* visitor = interface_.get(); |
| 254 scoped_ptr<MockSMInterface> mock_interface(new MockSMInterface); | 253 scoped_ptr<MockSMInterface> mock_interface(new MockSMInterface); |
| 255 uint32 stream_id = 92; | 254 uint32 stream_id = 92; |
| 256 uint32 associated_id = 43; | 255 uint32 associated_id = 43; |
| 257 std::string expected = "GET /path HTTP/1.1\r\n" | 256 std::string expected = |
| 257 "GET /path HTTP/1.1\r\n" |
| 258 "Host: 127.0.0.1\r\n" | 258 "Host: 127.0.0.1\r\n" |
| 259 "foo: bar\r\n\r\n"; | 259 "foo: bar\r\n\r\n"; |
| 260 SpdyHeaderBlock block; | 260 SpdyHeaderBlock block; |
| 261 block[":method"] = "GET"; | 261 block[":method"] = "GET"; |
| 262 block[":host"] = "www.example.com"; | 262 block[":host"] = "www.example.com"; |
| 263 block[":path"] = "/path"; | 263 block[":path"] = "/path"; |
| 264 block[":scheme"] = "http"; | 264 block[":scheme"] = "http"; |
| 265 block["foo"] = "bar"; | 265 block["foo"] = "bar"; |
| 266 StringSaver saver; | 266 StringSaver saver; |
| 267 { | 267 { |
| 268 InSequence s; | 268 InSequence s; |
| 269 EXPECT_CALL(*interface_, | 269 EXPECT_CALL(*interface_, FindOrMakeNewSMConnectionInterface(_, _)) |
| 270 FindOrMakeNewSMConnectionInterface(_, _)) | |
| 271 .WillOnce(Return(mock_interface.get())); | 270 .WillOnce(Return(mock_interface.get())); |
| 272 EXPECT_CALL(*mock_interface, SetStreamID(stream_id)); | 271 EXPECT_CALL(*mock_interface, SetStreamID(stream_id)); |
| 273 EXPECT_CALL(*mock_interface, ProcessWriteInput(_, _)) | 272 EXPECT_CALL(*mock_interface, ProcessWriteInput(_, _)) |
| 274 .WillOnce(DoAll(SaveArg<0>(&saver.data), | 273 .WillOnce(DoAll(SaveArg<0>(&saver.data), |
| 275 SaveArg<1>(&saver.size), | 274 SaveArg<1>(&saver.size), |
| 276 InvokeWithoutArgs(&saver, &StringSaver::Save), | 275 InvokeWithoutArgs(&saver, &StringSaver::Save), |
| 277 Return(0))); | 276 Return(0))); |
| 278 } | 277 } |
| 279 visitor->OnSynStream(stream_id, associated_id, 0, false, false, block); | 278 visitor->OnSynStream(stream_id, associated_id, 0, false, false, block); |
| 280 ASSERT_EQ(expected, saver.string); | 279 ASSERT_EQ(expected, saver.string); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 326 testing::MockFunction<void(int)> checkpoint; // NOLINT | 325 testing::MockFunction<void(int)> checkpoint; // NOLINT |
| 327 | 326 |
| 328 scoped_ptr<SpdyFrame> frame(spdy_framer_->CreatePingFrame(12, false)); | 327 scoped_ptr<SpdyFrame> frame(spdy_framer_->CreatePingFrame(12, false)); |
| 329 block[":method"] = "GET"; | 328 block[":method"] = "GET"; |
| 330 block[":host"] = "www.example.com"; | 329 block[":host"] = "www.example.com"; |
| 331 block[":path"] = "/path"; | 330 block[":path"] = "/path"; |
| 332 block[":scheme"] = "http"; | 331 block[":scheme"] = "http"; |
| 333 block["foo"] = "bar"; | 332 block["foo"] = "bar"; |
| 334 { | 333 { |
| 335 InSequence s; | 334 InSequence s; |
| 336 EXPECT_CALL(*interface_, | 335 EXPECT_CALL(*interface_, FindOrMakeNewSMConnectionInterface(_, _)) |
| 337 FindOrMakeNewSMConnectionInterface(_, _)) | |
| 338 .WillOnce(Return(mock_interface.get())); | 336 .WillOnce(Return(mock_interface.get())); |
| 339 EXPECT_CALL(*mock_interface, SetStreamID(stream_id)); | 337 EXPECT_CALL(*mock_interface, SetStreamID(stream_id)); |
| 340 EXPECT_CALL(*mock_interface, ProcessWriteInput(_, _)).Times(1); | 338 EXPECT_CALL(*mock_interface, ProcessWriteInput(_, _)).Times(1); |
| 341 EXPECT_CALL(checkpoint, Call(0)); | 339 EXPECT_CALL(checkpoint, Call(0)); |
| 342 EXPECT_CALL(*mock_interface, | 340 EXPECT_CALL(*mock_interface, |
| 343 ProcessWriteInput(frame->data(), frame->size())).Times(1); | 341 ProcessWriteInput(frame->data(), frame->size())).Times(1); |
| 344 } | 342 } |
| 345 | 343 |
| 346 visitor->OnSynStream(stream_id, associated_id, 0, false, false, block); | 344 visitor->OnSynStream(stream_id, associated_id, 0, false, false, block); |
| 347 checkpoint.Call(0); | 345 checkpoint.Call(0); |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 466 { | 464 { |
| 467 InSequence s; | 465 InSequence s; |
| 468 if (GetParam() < SPDY4) { | 466 if (GetParam() < SPDY4) { |
| 469 EXPECT_CALL(*spdy_framer_visitor_, OnSynReply(stream_id, false, _)) | 467 EXPECT_CALL(*spdy_framer_visitor_, OnSynReply(stream_id, false, _)) |
| 470 .WillOnce(SaveArg<2>(&actual_header_block)); | 468 .WillOnce(SaveArg<2>(&actual_header_block)); |
| 471 } else { | 469 } else { |
| 472 EXPECT_CALL(*spdy_framer_visitor_, OnHeaders(stream_id, false, _)) | 470 EXPECT_CALL(*spdy_framer_visitor_, OnHeaders(stream_id, false, _)) |
| 473 .WillOnce(SaveArg<2>(&actual_header_block)); | 471 .WillOnce(SaveArg<2>(&actual_header_block)); |
| 474 } | 472 } |
| 475 EXPECT_CALL(checkpoint, Call(0)); | 473 EXPECT_CALL(checkpoint, Call(0)); |
| 474 EXPECT_CALL(*spdy_framer_visitor_, OnDataFrameHeader(stream_id, _, true)); |
| 476 EXPECT_CALL(*spdy_framer_visitor_, | 475 EXPECT_CALL(*spdy_framer_visitor_, |
| 477 OnDataFrameHeader(stream_id, _, true)); | 476 OnStreamFrameData(stream_id, _, _, false)) |
| 478 EXPECT_CALL(*spdy_framer_visitor_, | 477 .Times(1) |
| 479 OnStreamFrameData(stream_id, _, _, false)).Times(1) | 478 .WillOnce(DoAll(SaveArg<1>(&actual_data), SaveArg<2>(&actual_size))); |
| 480 .WillOnce(DoAll(SaveArg<1>(&actual_data), | |
| 481 SaveArg<2>(&actual_size))); | |
| 482 EXPECT_CALL(*spdy_framer_visitor_, | 479 EXPECT_CALL(*spdy_framer_visitor_, |
| 483 OnStreamFrameData(stream_id, NULL, 0, true)).Times(1); | 480 OnStreamFrameData(stream_id, NULL, 0, true)).Times(1); |
| 484 } | 481 } |
| 485 | 482 |
| 486 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); | 483 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); |
| 487 DataFrame* df = *i++; | 484 DataFrame* df = *i++; |
| 488 spdy_framer_->ProcessInput(df->data, df->size); | 485 spdy_framer_->ProcessInput(df->data, df->size); |
| 489 checkpoint.Call(0); | 486 checkpoint.Call(0); |
| 490 df = *i++; | 487 df = *i++; |
| 491 spdy_framer_->ProcessInput(df->data, df->size); | 488 spdy_framer_->ProcessInput(df->data, df->size); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 508 size_t actual_size; | 505 size_t actual_size; |
| 509 testing::MockFunction<void(int)> checkpoint; // NOLINT | 506 testing::MockFunction<void(int)> checkpoint; // NOLINT |
| 510 | 507 |
| 511 interface_->SendErrorNotFound(stream_id); | 508 interface_->SendErrorNotFound(stream_id); |
| 512 | 509 |
| 513 ASSERT_EQ(2u, connection_->output_list()->size()); | 510 ASSERT_EQ(2u, connection_->output_list()->size()); |
| 514 | 511 |
| 515 { | 512 { |
| 516 InSequence s; | 513 InSequence s; |
| 517 if (GetParam() < SPDY4) { | 514 if (GetParam() < SPDY4) { |
| 518 EXPECT_CALL(*spdy_framer_visitor_, | 515 EXPECT_CALL(*spdy_framer_visitor_, OnSynReply(stream_id, false, _)) |
| 519 OnSynReply(stream_id, false, _)) | |
| 520 .WillOnce(SaveArg<2>(&actual_header_block)); | 516 .WillOnce(SaveArg<2>(&actual_header_block)); |
| 521 } else { | 517 } else { |
| 522 EXPECT_CALL(*spdy_framer_visitor_, | 518 EXPECT_CALL(*spdy_framer_visitor_, OnHeaders(stream_id, false, _)) |
| 523 OnHeaders(stream_id, false, _)) | |
| 524 .WillOnce(SaveArg<2>(&actual_header_block)); | 519 .WillOnce(SaveArg<2>(&actual_header_block)); |
| 525 } | 520 } |
| 526 EXPECT_CALL(checkpoint, Call(0)); | 521 EXPECT_CALL(checkpoint, Call(0)); |
| 522 EXPECT_CALL(*spdy_framer_visitor_, OnDataFrameHeader(stream_id, _, true)); |
| 527 EXPECT_CALL(*spdy_framer_visitor_, | 523 EXPECT_CALL(*spdy_framer_visitor_, |
| 528 OnDataFrameHeader(stream_id, _, true)); | 524 OnStreamFrameData(stream_id, _, _, false)) |
| 529 EXPECT_CALL(*spdy_framer_visitor_, | 525 .Times(1) |
| 530 OnStreamFrameData(stream_id, _, _, false)).Times(1) | 526 .WillOnce(DoAll(SaveArg<1>(&actual_data), SaveArg<2>(&actual_size))); |
| 531 .WillOnce(DoAll(SaveArg<1>(&actual_data), | |
| 532 SaveArg<2>(&actual_size))); | |
| 533 EXPECT_CALL(*spdy_framer_visitor_, | 527 EXPECT_CALL(*spdy_framer_visitor_, |
| 534 OnStreamFrameData(stream_id, NULL, 0, true)).Times(1); | 528 OnStreamFrameData(stream_id, NULL, 0, true)).Times(1); |
| 535 } | 529 } |
| 536 | 530 |
| 537 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); | 531 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); |
| 538 DataFrame* df = *i++; | 532 DataFrame* df = *i++; |
| 539 spdy_framer_->ProcessInput(df->data, df->size); | 533 spdy_framer_->ProcessInput(df->data, df->size); |
| 540 checkpoint.Call(0); | 534 checkpoint.Call(0); |
| 541 df = *i++; | 535 df = *i++; |
| 542 spdy_framer_->ProcessInput(df->data, df->size); | 536 spdy_framer_->ProcessInput(df->data, df->size); |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 695 size_t actual_size; | 689 size_t actual_size; |
| 696 | 690 |
| 697 interface_->SendDataFrame(stream_id, "hello", 5, flags, true); | 691 interface_->SendDataFrame(stream_id, "hello", 5, flags, true); |
| 698 | 692 |
| 699 ASSERT_EQ(1u, connection_->output_list()->size()); | 693 ASSERT_EQ(1u, connection_->output_list()->size()); |
| 700 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); | 694 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); |
| 701 DataFrame* df = *i++; | 695 DataFrame* df = *i++; |
| 702 | 696 |
| 703 { | 697 { |
| 704 InSequence s; | 698 InSequence s; |
| 705 EXPECT_CALL(*spdy_framer_visitor_, | 699 EXPECT_CALL(*spdy_framer_visitor_, OnDataFrameHeader(stream_id, _, false)); |
| 706 OnDataFrameHeader(stream_id, _, false)); | |
| 707 EXPECT_CALL(*spdy_framer_visitor_, | 700 EXPECT_CALL(*spdy_framer_visitor_, |
| 708 OnStreamFrameData(stream_id, _, _, false)) | 701 OnStreamFrameData(stream_id, _, _, false)) |
| 709 .WillOnce(DoAll(SaveArg<1>(&actual_data), SaveArg<2>(&actual_size))); | 702 .WillOnce(DoAll(SaveArg<1>(&actual_data), SaveArg<2>(&actual_size))); |
| 710 } | 703 } |
| 711 | 704 |
| 712 spdy_framer_->ProcessInput(df->data, df->size); | 705 spdy_framer_->ProcessInput(df->data, df->size); |
| 713 ASSERT_EQ(1, spdy_framer_->frames_received()); | 706 ASSERT_EQ(1, spdy_framer_->frames_received()); |
| 714 ASSERT_EQ("hello", StringPiece(actual_data, actual_size)); | 707 ASSERT_EQ("hello", StringPiece(actual_data, actual_size)); |
| 715 } | 708 } |
| 716 | 709 |
| 717 TEST_P(SpdySMProxyTest, SendLongDataFrame) { | 710 TEST_P(SpdySMProxyTest, SendLongDataFrame) { |
| 718 uint32 stream_id = 133; | 711 uint32 stream_id = 133; |
| 719 SpdyDataFlags flags = DATA_FLAG_NONE; | 712 SpdyDataFlags flags = DATA_FLAG_NONE; |
| 720 const char* actual_data; | 713 const char* actual_data; |
| 721 size_t actual_size; | 714 size_t actual_size; |
| 722 | 715 |
| 723 std::string data = std::string(kSpdySegmentSize, 'a') + | 716 std::string data = std::string(kSpdySegmentSize, 'a') + |
| 724 std::string(kSpdySegmentSize, 'b') + "c"; | 717 std::string(kSpdySegmentSize, 'b') + "c"; |
| 725 interface_->SendDataFrame(stream_id, data.data(), data.size(), flags, true); | 718 interface_->SendDataFrame(stream_id, data.data(), data.size(), flags, true); |
| 726 | 719 |
| 727 { | 720 { |
| 728 InSequence s; | 721 InSequence s; |
| 729 for (int i = 0; i < 3; ++i) { | 722 for (int i = 0; i < 3; ++i) { |
| 730 EXPECT_CALL(*spdy_framer_visitor_, | 723 EXPECT_CALL(*spdy_framer_visitor_, |
| 731 OnDataFrameHeader(stream_id, _, false)); | 724 OnDataFrameHeader(stream_id, _, false)); |
| 732 EXPECT_CALL(*spdy_framer_visitor_, | 725 EXPECT_CALL(*spdy_framer_visitor_, |
| 733 OnStreamFrameData(stream_id, _, _, false)) | 726 OnStreamFrameData(stream_id, _, _, false)) |
| 734 .WillOnce(DoAll(SaveArg<1>(&actual_data), | 727 .WillOnce(DoAll(SaveArg<1>(&actual_data), SaveArg<2>(&actual_size))); |
| 735 SaveArg<2>(&actual_size))); | |
| 736 } | 728 } |
| 737 } | 729 } |
| 738 | 730 |
| 739 ASSERT_EQ(3u, connection_->output_list()->size()); | 731 ASSERT_EQ(3u, connection_->output_list()->size()); |
| 740 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); | 732 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); |
| 741 DataFrame* df = *i++; | 733 DataFrame* df = *i++; |
| 742 spdy_framer_->ProcessInput(df->data, df->size); | 734 spdy_framer_->ProcessInput(df->data, df->size); |
| 743 ASSERT_EQ(std::string(kSpdySegmentSize, 'a'), | 735 ASSERT_EQ(std::string(kSpdySegmentSize, 'a'), |
| 744 StringPiece(actual_data, actual_size)); | 736 StringPiece(actual_data, actual_size)); |
| 745 | 737 |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 849 { | 841 { |
| 850 InSequence s; | 842 InSequence s; |
| 851 if (GetParam() < SPDY4) { | 843 if (GetParam() < SPDY4) { |
| 852 EXPECT_CALL(*spdy_framer_visitor_, OnSynReply(stream_id, false, _)) | 844 EXPECT_CALL(*spdy_framer_visitor_, OnSynReply(stream_id, false, _)) |
| 853 .WillOnce(SaveArg<2>(&actual_header_block)); | 845 .WillOnce(SaveArg<2>(&actual_header_block)); |
| 854 } else { | 846 } else { |
| 855 EXPECT_CALL(*spdy_framer_visitor_, OnHeaders(stream_id, false, _)) | 847 EXPECT_CALL(*spdy_framer_visitor_, OnHeaders(stream_id, false, _)) |
| 856 .WillOnce(SaveArg<2>(&actual_header_block)); | 848 .WillOnce(SaveArg<2>(&actual_header_block)); |
| 857 } | 849 } |
| 858 EXPECT_CALL(checkpoint, Call(0)); | 850 EXPECT_CALL(checkpoint, Call(0)); |
| 851 EXPECT_CALL(*spdy_framer_visitor_, OnDataFrameHeader(stream_id, _, true)); |
| 859 EXPECT_CALL(*spdy_framer_visitor_, | 852 EXPECT_CALL(*spdy_framer_visitor_, |
| 860 OnDataFrameHeader(stream_id, _, true)); | 853 OnStreamFrameData(stream_id, _, _, false)) |
| 861 EXPECT_CALL(*spdy_framer_visitor_, | 854 .Times(1) |
| 862 OnStreamFrameData(stream_id, _, _, false)).Times(1) | 855 .WillOnce(DoAll(SaveArg<1>(&actual_data), SaveArg<2>(&actual_size))); |
| 863 .WillOnce(DoAll(SaveArg<1>(&actual_data), | |
| 864 SaveArg<2>(&actual_size))); | |
| 865 EXPECT_CALL(*spdy_framer_visitor_, | 856 EXPECT_CALL(*spdy_framer_visitor_, |
| 866 OnStreamFrameData(stream_id, NULL, 0, true)).Times(1); | 857 OnStreamFrameData(stream_id, NULL, 0, true)).Times(1); |
| 867 } | 858 } |
| 868 | 859 |
| 869 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); | 860 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); |
| 870 DataFrame* df = *i++; | 861 DataFrame* df = *i++; |
| 871 spdy_framer_->ProcessInput(df->data, df->size); | 862 spdy_framer_->ProcessInput(df->data, df->size); |
| 872 checkpoint.Call(0); | 863 checkpoint.Call(0); |
| 873 df = *i++; | 864 df = *i++; |
| 874 spdy_framer_->ProcessInput(df->data, df->size); | 865 spdy_framer_->ProcessInput(df->data, df->size); |
| 875 | 866 |
| 876 ASSERT_EQ(2, spdy_framer_->frames_received()); | 867 ASSERT_EQ(2, spdy_framer_->frames_received()); |
| 877 ASSERT_EQ(2u, actual_header_block.size()); | 868 ASSERT_EQ(2u, actual_header_block.size()); |
| 878 ASSERT_EQ("404 Not Found", actual_header_block["status"]); | 869 ASSERT_EQ("404 Not Found", actual_header_block["status"]); |
| 879 ASSERT_EQ("HTTP/1.1", actual_header_block["version"]); | 870 ASSERT_EQ("HTTP/1.1", actual_header_block["version"]); |
| 880 ASSERT_EQ("wtf?", StringPiece(actual_data, actual_size)); | 871 ASSERT_EQ("wtf?", StringPiece(actual_data, actual_size)); |
| 881 } | 872 } |
| 882 | 873 |
| 883 } // namespace | 874 } // namespace |
| 884 | 875 |
| 885 } // namespace net | 876 } // namespace net |
| OLD | NEW |