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

Side by Side Diff: net/spdy/spdy_session_spdy2_unittest.cc

Issue 14707005: SPDY - In CreateStream close the SpdySession if socket is not connected. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « net/spdy/spdy_session.cc ('k') | net/spdy/spdy_session_spdy3_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 (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/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "net/base/io_buffer.h" 8 #include "net/base/io_buffer.h"
9 #include "net/base/ip_endpoint.h" 9 #include "net/base/ip_endpoint.h"
10 #include "net/base/net_log_unittest.h" 10 #include "net/base/net_log_unittest.h"
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 EXPECT_TRUE(session->IsClosed()); 393 EXPECT_TRUE(session->IsClosed());
394 EXPECT_EQ(0u, session->num_active_streams()); 394 EXPECT_EQ(0u, session->num_active_streams());
395 EXPECT_EQ(0u, session->num_unclaimed_pushed_streams()); 395 EXPECT_EQ(0u, session->num_unclaimed_pushed_streams());
396 EXPECT_FALSE(spdy_session_pool_->HasSession(pair_)); 396 EXPECT_FALSE(spdy_session_pool_->HasSession(pair_));
397 397
398 // Delete the first session. 398 // Delete the first session.
399 session = NULL; 399 session = NULL;
400 } 400 }
401 401
402 TEST_F(SpdySessionSpdy2Test, CloseIdleSessions) { 402 TEST_F(SpdySessionSpdy2Test, CloseIdleSessions) {
403 MockConnect connect_data(SYNCHRONOUS, OK);
404 MockRead reads[] = {
405 MockRead(ASYNC, 0, 0) // EOF
406 };
407
408 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0);
409 data.set_connect_data(connect_data);
410 session_deps_.socket_factory->AddSocketDataProvider(&data);
411
403 CreateNetworkSession(); 412 CreateNetworkSession();
404 413
405 // Set up session 1 414 // Set up session 1
406 const std::string kTestHost1("http://www.a.com"); 415 const std::string kTestHost1("http://www.a.com");
407 HostPortPair test_host_port_pair1(kTestHost1, 80); 416 HostPortPair test_host_port_pair1(kTestHost1, 80);
408 HostPortProxyPair pair1(test_host_port_pair1, ProxyServer::Direct()); 417 HostPortProxyPair pair1(test_host_port_pair1, ProxyServer::Direct());
409 scoped_refptr<SpdySession> session1 = GetSession(pair1); 418 scoped_refptr<SpdySession> session1 = GetSession(pair1);
419 EXPECT_EQ(
420 OK,
421 InitializeSession(
422 http_session_.get(), session1.get(), test_host_port_pair1));
410 GURL url1(kTestHost1); 423 GURL url1(kTestHost1);
411 scoped_refptr<SpdyStream> spdy_stream1 = 424 scoped_refptr<SpdyStream> spdy_stream1 =
412 CreateStreamSynchronously(session1, url1, MEDIUM, BoundNetLog()); 425 CreateStreamSynchronously(session1, url1, MEDIUM, BoundNetLog());
413 ASSERT_TRUE(spdy_stream1.get() != NULL); 426 ASSERT_TRUE(spdy_stream1.get() != NULL);
414 427
415 // Set up session 2 428 // Set up session 2
429 session_deps_.socket_factory->AddSocketDataProvider(&data);
416 const std::string kTestHost2("http://www.b.com"); 430 const std::string kTestHost2("http://www.b.com");
417 HostPortPair test_host_port_pair2(kTestHost2, 80); 431 HostPortPair test_host_port_pair2(kTestHost2, 80);
418 HostPortProxyPair pair2(test_host_port_pair2, ProxyServer::Direct()); 432 HostPortProxyPair pair2(test_host_port_pair2, ProxyServer::Direct());
419 scoped_refptr<SpdySession> session2 = GetSession(pair2); 433 scoped_refptr<SpdySession> session2 = GetSession(pair2);
434 EXPECT_EQ(
435 OK,
436 InitializeSession(
437 http_session_.get(), session2.get(), test_host_port_pair2));
420 GURL url2(kTestHost2); 438 GURL url2(kTestHost2);
421 scoped_refptr<SpdyStream> spdy_stream2 = 439 scoped_refptr<SpdyStream> spdy_stream2 =
422 CreateStreamSynchronously(session2, url2, MEDIUM, BoundNetLog()); 440 CreateStreamSynchronously(session2, url2, MEDIUM, BoundNetLog());
423 ASSERT_TRUE(spdy_stream2.get() != NULL); 441 ASSERT_TRUE(spdy_stream2.get() != NULL);
424 442
425 // Set up session 3 443 // Set up session 3
444 session_deps_.socket_factory->AddSocketDataProvider(&data);
426 const std::string kTestHost3("http://www.c.com"); 445 const std::string kTestHost3("http://www.c.com");
427 HostPortPair test_host_port_pair3(kTestHost3, 80); 446 HostPortPair test_host_port_pair3(kTestHost3, 80);
428 HostPortProxyPair pair3(test_host_port_pair3, ProxyServer::Direct()); 447 HostPortProxyPair pair3(test_host_port_pair3, ProxyServer::Direct());
429 scoped_refptr<SpdySession> session3 = GetSession(pair3); 448 scoped_refptr<SpdySession> session3 = GetSession(pair3);
449 EXPECT_EQ(
450 OK,
451 InitializeSession(
452 http_session_.get(), session3.get(), test_host_port_pair3));
430 GURL url3(kTestHost3); 453 GURL url3(kTestHost3);
431 scoped_refptr<SpdyStream> spdy_stream3 = 454 scoped_refptr<SpdyStream> spdy_stream3 =
432 CreateStreamSynchronously(session3, url3, MEDIUM, BoundNetLog()); 455 CreateStreamSynchronously(session3, url3, MEDIUM, BoundNetLog());
433 ASSERT_TRUE(spdy_stream3.get() != NULL); 456 ASSERT_TRUE(spdy_stream3.get() != NULL);
434 457
435 // All sessions are active and not closed 458 // All sessions are active and not closed
436 EXPECT_TRUE(session1->is_active()); 459 EXPECT_TRUE(session1->is_active());
437 EXPECT_FALSE(session1->IsClosed()); 460 EXPECT_FALSE(session1->IsClosed());
438 EXPECT_TRUE(session2->is_active()); 461 EXPECT_TRUE(session2->is_active());
439 EXPECT_FALSE(session2->IsClosed()); 462 EXPECT_FALSE(session2->IsClosed());
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 708
686 namespace { 709 namespace {
687 710
688 // Specifies the style for closing the connection. 711 // Specifies the style for closing the connection.
689 enum SpdyPoolCloseSessionsType { 712 enum SpdyPoolCloseSessionsType {
690 SPDY_POOL_CLOSE_SESSIONS_MANUALLY, 713 SPDY_POOL_CLOSE_SESSIONS_MANUALLY,
691 SPDY_POOL_CLOSE_CURRENT_SESSIONS, 714 SPDY_POOL_CLOSE_CURRENT_SESSIONS,
692 SPDY_POOL_CLOSE_IDLE_SESSIONS, 715 SPDY_POOL_CLOSE_IDLE_SESSIONS,
693 }; 716 };
694 717
718 // Initialize the SpdySession with socket.
719 void IPPoolingInitializedSession(
720 const std::string& group_name,
721 const scoped_refptr<TransportSocketParams>& transport_params,
722 HttpNetworkSession* http_session,
723 SpdySession* session) {
724 scoped_ptr<ClientSocketHandle> connection(new ClientSocketHandle);
725 EXPECT_EQ(OK, connection->Init(group_name,
726 transport_params, MEDIUM, CompletionCallback(),
727 http_session->GetTransportSocketPool(
728 HttpNetworkSession::NORMAL_SOCKET_POOL),
729 BoundNetLog()));
730 EXPECT_EQ(OK, session->InitializeWithSocket(connection.release(), false, OK));
731 }
732
695 // This test has three variants, one for each style of closing the connection. 733 // This test has three variants, one for each style of closing the connection.
696 // If |clean_via_close_current_sessions| is SPDY_POOL_CLOSE_SESSIONS_MANUALLY, 734 // If |clean_via_close_current_sessions| is SPDY_POOL_CLOSE_SESSIONS_MANUALLY,
697 // the sessions are closed manually, calling SpdySessionPool::Remove() directly. 735 // the sessions are closed manually, calling SpdySessionPool::Remove() directly.
698 // If |clean_via_close_current_sessions| is SPDY_POOL_CLOSE_CURRENT_SESSIONS, 736 // If |clean_via_close_current_sessions| is SPDY_POOL_CLOSE_CURRENT_SESSIONS,
699 // sessions are closed with SpdySessionPool::CloseCurrentSessions(). 737 // sessions are closed with SpdySessionPool::CloseCurrentSessions().
700 // If |clean_via_close_current_sessions| is SPDY_POOL_CLOSE_IDLE_SESSIONS, 738 // If |clean_via_close_current_sessions| is SPDY_POOL_CLOSE_IDLE_SESSIONS,
701 // sessions are closed with SpdySessionPool::CloseIdleSessions(). 739 // sessions are closed with SpdySessionPool::CloseIdleSessions().
702 void IPPoolingTest(SpdyPoolCloseSessionsType close_sessions_type) { 740 void IPPoolingTest(SpdyPoolCloseSessionsType close_sessions_type) {
703 const int kTestPort = 80; 741 const int kTestPort = 80;
704 struct TestHosts { 742 struct TestHosts {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
757 795
758 // Setup the first session to the first host. 796 // Setup the first session to the first host.
759 SpdySessionPool* spdy_session_pool(http_session->spdy_session_pool()); 797 SpdySessionPool* spdy_session_pool(http_session->spdy_session_pool());
760 EXPECT_FALSE(spdy_session_pool->HasSession(test_hosts[0].pair)); 798 EXPECT_FALSE(spdy_session_pool->HasSession(test_hosts[0].pair));
761 scoped_refptr<SpdySession> session = 799 scoped_refptr<SpdySession> session =
762 spdy_session_pool->Get(test_hosts[0].pair, BoundNetLog()); 800 spdy_session_pool->Get(test_hosts[0].pair, BoundNetLog());
763 EXPECT_TRUE(spdy_session_pool->HasSession(test_hosts[0].pair)); 801 EXPECT_TRUE(spdy_session_pool->HasSession(test_hosts[0].pair));
764 802
765 HostPortPair test_host_port_pair(test_hosts[0].name, kTestPort); 803 HostPortPair test_host_port_pair(test_hosts[0].name, kTestPort);
766 804
805 // Initialize session for the first host.
767 scoped_refptr<TransportSocketParams> transport_params( 806 scoped_refptr<TransportSocketParams> transport_params(
768 new TransportSocketParams(test_host_port_pair, 807 new TransportSocketParams(test_host_port_pair,
769 MEDIUM, 808 MEDIUM,
770 false, 809 false,
771 false, 810 false,
772 OnHostResolutionCallback())); 811 OnHostResolutionCallback()));
773 scoped_ptr<ClientSocketHandle> connection(new ClientSocketHandle); 812 IPPoolingInitializedSession(test_host_port_pair.ToString(),
774 EXPECT_EQ(OK, connection->Init(test_host_port_pair.ToString(), 813 transport_params, http_session, session);
775 transport_params, MEDIUM, CompletionCallback(),
776 http_session->GetTransportSocketPool(
777 HttpNetworkSession::NORMAL_SOCKET_POOL),
778 BoundNetLog()));
779 EXPECT_EQ(OK, session->InitializeWithSocket(connection.release(), false, OK));
780 814
781 // TODO(rtenneti): MockClientSocket::GetPeerAddress return's 0 as the port 815 // TODO(rtenneti): MockClientSocket::GetPeerAddress return's 0 as the port
782 // number. Fix it to return port 80 and then use GetPeerAddress to AddAlias. 816 // number. Fix it to return port 80 and then use GetPeerAddress to AddAlias.
783 SpdySessionPoolPeer pool_peer(spdy_session_pool); 817 SpdySessionPoolPeer pool_peer(spdy_session_pool);
784 pool_peer.AddAlias(test_hosts[0].addresses.front(), test_hosts[0].pair); 818 pool_peer.AddAlias(test_hosts[0].addresses.front(), test_hosts[0].pair);
785 819
786 // Flush the SpdySession::OnReadComplete() task. 820 // Flush the SpdySession::OnReadComplete() task.
787 MessageLoop::current()->RunUntilIdle(); 821 MessageLoop::current()->RunUntilIdle();
788 822
789 // The third host has no overlap with the first, so it can't pool IPs. 823 // The third host has no overlap with the first, so it can't pool IPs.
(...skipping 12 matching lines...) Expand all
802 836
803 // Create a new session to host 2. 837 // Create a new session to host 2.
804 scoped_refptr<SpdySession> session2 = 838 scoped_refptr<SpdySession> session2 =
805 spdy_session_pool->Get(test_hosts[2].pair, BoundNetLog()); 839 spdy_session_pool->Get(test_hosts[2].pair, BoundNetLog());
806 840
807 // Verify that we have sessions for everything. 841 // Verify that we have sessions for everything.
808 EXPECT_TRUE(spdy_session_pool->HasSession(test_hosts[0].pair)); 842 EXPECT_TRUE(spdy_session_pool->HasSession(test_hosts[0].pair));
809 EXPECT_TRUE(spdy_session_pool->HasSession(test_hosts[1].pair)); 843 EXPECT_TRUE(spdy_session_pool->HasSession(test_hosts[1].pair));
810 EXPECT_TRUE(spdy_session_pool->HasSession(test_hosts[2].pair)); 844 EXPECT_TRUE(spdy_session_pool->HasSession(test_hosts[2].pair));
811 845
846 // Initialize session for host 2.
847 session_deps.socket_factory->AddSocketDataProvider(&data);
848 IPPoolingInitializedSession(test_hosts[2].pair.first.ToString(),
849 transport_params, http_session, session2);
850
812 // Grab the session to host 1 and verify that it is the same session 851 // Grab the session to host 1 and verify that it is the same session
813 // we got with host 0, and that is a different than host 2's session. 852 // we got with host 0, and that is a different than host 2's session.
814 scoped_refptr<SpdySession> session1 = 853 scoped_refptr<SpdySession> session1 =
815 spdy_session_pool->Get(test_hosts[1].pair, BoundNetLog()); 854 spdy_session_pool->Get(test_hosts[1].pair, BoundNetLog());
816 EXPECT_EQ(session.get(), session1.get()); 855 EXPECT_EQ(session.get(), session1.get());
817 EXPECT_NE(session2.get(), session1.get()); 856 EXPECT_NE(session2.get(), session1.get());
818 857
858 // Initialize session for host 1.
859 session_deps.socket_factory->AddSocketDataProvider(&data);
860 IPPoolingInitializedSession(test_hosts[2].pair.first.ToString(),
861 transport_params, http_session, session2);
862
819 // Remove the aliases and observe that we still have a session for host1. 863 // Remove the aliases and observe that we still have a session for host1.
820 pool_peer.RemoveAliases(test_hosts[0].pair); 864 pool_peer.RemoveAliases(test_hosts[0].pair);
821 pool_peer.RemoveAliases(test_hosts[1].pair); 865 pool_peer.RemoveAliases(test_hosts[1].pair);
822 EXPECT_TRUE(spdy_session_pool->HasSession(test_hosts[1].pair)); 866 EXPECT_TRUE(spdy_session_pool->HasSession(test_hosts[1].pair));
823 867
824 // Expire the host cache 868 // Expire the host cache
825 session_deps.host_resolver->GetHostCache()->clear(); 869 session_deps.host_resolver->GetHostCache()->clear();
826 EXPECT_TRUE(spdy_session_pool->HasSession(test_hosts[1].pair)); 870 EXPECT_TRUE(spdy_session_pool->HasSession(test_hosts[1].pair));
827 871
828 // Cleanup the sessions. 872 // Cleanup the sessions.
(...skipping 1161 matching lines...) Expand 10 before | Expand all | Expand 10 after
1990 http_session_.get(), session.get(), test_host_port_pair_); 2034 http_session_.get(), session.get(), test_host_port_pair_);
1991 2035
1992 EXPECT_EQ(SpdySession::FLOW_CONTROL_NONE, session->flow_control_state()); 2036 EXPECT_EQ(SpdySession::FLOW_CONTROL_NONE, session->flow_control_state());
1993 EXPECT_EQ(kSpdyVersion2, session->buffered_spdy_framer_->protocol_version()); 2037 EXPECT_EQ(kSpdyVersion2, session->buffered_spdy_framer_->protocol_version());
1994 EXPECT_EQ(0, session->session_send_window_size_); 2038 EXPECT_EQ(0, session->session_send_window_size_);
1995 EXPECT_EQ(0, session->session_recv_window_size_); 2039 EXPECT_EQ(0, session->session_recv_window_size_);
1996 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_); 2040 EXPECT_EQ(0, session->session_unacked_recv_window_bytes_);
1997 } 2041 }
1998 2042
1999 } // namespace net 2043 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_session.cc ('k') | net/spdy/spdy_session_spdy3_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698