OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/spdy/spdy_session.h" | 5 #include "net/spdy/spdy_session.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
(...skipping 710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
721 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); | 721 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); |
722 EXPECT_TRUE(session->IsStreamActive(1)); | 722 EXPECT_TRUE(session->IsStreamActive(1)); |
723 | 723 |
724 // Read and process the SYN_STREAM frame, the subsequent RST_STREAM, | 724 // Read and process the SYN_STREAM frame, the subsequent RST_STREAM, |
725 // and EOF. | 725 // and EOF. |
726 data.RunFor(3); | 726 data.RunFor(3); |
727 | 727 |
728 EXPECT_TRUE(session == NULL); | 728 EXPECT_TRUE(session == NULL); |
729 } | 729 } |
730 | 730 |
731 // A session observing a network change with active streams should close | |
732 // when the last active stream is closed. | |
733 TEST_P(SpdySessionTest, NetworkChangeWithActiveStreams) { | |
734 session_deps_.host_resolver->set_synchronous_mode(true); | |
735 | |
736 MockConnect connect_data(SYNCHRONOUS, OK); | |
737 MockRead reads[] = { | |
738 MockRead(ASYNC, 0, 1) // EOF | |
739 }; | |
740 scoped_ptr<SpdyFrame> req1( | |
741 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, MEDIUM, true)); | |
742 MockWrite writes[] = { | |
743 CreateMockWrite(*req1, 0), | |
744 }; | |
745 DeterministicSocketData data(reads, arraysize(reads), | |
746 writes, arraysize(writes)); | |
747 data.set_connect_data(connect_data); | |
748 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data); | |
749 | |
750 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); | |
Johnny
2014/01/24 20:05:05
Possible to remove some of the boilerplate here no
| |
751 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl); | |
752 | |
753 CreateDeterministicNetworkSession(); | |
754 | |
755 base::WeakPtr<SpdySession> session = | |
756 CreateInsecureSpdySession(http_session_, key_, BoundNetLog()); | |
757 | |
758 EXPECT_EQ(spdy_util_.spdy_version(), session->GetProtocolVersion()); | |
759 | |
760 GURL url("http://www.google.com"); | |
761 base::WeakPtr<SpdyStream> spdy_stream = | |
762 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, | |
763 session, url, MEDIUM, BoundNetLog()); | |
764 test::StreamDelegateDoNothing delegate(spdy_stream); | |
765 spdy_stream->SetDelegate(&delegate); | |
766 | |
767 scoped_ptr<SpdyHeaderBlock> headers( | |
Johnny
2014/01/24 20:05:05
indent
| |
768 spdy_util_.ConstructGetHeaderBlock(url.spec())); | |
769 | |
770 spdy_stream->SendRequestHeaders(headers.Pass(), NO_MORE_DATA_TO_SEND); | |
771 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); | |
772 | |
773 data.RunFor(1); | |
774 | |
775 EXPECT_EQ(1u, spdy_stream->stream_id()); | |
776 | |
777 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); | |
778 | |
779 spdy_session_pool_->OnIPAddressChanged(); | |
780 | |
781 // The SpdySessionPool behavior differs based on how the OSs reacts to | |
782 // network changes, see comment in SpdySessionPool::OnIPAddressChanged(). | |
783 #if defined(OS_ANDROID) || defined(OS_WIN) || defined(OS_IOS) | |
784 // For OSs where the TCP connections will close upon relevant network | |
785 // changes, SpdySessionPool doesn't need to force them to close, so in these | |
786 // cases verify the session has become unavailable but remains open and the | |
787 // pre-existing stream is still active. | |
788 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); | |
789 | |
790 EXPECT_FALSE(session->IsClosed()); | |
791 | |
792 EXPECT_TRUE(session->IsStreamActive(1)); | |
793 | |
794 // Should close the session. | |
795 spdy_stream->Close(); | |
796 #endif | |
797 EXPECT_EQ(NULL, spdy_stream.get()); | |
798 | |
799 EXPECT_TRUE(session == NULL); | |
800 } | |
801 | |
731 TEST_P(SpdySessionTest, ClientPing) { | 802 TEST_P(SpdySessionTest, ClientPing) { |
732 session_deps_.enable_ping = true; | 803 session_deps_.enable_ping = true; |
733 session_deps_.host_resolver->set_synchronous_mode(true); | 804 session_deps_.host_resolver->set_synchronous_mode(true); |
734 | 805 |
735 MockConnect connect_data(SYNCHRONOUS, OK); | 806 MockConnect connect_data(SYNCHRONOUS, OK); |
736 scoped_ptr<SpdyFrame> read_ping(spdy_util_.ConstructSpdyPing(1)); | 807 scoped_ptr<SpdyFrame> read_ping(spdy_util_.ConstructSpdyPing(1)); |
737 MockRead reads[] = { | 808 MockRead reads[] = { |
738 CreateMockRead(*read_ping, 1), | 809 CreateMockRead(*read_ping, 1), |
739 MockRead(ASYNC, 0, 0, 2) // EOF | 810 MockRead(ASYNC, 0, 0, 2) // EOF |
740 }; | 811 }; |
(...skipping 3394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4135 EXPECT_TRUE(delegate1.send_headers_completed()); | 4206 EXPECT_TRUE(delegate1.send_headers_completed()); |
4136 EXPECT_EQ(std::string(), delegate1.TakeReceivedData()); | 4207 EXPECT_EQ(std::string(), delegate1.TakeReceivedData()); |
4137 | 4208 |
4138 EXPECT_TRUE(delegate2.send_headers_completed()); | 4209 EXPECT_TRUE(delegate2.send_headers_completed()); |
4139 EXPECT_EQ(std::string(), delegate2.TakeReceivedData()); | 4210 EXPECT_EQ(std::string(), delegate2.TakeReceivedData()); |
4140 | 4211 |
4141 EXPECT_TRUE(data.at_write_eof()); | 4212 EXPECT_TRUE(data.at_write_eof()); |
4142 } | 4213 } |
4143 | 4214 |
4144 } // namespace net | 4215 } // namespace net |
OLD | NEW |