| 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 26 matching lines...) Expand all Loading... |
| 37 const char* data; | 37 const char* data; |
| 38 size_t size; | 38 size_t size; |
| 39 std::string string; | 39 std::string string; |
| 40 }; | 40 }; |
| 41 | 41 |
| 42 class SpdyFramerVisitor : public BufferedSpdyFramerVisitorInterface { | 42 class SpdyFramerVisitor : public BufferedSpdyFramerVisitorInterface { |
| 43 public: | 43 public: |
| 44 virtual ~SpdyFramerVisitor() {} | 44 virtual ~SpdyFramerVisitor() {} |
| 45 MOCK_METHOD1(OnError, void(SpdyFramer::SpdyError)); | 45 MOCK_METHOD1(OnError, void(SpdyFramer::SpdyError)); |
| 46 MOCK_METHOD2(OnStreamError, void(SpdyStreamId, const std::string&)); | 46 MOCK_METHOD2(OnStreamError, void(SpdyStreamId, const std::string&)); |
| 47 MOCK_METHOD7(OnSynStream, | 47 MOCK_METHOD6(OnSynStream, |
| 48 void(SpdyStreamId, | 48 void(SpdyStreamId, |
| 49 SpdyStreamId, | 49 SpdyStreamId, |
| 50 SpdyPriority, | 50 SpdyPriority, |
| 51 uint8, | |
| 52 bool, | 51 bool, |
| 53 bool, | 52 bool, |
| 54 const SpdyHeaderBlock&)); | 53 const SpdyHeaderBlock&)); |
| 55 MOCK_METHOD3(OnSynStream, void(SpdyStreamId, bool, const SpdyHeaderBlock&)); | |
| 56 MOCK_METHOD3(OnSynReply, void(SpdyStreamId, bool, const SpdyHeaderBlock&)); | 54 MOCK_METHOD3(OnSynReply, void(SpdyStreamId, bool, const SpdyHeaderBlock&)); |
| 57 MOCK_METHOD3(OnHeaders, void(SpdyStreamId, bool, const SpdyHeaderBlock&)); | 55 MOCK_METHOD3(OnHeaders, void(SpdyStreamId, bool, const SpdyHeaderBlock&)); |
| 58 MOCK_METHOD3(OnDataFrameHeader, void(SpdyStreamId, size_t, bool)); | 56 MOCK_METHOD3(OnDataFrameHeader, void(SpdyStreamId, size_t, bool)); |
| 59 MOCK_METHOD4(OnStreamFrameData, void(SpdyStreamId, | 57 MOCK_METHOD4(OnStreamFrameData, void(SpdyStreamId, |
| 60 const char*, | 58 const char*, |
| 61 size_t, | 59 size_t, |
| 62 bool)); | 60 bool)); |
| 63 MOCK_METHOD1(OnSettings, void(bool clear_persisted)); | 61 MOCK_METHOD1(OnSettings, void(bool clear_persisted)); |
| 64 MOCK_METHOD3(OnSetting, void(SpdySettingsIds, uint8, uint32)); | 62 MOCK_METHOD3(OnSetting, void(SpdySettingsIds, uint8, uint32)); |
| 65 MOCK_METHOD1(OnPing, void(uint32 unique_id)); | 63 MOCK_METHOD1(OnPing, void(uint32 unique_id)); |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 InSequence s; | 234 InSequence s; |
| 237 EXPECT_CALL(*interface_, FindOrMakeNewSMConnectionInterface(_, _)) | 235 EXPECT_CALL(*interface_, FindOrMakeNewSMConnectionInterface(_, _)) |
| 238 .WillOnce(Return(mock_interface.get())); | 236 .WillOnce(Return(mock_interface.get())); |
| 239 EXPECT_CALL(*mock_interface, SetStreamID(stream_id)); | 237 EXPECT_CALL(*mock_interface, SetStreamID(stream_id)); |
| 240 EXPECT_CALL(*mock_interface, ProcessWriteInput(_, _)) | 238 EXPECT_CALL(*mock_interface, ProcessWriteInput(_, _)) |
| 241 .WillOnce(DoAll(SaveArg<0>(&saver.data), | 239 .WillOnce(DoAll(SaveArg<0>(&saver.data), |
| 242 SaveArg<1>(&saver.size), | 240 SaveArg<1>(&saver.size), |
| 243 InvokeWithoutArgs(&saver, &StringSaver::Save), | 241 InvokeWithoutArgs(&saver, &StringSaver::Save), |
| 244 Return(0))); | 242 Return(0))); |
| 245 } | 243 } |
| 246 visitor->OnSynStream(stream_id, associated_id, 0, 0, false, false, block); | 244 visitor->OnSynStream(stream_id, associated_id, 0, false, false, block); |
| 247 ASSERT_EQ(expected, saver.string); | 245 ASSERT_EQ(expected, saver.string); |
| 248 } | 246 } |
| 249 | 247 |
| 250 TEST_P(SpdySMProxyTest, OnSynStream) { | 248 TEST_P(SpdySMProxyTest, OnSynStream) { |
| 251 if (GetParam() == SPDY2) { | 249 if (GetParam() == SPDY2) { |
| 252 // This test case is not for SPDY2. | 250 // This test case is not for SPDY2. |
| 253 return; | 251 return; |
| 254 } | 252 } |
| 255 BufferedSpdyFramerVisitorInterface* visitor = interface_.get(); | 253 BufferedSpdyFramerVisitorInterface* visitor = interface_.get(); |
| 256 scoped_ptr<MockSMInterface> mock_interface(new MockSMInterface); | 254 scoped_ptr<MockSMInterface> mock_interface(new MockSMInterface); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 271 EXPECT_CALL(*interface_, | 269 EXPECT_CALL(*interface_, |
| 272 FindOrMakeNewSMConnectionInterface(_, _)) | 270 FindOrMakeNewSMConnectionInterface(_, _)) |
| 273 .WillOnce(Return(mock_interface.get())); | 271 .WillOnce(Return(mock_interface.get())); |
| 274 EXPECT_CALL(*mock_interface, SetStreamID(stream_id)); | 272 EXPECT_CALL(*mock_interface, SetStreamID(stream_id)); |
| 275 EXPECT_CALL(*mock_interface, ProcessWriteInput(_, _)) | 273 EXPECT_CALL(*mock_interface, ProcessWriteInput(_, _)) |
| 276 .WillOnce(DoAll(SaveArg<0>(&saver.data), | 274 .WillOnce(DoAll(SaveArg<0>(&saver.data), |
| 277 SaveArg<1>(&saver.size), | 275 SaveArg<1>(&saver.size), |
| 278 InvokeWithoutArgs(&saver, &StringSaver::Save), | 276 InvokeWithoutArgs(&saver, &StringSaver::Save), |
| 279 Return(0))); | 277 Return(0))); |
| 280 } | 278 } |
| 281 visitor->OnSynStream(stream_id, associated_id, 0, 0, false, false, block); | 279 visitor->OnSynStream(stream_id, associated_id, 0, false, false, block); |
| 282 ASSERT_EQ(expected, saver.string); | 280 ASSERT_EQ(expected, saver.string); |
| 283 } | 281 } |
| 284 | 282 |
| 285 TEST_P(SpdySMProxyTest, OnStreamFrameData_SPDY2) { | 283 TEST_P(SpdySMProxyTest, OnStreamFrameData_SPDY2) { |
| 286 if (GetParam() != SPDY2) { | 284 if (GetParam() != SPDY2) { |
| 287 // This test case is for SPDY2. | 285 // This test case is for SPDY2. |
| 288 return; | 286 return; |
| 289 } | 287 } |
| 290 BufferedSpdyFramerVisitorInterface* visitor = interface_.get(); | 288 BufferedSpdyFramerVisitorInterface* visitor = interface_.get(); |
| 291 scoped_ptr<MockSMInterface> mock_interface(new MockSMInterface); | 289 scoped_ptr<MockSMInterface> mock_interface(new MockSMInterface); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 303 InSequence s; | 301 InSequence s; |
| 304 EXPECT_CALL(*interface_, FindOrMakeNewSMConnectionInterface(_, _)) | 302 EXPECT_CALL(*interface_, FindOrMakeNewSMConnectionInterface(_, _)) |
| 305 .WillOnce(Return(mock_interface.get())); | 303 .WillOnce(Return(mock_interface.get())); |
| 306 EXPECT_CALL(*mock_interface, SetStreamID(stream_id)); | 304 EXPECT_CALL(*mock_interface, SetStreamID(stream_id)); |
| 307 EXPECT_CALL(*mock_interface, ProcessWriteInput(_, _)).Times(1); | 305 EXPECT_CALL(*mock_interface, ProcessWriteInput(_, _)).Times(1); |
| 308 EXPECT_CALL(checkpoint, Call(0)); | 306 EXPECT_CALL(checkpoint, Call(0)); |
| 309 EXPECT_CALL(*mock_interface, | 307 EXPECT_CALL(*mock_interface, |
| 310 ProcessWriteInput(frame->data(), frame->size())).Times(1); | 308 ProcessWriteInput(frame->data(), frame->size())).Times(1); |
| 311 } | 309 } |
| 312 | 310 |
| 313 visitor->OnSynStream(stream_id, associated_id, 0, 0, false, false, block); | 311 visitor->OnSynStream(stream_id, associated_id, 0, false, false, block); |
| 314 checkpoint.Call(0); | 312 checkpoint.Call(0); |
| 315 visitor->OnStreamFrameData(stream_id, frame->data(), frame->size(), true); | 313 visitor->OnStreamFrameData(stream_id, frame->data(), frame->size(), true); |
| 316 } | 314 } |
| 317 | 315 |
| 318 TEST_P(SpdySMProxyTest, OnStreamFrameData) { | 316 TEST_P(SpdySMProxyTest, OnStreamFrameData) { |
| 319 if (GetParam() == SPDY2) { | 317 if (GetParam() == SPDY2) { |
| 320 // This test case is not for SPDY2. | 318 // This test case is not for SPDY2. |
| 321 return; | 319 return; |
| 322 } | 320 } |
| 323 BufferedSpdyFramerVisitorInterface* visitor = interface_.get(); | 321 BufferedSpdyFramerVisitorInterface* visitor = interface_.get(); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 338 EXPECT_CALL(*interface_, | 336 EXPECT_CALL(*interface_, |
| 339 FindOrMakeNewSMConnectionInterface(_, _)) | 337 FindOrMakeNewSMConnectionInterface(_, _)) |
| 340 .WillOnce(Return(mock_interface.get())); | 338 .WillOnce(Return(mock_interface.get())); |
| 341 EXPECT_CALL(*mock_interface, SetStreamID(stream_id)); | 339 EXPECT_CALL(*mock_interface, SetStreamID(stream_id)); |
| 342 EXPECT_CALL(*mock_interface, ProcessWriteInput(_, _)).Times(1); | 340 EXPECT_CALL(*mock_interface, ProcessWriteInput(_, _)).Times(1); |
| 343 EXPECT_CALL(checkpoint, Call(0)); | 341 EXPECT_CALL(checkpoint, Call(0)); |
| 344 EXPECT_CALL(*mock_interface, | 342 EXPECT_CALL(*mock_interface, |
| 345 ProcessWriteInput(frame->data(), frame->size())).Times(1); | 343 ProcessWriteInput(frame->data(), frame->size())).Times(1); |
| 346 } | 344 } |
| 347 | 345 |
| 348 visitor->OnSynStream(stream_id, associated_id, 0, 0, false, false, block); | 346 visitor->OnSynStream(stream_id, associated_id, 0, false, false, block); |
| 349 checkpoint.Call(0); | 347 checkpoint.Call(0); |
| 350 visitor->OnStreamFrameData(stream_id, frame->data(), frame->size(), true); | 348 visitor->OnStreamFrameData(stream_id, frame->data(), frame->size(), true); |
| 351 } | 349 } |
| 352 | 350 |
| 353 TEST_P(SpdySMProxyTest, OnRstStream) { | 351 TEST_P(SpdySMProxyTest, OnRstStream) { |
| 354 BufferedSpdyFramerVisitorInterface* visitor = interface_.get(); | 352 BufferedSpdyFramerVisitorInterface* visitor = interface_.get(); |
| 355 uint32 stream_id = 82; | 353 uint32 stream_id = 82; |
| 356 MemCacheIter mci; | 354 MemCacheIter mci; |
| 357 mci.stream_id = stream_id; | 355 mci.stream_id = stream_id; |
| 358 | 356 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 448 const char* actual_data; | 446 const char* actual_data; |
| 449 size_t actual_size; | 447 size_t actual_size; |
| 450 testing::MockFunction<void(int)> checkpoint; // NOLINT | 448 testing::MockFunction<void(int)> checkpoint; // NOLINT |
| 451 | 449 |
| 452 interface_->SendErrorNotFound(stream_id); | 450 interface_->SendErrorNotFound(stream_id); |
| 453 | 451 |
| 454 ASSERT_EQ(2u, connection_->output_list()->size()); | 452 ASSERT_EQ(2u, connection_->output_list()->size()); |
| 455 | 453 |
| 456 { | 454 { |
| 457 InSequence s; | 455 InSequence s; |
| 458 EXPECT_CALL(*spdy_framer_visitor_, OnSynReply(stream_id, false, _)) | 456 if (GetParam() < SPDY4) { |
| 459 .WillOnce(SaveArg<2>(&actual_header_block)); | 457 EXPECT_CALL(*spdy_framer_visitor_, OnSynReply(stream_id, false, _)) |
| 458 .WillOnce(SaveArg<2>(&actual_header_block)); |
| 459 } else { |
| 460 EXPECT_CALL(*spdy_framer_visitor_, OnHeaders(stream_id, false, _)) |
| 461 .WillOnce(SaveArg<2>(&actual_header_block)); |
| 462 } |
| 460 EXPECT_CALL(checkpoint, Call(0)); | 463 EXPECT_CALL(checkpoint, Call(0)); |
| 461 EXPECT_CALL(*spdy_framer_visitor_, | 464 EXPECT_CALL(*spdy_framer_visitor_, |
| 462 OnDataFrameHeader(stream_id, _, true)); | 465 OnDataFrameHeader(stream_id, _, true)); |
| 463 EXPECT_CALL(*spdy_framer_visitor_, | 466 EXPECT_CALL(*spdy_framer_visitor_, |
| 464 OnStreamFrameData(stream_id, _, _, false)).Times(1) | 467 OnStreamFrameData(stream_id, _, _, false)).Times(1) |
| 465 .WillOnce(DoAll(SaveArg<1>(&actual_data), | 468 .WillOnce(DoAll(SaveArg<1>(&actual_data), |
| 466 SaveArg<2>(&actual_size))); | 469 SaveArg<2>(&actual_size))); |
| 467 EXPECT_CALL(*spdy_framer_visitor_, | 470 EXPECT_CALL(*spdy_framer_visitor_, |
| 468 OnStreamFrameData(stream_id, NULL, 0, true)).Times(1); | 471 OnStreamFrameData(stream_id, NULL, 0, true)).Times(1); |
| 469 } | 472 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 492 const char* actual_data; | 495 const char* actual_data; |
| 493 size_t actual_size; | 496 size_t actual_size; |
| 494 testing::MockFunction<void(int)> checkpoint; // NOLINT | 497 testing::MockFunction<void(int)> checkpoint; // NOLINT |
| 495 | 498 |
| 496 interface_->SendErrorNotFound(stream_id); | 499 interface_->SendErrorNotFound(stream_id); |
| 497 | 500 |
| 498 ASSERT_EQ(2u, connection_->output_list()->size()); | 501 ASSERT_EQ(2u, connection_->output_list()->size()); |
| 499 | 502 |
| 500 { | 503 { |
| 501 InSequence s; | 504 InSequence s; |
| 502 EXPECT_CALL(*spdy_framer_visitor_, | 505 if (GetParam() < SPDY4) { |
| 503 OnSynReply(stream_id, false, _)) | 506 EXPECT_CALL(*spdy_framer_visitor_, |
| 504 .WillOnce(SaveArg<2>(&actual_header_block)); | 507 OnSynReply(stream_id, false, _)) |
| 508 .WillOnce(SaveArg<2>(&actual_header_block)); |
| 509 } else { |
| 510 EXPECT_CALL(*spdy_framer_visitor_, |
| 511 OnHeaders(stream_id, false, _)) |
| 512 .WillOnce(SaveArg<2>(&actual_header_block)); |
| 513 } |
| 505 EXPECT_CALL(checkpoint, Call(0)); | 514 EXPECT_CALL(checkpoint, Call(0)); |
| 506 EXPECT_CALL(*spdy_framer_visitor_, | 515 EXPECT_CALL(*spdy_framer_visitor_, |
| 507 OnDataFrameHeader(stream_id, _, true)); | 516 OnDataFrameHeader(stream_id, _, true)); |
| 508 EXPECT_CALL(*spdy_framer_visitor_, | 517 EXPECT_CALL(*spdy_framer_visitor_, |
| 509 OnStreamFrameData(stream_id, _, _, false)).Times(1) | 518 OnStreamFrameData(stream_id, _, _, false)).Times(1) |
| 510 .WillOnce(DoAll(SaveArg<1>(&actual_data), | 519 .WillOnce(DoAll(SaveArg<1>(&actual_data), |
| 511 SaveArg<2>(&actual_size))); | 520 SaveArg<2>(&actual_size))); |
| 512 EXPECT_CALL(*spdy_framer_visitor_, | 521 EXPECT_CALL(*spdy_framer_visitor_, |
| 513 OnStreamFrameData(stream_id, NULL, 0, true)).Times(1); | 522 OnStreamFrameData(stream_id, NULL, 0, true)).Times(1); |
| 514 } | 523 } |
| (...skipping 25 matching lines...) Expand all Loading... |
| 540 | 549 |
| 541 interface_->SendSynStream(stream_id, headers); | 550 interface_->SendSynStream(stream_id, headers); |
| 542 | 551 |
| 543 ASSERT_EQ(1u, connection_->output_list()->size()); | 552 ASSERT_EQ(1u, connection_->output_list()->size()); |
| 544 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); | 553 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); |
| 545 DataFrame* df = *i++; | 554 DataFrame* df = *i++; |
| 546 | 555 |
| 547 { | 556 { |
| 548 InSequence s; | 557 InSequence s; |
| 549 EXPECT_CALL(*spdy_framer_visitor_, | 558 EXPECT_CALL(*spdy_framer_visitor_, |
| 550 OnSynStream(stream_id, 0, _, _, false, false, _)) | 559 OnSynStream(stream_id, 0, _, false, false, _)) |
| 551 .WillOnce(SaveArg<6>(&actual_header_block)); | 560 .WillOnce(SaveArg<5>(&actual_header_block)); |
| 552 } | 561 } |
| 553 | 562 |
| 554 spdy_framer_->ProcessInput(df->data, df->size); | 563 spdy_framer_->ProcessInput(df->data, df->size); |
| 555 ASSERT_EQ(1, spdy_framer_->frames_received()); | 564 ASSERT_EQ(1, spdy_framer_->frames_received()); |
| 556 ASSERT_EQ(4u, actual_header_block.size()); | 565 ASSERT_EQ(4u, actual_header_block.size()); |
| 557 ASSERT_EQ("GET", actual_header_block["method"]); | 566 ASSERT_EQ("GET", actual_header_block["method"]); |
| 558 ASSERT_EQ("HTTP/1.0", actual_header_block["version"]); | 567 ASSERT_EQ("HTTP/1.0", actual_header_block["version"]); |
| 559 ASSERT_EQ("/path", actual_header_block["url"]); | 568 ASSERT_EQ("/path", actual_header_block["url"]); |
| 560 ASSERT_EQ("value1", actual_header_block["key1"]); | 569 ASSERT_EQ("value1", actual_header_block["key1"]); |
| 561 } | 570 } |
| (...skipping 12 matching lines...) Expand all Loading... |
| 574 | 583 |
| 575 interface_->SendSynStream(stream_id, headers); | 584 interface_->SendSynStream(stream_id, headers); |
| 576 | 585 |
| 577 ASSERT_EQ(1u, connection_->output_list()->size()); | 586 ASSERT_EQ(1u, connection_->output_list()->size()); |
| 578 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); | 587 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); |
| 579 DataFrame* df = *i++; | 588 DataFrame* df = *i++; |
| 580 | 589 |
| 581 { | 590 { |
| 582 InSequence s; | 591 InSequence s; |
| 583 EXPECT_CALL(*spdy_framer_visitor_, | 592 EXPECT_CALL(*spdy_framer_visitor_, |
| 584 OnSynStream(stream_id, 0, _, _, false, false, _)) | 593 OnSynStream(stream_id, 0, _, false, false, _)) |
| 585 .WillOnce(SaveArg<6>(&actual_header_block)); | 594 .WillOnce(SaveArg<5>(&actual_header_block)); |
| 586 } | 595 } |
| 587 | 596 |
| 588 spdy_framer_->ProcessInput(df->data, df->size); | 597 spdy_framer_->ProcessInput(df->data, df->size); |
| 589 ASSERT_EQ(1, spdy_framer_->frames_received()); | 598 ASSERT_EQ(1, spdy_framer_->frames_received()); |
| 590 ASSERT_EQ(5u, actual_header_block.size()); | 599 ASSERT_EQ(5u, actual_header_block.size()); |
| 591 ASSERT_EQ("GET", actual_header_block[":method"]); | 600 ASSERT_EQ("GET", actual_header_block[":method"]); |
| 592 ASSERT_EQ("HTTP/1.1", actual_header_block[":version"]); | 601 ASSERT_EQ("HTTP/1.1", actual_header_block[":version"]); |
| 593 ASSERT_EQ("/path", actual_header_block[":path"]); | 602 ASSERT_EQ("/path", actual_header_block[":path"]); |
| 594 ASSERT_EQ("www.example.com", actual_header_block[":host"]); | 603 ASSERT_EQ("www.example.com", actual_header_block[":host"]); |
| 595 ASSERT_EQ("value1", actual_header_block["key1"]); | 604 ASSERT_EQ("value1", actual_header_block["key1"]); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 607 headers.SetResponseFirstlineFromStringPieces("HTTP/1.1", "200", "OK"); | 616 headers.SetResponseFirstlineFromStringPieces("HTTP/1.1", "200", "OK"); |
| 608 | 617 |
| 609 interface_->SendSynReply(stream_id, headers); | 618 interface_->SendSynReply(stream_id, headers); |
| 610 | 619 |
| 611 ASSERT_EQ(1u, connection_->output_list()->size()); | 620 ASSERT_EQ(1u, connection_->output_list()->size()); |
| 612 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); | 621 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); |
| 613 DataFrame* df = *i++; | 622 DataFrame* df = *i++; |
| 614 | 623 |
| 615 { | 624 { |
| 616 InSequence s; | 625 InSequence s; |
| 617 EXPECT_CALL(*spdy_framer_visitor_, OnSynReply(stream_id, false, _)) | 626 if (GetParam() < SPDY4) { |
| 618 .WillOnce(SaveArg<2>(&actual_header_block)); | 627 EXPECT_CALL(*spdy_framer_visitor_, OnSynReply(stream_id, false, _)) |
| 628 .WillOnce(SaveArg<2>(&actual_header_block)); |
| 629 } else { |
| 630 EXPECT_CALL(*spdy_framer_visitor_, OnHeaders(stream_id, false, _)) |
| 631 .WillOnce(SaveArg<2>(&actual_header_block)); |
| 632 } |
| 619 } | 633 } |
| 620 | 634 |
| 621 spdy_framer_->ProcessInput(df->data, df->size); | 635 spdy_framer_->ProcessInput(df->data, df->size); |
| 622 ASSERT_EQ(1, spdy_framer_->frames_received()); | 636 ASSERT_EQ(1, spdy_framer_->frames_received()); |
| 623 ASSERT_EQ(3u, actual_header_block.size()); | 637 ASSERT_EQ(3u, actual_header_block.size()); |
| 624 ASSERT_EQ("200 OK", actual_header_block["status"]); | 638 ASSERT_EQ("200 OK", actual_header_block["status"]); |
| 625 ASSERT_EQ("HTTP/1.1", actual_header_block["version"]); | 639 ASSERT_EQ("HTTP/1.1", actual_header_block["version"]); |
| 626 ASSERT_EQ("value1", actual_header_block["key1"]); | 640 ASSERT_EQ("value1", actual_header_block["key1"]); |
| 627 } | 641 } |
| 628 | 642 |
| 629 TEST_P(SpdySMProxyTest, SendSynReply) { | 643 TEST_P(SpdySMProxyTest, SendSynReply) { |
| 630 if (GetParam() == SPDY2) { | 644 if (GetParam() == SPDY2) { |
| 631 // This test is not for SPDY2. | 645 // This test is not for SPDY2. |
| 632 return; | 646 return; |
| 633 } | 647 } |
| 634 uint32 stream_id = 82; | 648 uint32 stream_id = 82; |
| 635 BalsaHeaders headers; | 649 BalsaHeaders headers; |
| 636 SpdyHeaderBlock actual_header_block; | 650 SpdyHeaderBlock actual_header_block; |
| 637 headers.AppendHeader("key1", "value1"); | 651 headers.AppendHeader("key1", "value1"); |
| 638 headers.SetResponseFirstlineFromStringPieces("HTTP/1.1", "200", "OK"); | 652 headers.SetResponseFirstlineFromStringPieces("HTTP/1.1", "200", "OK"); |
| 639 | 653 |
| 640 interface_->SendSynReply(stream_id, headers); | 654 interface_->SendSynReply(stream_id, headers); |
| 641 | 655 |
| 642 ASSERT_EQ(1u, connection_->output_list()->size()); | 656 ASSERT_EQ(1u, connection_->output_list()->size()); |
| 643 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); | 657 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); |
| 644 DataFrame* df = *i++; | 658 DataFrame* df = *i++; |
| 645 | 659 |
| 646 { | 660 { |
| 647 InSequence s; | 661 InSequence s; |
| 648 EXPECT_CALL(*spdy_framer_visitor_, OnSynReply(stream_id, false, _)) | 662 if (GetParam() < SPDY4) { |
| 649 .WillOnce(SaveArg<2>(&actual_header_block)); | 663 EXPECT_CALL(*spdy_framer_visitor_, OnSynReply(stream_id, false, _)) |
| 664 .WillOnce(SaveArg<2>(&actual_header_block)); |
| 665 } else { |
| 666 EXPECT_CALL(*spdy_framer_visitor_, OnHeaders(stream_id, false, _)) |
| 667 .WillOnce(SaveArg<2>(&actual_header_block)); |
| 668 } |
| 650 } | 669 } |
| 651 | 670 |
| 652 spdy_framer_->ProcessInput(df->data, df->size); | 671 spdy_framer_->ProcessInput(df->data, df->size); |
| 653 ASSERT_EQ(1, spdy_framer_->frames_received()); | 672 ASSERT_EQ(1, spdy_framer_->frames_received()); |
| 654 ASSERT_EQ(3u, actual_header_block.size()); | 673 ASSERT_EQ(3u, actual_header_block.size()); |
| 655 ASSERT_EQ("200 OK", actual_header_block[":status"]); | 674 ASSERT_EQ("200 OK", actual_header_block[":status"]); |
| 656 ASSERT_EQ("HTTP/1.1", actual_header_block[":version"]); | 675 ASSERT_EQ("HTTP/1.1", actual_header_block[":version"]); |
| 657 ASSERT_EQ("value1", actual_header_block["key1"]); | 676 ASSERT_EQ("value1", actual_header_block["key1"]); |
| 658 } | 677 } |
| 659 | 678 |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 780 SpdyHeaderBlock spdy_headers; | 799 SpdyHeaderBlock spdy_headers; |
| 781 spdy_headers["url"] = "http://www.example.com/path"; | 800 spdy_headers["url"] = "http://www.example.com/path"; |
| 782 spdy_headers["method"] = "GET"; | 801 spdy_headers["method"] = "GET"; |
| 783 spdy_headers["scheme"] = "http"; | 802 spdy_headers["scheme"] = "http"; |
| 784 spdy_headers["version"] = "HTTP/1.1"; | 803 spdy_headers["version"] = "HTTP/1.1"; |
| 785 | 804 |
| 786 { | 805 { |
| 787 BalsaHeaders headers; | 806 BalsaHeaders headers; |
| 788 memory_cache_->InsertFile(&headers, "GET_/path", ""); | 807 memory_cache_->InsertFile(&headers, "GET_/path", ""); |
| 789 } | 808 } |
| 790 visitor->OnSynStream(stream_id, 0, 0, 0, true, true, spdy_headers); | 809 visitor->OnSynStream(stream_id, 0, 0, true, true, spdy_headers); |
| 791 ASSERT_TRUE(HasStream(stream_id)); | 810 ASSERT_TRUE(HasStream(stream_id)); |
| 792 } | 811 } |
| 793 | 812 |
| 794 TEST_P(SpdySMServerTest, NewStream) { | 813 TEST_P(SpdySMServerTest, NewStream) { |
| 795 uint32 stream_id = 13; | 814 uint32 stream_id = 13; |
| 796 std::string filename = "foobar"; | 815 std::string filename = "foobar"; |
| 797 | 816 |
| 798 { | 817 { |
| 799 BalsaHeaders headers; | 818 BalsaHeaders headers; |
| 800 memory_cache_->InsertFile(&headers, filename, ""); | 819 memory_cache_->InsertFile(&headers, filename, ""); |
| 801 } | 820 } |
| 802 | 821 |
| 803 interface_->NewStream(stream_id, 0, filename); | 822 interface_->NewStream(stream_id, 0, filename); |
| 804 ASSERT_TRUE(HasStream(stream_id)); | 823 ASSERT_TRUE(HasStream(stream_id)); |
| 805 } | 824 } |
| 806 | 825 |
| 807 TEST_P(SpdySMServerTest, NewStreamError) { | 826 TEST_P(SpdySMServerTest, NewStreamError) { |
| 808 uint32 stream_id = 82; | 827 uint32 stream_id = 82; |
| 809 SpdyHeaderBlock actual_header_block; | 828 SpdyHeaderBlock actual_header_block; |
| 810 const char* actual_data; | 829 const char* actual_data; |
| 811 size_t actual_size; | 830 size_t actual_size; |
| 812 testing::MockFunction<void(int)> checkpoint; // NOLINT | 831 testing::MockFunction<void(int)> checkpoint; // NOLINT |
| 813 | 832 |
| 814 interface_->NewStream(stream_id, 0, "nonexistingfile"); | 833 interface_->NewStream(stream_id, 0, "nonexistingfile"); |
| 815 | 834 |
| 816 ASSERT_EQ(2u, connection_->output_list()->size()); | 835 ASSERT_EQ(2u, connection_->output_list()->size()); |
| 817 | 836 |
| 818 { | 837 { |
| 819 InSequence s; | 838 InSequence s; |
| 820 EXPECT_CALL(*spdy_framer_visitor_, OnSynReply(stream_id, false, _)) | 839 if (GetParam() < SPDY4) { |
| 821 .WillOnce(SaveArg<2>(&actual_header_block)); | 840 EXPECT_CALL(*spdy_framer_visitor_, OnSynReply(stream_id, false, _)) |
| 841 .WillOnce(SaveArg<2>(&actual_header_block)); |
| 842 } else { |
| 843 EXPECT_CALL(*spdy_framer_visitor_, OnHeaders(stream_id, false, _)) |
| 844 .WillOnce(SaveArg<2>(&actual_header_block)); |
| 845 } |
| 822 EXPECT_CALL(checkpoint, Call(0)); | 846 EXPECT_CALL(checkpoint, Call(0)); |
| 823 EXPECT_CALL(*spdy_framer_visitor_, | 847 EXPECT_CALL(*spdy_framer_visitor_, |
| 824 OnDataFrameHeader(stream_id, _, true)); | 848 OnDataFrameHeader(stream_id, _, true)); |
| 825 EXPECT_CALL(*spdy_framer_visitor_, | 849 EXPECT_CALL(*spdy_framer_visitor_, |
| 826 OnStreamFrameData(stream_id, _, _, false)).Times(1) | 850 OnStreamFrameData(stream_id, _, _, false)).Times(1) |
| 827 .WillOnce(DoAll(SaveArg<1>(&actual_data), | 851 .WillOnce(DoAll(SaveArg<1>(&actual_data), |
| 828 SaveArg<2>(&actual_size))); | 852 SaveArg<2>(&actual_size))); |
| 829 EXPECT_CALL(*spdy_framer_visitor_, | 853 EXPECT_CALL(*spdy_framer_visitor_, |
| 830 OnStreamFrameData(stream_id, NULL, 0, true)).Times(1); | 854 OnStreamFrameData(stream_id, NULL, 0, true)).Times(1); |
| 831 } | 855 } |
| 832 | 856 |
| 833 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); | 857 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); |
| 834 DataFrame* df = *i++; | 858 DataFrame* df = *i++; |
| 835 spdy_framer_->ProcessInput(df->data, df->size); | 859 spdy_framer_->ProcessInput(df->data, df->size); |
| 836 checkpoint.Call(0); | 860 checkpoint.Call(0); |
| 837 df = *i++; | 861 df = *i++; |
| 838 spdy_framer_->ProcessInput(df->data, df->size); | 862 spdy_framer_->ProcessInput(df->data, df->size); |
| 839 | 863 |
| 840 ASSERT_EQ(2, spdy_framer_->frames_received()); | 864 ASSERT_EQ(2, spdy_framer_->frames_received()); |
| 841 ASSERT_EQ(2u, actual_header_block.size()); | 865 ASSERT_EQ(2u, actual_header_block.size()); |
| 842 ASSERT_EQ("404 Not Found", actual_header_block["status"]); | 866 ASSERT_EQ("404 Not Found", actual_header_block["status"]); |
| 843 ASSERT_EQ("HTTP/1.1", actual_header_block["version"]); | 867 ASSERT_EQ("HTTP/1.1", actual_header_block["version"]); |
| 844 ASSERT_EQ("wtf?", StringPiece(actual_data, actual_size)); | 868 ASSERT_EQ("wtf?", StringPiece(actual_data, actual_size)); |
| 845 } | 869 } |
| 846 | 870 |
| 847 } // namespace | 871 } // namespace |
| 848 | 872 |
| 849 } // namespace net | 873 } // namespace net |
| OLD | NEW |