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

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

Issue 2171183002: Remove ports that are not used by any channel after timeout (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: fix a comment Created 4 years, 5 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 2479 matching lines...) Expand 10 before | Expand all | Expand 10 after
2490 return GetConnectionTo(ch, ip, port_num); 2490 return GetConnectionTo(ch, ip, port_num);
2491 } 2491 }
2492 2492
2493 Port* GetPort(P2PTransportChannel* ch) { 2493 Port* GetPort(P2PTransportChannel* ch) {
2494 if (ch->ports().empty()) { 2494 if (ch->ports().empty()) {
2495 return nullptr; 2495 return nullptr;
2496 } 2496 }
2497 return static_cast<Port*>(ch->ports()[0]); 2497 return static_cast<Port*>(ch->ports()[0]);
2498 } 2498 }
2499 2499
2500 Port* GetRemovedPort(P2PTransportChannel* ch) {
2501 if (ch->removed_ports().empty()) {
2502 return nullptr;
2503 }
2504 return static_cast<Port*>(ch->removed_ports()[0]);
2505 }
2506
2500 Connection* GetConnectionTo(P2PTransportChannel* ch, 2507 Connection* GetConnectionTo(P2PTransportChannel* ch,
2501 const std::string& ip, 2508 const std::string& ip,
2502 int port_num) { 2509 int port_num) {
2503 Port* port = GetPort(ch); 2510 Port* port = GetPort(ch);
2504 if (!port) { 2511 if (!port) {
2505 return nullptr; 2512 return nullptr;
2506 } 2513 }
2507 return port->GetConnection(rtc::SocketAddress(ip, port_num)); 2514 return port->GetConnection(rtc::SocketAddress(ip, port_num));
2508 } 2515 }
2509 2516
(...skipping 1062 matching lines...) Expand 10 before | Expand all | Expand 10 after
3572 3579
3573 // Do an ICE restart, change the role, and expect the old port to have its 3580 // Do an ICE restart, change the role, and expect the old port to have its
3574 // role updated. 3581 // role updated.
3575 ch.SetIceCredentials(kIceUfrag[1], kIcePwd[1]); 3582 ch.SetIceCredentials(kIceUfrag[1], kIcePwd[1]);
3576 ch.MaybeStartGathering(); 3583 ch.MaybeStartGathering();
3577 ch.SetIceRole(ICEROLE_CONTROLLED); 3584 ch.SetIceRole(ICEROLE_CONTROLLED);
3578 EXPECT_EQ(ICEROLE_CONTROLLED, conn->port()->GetIceRole()); 3585 EXPECT_EQ(ICEROLE_CONTROLLED, conn->port()->GetIceRole());
3579 } 3586 }
3580 3587
3581 // Test that after some amount of time without receiving data, the connection 3588 // Test that after some amount of time without receiving data, the connection
3582 // and port are destroyed. 3589 // will be destroyed. The port will only be destroyed after it is removed
3583 TEST_F(P2PTransportChannelPingTest, TestPortDestroyedAfterTimeout) { 3590 // from usage.
3591 TEST_F(P2PTransportChannelPingTest, TestPortDestroyedAfterTimeoutAndRemoved) {
3584 rtc::ScopedFakeClock fake_clock; 3592 rtc::ScopedFakeClock fake_clock;
3585 3593
3586 FakePortAllocator pa(rtc::Thread::Current(), nullptr); 3594 FakePortAllocator pa(rtc::Thread::Current(), nullptr);
3587 P2PTransportChannel ch("test channel", ICE_CANDIDATE_COMPONENT_DEFAULT, &pa); 3595 P2PTransportChannel ch("test channel", ICE_CANDIDATE_COMPONENT_DEFAULT, &pa);
3588 PrepareChannel(&ch); 3596 PrepareChannel(&ch);
3589 // Only a controlled channel should expect its ports to be destroyed. 3597 // Only a controlled channel should expect its ports to be destroyed.
3590 ch.SetIceRole(ICEROLE_CONTROLLED); 3598 ch.SetIceRole(ICEROLE_CONTROLLED);
3591 ch.MaybeStartGathering(); 3599 ch.MaybeStartGathering();
3592 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1)); 3600 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1));
3593 3601
3594 Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1); 3602 Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1);
3595 ASSERT_TRUE(conn != nullptr); 3603 ASSERT_TRUE(conn != nullptr);
3596 3604
3597 // Simulate 2 minutes going by. This should be enough time for the port to 3605 // Simulate 2 minutes going by. This should be enough time for the port to
3598 // time out. 3606 // time out.
3599 for (int second = 0; second < 120; ++second) { 3607 for (int second = 0; second < 120; ++second) {
3600 fake_clock.AdvanceTime(rtc::TimeDelta::FromSeconds(1)); 3608 fake_clock.AdvanceTime(rtc::TimeDelta::FromSeconds(1));
3601 } 3609 }
3602 EXPECT_EQ(nullptr, GetConnectionTo(&ch, "1.1.1.1", 1)); 3610 EXPECT_EQ(nullptr, GetConnectionTo(&ch, "1.1.1.1", 1));
3603 EXPECT_EQ(nullptr, GetPort(&ch)); 3611 // Port will not be removed because it is still used by the channel.
3612 PortInterface* port = GetPort(&ch);
3613 ASSERT_NE(nullptr, port);
3614
3615 // If the session signals removing the port, the port will be destroyed.
3616 std::vector<PortInterface*> ports_to_remove(1, port);
3617 ch.allocator_session()->SignalPortsRemoved(ch.allocator_session(),
3618 ports_to_remove);
3619 EXPECT_EQ_SIMULATED_WAIT(nullptr, GetPort(&ch), 1, fake_clock);
3620 EXPECT_EQ_SIMULATED_WAIT(nullptr, GetRemovedPort(&ch), 1, fake_clock);
pthatcher1 2016/07/27 18:33:15 If we move the logic to be between the session and
honghaiz3 2016/07/28 01:22:49 This is an extra test here. There are tests in Por
3604 } 3621 }
3605 3622
3606 class P2PTransportChannelMostLikelyToWorkFirstTest 3623 class P2PTransportChannelMostLikelyToWorkFirstTest
3607 : public P2PTransportChannelPingTest { 3624 : public P2PTransportChannelPingTest {
3608 public: 3625 public:
3609 P2PTransportChannelMostLikelyToWorkFirstTest() 3626 P2PTransportChannelMostLikelyToWorkFirstTest()
3610 : turn_server_(rtc::Thread::Current(), kTurnUdpIntAddr, kTurnUdpExtAddr) { 3627 : turn_server_(rtc::Thread::Current(), kTurnUdpIntAddr, kTurnUdpExtAddr) {
3611 network_manager_.AddInterface(kPublicAddrs[0]); 3628 network_manager_.AddInterface(kPublicAddrs[0]);
3612 allocator_.reset(new BasicPortAllocator( 3629 allocator_.reset(new BasicPortAllocator(
3613 &network_manager_, ServerAddresses(), rtc::SocketAddress(), 3630 &network_manager_, ServerAddresses(), rtc::SocketAddress(),
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
3808 3825
3809 // TCP Relay/Relay is the next. 3826 // TCP Relay/Relay is the next.
3810 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE, 3827 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE,
3811 TCP_PROTOCOL_NAME); 3828 TCP_PROTOCOL_NAME);
3812 3829
3813 // Finally, Local/Relay will be pinged. 3830 // Finally, Local/Relay will be pinged.
3814 VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE); 3831 VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE);
3815 } 3832 }
3816 3833
3817 } // namespace cricket { 3834 } // namespace cricket {
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698