Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(213)

Side by Side Diff: net/http/bidirectional_stream_unittest.cc

Issue 2111953002: Minor test cleanup. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | net/http/http_stream_factory_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/http/bidirectional_stream.h" 5 #include "net/http/bidirectional_stream.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 DISALLOW_COPY_AND_ASSIGN(MockTimer); 326 DISALLOW_COPY_AND_ASSIGN(MockTimer);
327 }; 327 };
328 328
329 } // namespace 329 } // namespace
330 330
331 class BidirectionalStreamTest : public testing::TestWithParam<bool> { 331 class BidirectionalStreamTest : public testing::TestWithParam<bool> {
332 public: 332 public:
333 BidirectionalStreamTest() 333 BidirectionalStreamTest()
334 : spdy_util_(kProtoHTTP2, true), 334 : spdy_util_(kProtoHTTP2, true),
335 session_deps_(kProtoHTTP2), 335 session_deps_(kProtoHTTP2),
336 default_url_(kDefaultUrl),
337 host_port_pair_(HostPortPair::FromURL(default_url_)),
338 key_(host_port_pair_, ProxyServer::Direct(), PRIVACY_MODE_DISABLED),
336 ssl_data_(SSLSocketDataProvider(ASYNC, OK)) { 339 ssl_data_(SSLSocketDataProvider(ASYNC, OK)) {
337 ssl_data_.SetNextProto(kProtoHTTP2); 340 ssl_data_.SetNextProto(kProtoHTTP2);
338 ssl_data_.cert = ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"); 341 ssl_data_.cert = ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem");
339 net_log_.SetCaptureMode(NetLogCaptureMode::IncludeSocketBytes()); 342 net_log_.SetCaptureMode(NetLogCaptureMode::IncludeSocketBytes());
340 } 343 }
341 344
342 protected: 345 protected:
343 void TearDown() override { 346 void TearDown() override {
344 if (sequenced_data_) { 347 if (sequenced_data_) {
345 EXPECT_TRUE(sequenced_data_->AllReadDataConsumed()); 348 EXPECT_TRUE(sequenced_data_->AllReadDataConsumed());
346 EXPECT_TRUE(sequenced_data_->AllWriteDataConsumed()); 349 EXPECT_TRUE(sequenced_data_->AllWriteDataConsumed());
347 } 350 }
348 } 351 }
349 352
350 // Initializes the session using SequencedSocketData. 353 // Initializes the session using SequencedSocketData.
351 void InitSession(MockRead* reads, 354 void InitSession(MockRead* reads,
352 size_t reads_count, 355 size_t reads_count,
353 MockWrite* writes, 356 MockWrite* writes,
354 size_t writes_count, 357 size_t writes_count) {
355 const SpdySessionKey& key) {
356 ASSERT_TRUE(ssl_data_.cert.get()); 358 ASSERT_TRUE(ssl_data_.cert.get());
357 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_data_); 359 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_data_);
358 sequenced_data_.reset( 360 sequenced_data_.reset(
359 new SequencedSocketData(reads, reads_count, writes, writes_count)); 361 new SequencedSocketData(reads, reads_count, writes, writes_count));
360 session_deps_.socket_factory->AddSocketDataProvider(sequenced_data_.get()); 362 session_deps_.socket_factory->AddSocketDataProvider(sequenced_data_.get());
361 session_deps_.net_log = net_log_.bound().net_log(); 363 session_deps_.net_log = net_log_.bound().net_log();
362 http_session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_); 364 http_session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
363 session_ = 365 session_ =
364 CreateSecureSpdySession(http_session_.get(), key, net_log_.bound()); 366 CreateSecureSpdySession(http_session_.get(), key_, net_log_.bound());
365 } 367 }
366 368
367 BoundTestNetLog net_log_; 369 BoundTestNetLog net_log_;
368 SpdyTestUtil spdy_util_; 370 SpdyTestUtil spdy_util_;
369 SpdySessionDependencies session_deps_; 371 SpdySessionDependencies session_deps_;
372 const GURL default_url_;
373 const HostPortPair host_port_pair_;
374 const SpdySessionKey key_;
370 std::unique_ptr<SequencedSocketData> sequenced_data_; 375 std::unique_ptr<SequencedSocketData> sequenced_data_;
371 std::unique_ptr<HttpNetworkSession> http_session_; 376 std::unique_ptr<HttpNetworkSession> http_session_;
372 377
373 private: 378 private:
374 SSLSocketDataProvider ssl_data_; 379 SSLSocketDataProvider ssl_data_;
375 base::WeakPtr<SpdySession> session_; 380 base::WeakPtr<SpdySession> session_;
376 }; 381 };
377 382
378 TEST_F(BidirectionalStreamTest, CreateInsecureStream) { 383 TEST_F(BidirectionalStreamTest, CreateInsecureStream) {
379 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 384 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
(...skipping 28 matching lines...) Expand all
408 // Reset stream right before the OnFailed task is executed. 413 // Reset stream right before the OnFailed task is executed.
409 delegate.reset(); 414 delegate.reset();
410 415
411 base::RunLoop().RunUntilIdle(); 416 base::RunLoop().RunUntilIdle();
412 } 417 }
413 418
414 // Simulates user calling ReadData after END_STREAM has been received in 419 // Simulates user calling ReadData after END_STREAM has been received in
415 // BidirectionalStreamSpdyImpl. 420 // BidirectionalStreamSpdyImpl.
416 TEST_F(BidirectionalStreamTest, TestReadDataAfterClose) { 421 TEST_F(BidirectionalStreamTest, TestReadDataAfterClose) {
417 std::unique_ptr<SpdySerializedFrame> req( 422 std::unique_ptr<SpdySerializedFrame> req(
418 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); 423 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
419 // Empty DATA frame with an END_STREAM flag. 424 // Empty DATA frame with an END_STREAM flag.
420 std::unique_ptr<SpdySerializedFrame> end_stream( 425 std::unique_ptr<SpdySerializedFrame> end_stream(
421 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); 426 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true));
422 MockWrite writes[] = { 427 MockWrite writes[] = {
423 CreateMockWrite(*req.get(), 0), 428 CreateMockWrite(*req.get(), 0),
424 }; 429 };
425 430
426 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; 431 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"};
427 432
428 std::unique_ptr<SpdySerializedFrame> resp( 433 std::unique_ptr<SpdySerializedFrame> resp(
429 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); 434 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
430 435
431 std::unique_ptr<SpdySerializedFrame> body_frame( 436 std::unique_ptr<SpdySerializedFrame> body_frame(
432 spdy_util_.ConstructSpdyBodyFrame(1, false)); 437 spdy_util_.ConstructSpdyBodyFrame(1, false));
433 // Last body frame has END_STREAM flag set. 438 // Last body frame has END_STREAM flag set.
434 std::unique_ptr<SpdySerializedFrame> last_body_frame( 439 std::unique_ptr<SpdySerializedFrame> last_body_frame(
435 spdy_util_.ConstructSpdyBodyFrame(1, true)); 440 spdy_util_.ConstructSpdyBodyFrame(1, true));
436 441
437 MockRead reads[] = { 442 MockRead reads[] = {
438 CreateMockRead(*resp, 1), 443 CreateMockRead(*resp, 1),
439 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. 444 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause.
440 CreateMockRead(*body_frame, 3), 445 CreateMockRead(*body_frame, 3),
441 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause. 446 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause.
442 CreateMockRead(*body_frame, 5), 447 CreateMockRead(*body_frame, 5),
443 CreateMockRead(*last_body_frame, 6), 448 CreateMockRead(*last_body_frame, 6),
444 MockRead(SYNCHRONOUS, 0, 7), 449 MockRead(SYNCHRONOUS, 0, 7),
445 }; 450 };
446 451
447 HostPortPair host_port_pair("www.example.org", 443); 452 InitSession(reads, arraysize(reads), writes, arraysize(writes));
448 SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
449 PRIVACY_MODE_DISABLED);
450 InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
451 453
452 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 454 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
453 new BidirectionalStreamRequestInfo); 455 new BidirectionalStreamRequestInfo);
454 request_info->method = "GET"; 456 request_info->method = "GET";
455 request_info->url = GURL("https://www.example.org/"); 457 request_info->url = default_url_;
456 request_info->end_stream_on_headers = true; 458 request_info->end_stream_on_headers = true;
457 request_info->priority = LOWEST; 459 request_info->priority = LOWEST;
458 460
459 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 461 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
460 // Create a MockTimer. Retain a raw pointer since the underlying 462 // Create a MockTimer. Retain a raw pointer since the underlying
461 // BidirectionalStreamImpl owns it. 463 // BidirectionalStreamImpl owns it.
462 MockTimer* timer = new MockTimer(); 464 MockTimer* timer = new MockTimer();
463 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( 465 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
464 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); 466 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
465 delegate->set_do_not_start_read(true); 467 delegate->set_do_not_start_read(true);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 delegate->GetTotalSentBytes()); 502 delegate->GetTotalSentBytes());
501 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), 503 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)),
502 delegate->GetTotalReceivedBytes()); 504 delegate->GetTotalReceivedBytes());
503 } 505 }
504 506
505 // Tests that the NetLog contains correct entries. 507 // Tests that the NetLog contains correct entries.
506 TEST_F(BidirectionalStreamTest, TestNetLogContainEntries) { 508 TEST_F(BidirectionalStreamTest, TestNetLogContainEntries) {
507 BufferedSpdyFramer framer(spdy_util_.spdy_version()); 509 BufferedSpdyFramer framer(spdy_util_.spdy_version());
508 510
509 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( 511 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
510 "https://www.example.org", 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); 512 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0));
511 std::unique_ptr<SpdySerializedFrame> data_frame( 513 std::unique_ptr<SpdySerializedFrame> data_frame(
512 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_FIN)); 514 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_FIN));
513 MockWrite writes[] = { 515 MockWrite writes[] = {
514 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame, 3), 516 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame, 3),
515 }; 517 };
516 518
517 std::unique_ptr<SpdySerializedFrame> resp( 519 std::unique_ptr<SpdySerializedFrame> resp(
518 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 520 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
519 std::unique_ptr<SpdySerializedFrame> response_body_frame1( 521 std::unique_ptr<SpdySerializedFrame> response_body_frame1(
520 spdy_util_.ConstructSpdyBodyFrame(1, false)); 522 spdy_util_.ConstructSpdyBodyFrame(1, false));
521 std::unique_ptr<SpdySerializedFrame> response_body_frame2( 523 std::unique_ptr<SpdySerializedFrame> response_body_frame2(
522 spdy_util_.ConstructSpdyBodyFrame(1, false)); 524 spdy_util_.ConstructSpdyBodyFrame(1, false));
523 525
524 SpdyHeaderBlock trailers; 526 SpdyHeaderBlock trailers;
525 trailers["foo"] = "bar"; 527 trailers["foo"] = "bar";
526 std::unique_ptr<SpdySerializedFrame> response_trailers( 528 std::unique_ptr<SpdySerializedFrame> response_trailers(
527 spdy_util_.ConstructSpdyResponseHeaders(1, std::move(trailers), true)); 529 spdy_util_.ConstructSpdyResponseHeaders(1, std::move(trailers), true));
528 530
529 MockRead reads[] = { 531 MockRead reads[] = {
530 CreateMockRead(*resp, 1), 532 CreateMockRead(*resp, 1),
531 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. 533 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause.
532 CreateMockRead(*response_body_frame1, 4), 534 CreateMockRead(*response_body_frame1, 4),
533 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause. 535 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause.
534 CreateMockRead(*response_body_frame2, 6), 536 CreateMockRead(*response_body_frame2, 6),
535 CreateMockRead(*response_trailers, 7), 537 CreateMockRead(*response_trailers, 7),
536 MockRead(ASYNC, 0, 8), 538 MockRead(ASYNC, 0, 8),
537 }; 539 };
538 540
539 HostPortPair host_port_pair("www.example.org", 443); 541 InitSession(reads, arraysize(reads), writes, arraysize(writes));
540 SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
541 PRIVACY_MODE_DISABLED);
542 InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
543 542
544 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 543 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
545 new BidirectionalStreamRequestInfo); 544 new BidirectionalStreamRequestInfo);
546 request_info->method = "POST"; 545 request_info->method = "POST";
547 request_info->url = GURL("https://www.example.org/"); 546 request_info->url = default_url_;
548 request_info->priority = LOWEST; 547 request_info->priority = LOWEST;
549 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, 548 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength,
550 base::SizeTToString(kBodyDataSize * 3)); 549 base::SizeTToString(kBodyDataSize * 3));
551 550
552 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 551 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
553 MockTimer* timer = new MockTimer(); 552 MockTimer* timer = new MockTimer();
554 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( 553 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
555 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); 554 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
556 delegate->set_do_not_start_read(true); 555 delegate->set_do_not_start_read(true);
557 delegate->Start(std::move(request_info), http_session_.get()); 556 delegate->Start(std::move(request_info), http_session_.get());
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 EXPECT_EQ(NetLog::SOURCE_BIDIRECTIONAL_STREAM, entry.source.type); 634 EXPECT_EQ(NetLog::SOURCE_BIDIRECTIONAL_STREAM, entry.source.type);
636 ExpectLogContainsSomewhere(entries, index, 635 ExpectLogContainsSomewhere(entries, index,
637 NetLog::TYPE_BIDIRECTIONAL_STREAM_ALIVE, 636 NetLog::TYPE_BIDIRECTIONAL_STREAM_ALIVE,
638 NetLog::PHASE_END); 637 NetLog::PHASE_END);
639 } 638 }
640 639
641 TEST_F(BidirectionalStreamTest, TestInterleaveReadDataAndSendData) { 640 TEST_F(BidirectionalStreamTest, TestInterleaveReadDataAndSendData) {
642 BufferedSpdyFramer framer(spdy_util_.spdy_version()); 641 BufferedSpdyFramer framer(spdy_util_.spdy_version());
643 642
644 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( 643 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
645 "https://www.example.org", 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); 644 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0));
646 std::unique_ptr<SpdySerializedFrame> data_frame1( 645 std::unique_ptr<SpdySerializedFrame> data_frame1(
647 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); 646 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE));
648 std::unique_ptr<SpdySerializedFrame> data_frame2( 647 std::unique_ptr<SpdySerializedFrame> data_frame2(
649 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); 648 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE));
650 std::unique_ptr<SpdySerializedFrame> data_frame3( 649 std::unique_ptr<SpdySerializedFrame> data_frame3(
651 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_FIN)); 650 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_FIN));
652 MockWrite writes[] = { 651 MockWrite writes[] = {
653 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame1, 3), 652 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame1, 3),
654 CreateMockWrite(*data_frame2, 6), CreateMockWrite(*data_frame3, 9), 653 CreateMockWrite(*data_frame2, 6), CreateMockWrite(*data_frame3, 9),
655 }; 654 };
656 655
657 std::unique_ptr<SpdySerializedFrame> resp( 656 std::unique_ptr<SpdySerializedFrame> resp(
658 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 657 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
659 std::unique_ptr<SpdySerializedFrame> response_body_frame1( 658 std::unique_ptr<SpdySerializedFrame> response_body_frame1(
660 spdy_util_.ConstructSpdyBodyFrame(1, false)); 659 spdy_util_.ConstructSpdyBodyFrame(1, false));
661 std::unique_ptr<SpdySerializedFrame> response_body_frame2( 660 std::unique_ptr<SpdySerializedFrame> response_body_frame2(
662 spdy_util_.ConstructSpdyBodyFrame(1, true)); 661 spdy_util_.ConstructSpdyBodyFrame(1, true));
663 662
664 MockRead reads[] = { 663 MockRead reads[] = {
665 CreateMockRead(*resp, 1), 664 CreateMockRead(*resp, 1),
666 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. 665 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause.
667 CreateMockRead(*response_body_frame1, 4), 666 CreateMockRead(*response_body_frame1, 4),
668 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause. 667 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause.
669 CreateMockRead(*response_body_frame2, 7), 668 CreateMockRead(*response_body_frame2, 7),
670 MockRead(ASYNC, ERR_IO_PENDING, 8), // Force a pause. 669 MockRead(ASYNC, ERR_IO_PENDING, 8), // Force a pause.
671 MockRead(ASYNC, 0, 10), 670 MockRead(ASYNC, 0, 10),
672 }; 671 };
673 672
674 HostPortPair host_port_pair("www.example.org", 443); 673 InitSession(reads, arraysize(reads), writes, arraysize(writes));
675 SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
676 PRIVACY_MODE_DISABLED);
677 InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
678 674
679 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 675 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
680 new BidirectionalStreamRequestInfo); 676 new BidirectionalStreamRequestInfo);
681 request_info->method = "POST"; 677 request_info->method = "POST";
682 request_info->url = GURL("https://www.example.org/"); 678 request_info->url = default_url_;
683 request_info->priority = LOWEST; 679 request_info->priority = LOWEST;
684 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, 680 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength,
685 base::SizeTToString(kBodyDataSize * 3)); 681 base::SizeTToString(kBodyDataSize * 3));
686 682
687 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 683 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
688 MockTimer* timer = new MockTimer(); 684 MockTimer* timer = new MockTimer();
689 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( 685 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
690 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); 686 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
691 delegate->set_do_not_start_read(true); 687 delegate->set_do_not_start_read(true);
692 delegate->Start(std::move(request_info), http_session_.get()); 688 delegate->Start(std::move(request_info), http_session_.get());
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
742 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), 738 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)),
743 delegate->GetTotalSentBytes()); 739 delegate->GetTotalSentBytes());
744 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), 740 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)),
745 delegate->GetTotalReceivedBytes()); 741 delegate->GetTotalReceivedBytes());
746 } 742 }
747 743
748 TEST_F(BidirectionalStreamTest, TestCoalesceSmallDataBuffers) { 744 TEST_F(BidirectionalStreamTest, TestCoalesceSmallDataBuffers) {
749 BufferedSpdyFramer framer(spdy_util_.spdy_version()); 745 BufferedSpdyFramer framer(spdy_util_.spdy_version());
750 746
751 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( 747 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
752 "https://www.example.org", 1, kBodyDataSize * 1, LOWEST, nullptr, 0)); 748 kDefaultUrl, 1, kBodyDataSize * 1, LOWEST, nullptr, 0));
753 std::string body_data = "some really long piece of data"; 749 std::string body_data = "some really long piece of data";
754 std::unique_ptr<SpdySerializedFrame> data_frame1(framer.CreateDataFrame( 750 std::unique_ptr<SpdySerializedFrame> data_frame1(framer.CreateDataFrame(
755 1, body_data.c_str(), body_data.size(), DATA_FLAG_FIN)); 751 1, body_data.c_str(), body_data.size(), DATA_FLAG_FIN));
756 MockWrite writes[] = { 752 MockWrite writes[] = {
757 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame1, 1), 753 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame1, 1),
758 }; 754 };
759 755
760 std::unique_ptr<SpdySerializedFrame> resp( 756 std::unique_ptr<SpdySerializedFrame> resp(
761 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 757 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
762 std::unique_ptr<SpdySerializedFrame> response_body_frame1( 758 std::unique_ptr<SpdySerializedFrame> response_body_frame1(
763 spdy_util_.ConstructSpdyBodyFrame(1, true)); 759 spdy_util_.ConstructSpdyBodyFrame(1, true));
764 MockRead reads[] = { 760 MockRead reads[] = {
765 CreateMockRead(*resp, 2), 761 CreateMockRead(*resp, 2),
766 MockRead(ASYNC, ERR_IO_PENDING, 3), // Force a pause. 762 MockRead(ASYNC, ERR_IO_PENDING, 3), // Force a pause.
767 CreateMockRead(*response_body_frame1, 4), MockRead(ASYNC, 0, 5), 763 CreateMockRead(*response_body_frame1, 4), MockRead(ASYNC, 0, 5),
768 }; 764 };
769 765
770 HostPortPair host_port_pair("www.example.org", 443); 766 InitSession(reads, arraysize(reads), writes, arraysize(writes));
771 SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
772 PRIVACY_MODE_DISABLED);
773 InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
774 767
775 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 768 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
776 new BidirectionalStreamRequestInfo); 769 new BidirectionalStreamRequestInfo);
777 request_info->method = "POST"; 770 request_info->method = "POST";
778 request_info->url = GURL("https://www.example.org/"); 771 request_info->url = default_url_;
779 request_info->priority = LOWEST; 772 request_info->priority = LOWEST;
780 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, 773 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength,
781 base::SizeTToString(kBodyDataSize * 1)); 774 base::SizeTToString(kBodyDataSize * 1));
782 775
783 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 776 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
784 MockTimer* timer = new MockTimer(); 777 MockTimer* timer = new MockTimer();
785 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( 778 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
786 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); 779 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
787 delegate->set_do_not_start_read(true); 780 delegate->set_do_not_start_read(true);
788 TestCompletionCallback callback; 781 TestCompletionCallback callback;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
841 834
842 ExpectLogContainsSomewhere( 835 ExpectLogContainsSomewhere(
843 entries, index, NetLog::TYPE_BIDIRECTIONAL_STREAM_BYTES_SENT_COALESCED, 836 entries, index, NetLog::TYPE_BIDIRECTIONAL_STREAM_BYTES_SENT_COALESCED,
844 NetLog::PHASE_END); 837 NetLog::PHASE_END);
845 } 838 }
846 839
847 // Tests that BidirectionalStreamSpdyImpl::OnClose will complete any remaining 840 // Tests that BidirectionalStreamSpdyImpl::OnClose will complete any remaining
848 // read even if the read queue is empty. 841 // read even if the read queue is empty.
849 TEST_F(BidirectionalStreamTest, TestCompleteAsyncRead) { 842 TEST_F(BidirectionalStreamTest, TestCompleteAsyncRead) {
850 std::unique_ptr<SpdySerializedFrame> req( 843 std::unique_ptr<SpdySerializedFrame> req(
851 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); 844 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
852 // Empty DATA frame with an END_STREAM flag. 845 // Empty DATA frame with an END_STREAM flag.
853 std::unique_ptr<SpdySerializedFrame> end_stream( 846 std::unique_ptr<SpdySerializedFrame> end_stream(
854 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); 847 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true));
855 848
856 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)}; 849 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)};
857 850
858 std::unique_ptr<SpdySerializedFrame> resp( 851 std::unique_ptr<SpdySerializedFrame> resp(
859 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 852 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
860 853
861 std::unique_ptr<SpdySerializedFrame> response_body_frame( 854 std::unique_ptr<SpdySerializedFrame> response_body_frame(
862 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); 855 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true));
863 856
864 MockRead reads[] = { 857 MockRead reads[] = {
865 CreateMockRead(*resp, 1), 858 CreateMockRead(*resp, 1),
866 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. 859 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause.
867 CreateMockRead(*response_body_frame, 3), MockRead(SYNCHRONOUS, 0, 4), 860 CreateMockRead(*response_body_frame, 3), MockRead(SYNCHRONOUS, 0, 4),
868 }; 861 };
869 862
870 HostPortPair host_port_pair("www.example.org", 443); 863 InitSession(reads, arraysize(reads), writes, arraysize(writes));
871 SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
872 PRIVACY_MODE_DISABLED);
873 InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
874 864
875 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 865 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
876 new BidirectionalStreamRequestInfo); 866 new BidirectionalStreamRequestInfo);
877 request_info->method = "GET"; 867 request_info->method = "GET";
878 request_info->url = GURL("https://www.example.org/"); 868 request_info->url = default_url_;
879 request_info->priority = LOWEST; 869 request_info->priority = LOWEST;
880 request_info->end_stream_on_headers = true; 870 request_info->end_stream_on_headers = true;
881 871
882 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 872 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
883 MockTimer* timer = new MockTimer(); 873 MockTimer* timer = new MockTimer();
884 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( 874 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
885 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); 875 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
886 delegate->set_do_not_start_read(true); 876 delegate->set_do_not_start_read(true);
887 delegate->Start(std::move(request_info), http_session_.get()); 877 delegate->Start(std::move(request_info), http_session_.get());
888 // Write request, and deliver response headers. 878 // Write request, and deliver response headers.
(...skipping 14 matching lines...) Expand all
903 EXPECT_EQ(0, delegate->on_data_sent_count()); 893 EXPECT_EQ(0, delegate->on_data_sent_count());
904 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); 894 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol());
905 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), 895 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)),
906 delegate->GetTotalSentBytes()); 896 delegate->GetTotalSentBytes());
907 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), 897 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)),
908 delegate->GetTotalReceivedBytes()); 898 delegate->GetTotalReceivedBytes());
909 } 899 }
910 900
911 TEST_F(BidirectionalStreamTest, TestBuffering) { 901 TEST_F(BidirectionalStreamTest, TestBuffering) {
912 std::unique_ptr<SpdySerializedFrame> req( 902 std::unique_ptr<SpdySerializedFrame> req(
913 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); 903 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
914 // Empty DATA frame with an END_STREAM flag. 904 // Empty DATA frame with an END_STREAM flag.
915 std::unique_ptr<SpdySerializedFrame> end_stream( 905 std::unique_ptr<SpdySerializedFrame> end_stream(
916 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); 906 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true));
917 907
918 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)}; 908 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)};
919 909
920 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; 910 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"};
921 911
922 std::unique_ptr<SpdySerializedFrame> resp( 912 std::unique_ptr<SpdySerializedFrame> resp(
923 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); 913 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
924 914
925 std::unique_ptr<SpdySerializedFrame> body_frame( 915 std::unique_ptr<SpdySerializedFrame> body_frame(
926 spdy_util_.ConstructSpdyBodyFrame(1, false)); 916 spdy_util_.ConstructSpdyBodyFrame(1, false));
927 // Last body frame has END_STREAM flag set. 917 // Last body frame has END_STREAM flag set.
928 std::unique_ptr<SpdySerializedFrame> last_body_frame( 918 std::unique_ptr<SpdySerializedFrame> last_body_frame(
929 spdy_util_.ConstructSpdyBodyFrame(1, true)); 919 spdy_util_.ConstructSpdyBodyFrame(1, true));
930 920
931 MockRead reads[] = { 921 MockRead reads[] = {
932 CreateMockRead(*resp, 1), 922 CreateMockRead(*resp, 1),
933 CreateMockRead(*body_frame, 2), 923 CreateMockRead(*body_frame, 2),
934 CreateMockRead(*body_frame, 3), 924 CreateMockRead(*body_frame, 3),
935 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause. 925 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause.
936 CreateMockRead(*last_body_frame, 5), 926 CreateMockRead(*last_body_frame, 5),
937 MockRead(SYNCHRONOUS, 0, 6), 927 MockRead(SYNCHRONOUS, 0, 6),
938 }; 928 };
939 929
940 HostPortPair host_port_pair("www.example.org", 443); 930 InitSession(reads, arraysize(reads), writes, arraysize(writes));
941 SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
942 PRIVACY_MODE_DISABLED);
943 InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
944 931
945 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 932 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
946 new BidirectionalStreamRequestInfo); 933 new BidirectionalStreamRequestInfo);
947 request_info->method = "GET"; 934 request_info->method = "GET";
948 request_info->url = GURL("https://www.example.org/"); 935 request_info->url = default_url_;
949 request_info->priority = LOWEST; 936 request_info->priority = LOWEST;
950 request_info->end_stream_on_headers = true; 937 request_info->end_stream_on_headers = true;
951 938
952 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 939 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
953 MockTimer* timer = new MockTimer(); 940 MockTimer* timer = new MockTimer();
954 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( 941 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
955 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); 942 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
956 delegate->Start(std::move(request_info), http_session_.get()); 943 delegate->Start(std::move(request_info), http_session_.get());
957 // Deliver two DATA frames together. 944 // Deliver two DATA frames together.
958 sequenced_data_->RunUntilPaused(); 945 sequenced_data_->RunUntilPaused();
(...skipping 28 matching lines...) Expand all
987 EXPECT_EQ(0, delegate->on_data_sent_count()); 974 EXPECT_EQ(0, delegate->on_data_sent_count());
988 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); 975 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol());
989 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), 976 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)),
990 delegate->GetTotalSentBytes()); 977 delegate->GetTotalSentBytes());
991 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), 978 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)),
992 delegate->GetTotalReceivedBytes()); 979 delegate->GetTotalReceivedBytes());
993 } 980 }
994 981
995 TEST_F(BidirectionalStreamTest, TestBufferingWithTrailers) { 982 TEST_F(BidirectionalStreamTest, TestBufferingWithTrailers) {
996 std::unique_ptr<SpdySerializedFrame> req( 983 std::unique_ptr<SpdySerializedFrame> req(
997 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); 984 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
998 // Empty DATA frame with an END_STREAM flag. 985 // Empty DATA frame with an END_STREAM flag.
999 std::unique_ptr<SpdySerializedFrame> end_stream( 986 std::unique_ptr<SpdySerializedFrame> end_stream(
1000 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); 987 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true));
1001 988
1002 MockWrite writes[] = { 989 MockWrite writes[] = {
1003 CreateMockWrite(*req.get(), 0), 990 CreateMockWrite(*req.get(), 0),
1004 }; 991 };
1005 992
1006 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; 993 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"};
1007 994
(...skipping 11 matching lines...) Expand all
1019 MockRead reads[] = { 1006 MockRead reads[] = {
1020 CreateMockRead(*resp, 1), 1007 CreateMockRead(*resp, 1),
1021 CreateMockRead(*body_frame, 2), 1008 CreateMockRead(*body_frame, 2),
1022 CreateMockRead(*body_frame, 3), 1009 CreateMockRead(*body_frame, 3),
1023 CreateMockRead(*body_frame, 4), 1010 CreateMockRead(*body_frame, 4),
1024 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause. 1011 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause.
1025 CreateMockRead(*response_trailers, 6), 1012 CreateMockRead(*response_trailers, 6),
1026 MockRead(SYNCHRONOUS, 0, 7), 1013 MockRead(SYNCHRONOUS, 0, 7),
1027 }; 1014 };
1028 1015
1029 HostPortPair host_port_pair("www.example.org", 443); 1016 InitSession(reads, arraysize(reads), writes, arraysize(writes));
1030 SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
1031 PRIVACY_MODE_DISABLED);
1032 InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
1033 1017
1034 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 1018 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
1035 MockTimer* timer = new MockTimer(); 1019 MockTimer* timer = new MockTimer();
1036 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( 1020 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
1037 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); 1021 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
1038 1022
1039 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 1023 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
1040 new BidirectionalStreamRequestInfo); 1024 new BidirectionalStreamRequestInfo);
1041 request_info->method = "GET"; 1025 request_info->method = "GET";
1042 request_info->url = GURL("https://www.example.org/"); 1026 request_info->url = default_url_;
1043 request_info->priority = LOWEST; 1027 request_info->priority = LOWEST;
1044 request_info->end_stream_on_headers = true; 1028 request_info->end_stream_on_headers = true;
1045 1029
1046 delegate->Start(std::move(request_info), http_session_.get()); 1030 delegate->Start(std::move(request_info), http_session_.get());
1047 // Deliver all three DATA frames together. 1031 // Deliver all three DATA frames together.
1048 sequenced_data_->RunUntilPaused(); 1032 sequenced_data_->RunUntilPaused();
1049 EXPECT_TRUE(timer->IsRunning()); 1033 EXPECT_TRUE(timer->IsRunning());
1050 timer->Fire(); 1034 timer->Fire();
1051 base::RunLoop().RunUntilIdle(); 1035 base::RunLoop().RunUntilIdle();
1052 // This should trigger |more_read_data_pending_| to execute the task at a 1036 // This should trigger |more_read_data_pending_| to execute the task at a
(...skipping 19 matching lines...) Expand all
1072 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), 1056 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)),
1073 delegate->GetTotalSentBytes()); 1057 delegate->GetTotalSentBytes());
1074 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), 1058 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)),
1075 delegate->GetTotalReceivedBytes()); 1059 delegate->GetTotalReceivedBytes());
1076 } 1060 }
1077 1061
1078 TEST_F(BidirectionalStreamTest, CancelStreamAfterSendData) { 1062 TEST_F(BidirectionalStreamTest, CancelStreamAfterSendData) {
1079 BufferedSpdyFramer framer(spdy_util_.spdy_version()); 1063 BufferedSpdyFramer framer(spdy_util_.spdy_version());
1080 1064
1081 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( 1065 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
1082 "https://www.example.org", 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); 1066 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0));
1083 std::unique_ptr<SpdySerializedFrame> data_frame( 1067 std::unique_ptr<SpdySerializedFrame> data_frame(
1084 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); 1068 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE));
1085 std::unique_ptr<SpdySerializedFrame> rst( 1069 std::unique_ptr<SpdySerializedFrame> rst(
1086 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 1070 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1087 1071
1088 MockWrite writes[] = { 1072 MockWrite writes[] = {
1089 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame, 3), 1073 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame, 3),
1090 CreateMockWrite(*rst, 5), 1074 CreateMockWrite(*rst, 5),
1091 }; 1075 };
1092 1076
1093 std::unique_ptr<SpdySerializedFrame> resp( 1077 std::unique_ptr<SpdySerializedFrame> resp(
1094 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 1078 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
1095 std::unique_ptr<SpdySerializedFrame> response_body_frame( 1079 std::unique_ptr<SpdySerializedFrame> response_body_frame(
1096 spdy_util_.ConstructSpdyBodyFrame(1, false)); 1080 spdy_util_.ConstructSpdyBodyFrame(1, false));
1097 1081
1098 MockRead reads[] = { 1082 MockRead reads[] = {
1099 CreateMockRead(*resp, 1), 1083 CreateMockRead(*resp, 1),
1100 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. 1084 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause.
1101 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause. 1085 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause.
1102 MockRead(ASYNC, 0, 6), 1086 MockRead(ASYNC, 0, 6),
1103 }; 1087 };
1104 1088
1105 HostPortPair host_port_pair("www.example.org", 443); 1089 InitSession(reads, arraysize(reads), writes, arraysize(writes));
1106 SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
1107 PRIVACY_MODE_DISABLED);
1108 InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
1109 1090
1110 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 1091 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
1111 new BidirectionalStreamRequestInfo); 1092 new BidirectionalStreamRequestInfo);
1112 request_info->method = "POST"; 1093 request_info->method = "POST";
1113 request_info->url = GURL("https://www.example.org/"); 1094 request_info->url = default_url_;
1114 request_info->priority = LOWEST; 1095 request_info->priority = LOWEST;
1115 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, 1096 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength,
1116 base::SizeTToString(kBodyDataSize * 3)); 1097 base::SizeTToString(kBodyDataSize * 3));
1117 1098
1118 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 1099 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
1119 std::unique_ptr<TestDelegateBase> delegate( 1100 std::unique_ptr<TestDelegateBase> delegate(
1120 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); 1101 new TestDelegateBase(read_buffer.get(), kReadBufferSize));
1121 delegate->set_do_not_start_read(true); 1102 delegate->set_do_not_start_read(true);
1122 delegate->Start(std::move(request_info), http_session_.get()); 1103 delegate->Start(std::move(request_info), http_session_.get());
1123 // Send the request and receive response headers. 1104 // Send the request and receive response headers.
(...skipping 18 matching lines...) Expand all
1142 // Calling after stream is canceled gives kProtoUnknown. 1123 // Calling after stream is canceled gives kProtoUnknown.
1143 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); 1124 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol());
1144 EXPECT_EQ(0, delegate->GetTotalSentBytes()); 1125 EXPECT_EQ(0, delegate->GetTotalSentBytes());
1145 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); 1126 EXPECT_EQ(0, delegate->GetTotalReceivedBytes());
1146 } 1127 }
1147 1128
1148 TEST_F(BidirectionalStreamTest, CancelStreamDuringReadData) { 1129 TEST_F(BidirectionalStreamTest, CancelStreamDuringReadData) {
1149 BufferedSpdyFramer framer(spdy_util_.spdy_version()); 1130 BufferedSpdyFramer framer(spdy_util_.spdy_version());
1150 1131
1151 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( 1132 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
1152 "https://www.example.org", 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); 1133 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0));
1153 std::unique_ptr<SpdySerializedFrame> data_frame( 1134 std::unique_ptr<SpdySerializedFrame> data_frame(
1154 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); 1135 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE));
1155 std::unique_ptr<SpdySerializedFrame> rst( 1136 std::unique_ptr<SpdySerializedFrame> rst(
1156 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 1137 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1157 1138
1158 MockWrite writes[] = { 1139 MockWrite writes[] = {
1159 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4), 1140 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4),
1160 }; 1141 };
1161 1142
1162 std::unique_ptr<SpdySerializedFrame> resp( 1143 std::unique_ptr<SpdySerializedFrame> resp(
1163 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 1144 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
1164 std::unique_ptr<SpdySerializedFrame> response_body_frame( 1145 std::unique_ptr<SpdySerializedFrame> response_body_frame(
1165 spdy_util_.ConstructSpdyBodyFrame(1, false)); 1146 spdy_util_.ConstructSpdyBodyFrame(1, false));
1166 1147
1167 MockRead reads[] = { 1148 MockRead reads[] = {
1168 CreateMockRead(*resp, 1), 1149 CreateMockRead(*resp, 1),
1169 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. 1150 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause.
1170 CreateMockRead(*response_body_frame, 3), MockRead(ASYNC, 0, 5), 1151 CreateMockRead(*response_body_frame, 3), MockRead(ASYNC, 0, 5),
1171 }; 1152 };
1172 1153
1173 HostPortPair host_port_pair("www.example.org", 443); 1154 InitSession(reads, arraysize(reads), writes, arraysize(writes));
1174 SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
1175 PRIVACY_MODE_DISABLED);
1176 InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
1177 1155
1178 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 1156 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
1179 new BidirectionalStreamRequestInfo); 1157 new BidirectionalStreamRequestInfo);
1180 request_info->method = "POST"; 1158 request_info->method = "POST";
1181 request_info->url = GURL("https://www.example.org/"); 1159 request_info->url = default_url_;
1182 request_info->priority = LOWEST; 1160 request_info->priority = LOWEST;
1183 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, 1161 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength,
1184 base::SizeTToString(kBodyDataSize * 3)); 1162 base::SizeTToString(kBodyDataSize * 3));
1185 1163
1186 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 1164 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
1187 std::unique_ptr<TestDelegateBase> delegate( 1165 std::unique_ptr<TestDelegateBase> delegate(
1188 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); 1166 new TestDelegateBase(read_buffer.get(), kReadBufferSize));
1189 delegate->set_do_not_start_read(true); 1167 delegate->set_do_not_start_read(true);
1190 delegate->Start(std::move(request_info), http_session_.get()); 1168 delegate->Start(std::move(request_info), http_session_.get());
1191 // Send the request and receive response headers. 1169 // Send the request and receive response headers.
(...skipping 13 matching lines...) Expand all
1205 // Calling after stream is canceled gives kProtoUnknown. 1183 // Calling after stream is canceled gives kProtoUnknown.
1206 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); 1184 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol());
1207 EXPECT_EQ(0, delegate->GetTotalSentBytes()); 1185 EXPECT_EQ(0, delegate->GetTotalSentBytes());
1208 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); 1186 EXPECT_EQ(0, delegate->GetTotalReceivedBytes());
1209 } 1187 }
1210 1188
1211 // Receiving a header with uppercase ASCII will result in a protocol error, 1189 // Receiving a header with uppercase ASCII will result in a protocol error,
1212 // which should be propagated via Delegate::OnFailed. 1190 // which should be propagated via Delegate::OnFailed.
1213 TEST_F(BidirectionalStreamTest, PropagateProtocolError) { 1191 TEST_F(BidirectionalStreamTest, PropagateProtocolError) {
1214 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( 1192 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
1215 "https://www.example.org", 1, kBodyDataSize * 3, LOW, nullptr, 0)); 1193 kDefaultUrl, 1, kBodyDataSize * 3, LOW, nullptr, 0));
1216 std::unique_ptr<SpdySerializedFrame> rst( 1194 std::unique_ptr<SpdySerializedFrame> rst(
1217 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); 1195 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
1218 1196
1219 MockWrite writes[] = { 1197 MockWrite writes[] = {
1220 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), 1198 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2),
1221 }; 1199 };
1222 1200
1223 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; 1201 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"};
1224 std::unique_ptr<SpdySerializedFrame> resp( 1202 std::unique_ptr<SpdySerializedFrame> resp(
1225 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1)); 1203 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1));
1226 1204
1227 MockRead reads[] = { 1205 MockRead reads[] = {
1228 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3), 1206 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3),
1229 }; 1207 };
1230 1208
1231 HostPortPair host_port_pair("www.example.org", 443); 1209 InitSession(reads, arraysize(reads), writes, arraysize(writes));
1232 SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
1233 PRIVACY_MODE_DISABLED);
1234 InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
1235 1210
1236 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 1211 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
1237 new BidirectionalStreamRequestInfo); 1212 new BidirectionalStreamRequestInfo);
1238 request_info->method = "POST"; 1213 request_info->method = "POST";
1239 request_info->url = GURL("https://www.example.org/"); 1214 request_info->url = default_url_;
1240 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, 1215 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength,
1241 base::SizeTToString(kBodyDataSize * 3)); 1216 base::SizeTToString(kBodyDataSize * 3));
1242 1217
1243 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 1218 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
1244 std::unique_ptr<TestDelegateBase> delegate( 1219 std::unique_ptr<TestDelegateBase> delegate(
1245 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); 1220 new TestDelegateBase(read_buffer.get(), kReadBufferSize));
1246 delegate->SetRunUntilCompletion(true); 1221 delegate->SetRunUntilCompletion(true);
1247 delegate->Start(std::move(request_info), http_session_.get()); 1222 delegate->Start(std::move(request_info), http_session_.get());
1248 1223
1249 base::RunLoop().RunUntilIdle(); 1224 base::RunLoop().RunUntilIdle();
(...skipping 28 matching lines...) Expand all
1278 EXPECT_TRUE(entry.params->GetInteger("net_error", &net_error)); 1253 EXPECT_TRUE(entry.params->GetInteger("net_error", &net_error));
1279 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, net_error); 1254 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, net_error);
1280 } 1255 }
1281 1256
1282 INSTANTIATE_TEST_CASE_P(CancelOrDeleteTests, 1257 INSTANTIATE_TEST_CASE_P(CancelOrDeleteTests,
1283 BidirectionalStreamTest, 1258 BidirectionalStreamTest,
1284 ::testing::Values(true, false)); 1259 ::testing::Values(true, false));
1285 1260
1286 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnHeadersReceived) { 1261 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnHeadersReceived) {
1287 std::unique_ptr<SpdySerializedFrame> req( 1262 std::unique_ptr<SpdySerializedFrame> req(
1288 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); 1263 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
1289 1264
1290 std::unique_ptr<SpdySerializedFrame> rst( 1265 std::unique_ptr<SpdySerializedFrame> rst(
1291 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 1266 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1292 MockWrite writes[] = { 1267 MockWrite writes[] = {
1293 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), 1268 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2),
1294 }; 1269 };
1295 1270
1296 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; 1271 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"};
1297 1272
1298 std::unique_ptr<SpdySerializedFrame> resp( 1273 std::unique_ptr<SpdySerializedFrame> resp(
1299 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); 1274 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
1300 1275
1301 MockRead reads[] = { 1276 MockRead reads[] = {
1302 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3), 1277 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3),
1303 }; 1278 };
1304 1279
1305 HostPortPair host_port_pair("www.example.org", 443); 1280 InitSession(reads, arraysize(reads), writes, arraysize(writes));
1306 SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
1307 PRIVACY_MODE_DISABLED);
1308 InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
1309 1281
1310 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 1282 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
1311 new BidirectionalStreamRequestInfo); 1283 new BidirectionalStreamRequestInfo);
1312 request_info->method = "GET"; 1284 request_info->method = "GET";
1313 request_info->url = GURL("https://www.example.org/"); 1285 request_info->url = default_url_;
1314 request_info->priority = LOWEST; 1286 request_info->priority = LOWEST;
1315 request_info->end_stream_on_headers = true; 1287 request_info->end_stream_on_headers = true;
1316 1288
1317 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 1289 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
1318 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate( 1290 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate(
1319 new CancelOrDeleteStreamDelegate( 1291 new CancelOrDeleteStreamDelegate(
1320 read_buffer.get(), kReadBufferSize, 1292 read_buffer.get(), kReadBufferSize,
1321 CancelOrDeleteStreamDelegate::Phase::ON_HEADERS_RECEIVED, 1293 CancelOrDeleteStreamDelegate::Phase::ON_HEADERS_RECEIVED,
1322 GetParam())); 1294 GetParam()));
1323 delegate->SetRunUntilCompletion(true); 1295 delegate->SetRunUntilCompletion(true);
(...skipping 10 matching lines...) Expand all
1334 // If stream is destroyed, do not call into stream. 1306 // If stream is destroyed, do not call into stream.
1335 if (!GetParam()) 1307 if (!GetParam())
1336 return; 1308 return;
1337 EXPECT_EQ(0, delegate->GetTotalSentBytes()); 1309 EXPECT_EQ(0, delegate->GetTotalSentBytes());
1338 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); 1310 EXPECT_EQ(0, delegate->GetTotalReceivedBytes());
1339 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); 1311 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol());
1340 } 1312 }
1341 1313
1342 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnDataRead) { 1314 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnDataRead) {
1343 std::unique_ptr<SpdySerializedFrame> req( 1315 std::unique_ptr<SpdySerializedFrame> req(
1344 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); 1316 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
1345 1317
1346 std::unique_ptr<SpdySerializedFrame> rst( 1318 std::unique_ptr<SpdySerializedFrame> rst(
1347 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 1319 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1348 MockWrite writes[] = { 1320 MockWrite writes[] = {
1349 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 3), 1321 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 3),
1350 }; 1322 };
1351 1323
1352 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; 1324 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"};
1353 1325
1354 std::unique_ptr<SpdySerializedFrame> resp( 1326 std::unique_ptr<SpdySerializedFrame> resp(
1355 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); 1327 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
1356 1328
1357 std::unique_ptr<SpdySerializedFrame> response_body_frame( 1329 std::unique_ptr<SpdySerializedFrame> response_body_frame(
1358 spdy_util_.ConstructSpdyBodyFrame(1, false)); 1330 spdy_util_.ConstructSpdyBodyFrame(1, false));
1359 1331
1360 MockRead reads[] = { 1332 MockRead reads[] = {
1361 CreateMockRead(*resp, 1), CreateMockRead(*response_body_frame, 2), 1333 CreateMockRead(*resp, 1), CreateMockRead(*response_body_frame, 2),
1362 MockRead(ASYNC, 0, 4), 1334 MockRead(ASYNC, 0, 4),
1363 }; 1335 };
1364 1336
1365 HostPortPair host_port_pair("www.example.org", 443); 1337 InitSession(reads, arraysize(reads), writes, arraysize(writes));
1366 SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
1367 PRIVACY_MODE_DISABLED);
1368 InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
1369 1338
1370 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 1339 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
1371 new BidirectionalStreamRequestInfo); 1340 new BidirectionalStreamRequestInfo);
1372 request_info->method = "GET"; 1341 request_info->method = "GET";
1373 request_info->url = GURL("https://www.example.org/"); 1342 request_info->url = default_url_;
1374 request_info->priority = LOWEST; 1343 request_info->priority = LOWEST;
1375 request_info->end_stream_on_headers = true; 1344 request_info->end_stream_on_headers = true;
1376 1345
1377 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 1346 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
1378 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate( 1347 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate(
1379 new CancelOrDeleteStreamDelegate( 1348 new CancelOrDeleteStreamDelegate(
1380 read_buffer.get(), kReadBufferSize, 1349 read_buffer.get(), kReadBufferSize,
1381 CancelOrDeleteStreamDelegate::Phase::ON_DATA_READ, GetParam())); 1350 CancelOrDeleteStreamDelegate::Phase::ON_DATA_READ, GetParam()));
1382 delegate->SetRunUntilCompletion(true); 1351 delegate->SetRunUntilCompletion(true);
1383 delegate->Start(std::move(request_info), http_session_.get()); 1352 delegate->Start(std::move(request_info), http_session_.get());
1384 // Makes sure delegate does not get called. 1353 // Makes sure delegate does not get called.
1385 base::RunLoop().RunUntilIdle(); 1354 base::RunLoop().RunUntilIdle();
1386 const SpdyHeaderBlock& response_headers = delegate->response_headers(); 1355 const SpdyHeaderBlock& response_headers = delegate->response_headers();
1387 EXPECT_EQ("200", response_headers.find(":status")->second); 1356 EXPECT_EQ("200", response_headers.find(":status")->second);
1388 EXPECT_EQ("header-value", response_headers.find("header-name")->second); 1357 EXPECT_EQ("header-value", response_headers.find("header-name")->second);
1389 EXPECT_EQ(kUploadDataSize * 1, 1358 EXPECT_EQ(kUploadDataSize * 1,
1390 static_cast<int>(delegate->data_received().size())); 1359 static_cast<int>(delegate->data_received().size()));
1391 EXPECT_EQ(0, delegate->on_data_sent_count()); 1360 EXPECT_EQ(0, delegate->on_data_sent_count());
1392 1361
1393 // If stream is destroyed, do not call into stream. 1362 // If stream is destroyed, do not call into stream.
1394 if (!GetParam()) 1363 if (!GetParam())
1395 return; 1364 return;
1396 EXPECT_EQ(0, delegate->GetTotalSentBytes()); 1365 EXPECT_EQ(0, delegate->GetTotalSentBytes());
1397 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); 1366 EXPECT_EQ(0, delegate->GetTotalReceivedBytes());
1398 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); 1367 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol());
1399 } 1368 }
1400 1369
1401 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnTrailersReceived) { 1370 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnTrailersReceived) {
1402 std::unique_ptr<SpdySerializedFrame> req( 1371 std::unique_ptr<SpdySerializedFrame> req(
1403 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); 1372 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
1404 1373
1405 std::unique_ptr<SpdySerializedFrame> rst( 1374 std::unique_ptr<SpdySerializedFrame> rst(
1406 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 1375 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1407 MockWrite writes[] = { 1376 MockWrite writes[] = {
1408 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4), 1377 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4),
1409 }; 1378 };
1410 1379
1411 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; 1380 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"};
1412 1381
1413 std::unique_ptr<SpdySerializedFrame> resp( 1382 std::unique_ptr<SpdySerializedFrame> resp(
1414 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); 1383 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
1415 1384
1416 std::unique_ptr<SpdySerializedFrame> response_body_frame( 1385 std::unique_ptr<SpdySerializedFrame> response_body_frame(
1417 spdy_util_.ConstructSpdyBodyFrame(1, false)); 1386 spdy_util_.ConstructSpdyBodyFrame(1, false));
1418 1387
1419 SpdyHeaderBlock trailers; 1388 SpdyHeaderBlock trailers;
1420 trailers["foo"] = "bar"; 1389 trailers["foo"] = "bar";
1421 std::unique_ptr<SpdySerializedFrame> response_trailers( 1390 std::unique_ptr<SpdySerializedFrame> response_trailers(
1422 spdy_util_.ConstructSpdyResponseHeaders(1, std::move(trailers), true)); 1391 spdy_util_.ConstructSpdyResponseHeaders(1, std::move(trailers), true));
1423 1392
1424 MockRead reads[] = { 1393 MockRead reads[] = {
1425 CreateMockRead(*resp, 1), CreateMockRead(*response_body_frame, 2), 1394 CreateMockRead(*resp, 1), CreateMockRead(*response_body_frame, 2),
1426 CreateMockRead(*response_trailers, 3), MockRead(ASYNC, 0, 5), 1395 CreateMockRead(*response_trailers, 3), MockRead(ASYNC, 0, 5),
1427 }; 1396 };
1428 1397
1429 HostPortPair host_port_pair("www.example.org", 443); 1398 InitSession(reads, arraysize(reads), writes, arraysize(writes));
1430 SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
1431 PRIVACY_MODE_DISABLED);
1432 InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
1433 1399
1434 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 1400 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
1435 new BidirectionalStreamRequestInfo); 1401 new BidirectionalStreamRequestInfo);
1436 request_info->method = "GET"; 1402 request_info->method = "GET";
1437 request_info->url = GURL("https://www.example.org/"); 1403 request_info->url = default_url_;
1438 request_info->priority = LOWEST; 1404 request_info->priority = LOWEST;
1439 request_info->end_stream_on_headers = true; 1405 request_info->end_stream_on_headers = true;
1440 1406
1441 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 1407 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
1442 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate( 1408 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate(
1443 new CancelOrDeleteStreamDelegate( 1409 new CancelOrDeleteStreamDelegate(
1444 read_buffer.get(), kReadBufferSize, 1410 read_buffer.get(), kReadBufferSize,
1445 CancelOrDeleteStreamDelegate::Phase::ON_TRAILERS_RECEIVED, 1411 CancelOrDeleteStreamDelegate::Phase::ON_TRAILERS_RECEIVED,
1446 GetParam())); 1412 GetParam()));
1447 delegate->SetRunUntilCompletion(true); 1413 delegate->SetRunUntilCompletion(true);
(...skipping 11 matching lines...) Expand all
1459 // If stream is destroyed, do not call into stream. 1425 // If stream is destroyed, do not call into stream.
1460 if (!GetParam()) 1426 if (!GetParam())
1461 return; 1427 return;
1462 EXPECT_EQ(0, delegate->GetTotalSentBytes()); 1428 EXPECT_EQ(0, delegate->GetTotalSentBytes());
1463 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); 1429 EXPECT_EQ(0, delegate->GetTotalReceivedBytes());
1464 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); 1430 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol());
1465 } 1431 }
1466 1432
1467 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnFailed) { 1433 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnFailed) {
1468 std::unique_ptr<SpdySerializedFrame> req( 1434 std::unique_ptr<SpdySerializedFrame> req(
1469 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); 1435 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
1470 1436
1471 std::unique_ptr<SpdySerializedFrame> rst( 1437 std::unique_ptr<SpdySerializedFrame> rst(
1472 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); 1438 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
1473 1439
1474 MockWrite writes[] = { 1440 MockWrite writes[] = {
1475 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), 1441 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2),
1476 }; 1442 };
1477 1443
1478 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; 1444 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"};
1479 std::unique_ptr<SpdySerializedFrame> resp( 1445 std::unique_ptr<SpdySerializedFrame> resp(
1480 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1)); 1446 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1));
1481 1447
1482 MockRead reads[] = { 1448 MockRead reads[] = {
1483 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3), 1449 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3),
1484 }; 1450 };
1485 1451
1486 HostPortPair host_port_pair("www.example.org", 443); 1452 InitSession(reads, arraysize(reads), writes, arraysize(writes));
1487 SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
1488 PRIVACY_MODE_DISABLED);
1489 InitSession(reads, arraysize(reads), writes, arraysize(writes), key);
1490 1453
1491 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 1454 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
1492 new BidirectionalStreamRequestInfo); 1455 new BidirectionalStreamRequestInfo);
1493 request_info->method = "GET"; 1456 request_info->method = "GET";
1494 request_info->url = GURL("https://www.example.org/"); 1457 request_info->url = default_url_;
1495 request_info->priority = LOWEST; 1458 request_info->priority = LOWEST;
1496 request_info->end_stream_on_headers = true; 1459 request_info->end_stream_on_headers = true;
1497 1460
1498 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 1461 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
1499 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate( 1462 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate(
1500 new CancelOrDeleteStreamDelegate( 1463 new CancelOrDeleteStreamDelegate(
1501 read_buffer.get(), kReadBufferSize, 1464 read_buffer.get(), kReadBufferSize,
1502 CancelOrDeleteStreamDelegate::Phase::ON_FAILED, GetParam())); 1465 CancelOrDeleteStreamDelegate::Phase::ON_FAILED, GetParam()));
1503 delegate->SetRunUntilCompletion(true); 1466 delegate->SetRunUntilCompletion(true);
1504 delegate->Start(std::move(request_info), http_session_.get()); 1467 delegate->Start(std::move(request_info), http_session_.get());
1505 // Makes sure delegate does not get called. 1468 // Makes sure delegate does not get called.
1506 base::RunLoop().RunUntilIdle(); 1469 base::RunLoop().RunUntilIdle();
1507 EXPECT_EQ(delegate->response_headers().end(), 1470 EXPECT_EQ(delegate->response_headers().end(),
1508 delegate->response_headers().find(":status")); 1471 delegate->response_headers().find(":status"));
1509 EXPECT_EQ(0, delegate->on_data_sent_count()); 1472 EXPECT_EQ(0, delegate->on_data_sent_count());
1510 EXPECT_EQ(0, delegate->on_data_read_count()); 1473 EXPECT_EQ(0, delegate->on_data_read_count());
1511 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, delegate->error()); 1474 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, delegate->error());
1512 1475
1513 // If stream is destroyed, do not call into stream. 1476 // If stream is destroyed, do not call into stream.
1514 if (!GetParam()) 1477 if (!GetParam())
1515 return; 1478 return;
1516 EXPECT_EQ(0, delegate->GetTotalSentBytes()); 1479 EXPECT_EQ(0, delegate->GetTotalSentBytes());
1517 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); 1480 EXPECT_EQ(0, delegate->GetTotalReceivedBytes());
1518 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); 1481 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol());
1519 } 1482 }
1520 1483
1521 TEST_F(BidirectionalStreamTest, TestHonorAlternativeServiceHeader) { 1484 TEST_F(BidirectionalStreamTest, TestHonorAlternativeServiceHeader) {
1522 std::unique_ptr<SpdySerializedFrame> req( 1485 std::unique_ptr<SpdySerializedFrame> req(
1523 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); 1486 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
1524 // Empty DATA frame with an END_STREAM flag. 1487 // Empty DATA frame with an END_STREAM flag.
1525 std::unique_ptr<SpdySerializedFrame> end_stream( 1488 std::unique_ptr<SpdySerializedFrame> end_stream(
1526 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); 1489 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true));
1527 1490
1528 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)}; 1491 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)};
1529 1492
1530 std::string alt_svc_header_value = AlternateProtocolToString(QUIC); 1493 std::string alt_svc_header_value = AlternateProtocolToString(QUIC);
1531 alt_svc_header_value.append("=\"www.example.org:443\""); 1494 alt_svc_header_value.append("=\"www.example.org:443\"");
1532 const char* const kExtraResponseHeaders[] = {"alt-svc", 1495 const char* const kExtraResponseHeaders[] = {"alt-svc",
1533 alt_svc_header_value.c_str()}; 1496 alt_svc_header_value.c_str()};
1534 1497
1535 std::unique_ptr<SpdySerializedFrame> resp( 1498 std::unique_ptr<SpdySerializedFrame> resp(
1536 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); 1499 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
1537 std::unique_ptr<SpdySerializedFrame> body_frame( 1500 std::unique_ptr<SpdySerializedFrame> body_frame(
1538 spdy_util_.ConstructSpdyBodyFrame(1, true)); 1501 spdy_util_.ConstructSpdyBodyFrame(1, true));
1539 1502
1540 MockRead reads[] = { 1503 MockRead reads[] = {
1541 CreateMockRead(*resp, 1), CreateMockRead(*body_frame, 2), 1504 CreateMockRead(*resp, 1), CreateMockRead(*body_frame, 2),
1542 MockRead(SYNCHRONOUS, 0, 3), 1505 MockRead(SYNCHRONOUS, 0, 3),
1543 }; 1506 };
1544 1507
1545 HostPortPair host_port_pair("www.example.org", 443);
1546 url::SchemeHostPort server("https", "www.example.org", 443);
1547 SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
1548 PRIVACY_MODE_DISABLED);
1549 // Enable QUIC so that the alternative service header can be added to 1508 // Enable QUIC so that the alternative service header can be added to
1550 // HttpServerProperties. 1509 // HttpServerProperties.
1551 session_deps_.enable_quic = true; 1510 session_deps_.enable_quic = true;
1552 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); 1511 InitSession(reads, arraysize(reads), writes, arraysize(writes));
1553 1512
1554 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 1513 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
1555 new BidirectionalStreamRequestInfo); 1514 new BidirectionalStreamRequestInfo);
1556 request_info->method = "GET"; 1515 request_info->method = "GET";
1557 request_info->url = GURL("https://www.example.org/"); 1516 request_info->url = default_url_;
1558 request_info->priority = LOWEST; 1517 request_info->priority = LOWEST;
1559 request_info->end_stream_on_headers = true; 1518 request_info->end_stream_on_headers = true;
1560 1519
1561 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 1520 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
1562 MockTimer* timer = new MockTimer(); 1521 MockTimer* timer = new MockTimer();
1563 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( 1522 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
1564 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); 1523 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
1565 delegate->SetRunUntilCompletion(true); 1524 delegate->SetRunUntilCompletion(true);
1566 delegate->Start(std::move(request_info), http_session_.get()); 1525 delegate->Start(std::move(request_info), http_session_.get());
1567 1526
1568 const SpdyHeaderBlock& response_headers = delegate->response_headers(); 1527 const SpdyHeaderBlock& response_headers = delegate->response_headers();
1569 EXPECT_EQ("200", response_headers.find(":status")->second); 1528 EXPECT_EQ("200", response_headers.find(":status")->second);
1570 EXPECT_EQ(alt_svc_header_value, response_headers.find("alt-svc")->second); 1529 EXPECT_EQ(alt_svc_header_value, response_headers.find("alt-svc")->second);
1571 EXPECT_EQ(0, delegate->on_data_sent_count()); 1530 EXPECT_EQ(0, delegate->on_data_sent_count());
1572 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); 1531 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol());
1573 EXPECT_EQ(kUploadData, delegate->data_received()); 1532 EXPECT_EQ(kUploadData, delegate->data_received());
1574 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), 1533 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)),
1575 delegate->GetTotalSentBytes()); 1534 delegate->GetTotalSentBytes());
1576 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), 1535 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)),
1577 delegate->GetTotalReceivedBytes()); 1536 delegate->GetTotalReceivedBytes());
1578 1537
1579 AlternativeServiceVector alternative_service_vector = 1538 AlternativeServiceVector alternative_service_vector =
1580 http_session_->http_server_properties()->GetAlternativeServices(server); 1539 http_session_->http_server_properties()->GetAlternativeServices(
1540 url::SchemeHostPort(default_url_));
1581 ASSERT_EQ(1u, alternative_service_vector.size()); 1541 ASSERT_EQ(1u, alternative_service_vector.size());
1582 EXPECT_EQ(AlternateProtocolFromNextProto(kProtoQUIC1SPDY3), 1542 EXPECT_EQ(AlternateProtocolFromNextProto(kProtoQUIC1SPDY3),
1583 alternative_service_vector[0].protocol); 1543 alternative_service_vector[0].protocol);
1584 EXPECT_EQ("www.example.org", alternative_service_vector[0].host); 1544 EXPECT_EQ("www.example.org", alternative_service_vector[0].host);
1585 EXPECT_EQ(443, alternative_service_vector[0].port); 1545 EXPECT_EQ(443, alternative_service_vector[0].port);
1586 } 1546 }
1587 1547
1588 } // namespace net 1548 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/http/http_stream_factory_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698