| OLD | NEW |
| 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" |
| 11 #include "base/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" |
| 12 #include "base/run_loop.h" | 12 #include "base/run_loop.h" |
| 13 #include "base/strings/string_number_conversions.h" | 13 #include "base/strings/string_number_conversions.h" |
| 14 #include "base/strings/string_piece.h" | 14 #include "base/strings/string_piece.h" |
| 15 #include "base/time/time.h" | 15 #include "base/time/time.h" |
| 16 #include "base/timer/mock_timer.h" | 16 #include "base/timer/mock_timer.h" |
| 17 #include "net/base/net_errors.h" | 17 #include "net/base/net_errors.h" |
| 18 #include "net/http/bidirectional_stream_request_info.h" | 18 #include "net/http/bidirectional_stream_request_info.h" |
| 19 #include "net/http/http_network_session.h" | 19 #include "net/http/http_network_session.h" |
| 20 #include "net/http/http_response_headers.h" | 20 #include "net/http/http_response_headers.h" |
| 21 #include "net/http/http_server_properties.h" | 21 #include "net/http/http_server_properties.h" |
| 22 #include "net/log/net_log.h" | 22 #include "net/log/net_log.h" |
| 23 #include "net/log/test_net_log.h" | 23 #include "net/log/test_net_log.h" |
| 24 #include "net/log/test_net_log_util.h" | 24 #include "net/log/test_net_log_util.h" |
| 25 #include "net/socket/socket_test_util.h" | 25 #include "net/socket/socket_test_util.h" |
| 26 #include "net/spdy/spdy_session.h" | 26 #include "net/spdy/spdy_session.h" |
| 27 #include "net/spdy/spdy_test_util_common.h" | 27 #include "net/spdy/spdy_test_util_common.h" |
| 28 #include "net/test/cert_test_util.h" | 28 #include "net/test/cert_test_util.h" |
| 29 #include "net/test/gtest_util.h" |
| 29 #include "net/test/test_data_directory.h" | 30 #include "net/test/test_data_directory.h" |
| 30 #include "net/url_request/url_request_test_util.h" | 31 #include "net/url_request/url_request_test_util.h" |
| 32 #include "testing/gmock/include/gmock/gmock.h" |
| 31 #include "testing/gtest/include/gtest/gtest.h" | 33 #include "testing/gtest/include/gtest/gtest.h" |
| 32 | 34 |
| 35 using net::test::IsError; |
| 36 using net::test::IsOk; |
| 37 |
| 33 namespace net { | 38 namespace net { |
| 34 | 39 |
| 35 namespace { | 40 namespace { |
| 36 | 41 |
| 37 const char kBodyData[] = "Body data"; | 42 const char kBodyData[] = "Body data"; |
| 38 const size_t kBodyDataSize = arraysize(kBodyData); | 43 const size_t kBodyDataSize = arraysize(kBodyData); |
| 39 // Size of the buffer to be allocated for each read. | 44 // Size of the buffer to be allocated for each read. |
| 40 const size_t kReadBufferSize = 4096; | 45 const size_t kReadBufferSize = 4096; |
| 41 | 46 |
| 42 // Delegate that reads data but does not send any data. | 47 // Delegate that reads data but does not send any data. |
| (...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 386 request_info->method = "GET"; | 391 request_info->method = "GET"; |
| 387 request_info->url = GURL("http://www.example.org/"); | 392 request_info->url = GURL("http://www.example.org/"); |
| 388 | 393 |
| 389 TestDelegateBase delegate(nullptr, 0); | 394 TestDelegateBase delegate(nullptr, 0); |
| 390 HttpNetworkSession::Params params = | 395 HttpNetworkSession::Params params = |
| 391 SpdySessionDependencies::CreateSessionParams(&session_deps_); | 396 SpdySessionDependencies::CreateSessionParams(&session_deps_); |
| 392 std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params)); | 397 std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params)); |
| 393 delegate.SetRunUntilCompletion(true); | 398 delegate.SetRunUntilCompletion(true); |
| 394 delegate.Start(std::move(request_info), session.get()); | 399 delegate.Start(std::move(request_info), session.get()); |
| 395 | 400 |
| 396 EXPECT_EQ(ERR_DISALLOWED_URL_SCHEME, delegate.error()); | 401 EXPECT_THAT(delegate.error(), IsError(ERR_DISALLOWED_URL_SCHEME)); |
| 397 } | 402 } |
| 398 | 403 |
| 399 // Creates a BidirectionalStream with an insecure scheme. Destroy the stream | 404 // Creates a BidirectionalStream with an insecure scheme. Destroy the stream |
| 400 // without waiting for the OnFailed task to be executed. | 405 // without waiting for the OnFailed task to be executed. |
| 401 TEST_F(BidirectionalStreamTest, | 406 TEST_F(BidirectionalStreamTest, |
| 402 CreateInsecureStreamAndDestroyStreamRightAfter) { | 407 CreateInsecureStreamAndDestroyStreamRightAfter) { |
| 403 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( | 408 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( |
| 404 new BidirectionalStreamRequestInfo); | 409 new BidirectionalStreamRequestInfo); |
| 405 request_info->method = "GET"; | 410 request_info->method = "GET"; |
| 406 request_info->url = GURL("http://www.example.org/"); | 411 request_info->url = GURL("http://www.example.org/"); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 466 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); | 471 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); |
| 467 delegate->set_do_not_start_read(true); | 472 delegate->set_do_not_start_read(true); |
| 468 | 473 |
| 469 delegate->Start(std::move(request_info), http_session_.get()); | 474 delegate->Start(std::move(request_info), http_session_.get()); |
| 470 | 475 |
| 471 // Write request, and deliver response headers. | 476 // Write request, and deliver response headers. |
| 472 sequenced_data_->RunUntilPaused(); | 477 sequenced_data_->RunUntilPaused(); |
| 473 EXPECT_FALSE(timer->IsRunning()); | 478 EXPECT_FALSE(timer->IsRunning()); |
| 474 // ReadData returns asynchronously because no data is buffered. | 479 // ReadData returns asynchronously because no data is buffered. |
| 475 int rv = delegate->ReadData(); | 480 int rv = delegate->ReadData(); |
| 476 EXPECT_EQ(ERR_IO_PENDING, rv); | 481 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 477 // Deliver a DATA frame. | 482 // Deliver a DATA frame. |
| 478 sequenced_data_->Resume(); | 483 sequenced_data_->Resume(); |
| 479 base::RunLoop().RunUntilIdle(); | 484 base::RunLoop().RunUntilIdle(); |
| 480 timer->Fire(); | 485 timer->Fire(); |
| 481 // Asynchronous completion callback is invoke. | 486 // Asynchronous completion callback is invoke. |
| 482 EXPECT_EQ(1, delegate->on_data_read_count()); | 487 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 483 EXPECT_EQ(kUploadDataSize * 1, | 488 EXPECT_EQ(kUploadDataSize * 1, |
| 484 static_cast<int>(delegate->data_received().size())); | 489 static_cast<int>(delegate->data_received().size())); |
| 485 | 490 |
| 486 // Deliver the rest. Note that user has not called a second ReadData. | 491 // Deliver the rest. Note that user has not called a second ReadData. |
| 487 sequenced_data_->Resume(); | 492 sequenced_data_->Resume(); |
| 488 base::RunLoop().RunUntilIdle(); | 493 base::RunLoop().RunUntilIdle(); |
| 489 // ReadData now. Read should complete synchronously. | 494 // ReadData now. Read should complete synchronously. |
| 490 rv = delegate->ReadData(); | 495 rv = delegate->ReadData(); |
| 491 EXPECT_EQ(kUploadDataSize * 2, rv); | 496 EXPECT_EQ(kUploadDataSize * 2, rv); |
| 492 rv = delegate->ReadData(); | 497 rv = delegate->ReadData(); |
| 493 EXPECT_EQ(OK, rv); // EOF. | 498 EXPECT_THAT(rv, IsOk()); // EOF. |
| 494 | 499 |
| 495 const SpdyHeaderBlock& response_headers = delegate->response_headers(); | 500 const SpdyHeaderBlock& response_headers = delegate->response_headers(); |
| 496 EXPECT_EQ("200", response_headers.find(":status")->second); | 501 EXPECT_EQ("200", response_headers.find(":status")->second); |
| 497 EXPECT_EQ("header-value", response_headers.find("header-name")->second); | 502 EXPECT_EQ("header-value", response_headers.find("header-name")->second); |
| 498 EXPECT_EQ(1, delegate->on_data_read_count()); | 503 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 499 EXPECT_EQ(0, delegate->on_data_sent_count()); | 504 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 500 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); | 505 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); |
| 501 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), | 506 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), |
| 502 delegate->GetTotalSentBytes()); | 507 delegate->GetTotalSentBytes()); |
| 503 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 508 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 557 // Send the request and receive response headers. | 562 // Send the request and receive response headers. |
| 558 sequenced_data_->RunUntilPaused(); | 563 sequenced_data_->RunUntilPaused(); |
| 559 EXPECT_FALSE(timer->IsRunning()); | 564 EXPECT_FALSE(timer->IsRunning()); |
| 560 | 565 |
| 561 scoped_refptr<StringIOBuffer> buf( | 566 scoped_refptr<StringIOBuffer> buf( |
| 562 new StringIOBuffer(std::string(kBodyData, kBodyDataSize))); | 567 new StringIOBuffer(std::string(kBodyData, kBodyDataSize))); |
| 563 // Send a DATA frame. | 568 // Send a DATA frame. |
| 564 delegate->SendData(buf, buf->size(), true); | 569 delegate->SendData(buf, buf->size(), true); |
| 565 // ReadData returns asynchronously because no data is buffered. | 570 // ReadData returns asynchronously because no data is buffered. |
| 566 int rv = delegate->ReadData(); | 571 int rv = delegate->ReadData(); |
| 567 EXPECT_EQ(ERR_IO_PENDING, rv); | 572 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 568 // Deliver the first DATA frame. | 573 // Deliver the first DATA frame. |
| 569 sequenced_data_->Resume(); | 574 sequenced_data_->Resume(); |
| 570 sequenced_data_->RunUntilPaused(); | 575 sequenced_data_->RunUntilPaused(); |
| 571 // |sequenced_data_| is now stopped after delivering first DATA frame but | 576 // |sequenced_data_| is now stopped after delivering first DATA frame but |
| 572 // before the second DATA frame. | 577 // before the second DATA frame. |
| 573 // Fire the timer to allow the first ReadData to complete asynchronously. | 578 // Fire the timer to allow the first ReadData to complete asynchronously. |
| 574 timer->Fire(); | 579 timer->Fire(); |
| 575 base::RunLoop().RunUntilIdle(); | 580 base::RunLoop().RunUntilIdle(); |
| 576 EXPECT_EQ(1, delegate->on_data_read_count()); | 581 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 577 | 582 |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 691 EXPECT_FALSE(timer->IsRunning()); | 696 EXPECT_FALSE(timer->IsRunning()); |
| 692 | 697 |
| 693 // Send a DATA frame. | 698 // Send a DATA frame. |
| 694 scoped_refptr<StringIOBuffer> buf( | 699 scoped_refptr<StringIOBuffer> buf( |
| 695 new StringIOBuffer(std::string(kBodyData, kBodyDataSize))); | 700 new StringIOBuffer(std::string(kBodyData, kBodyDataSize))); |
| 696 | 701 |
| 697 // Send a DATA frame. | 702 // Send a DATA frame. |
| 698 delegate->SendData(buf, buf->size(), false); | 703 delegate->SendData(buf, buf->size(), false); |
| 699 // ReadData and it should return asynchronously because no data is buffered. | 704 // ReadData and it should return asynchronously because no data is buffered. |
| 700 int rv = delegate->ReadData(); | 705 int rv = delegate->ReadData(); |
| 701 EXPECT_EQ(ERR_IO_PENDING, rv); | 706 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 702 // Deliver a DATA frame, and fire the timer. | 707 // Deliver a DATA frame, and fire the timer. |
| 703 sequenced_data_->Resume(); | 708 sequenced_data_->Resume(); |
| 704 sequenced_data_->RunUntilPaused(); | 709 sequenced_data_->RunUntilPaused(); |
| 705 timer->Fire(); | 710 timer->Fire(); |
| 706 base::RunLoop().RunUntilIdle(); | 711 base::RunLoop().RunUntilIdle(); |
| 707 EXPECT_EQ(1, delegate->on_data_sent_count()); | 712 EXPECT_EQ(1, delegate->on_data_sent_count()); |
| 708 EXPECT_EQ(1, delegate->on_data_read_count()); | 713 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 709 | 714 |
| 710 // Send a DATA frame. | 715 // Send a DATA frame. |
| 711 delegate->SendData(buf, buf->size(), false); | 716 delegate->SendData(buf, buf->size(), false); |
| 712 // ReadData and it should return asynchronously because no data is buffered. | 717 // ReadData and it should return asynchronously because no data is buffered. |
| 713 rv = delegate->ReadData(); | 718 rv = delegate->ReadData(); |
| 714 EXPECT_EQ(ERR_IO_PENDING, rv); | 719 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 715 // Deliver a DATA frame, and fire the timer. | 720 // Deliver a DATA frame, and fire the timer. |
| 716 sequenced_data_->Resume(); | 721 sequenced_data_->Resume(); |
| 717 sequenced_data_->RunUntilPaused(); | 722 sequenced_data_->RunUntilPaused(); |
| 718 timer->Fire(); | 723 timer->Fire(); |
| 719 base::RunLoop().RunUntilIdle(); | 724 base::RunLoop().RunUntilIdle(); |
| 720 // Last DATA frame is read. Server half closes. | 725 // Last DATA frame is read. Server half closes. |
| 721 EXPECT_EQ(2, delegate->on_data_read_count()); | 726 EXPECT_EQ(2, delegate->on_data_read_count()); |
| 722 EXPECT_EQ(2, delegate->on_data_sent_count()); | 727 EXPECT_EQ(2, delegate->on_data_sent_count()); |
| 723 | 728 |
| 724 // Send the last body frame. Client half closes. | 729 // Send the last body frame. Client half closes. |
| 725 delegate->SendData(buf, buf->size(), true); | 730 delegate->SendData(buf, buf->size(), true); |
| 726 sequenced_data_->Resume(); | 731 sequenced_data_->Resume(); |
| 727 base::RunLoop().RunUntilIdle(); | 732 base::RunLoop().RunUntilIdle(); |
| 728 EXPECT_EQ(3, delegate->on_data_sent_count()); | 733 EXPECT_EQ(3, delegate->on_data_sent_count()); |
| 729 | 734 |
| 730 // OnClose is invoked since both sides are closed. | 735 // OnClose is invoked since both sides are closed. |
| 731 rv = delegate->ReadData(); | 736 rv = delegate->ReadData(); |
| 732 EXPECT_EQ(OK, rv); | 737 EXPECT_THAT(rv, IsOk()); |
| 733 | 738 |
| 734 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 739 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 735 EXPECT_EQ(2, delegate->on_data_read_count()); | 740 EXPECT_EQ(2, delegate->on_data_read_count()); |
| 736 EXPECT_EQ(3, delegate->on_data_sent_count()); | 741 EXPECT_EQ(3, delegate->on_data_sent_count()); |
| 737 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); | 742 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); |
| 738 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), | 743 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), |
| 739 delegate->GetTotalSentBytes()); | 744 delegate->GetTotalSentBytes()); |
| 740 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 745 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 741 delegate->GetTotalReceivedBytes()); | 746 delegate->GetTotalReceivedBytes()); |
| 742 } | 747 } |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 783 callback.callback()); | 788 callback.callback()); |
| 784 // Wait until the stream is ready. | 789 // Wait until the stream is ready. |
| 785 callback.WaitForResult(); | 790 callback.WaitForResult(); |
| 786 // Send a DATA frame. | 791 // Send a DATA frame. |
| 787 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(body_data.substr(0, 5))); | 792 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(body_data.substr(0, 5))); |
| 788 scoped_refptr<StringIOBuffer> buf2( | 793 scoped_refptr<StringIOBuffer> buf2( |
| 789 new StringIOBuffer(body_data.substr(5, body_data.size() - 5))); | 794 new StringIOBuffer(body_data.substr(5, body_data.size() - 5))); |
| 790 delegate->SendvData({buf, buf2.get()}, {buf->size(), buf2->size()}, true); | 795 delegate->SendvData({buf, buf2.get()}, {buf->size(), buf2->size()}, true); |
| 791 sequenced_data_->RunUntilPaused(); // OnHeadersReceived. | 796 sequenced_data_->RunUntilPaused(); // OnHeadersReceived. |
| 792 // ReadData and it should return asynchronously because no data is buffered. | 797 // ReadData and it should return asynchronously because no data is buffered. |
| 793 EXPECT_EQ(ERR_IO_PENDING, delegate->ReadData()); | 798 EXPECT_THAT(delegate->ReadData(), IsError(ERR_IO_PENDING)); |
| 794 sequenced_data_->Resume(); | 799 sequenced_data_->Resume(); |
| 795 base::RunLoop().RunUntilIdle(); | 800 base::RunLoop().RunUntilIdle(); |
| 796 EXPECT_EQ(1, delegate->on_data_sent_count()); | 801 EXPECT_EQ(1, delegate->on_data_sent_count()); |
| 797 EXPECT_EQ(1, delegate->on_data_read_count()); | 802 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 798 | 803 |
| 799 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 804 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 800 EXPECT_EQ(1, delegate->on_data_read_count()); | 805 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 801 EXPECT_EQ(1, delegate->on_data_sent_count()); | 806 EXPECT_EQ(1, delegate->on_data_sent_count()); |
| 802 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); | 807 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); |
| 803 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), | 808 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 874 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( | 879 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( |
| 875 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); | 880 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); |
| 876 delegate->set_do_not_start_read(true); | 881 delegate->set_do_not_start_read(true); |
| 877 delegate->Start(std::move(request_info), http_session_.get()); | 882 delegate->Start(std::move(request_info), http_session_.get()); |
| 878 // Write request, and deliver response headers. | 883 // Write request, and deliver response headers. |
| 879 sequenced_data_->RunUntilPaused(); | 884 sequenced_data_->RunUntilPaused(); |
| 880 EXPECT_FALSE(timer->IsRunning()); | 885 EXPECT_FALSE(timer->IsRunning()); |
| 881 | 886 |
| 882 // ReadData should return asynchronously because no data is buffered. | 887 // ReadData should return asynchronously because no data is buffered. |
| 883 int rv = delegate->ReadData(); | 888 int rv = delegate->ReadData(); |
| 884 EXPECT_EQ(ERR_IO_PENDING, rv); | 889 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 885 // Deliver END_STREAM. | 890 // Deliver END_STREAM. |
| 886 // OnClose should trigger completion of the remaining read. | 891 // OnClose should trigger completion of the remaining read. |
| 887 sequenced_data_->Resume(); | 892 sequenced_data_->Resume(); |
| 888 base::RunLoop().RunUntilIdle(); | 893 base::RunLoop().RunUntilIdle(); |
| 889 | 894 |
| 890 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 895 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 891 EXPECT_EQ(1, delegate->on_data_read_count()); | 896 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 892 EXPECT_EQ(0u, delegate->data_received().size()); | 897 EXPECT_EQ(0u, delegate->data_received().size()); |
| 893 EXPECT_EQ(0, delegate->on_data_sent_count()); | 898 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 894 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); | 899 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); |
| (...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1166 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1171 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1167 delegate->set_do_not_start_read(true); | 1172 delegate->set_do_not_start_read(true); |
| 1168 delegate->Start(std::move(request_info), http_session_.get()); | 1173 delegate->Start(std::move(request_info), http_session_.get()); |
| 1169 // Send the request and receive response headers. | 1174 // Send the request and receive response headers. |
| 1170 base::RunLoop().RunUntilIdle(); | 1175 base::RunLoop().RunUntilIdle(); |
| 1171 | 1176 |
| 1172 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 1177 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1173 // Cancel the stream after ReadData returns ERR_IO_PENDING. | 1178 // Cancel the stream after ReadData returns ERR_IO_PENDING. |
| 1174 int rv = delegate->ReadData(); | 1179 int rv = delegate->ReadData(); |
| 1175 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); | 1180 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); |
| 1176 EXPECT_EQ(ERR_IO_PENDING, rv); | 1181 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1177 delegate->CancelStream(); | 1182 delegate->CancelStream(); |
| 1178 sequenced_data_->Resume(); | 1183 sequenced_data_->Resume(); |
| 1179 base::RunLoop().RunUntilIdle(); | 1184 base::RunLoop().RunUntilIdle(); |
| 1180 | 1185 |
| 1181 EXPECT_EQ(0, delegate->on_data_read_count()); | 1186 EXPECT_EQ(0, delegate->on_data_read_count()); |
| 1182 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1187 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1183 // Calling after stream is canceled gives kProtoUnknown. | 1188 // Calling after stream is canceled gives kProtoUnknown. |
| 1184 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); | 1189 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); |
| 1185 EXPECT_EQ(0, delegate->GetTotalSentBytes()); | 1190 EXPECT_EQ(0, delegate->GetTotalSentBytes()); |
| 1186 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); | 1191 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1215 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, | 1220 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, |
| 1216 base::SizeTToString(kBodyDataSize * 3)); | 1221 base::SizeTToString(kBodyDataSize * 3)); |
| 1217 | 1222 |
| 1218 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1223 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1219 std::unique_ptr<TestDelegateBase> delegate( | 1224 std::unique_ptr<TestDelegateBase> delegate( |
| 1220 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1225 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1221 delegate->SetRunUntilCompletion(true); | 1226 delegate->SetRunUntilCompletion(true); |
| 1222 delegate->Start(std::move(request_info), http_session_.get()); | 1227 delegate->Start(std::move(request_info), http_session_.get()); |
| 1223 | 1228 |
| 1224 base::RunLoop().RunUntilIdle(); | 1229 base::RunLoop().RunUntilIdle(); |
| 1225 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, delegate->error()); | 1230 EXPECT_THAT(delegate->error(), IsError(ERR_SPDY_PROTOCOL_ERROR)); |
| 1226 EXPECT_EQ(delegate->response_headers().end(), | 1231 EXPECT_EQ(delegate->response_headers().end(), |
| 1227 delegate->response_headers().find(":status")); | 1232 delegate->response_headers().find(":status")); |
| 1228 EXPECT_EQ(0, delegate->on_data_read_count()); | 1233 EXPECT_EQ(0, delegate->on_data_read_count()); |
| 1229 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1234 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1230 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); | 1235 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); |
| 1231 // BidirectionalStreamSpdyStreamJob does not count the bytes sent for |rst| | 1236 // BidirectionalStreamSpdyStreamJob does not count the bytes sent for |rst| |
| 1232 // because it is sent after SpdyStream::Delegate::OnClose is called. | 1237 // because it is sent after SpdyStream::Delegate::OnClose is called. |
| 1233 EXPECT_EQ(CountWriteBytes(writes, 1), delegate->GetTotalSentBytes()); | 1238 EXPECT_EQ(CountWriteBytes(writes, 1), delegate->GetTotalSentBytes()); |
| 1234 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 1239 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 1235 delegate->GetTotalReceivedBytes()); | 1240 delegate->GetTotalReceivedBytes()); |
| 1236 | 1241 |
| 1237 TestNetLogEntry::List entries; | 1242 TestNetLogEntry::List entries; |
| 1238 net_log_.GetEntries(&entries); | 1243 net_log_.GetEntries(&entries); |
| 1239 | 1244 |
| 1240 size_t index = ExpectLogContainsSomewhere( | 1245 size_t index = ExpectLogContainsSomewhere( |
| 1241 entries, 0, NetLog::TYPE_BIDIRECTIONAL_STREAM_READY, NetLog::PHASE_NONE); | 1246 entries, 0, NetLog::TYPE_BIDIRECTIONAL_STREAM_READY, NetLog::PHASE_NONE); |
| 1242 TestNetLogEntry entry = entries[index]; | 1247 TestNetLogEntry entry = entries[index]; |
| 1243 bool request_headers_sent = false; | 1248 bool request_headers_sent = false; |
| 1244 EXPECT_TRUE( | 1249 EXPECT_TRUE( |
| 1245 entry.params->GetBoolean("request_headers_sent", &request_headers_sent)); | 1250 entry.params->GetBoolean("request_headers_sent", &request_headers_sent)); |
| 1246 EXPECT_TRUE(request_headers_sent); | 1251 EXPECT_TRUE(request_headers_sent); |
| 1247 | 1252 |
| 1248 index = ExpectLogContainsSomewhere(entries, index, | 1253 index = ExpectLogContainsSomewhere(entries, index, |
| 1249 NetLog::TYPE_BIDIRECTIONAL_STREAM_FAILED, | 1254 NetLog::TYPE_BIDIRECTIONAL_STREAM_FAILED, |
| 1250 NetLog::PHASE_NONE); | 1255 NetLog::PHASE_NONE); |
| 1251 entry = entries[index]; | 1256 entry = entries[index]; |
| 1252 int net_error = OK; | 1257 int net_error = OK; |
| 1253 EXPECT_TRUE(entry.params->GetInteger("net_error", &net_error)); | 1258 EXPECT_TRUE(entry.params->GetInteger("net_error", &net_error)); |
| 1254 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, net_error); | 1259 EXPECT_THAT(net_error, IsError(ERR_SPDY_PROTOCOL_ERROR)); |
| 1255 } | 1260 } |
| 1256 | 1261 |
| 1257 INSTANTIATE_TEST_CASE_P(CancelOrDeleteTests, | 1262 INSTANTIATE_TEST_CASE_P(CancelOrDeleteTests, |
| 1258 BidirectionalStreamTest, | 1263 BidirectionalStreamTest, |
| 1259 ::testing::Values(true, false)); | 1264 ::testing::Values(true, false)); |
| 1260 | 1265 |
| 1261 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnHeadersReceived) { | 1266 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnHeadersReceived) { |
| 1262 std::unique_ptr<SpdySerializedFrame> req( | 1267 std::unique_ptr<SpdySerializedFrame> req( |
| 1263 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST)); | 1268 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST)); |
| 1264 | 1269 |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1464 read_buffer.get(), kReadBufferSize, | 1469 read_buffer.get(), kReadBufferSize, |
| 1465 CancelOrDeleteStreamDelegate::Phase::ON_FAILED, GetParam())); | 1470 CancelOrDeleteStreamDelegate::Phase::ON_FAILED, GetParam())); |
| 1466 delegate->SetRunUntilCompletion(true); | 1471 delegate->SetRunUntilCompletion(true); |
| 1467 delegate->Start(std::move(request_info), http_session_.get()); | 1472 delegate->Start(std::move(request_info), http_session_.get()); |
| 1468 // Makes sure delegate does not get called. | 1473 // Makes sure delegate does not get called. |
| 1469 base::RunLoop().RunUntilIdle(); | 1474 base::RunLoop().RunUntilIdle(); |
| 1470 EXPECT_EQ(delegate->response_headers().end(), | 1475 EXPECT_EQ(delegate->response_headers().end(), |
| 1471 delegate->response_headers().find(":status")); | 1476 delegate->response_headers().find(":status")); |
| 1472 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1477 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1473 EXPECT_EQ(0, delegate->on_data_read_count()); | 1478 EXPECT_EQ(0, delegate->on_data_read_count()); |
| 1474 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, delegate->error()); | 1479 EXPECT_THAT(delegate->error(), IsError(ERR_SPDY_PROTOCOL_ERROR)); |
| 1475 | 1480 |
| 1476 // If stream is destroyed, do not call into stream. | 1481 // If stream is destroyed, do not call into stream. |
| 1477 if (!GetParam()) | 1482 if (!GetParam()) |
| 1478 return; | 1483 return; |
| 1479 EXPECT_EQ(0, delegate->GetTotalSentBytes()); | 1484 EXPECT_EQ(0, delegate->GetTotalSentBytes()); |
| 1480 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); | 1485 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); |
| 1481 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); | 1486 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); |
| 1482 } | 1487 } |
| 1483 | 1488 |
| 1484 TEST_F(BidirectionalStreamTest, TestHonorAlternativeServiceHeader) { | 1489 TEST_F(BidirectionalStreamTest, TestHonorAlternativeServiceHeader) { |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1539 http_session_->http_server_properties()->GetAlternativeServices( | 1544 http_session_->http_server_properties()->GetAlternativeServices( |
| 1540 url::SchemeHostPort(default_url_)); | 1545 url::SchemeHostPort(default_url_)); |
| 1541 ASSERT_EQ(1u, alternative_service_vector.size()); | 1546 ASSERT_EQ(1u, alternative_service_vector.size()); |
| 1542 EXPECT_EQ(AlternateProtocolFromNextProto(kProtoQUIC1SPDY3), | 1547 EXPECT_EQ(AlternateProtocolFromNextProto(kProtoQUIC1SPDY3), |
| 1543 alternative_service_vector[0].protocol); | 1548 alternative_service_vector[0].protocol); |
| 1544 EXPECT_EQ("www.example.org", alternative_service_vector[0].host); | 1549 EXPECT_EQ("www.example.org", alternative_service_vector[0].host); |
| 1545 EXPECT_EQ(443, alternative_service_vector[0].port); | 1550 EXPECT_EQ(443, alternative_service_vector[0].port); |
| 1546 } | 1551 } |
| 1547 | 1552 |
| 1548 } // namespace net | 1553 } // namespace net |
| OLD | NEW |