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

Side by Side Diff: webrtc/p2p/base/p2ptransportchannel_unittest.cc

Issue 1371623003: Delete a connection only if it has timed out on writing and not receiving for 10 seconds. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: A minor change in GetStats Created 5 years, 2 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
OLDNEW
1 /* 1 /*
2 * Copyright 2009 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2009 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 1750 matching lines...) Expand 10 before | Expand all | Expand 10 after
1761 uint32 remote_priority = conn1->remote_candidate().priority(); 1761 uint32 remote_priority = conn1->remote_candidate().priority();
1762 1762
1763 // Create a higher priority candidate and make the connection 1763 // Create a higher priority candidate and make the connection
1764 // receiving/writable. This will prune conn1. 1764 // receiving/writable. This will prune conn1.
1765 ch.AddRemoteCandidate(CreateCandidate("2.2.2.2", 2, 2)); 1765 ch.AddRemoteCandidate(CreateCandidate("2.2.2.2", 2, 2));
1766 cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); 1766 cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2);
1767 ASSERT_TRUE(conn2 != nullptr); 1767 ASSERT_TRUE(conn2 != nullptr);
1768 conn2->ReceivedPing(); 1768 conn2->ReceivedPing();
1769 conn2->ReceivedPingResponse(); 1769 conn2->ReceivedPingResponse();
1770 1770
1771 // Wait for conn1 to be destroyed. 1771 // Wait for conn1 to be pruned.
1772 EXPECT_TRUE_WAIT(GetConnectionTo(&ch, "1.1.1.1", 1) == nullptr, 3000); 1772 EXPECT_TRUE_WAIT(conn1->pruned(), 3000);
1773 cricket::Port* port = GetPort(&ch); 1773 // Destroy the connection to test SignalUnknownAddress.
1774 conn1->Destroy();
1775 EXPECT_TRUE_WAIT(GetConnectionTo(&ch, "1.1.1.1", 1) == nullptr, 1000);
1774 1776
1775 // Create a minimal STUN message with prflx priority. 1777 // Create a minimal STUN message with prflx priority.
1776 cricket::IceMessage request; 1778 cricket::IceMessage request;
1777 request.SetType(cricket::STUN_BINDING_REQUEST); 1779 request.SetType(cricket::STUN_BINDING_REQUEST);
1778 request.AddAttribute(new cricket::StunByteStringAttribute( 1780 request.AddAttribute(new cricket::StunByteStringAttribute(
1779 cricket::STUN_ATTR_USERNAME, kIceUfrag[1])); 1781 cricket::STUN_ATTR_USERNAME, kIceUfrag[1]));
1780 uint32 prflx_priority = cricket::ICE_TYPE_PREFERENCE_PRFLX << 24; 1782 uint32 prflx_priority = cricket::ICE_TYPE_PREFERENCE_PRFLX << 24;
1781 request.AddAttribute(new cricket::StunUInt32Attribute( 1783 request.AddAttribute(new cricket::StunUInt32Attribute(
1782 cricket::STUN_ATTR_PRIORITY, prflx_priority)); 1784 cricket::STUN_ATTR_PRIORITY, prflx_priority));
1783 EXPECT_NE(prflx_priority, remote_priority); 1785 EXPECT_NE(prflx_priority, remote_priority);
1784 1786
1787 cricket::Port* port = GetPort(&ch);
1785 // conn1 should be resurrected with original priority. 1788 // conn1 should be resurrected with original priority.
1786 port->SignalUnknownAddress(port, rtc::SocketAddress("1.1.1.1", 1), 1789 port->SignalUnknownAddress(port, rtc::SocketAddress("1.1.1.1", 1),
1787 cricket::PROTO_UDP, &request, kIceUfrag[1], false); 1790 cricket::PROTO_UDP, &request, kIceUfrag[1], false);
1788 conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); 1791 conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1);
1789 ASSERT_TRUE(conn1 != nullptr); 1792 ASSERT_TRUE(conn1 != nullptr);
1790 EXPECT_EQ(conn1->remote_candidate().priority(), remote_priority); 1793 EXPECT_EQ(conn1->remote_candidate().priority(), remote_priority);
1791 1794
1792 // conn3, a real prflx connection, should have prflx priority. 1795 // conn3, a real prflx connection, should have prflx priority.
1793 port->SignalUnknownAddress(port, rtc::SocketAddress("3.3.3.3", 1), 1796 port->SignalUnknownAddress(port, rtc::SocketAddress("3.3.3.3", 1),
1794 cricket::PROTO_UDP, &request, kIceUfrag[1], false); 1797 cricket::PROTO_UDP, &request, kIceUfrag[1], false);
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
2033 2036
2034 ch.AddRemoteCandidate(CreateCandidate("3.3.3.3", 3, 1)); 2037 ch.AddRemoteCandidate(CreateCandidate("3.3.3.3", 3, 1));
2035 cricket::Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3); 2038 cricket::Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3);
2036 ASSERT_TRUE(conn3 != nullptr); 2039 ASSERT_TRUE(conn3 != nullptr);
2037 // The best connection should still be conn2. Even through conn3 has lower 2040 // The best connection should still be conn2. Even through conn3 has lower
2038 // priority and is not receiving/writable, it is not pruned because the best 2041 // priority and is not receiving/writable, it is not pruned because the best
2039 // connection is not receiving. 2042 // connection is not receiving.
2040 WAIT(conn3->pruned(), 1000); 2043 WAIT(conn3->pruned(), 1000);
2041 EXPECT_FALSE(conn3->pruned()); 2044 EXPECT_FALSE(conn3->pruned());
2042 } 2045 }
2046
2047 // Test that when a low-priority connection is pruned, it will not be deleted
2048 // right away.
2049 TEST_F(P2PTransportChannelPingTest, TestDontDeleteRightAwayWhenPrune) {
pthatcher1 2015/09/28 23:07:27 ...WhenPrune => ...WhenPruned
honghaiz3 2015/09/29 18:47:49 Done.
2050 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr);
2051 cricket::P2PTransportChannel ch("test channel", 1, nullptr, &pa);
2052 PrepareChannel(&ch);
2053 ch.Connect();
2054 ch.MaybeStartGathering();
2055 ch.AddRemoteCandidate(CreateCandidate("1.1.1.1", 1, 100));
2056 cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1);
2057 ASSERT_TRUE(conn1 != nullptr);
2058 EXPECT_EQ(conn1, ch.best_connection());
2059 conn1->ReceivedPingResponse(); // Becomes writable and receiving
2060
2061 // Add a low-priority connection, which will be pruned right away, but it
2062 // will not be deleted right away.
2063 ch.AddRemoteCandidate(CreateCandidate("2.2.2.2", 2, 1));
2064 cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2);
2065 ASSERT_TRUE(conn2 != nullptr);
2066 EXPECT_TRUE_WAIT(conn2->pruned(), 1000);
2067 LOG(LS_INFO) << "A connection is pruned";
2068 WAIT((conn2 = GetConnectionTo(&ch, "2.2.2.2", 2)) == nullptr, 1000);
2069 EXPECT_FALSE(conn2 == nullptr);
pthatcher1 2015/09/28 23:07:27 I think that what we really want to test is that w
honghaiz3 2015/09/29 18:47:49 Done. conn2 will start to ping once conn1 is not r
2070 }
2071
2072 // Test that GetState returns the state correctly.
2073 TEST_F(P2PTransportChannelPingTest, TestGetState) {
2074 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr);
2075 cricket::P2PTransportChannel ch("test channel", 1, nullptr, &pa);
2076 PrepareChannel(&ch);
2077 ch.Connect();
2078 ch.MaybeStartGathering();
2079 ch.AddRemoteCandidate(CreateCandidate("1.1.1.1", 1, 100));
2080 ch.AddRemoteCandidate(CreateCandidate("2.2.2.2", 2, 1));
2081 cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1);
2082 cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2);
2083 ASSERT_TRUE(conn1 != nullptr);
2084 ASSERT_TRUE(conn2 != nullptr);
2085 // Now there are two connections, so the transport channel is connecting.
pthatcher1 2015/09/28 23:07:27 We need to check STATE_INIT before there are any c
honghaiz3 2015/09/29 18:47:49 Done.
2086 EXPECT_EQ(cricket::TransportChannelState::STATE_CONNECTING, ch.GetState());
2087 // |conn1| becomes writable and receiving; it then should prune |conn2|.
2088 conn1->ReceivedPingResponse();
2089 EXPECT_TRUE_WAIT(conn2->pruned(), 1000);
2090 EXPECT_EQ(cricket::TransportChannelState::STATE_COMPLETED, ch.GetState());
pthatcher1 2015/09/28 23:07:27 To be more complete, I think we need to test the m
honghaiz3 2015/09/29 18:47:49 Added GetState tests in the MultihomedTest.
2091 conn1->Prune(); // All connections are pruned.
2092 EXPECT_EQ(cricket::TransportChannelState::STATE_FAILED, ch.GetState());
pthatcher1 2015/09/28 23:07:27 We should also test that not only Prune() get us i
honghaiz3 2015/09/29 18:47:49 Prune is used to emulate losing writability. If w
pthatcher1 2015/09/29 19:51:32 Is there a way we can just set_write_state(WRITE_T
honghaiz3 2015/09/29 20:40:42 Yes although set_write_state() is protected. We ca
2093 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698