Index: net/quic/p2p/quic_p2p_session_test.cc |
diff --git a/net/quic/p2p/quic_p2p_session_test.cc b/net/quic/p2p/quic_p2p_session_test.cc |
index 4f9d71cdf0ae0e2a7e35be9f4d79346156afae22..0a3c14448dca4bc15d5965f9064f9b3ab74598f1 100644 |
--- a/net/quic/p2p/quic_p2p_session_test.cc |
+++ b/net/quic/p2p/quic_p2p_session_test.cc |
@@ -31,9 +31,13 @@ class FakeP2PDatagramSocket : public Socket { |
FakeP2PDatagramSocket() : weak_factory_(this) {} |
~FakeP2PDatagramSocket() override {} |
+ base::WeakPtr<FakeP2PDatagramSocket> GetWeakPtr() { |
+ return weak_factory_.GetWeakPtr(); |
+ } |
+ |
void ConnectWith(FakeP2PDatagramSocket* peer_socket) { |
- peer_socket_ = peer_socket->weak_factory_.GetWeakPtr(); |
- peer_socket->peer_socket_ = weak_factory_.GetWeakPtr(); |
+ peer_socket_ = peer_socket->GetWeakPtr(); |
+ peer_socket->peer_socket_ = GetWeakPtr(); |
} |
void SetReadError(int error) { |
@@ -216,16 +220,19 @@ class QuicP2PSessionTest : public ::testing::Test { |
} |
void CreateSessions() { |
- socket1_ = new FakeP2PDatagramSocket(); |
- socket2_ = new FakeP2PDatagramSocket(); |
- socket1_->ConnectWith(socket2_); |
+ scoped_ptr<FakeP2PDatagramSocket> socket1(new FakeP2PDatagramSocket()); |
+ scoped_ptr<FakeP2PDatagramSocket> socket2(new FakeP2PDatagramSocket()); |
+ socket1->ConnectWith(socket2.get()); |
+ |
+ socket1_ = socket1->GetWeakPtr(); |
+ socket2_ = socket2->GetWeakPtr(); |
QuicP2PCryptoConfig crypto_config(kTestSharedKey); |
- session1_ = CreateP2PSession(make_scoped_ptr(socket1_), crypto_config, |
- Perspective::IS_SERVER); |
- session2_ = CreateP2PSession(make_scoped_ptr(socket2_), crypto_config, |
- Perspective::IS_CLIENT); |
+ session1_ = |
+ CreateP2PSession(socket1.Pass(), crypto_config, Perspective::IS_SERVER); |
+ session2_ = |
+ CreateP2PSession(socket2.Pass(), crypto_config, Perspective::IS_CLIENT); |
} |
scoped_ptr<QuicP2PSession> CreateP2PSession(scoped_ptr<Socket> socket, |
@@ -252,10 +259,10 @@ class QuicP2PSessionTest : public ::testing::Test { |
QuicConnectionHelper quic_helper_; |
QuicConfig config_; |
- FakeP2PDatagramSocket* socket1_; |
+ base::WeakPtr<FakeP2PDatagramSocket> socket1_; |
scoped_ptr<QuicP2PSession> session1_; |
- FakeP2PDatagramSocket* socket2_; |
+ base::WeakPtr<FakeP2PDatagramSocket> socket2_; |
scoped_ptr<QuicP2PSession> session2_; |
}; |
@@ -318,6 +325,15 @@ TEST_F(QuicP2PSessionTest, ServerToClient) { |
TestStreamConnection(session1_.get(), session2_.get(), 2); |
} |
+TEST_F(QuicP2PSessionTest, DestroySocketWhenClosed) { |
+ CreateSessions(); |
+ |
+ // The socket must be destroyed when connection is closed. |
+ EXPECT_TRUE(socket1_); |
+ session1_->connection()->CloseConnection(net::QUIC_NO_ERROR, false); |
+ EXPECT_FALSE(socket1_); |
+} |
+ |
TEST_F(QuicP2PSessionTest, TransportWriteError) { |
CreateSessions(); |
@@ -343,6 +359,9 @@ TEST_F(QuicP2PSessionTest, TransportWriteError) { |
EXPECT_EQ(QUIC_PACKET_WRITE_ERROR, stream_delegate.error()); |
EXPECT_TRUE(session_delegate.is_closed()); |
EXPECT_EQ(QUIC_PACKET_WRITE_ERROR, session_delegate.error()); |
+ |
+ // Verify that the socket was destroyed. |
+ EXPECT_FALSE(socket1_); |
} |
TEST_F(QuicP2PSessionTest, TransportReceiveError) { |
@@ -365,6 +384,9 @@ TEST_F(QuicP2PSessionTest, TransportReceiveError) { |
EXPECT_EQ(QUIC_PACKET_READ_ERROR, stream_delegate.error()); |
EXPECT_TRUE(session_delegate.is_closed()); |
EXPECT_EQ(QUIC_PACKET_READ_ERROR, session_delegate.error()); |
+ |
+ // Verify that the socket was destroyed. |
+ EXPECT_FALSE(socket1_); |
} |
} // namespace net |