| Index: webrtc/p2p/client/basicportallocator_unittest.cc
|
| diff --git a/webrtc/p2p/client/basicportallocator_unittest.cc b/webrtc/p2p/client/basicportallocator_unittest.cc
|
| index c9831f525b9b14bd1964b42713256da778b71433..cf967a8ae13ae3fcc943f5ae2cf352e7e7853647 100644
|
| --- a/webrtc/p2p/client/basicportallocator_unittest.cc
|
| +++ b/webrtc/p2p/client/basicportallocator_unittest.cc
|
| @@ -79,7 +79,7 @@ static const char kIcePwd0[] = "TESTICEPWD00000000000000";
|
|
|
| static const char kContentName[] = "test content";
|
|
|
| -static const int kDefaultAllocationTimeout = 1000;
|
| +static const int kDefaultAllocationTimeout = 3000;
|
| static const char kTurnUsername[] = "test";
|
| static const char kTurnPassword[] = "test";
|
|
|
| @@ -243,6 +243,8 @@ class BasicPortAllocatorTest : public testing::Test,
|
| &BasicPortAllocatorTest::OnPortsPruned);
|
| session->SignalCandidatesReady.connect(
|
| this, &BasicPortAllocatorTest::OnCandidatesReady);
|
| + session->SignalCandidatesRemoved.connect(
|
| + this, &BasicPortAllocatorTest::OnCandidatesRemoved);
|
| session->SignalCandidatesAllocationDone.connect(
|
| this, &BasicPortAllocatorTest::OnCandidatesAllocationDone);
|
| return session;
|
| @@ -404,6 +406,8 @@ class BasicPortAllocatorTest : public testing::Test,
|
| EXPECT_EQ(total_ports, ports_.size());
|
| }
|
|
|
| + rtc::VirtualSocketServer* virtual_socket_server() { return vss_.get(); }
|
| +
|
| protected:
|
| BasicPortAllocator& allocator() { return *allocator_; }
|
|
|
| @@ -446,6 +450,21 @@ class BasicPortAllocatorTest : public testing::Test,
|
| }
|
| }
|
|
|
| + void OnCandidatesRemoved(PortAllocatorSession* session,
|
| + const std::vector<Candidate>& removed_candidates) {
|
| + auto new_end = std::remove_if(
|
| + candidates_.begin(), candidates_.end(),
|
| + [removed_candidates](Candidate& candidate) {
|
| + for (const Candidate& removed_candidate : removed_candidates) {
|
| + if (candidate.MatchesForRemoval(removed_candidate)) {
|
| + return true;
|
| + }
|
| + }
|
| + return false;
|
| + });
|
| + candidates_.erase(new_end, candidates_.end());
|
| + }
|
| +
|
| bool HasRelayAddress(const ProtocolAddress& proto_addr) {
|
| for (size_t i = 0; i < allocator_->turn_servers().size(); ++i) {
|
| RelayServerConfig server_config = allocator_->turn_servers()[i];
|
| @@ -479,6 +498,143 @@ class BasicPortAllocatorTest : public testing::Test,
|
| allocator().set_step_delay(kMinimumStepDelay);
|
| }
|
|
|
| + void TestUdpTurnPortPrunesTcpTurnPort() {
|
| + turn_server_.AddInternalSocket(kTurnTcpIntAddr, PROTO_TCP);
|
| + AddInterface(kClientAddr);
|
| + allocator_.reset(new BasicPortAllocator(&network_manager_));
|
| + allocator_->SetConfiguration(allocator_->stun_servers(),
|
| + allocator_->turn_servers(), 0, true);
|
| + AddTurnServers(kTurnUdpIntAddr, kTurnTcpIntAddr);
|
| + allocator_->set_step_delay(kMinimumStepDelay);
|
| + allocator_->set_flags(allocator().flags() |
|
| + PORTALLOCATOR_ENABLE_SHARED_SOCKET |
|
| + PORTALLOCATOR_DISABLE_TCP);
|
| +
|
| + EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
|
| + session_->StartGettingPorts();
|
| + EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
|
| + // Only 2 ports (one STUN and one TURN) are actually being used.
|
| + EXPECT_EQ(2U, session_->ReadyPorts().size());
|
| + // We have verified that each port, when it is added to |ports_|, it is
|
| + // found in |ready_ports|, and when it is pruned, it is not found in
|
| + // |ready_ports|, so we only need to verify the content in one of them.
|
| + EXPECT_EQ(2U, ports_.size());
|
| + EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_UDP, kClientAddr));
|
| + EXPECT_EQ(1, CountPorts(ports_, "relay", PROTO_UDP, kClientAddr));
|
| + EXPECT_EQ(0, CountPorts(ports_, "relay", PROTO_TCP, kClientAddr));
|
| +
|
| + // Now that we remove candidates when a TURN port is pruned, |candidates_|
|
| + // should only contains two candidates regardless whether the TCP TURN port
|
| + // is created before or after the UDP turn port.
|
| + EXPECT_EQ(2U, candidates_.size());
|
| + // There will only be 2 candidates in |ready_candidates| because it only
|
| + // includes the candidates in the ready ports.
|
| + const std::vector<Candidate>& ready_candidates =
|
| + session_->ReadyCandidates();
|
| + EXPECT_EQ(2U, ready_candidates.size());
|
| + EXPECT_PRED4(HasCandidate, ready_candidates, "local", "udp", kClientAddr);
|
| + EXPECT_PRED4(HasCandidate, ready_candidates, "relay", "udp",
|
| + rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0));
|
| + }
|
| +
|
| + void TestIPv6TurnPortPrunesIPv4TurnPort() {
|
| + turn_server_.AddInternalSocket(kTurnUdpIntIPv6Addr, PROTO_UDP);
|
| + // Add two IP addresses on the same interface.
|
| + AddInterface(kClientAddr, "net1");
|
| + AddInterface(kClientIPv6Addr, "net1");
|
| + allocator_.reset(new BasicPortAllocator(&network_manager_));
|
| + allocator_->SetConfiguration(allocator_->stun_servers(),
|
| + allocator_->turn_servers(), 0, true);
|
| + AddTurnServers(kTurnUdpIntIPv6Addr, rtc::SocketAddress());
|
| + AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress());
|
| +
|
| + allocator_->set_step_delay(kMinimumStepDelay);
|
| + allocator_->set_flags(
|
| + allocator().flags() | PORTALLOCATOR_ENABLE_SHARED_SOCKET |
|
| + PORTALLOCATOR_ENABLE_IPV6 | PORTALLOCATOR_DISABLE_TCP);
|
| +
|
| + EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
|
| + session_->StartGettingPorts();
|
| + EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
|
| + // Three ports (one IPv4 STUN, one IPv6 STUN and one TURN) will be ready.
|
| + EXPECT_EQ(3U, session_->ReadyPorts().size());
|
| + EXPECT_EQ(3U, ports_.size());
|
| + EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_UDP, kClientAddr));
|
| + EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_UDP, kClientIPv6Addr));
|
| + EXPECT_EQ(1, CountPorts(ports_, "relay", PROTO_UDP, kClientIPv6Addr));
|
| + EXPECT_EQ(0, CountPorts(ports_, "relay", PROTO_UDP, kClientAddr));
|
| +
|
| + // Now that we remove candidates when a TURN port is pruned, there will be
|
| + // exactly 3 candidates in both |candidates_| and |ready_candidates|.
|
| + EXPECT_EQ(3U, candidates_.size());
|
| + const std::vector<Candidate>& ready_candidates =
|
| + session_->ReadyCandidates();
|
| + EXPECT_EQ(3U, ready_candidates.size());
|
| + EXPECT_PRED4(HasCandidate, ready_candidates, "local", "udp", kClientAddr);
|
| + EXPECT_PRED4(HasCandidate, ready_candidates, "relay", "udp",
|
| + rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0));
|
| + }
|
| +
|
| + void TestEachInterfaceHasItsOwnTurnPorts() {
|
| + turn_server_.AddInternalSocket(kTurnTcpIntAddr, PROTO_TCP);
|
| + turn_server_.AddInternalSocket(kTurnUdpIntIPv6Addr, PROTO_UDP);
|
| + turn_server_.AddInternalSocket(kTurnTcpIntIPv6Addr, PROTO_TCP);
|
| + // Add two interfaces both having IPv4 and IPv6 addresses.
|
| + AddInterface(kClientAddr, "net1", rtc::ADAPTER_TYPE_WIFI);
|
| + AddInterface(kClientIPv6Addr, "net1", rtc::ADAPTER_TYPE_WIFI);
|
| + AddInterface(kClientAddr2, "net2", rtc::ADAPTER_TYPE_CELLULAR);
|
| + AddInterface(kClientIPv6Addr2, "net2", rtc::ADAPTER_TYPE_CELLULAR);
|
| + allocator_.reset(new BasicPortAllocator(&network_manager_));
|
| + allocator_->SetConfiguration(allocator_->stun_servers(),
|
| + allocator_->turn_servers(), 0, true);
|
| + // Have both UDP/TCP and IPv4/IPv6 TURN ports.
|
| + AddTurnServers(kTurnUdpIntAddr, kTurnTcpIntAddr);
|
| + AddTurnServers(kTurnUdpIntIPv6Addr, kTurnTcpIntIPv6Addr);
|
| +
|
| + allocator_->set_step_delay(kMinimumStepDelay);
|
| + allocator_->set_flags(allocator().flags() |
|
| + PORTALLOCATOR_ENABLE_SHARED_SOCKET |
|
| + PORTALLOCATOR_ENABLE_IPV6);
|
| + EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
|
| + session_->StartGettingPorts();
|
| + EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
|
| + // 10 ports (4 STUN and 1 TURN ports on each interface) will be ready to
|
| + // use.
|
| + EXPECT_EQ(10U, session_->ReadyPorts().size());
|
| + EXPECT_EQ(10U, ports_.size());
|
| + EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_UDP, kClientAddr));
|
| + EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_UDP, kClientAddr2));
|
| + EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_UDP, kClientIPv6Addr));
|
| + EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_UDP, kClientIPv6Addr2));
|
| + EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_TCP, kClientAddr));
|
| + EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_TCP, kClientAddr2));
|
| + EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_TCP, kClientIPv6Addr));
|
| + EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_TCP, kClientIPv6Addr2));
|
| + EXPECT_EQ(1, CountPorts(ports_, "relay", PROTO_UDP, kClientIPv6Addr));
|
| + EXPECT_EQ(1, CountPorts(ports_, "relay", PROTO_UDP, kClientIPv6Addr2));
|
| +
|
| + // Now that we remove candidates when TURN ports are pruned, there will be
|
| + // exactly 10 candidates in |candidates_|.
|
| + EXPECT_EQ(10U, candidates_.size());
|
| + const std::vector<Candidate>& ready_candidates =
|
| + session_->ReadyCandidates();
|
| + EXPECT_EQ(10U, ready_candidates.size());
|
| + EXPECT_PRED4(HasCandidate, ready_candidates, "local", "udp", kClientAddr);
|
| + EXPECT_PRED4(HasCandidate, ready_candidates, "local", "udp", kClientAddr2);
|
| + EXPECT_PRED4(HasCandidate, ready_candidates, "local", "udp",
|
| + kClientIPv6Addr);
|
| + EXPECT_PRED4(HasCandidate, ready_candidates, "local", "udp",
|
| + kClientIPv6Addr2);
|
| + EXPECT_PRED4(HasCandidate, ready_candidates, "local", "tcp", kClientAddr);
|
| + EXPECT_PRED4(HasCandidate, ready_candidates, "local", "tcp", kClientAddr2);
|
| + EXPECT_PRED4(HasCandidate, ready_candidates, "local", "tcp",
|
| + kClientIPv6Addr);
|
| + EXPECT_PRED4(HasCandidate, ready_candidates, "local", "tcp",
|
| + kClientIPv6Addr2);
|
| + EXPECT_PRED4(HasCandidate, ready_candidates, "relay", "udp",
|
| + rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0));
|
| + }
|
| +
|
| std::unique_ptr<rtc::PhysicalSocketServer> pss_;
|
| std::unique_ptr<rtc::VirtualSocketServer> vss_;
|
| std::unique_ptr<rtc::FirewallSocketServer> fss_;
|
| @@ -1211,142 +1367,72 @@ TEST_F(BasicPortAllocatorTest, TestSharedSocketWithoutNatUsingTurn) {
|
| EXPECT_EQ(3U, candidates_.size());
|
| }
|
|
|
| -// Test that if prune_turn_ports is set, TCP TurnPort will not
|
| -// be used if UDP TurnPort is used.
|
| -TEST_F(BasicPortAllocatorTest, TestUdpTurnPortPrunesTcpTurnPorts) {
|
| - turn_server_.AddInternalSocket(kTurnTcpIntAddr, PROTO_TCP);
|
| - AddInterface(kClientAddr);
|
| - allocator_.reset(new BasicPortAllocator(&network_manager_));
|
| - allocator_->SetConfiguration(allocator_->stun_servers(),
|
| - allocator_->turn_servers(), 0, true);
|
| - AddTurnServers(kTurnUdpIntAddr, kTurnTcpIntAddr);
|
| - allocator_->set_step_delay(kMinimumStepDelay);
|
| - allocator_->set_flags(allocator().flags() |
|
| - PORTALLOCATOR_ENABLE_SHARED_SOCKET |
|
| - PORTALLOCATOR_DISABLE_TCP);
|
| +// Test that if prune_turn_ports is set, TCP TURN port will not be used
|
| +// if UDP TurnPort is used, given that TCP TURN port becomes ready first.
|
| +TEST_F(BasicPortAllocatorTest,
|
| + TestUdpTurnPortPrunesTcpTurnPortWithTcpPortReadyFirst) {
|
| + // UDP has longer delay than TCP so that TCP TURN port becomes ready first.
|
| + virtual_socket_server()->SetDelayOnAddress(kTurnUdpIntAddr, 200);
|
| + virtual_socket_server()->SetDelayOnAddress(kTurnTcpIntAddr, 100);
|
|
|
| - EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
|
| - session_->StartGettingPorts();
|
| - EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
|
| - // Only 2 ports (one STUN and one TURN) are actually being used.
|
| - EXPECT_EQ(2U, session_->ReadyPorts().size());
|
| - // We have verified that each port, when it is added to |ports_|, it is found
|
| - // in |ready_ports|, and when it is pruned, it is not found in |ready_ports|,
|
| - // so we only need to verify the content in one of them.
|
| - EXPECT_EQ(2U, ports_.size());
|
| - EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_UDP, kClientAddr));
|
| - EXPECT_EQ(1, CountPorts(ports_, "relay", PROTO_UDP, kClientAddr));
|
| - EXPECT_EQ(0, CountPorts(ports_, "relay", PROTO_TCP, kClientAddr));
|
| -
|
| - // We don't remove candidates, so the size of |candidates_| will depend on
|
| - // when the TCP TURN port becomes ready. If it is ready after the UDP TURN
|
| - // port becomes ready, its candidates will be used there will be 3 candidates.
|
| - // Otherwise there will be only 2 candidates.
|
| - EXPECT_LE(2U, candidates_.size());
|
| - // There will only be 2 candidates in |ready_candidates| because it only
|
| - // includes the candidates in the ready ports.
|
| - const std::vector<Candidate>& ready_candidates = session_->ReadyCandidates();
|
| - EXPECT_EQ(2U, ready_candidates.size());
|
| - EXPECT_PRED4(HasCandidate, ready_candidates, "local", "udp", kClientAddr);
|
| - EXPECT_PRED4(HasCandidate, ready_candidates, "relay", "udp",
|
| - rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0));
|
| + TestUdpTurnPortPrunesTcpTurnPort();
|
| }
|
|
|
| -// Tests that if prune_turn_ports is set, IPv4 TurnPort will not
|
| -// be used if IPv6 TurnPort is used.
|
| -TEST_F(BasicPortAllocatorTest, TestIPv6TurnPortPrunesIPv4TurnPorts) {
|
| - turn_server_.AddInternalSocket(kTurnUdpIntIPv6Addr, PROTO_UDP);
|
| - // Add two IP addresses on the same interface.
|
| - AddInterface(kClientAddr, "net1");
|
| - AddInterface(kClientIPv6Addr, "net1");
|
| - allocator_.reset(new BasicPortAllocator(&network_manager_));
|
| - allocator_->SetConfiguration(allocator_->stun_servers(),
|
| - allocator_->turn_servers(), 0, true);
|
| - AddTurnServers(kTurnUdpIntIPv6Addr, rtc::SocketAddress());
|
| +// Test that if prune_turn_ports is set, TCP TURN port will not be used
|
| +// if UDP TurnPort is used, given that UDP TURN port becomes ready first.
|
| +TEST_F(BasicPortAllocatorTest,
|
| + TestUdpTurnPortPrunesTcpTurnPortsWithUdpPortReadyFirst) {
|
| + // UDP has shorter delay than TCP so that UDP TURN port becomes ready first.
|
| + virtual_socket_server()->SetDelayOnAddress(kTurnUdpIntAddr, 100);
|
| + virtual_socket_server()->SetDelayOnAddress(kTurnTcpIntAddr, 200);
|
|
|
| - allocator_->set_step_delay(kMinimumStepDelay);
|
| - allocator_->set_flags(allocator().flags() |
|
| - PORTALLOCATOR_ENABLE_SHARED_SOCKET |
|
| - PORTALLOCATOR_ENABLE_IPV6 | PORTALLOCATOR_DISABLE_TCP);
|
| + TestUdpTurnPortPrunesTcpTurnPort();
|
| +}
|
|
|
| - EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
|
| - session_->StartGettingPorts();
|
| - EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
|
| - // Three ports (one IPv4 STUN, one IPv6 STUN and one TURN) will be ready.
|
| - EXPECT_EQ(3U, session_->ReadyPorts().size());
|
| - EXPECT_EQ(3U, ports_.size());
|
| - EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_UDP, kClientAddr));
|
| - EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_UDP, kClientIPv6Addr));
|
| - EXPECT_EQ(1, CountPorts(ports_, "relay", PROTO_UDP, kClientIPv6Addr));
|
| - EXPECT_EQ(0, CountPorts(ports_, "relay", PROTO_UDP, kClientAddr));
|
| -
|
| - // We don't remove candidates, so there may be more than 3 elemenets in
|
| - // |candidates_|, although |ready_candidates| only includes the candidates
|
| - // in |ready_ports|.
|
| - EXPECT_LE(3U, candidates_.size());
|
| - const std::vector<Candidate>& ready_candidates = session_->ReadyCandidates();
|
| - EXPECT_EQ(3U, ready_candidates.size());
|
| - EXPECT_PRED4(HasCandidate, ready_candidates, "local", "udp", kClientAddr);
|
| - EXPECT_PRED4(HasCandidate, ready_candidates, "relay", "udp",
|
| - rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0));
|
| +// Tests that if prune_turn_ports is set, IPv4 TurnPort will not be used
|
| +// if IPv6 TurnPort is used, given that IPv4 TURN port becomes ready first.
|
| +TEST_F(BasicPortAllocatorTest,
|
| + TestIPv6TurnPortPrunesIPv4TurnPortWithIPv4PortReadyFirst) {
|
| + // IPv6 has longer delay than IPv4, so that IPv4 TURN port becomes ready
|
| + // first.
|
| + virtual_socket_server()->SetDelayOnAddress(kTurnUdpIntAddr, 100);
|
| + virtual_socket_server()->SetDelayOnAddress(kTurnUdpIntIPv6Addr, 200);
|
| +
|
| + TestIPv6TurnPortPrunesIPv4TurnPort();
|
| +}
|
| +
|
| +// Tests that if prune_turn_ports is set, IPv4 TurnPort will not be used
|
| +// if IPv6 TurnPort is used, given that IPv6 TURN port becomes ready first.
|
| +TEST_F(BasicPortAllocatorTest,
|
| + TestIPv6TurnPortPrunesIPv4TurnPortWithIPv6PortReadyFirst) {
|
| + // IPv6 has longer delay than IPv4, so that IPv6 TURN port becomes ready
|
| + // first.
|
| + virtual_socket_server()->SetDelayOnAddress(kTurnUdpIntAddr, 200);
|
| + virtual_socket_server()->SetDelayOnAddress(kTurnUdpIntIPv6Addr, 100);
|
| +
|
| + TestIPv6TurnPortPrunesIPv4TurnPort();
|
| }
|
|
|
| // Tests that if prune_turn_ports is set, each network interface
|
| -// will has its own set of TurnPorts based on their priorities.
|
| -TEST_F(BasicPortAllocatorTest, TestEachInterfaceHasItsOwnTurnPorts) {
|
| - turn_server_.AddInternalSocket(kTurnTcpIntAddr, PROTO_TCP);
|
| - turn_server_.AddInternalSocket(kTurnUdpIntIPv6Addr, PROTO_UDP);
|
| - turn_server_.AddInternalSocket(kTurnTcpIntIPv6Addr, PROTO_TCP);
|
| - // Add two interfaces both having IPv4 and IPv6 addresses.
|
| - AddInterface(kClientAddr, "net1", rtc::ADAPTER_TYPE_WIFI);
|
| - AddInterface(kClientIPv6Addr, "net1", rtc::ADAPTER_TYPE_WIFI);
|
| - AddInterface(kClientAddr2, "net2", rtc::ADAPTER_TYPE_CELLULAR);
|
| - AddInterface(kClientIPv6Addr2, "net2", rtc::ADAPTER_TYPE_CELLULAR);
|
| - allocator_.reset(new BasicPortAllocator(&network_manager_));
|
| - allocator_->SetConfiguration(allocator_->stun_servers(),
|
| - allocator_->turn_servers(), 0, true);
|
| - // Have both UDP/TCP and IPv4/IPv6 TURN ports.
|
| - AddTurnServers(kTurnUdpIntAddr, kTurnTcpIntAddr);
|
| - AddTurnServers(kTurnUdpIntIPv6Addr, kTurnTcpIntIPv6Addr);
|
| +// will has its own set of TurnPorts based on their priorities, in the default
|
| +// case where no transit delay is set.
|
| +TEST_F(BasicPortAllocatorTest, TestEachInterfaceHasItsOwnTurnPortsNoDelay) {
|
| + TestEachInterfaceHasItsOwnTurnPorts();
|
| +}
|
|
|
| - allocator_->set_step_delay(kMinimumStepDelay);
|
| - allocator_->set_flags(allocator().flags() |
|
| - PORTALLOCATOR_ENABLE_SHARED_SOCKET |
|
| - PORTALLOCATOR_ENABLE_IPV6);
|
| - EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
|
| - session_->StartGettingPorts();
|
| - EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
|
| - // 10 ports (4 STUN and 1 TURN ports on each interface) will be ready to use.
|
| - EXPECT_EQ(10U, session_->ReadyPorts().size());
|
| - EXPECT_EQ(10U, ports_.size());
|
| - EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_UDP, kClientAddr));
|
| - EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_UDP, kClientAddr2));
|
| - EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_UDP, kClientIPv6Addr));
|
| - EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_UDP, kClientIPv6Addr2));
|
| - EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_TCP, kClientAddr));
|
| - EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_TCP, kClientAddr2));
|
| - EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_TCP, kClientIPv6Addr));
|
| - EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_TCP, kClientIPv6Addr2));
|
| - EXPECT_EQ(1, CountPorts(ports_, "relay", PROTO_UDP, kClientIPv6Addr));
|
| - EXPECT_EQ(1, CountPorts(ports_, "relay", PROTO_UDP, kClientIPv6Addr2));
|
| -
|
| - // We don't remove candidates, so there may be more than 10 candidates
|
| - // in |candidates_|.
|
| - EXPECT_LE(10U, candidates_.size());
|
| - const std::vector<Candidate>& ready_candidates = session_->ReadyCandidates();
|
| - EXPECT_EQ(10U, ready_candidates.size());
|
| - EXPECT_PRED4(HasCandidate, ready_candidates, "local", "udp", kClientAddr);
|
| - EXPECT_PRED4(HasCandidate, ready_candidates, "local", "udp", kClientAddr2);
|
| - EXPECT_PRED4(HasCandidate, ready_candidates, "local", "udp", kClientIPv6Addr);
|
| - EXPECT_PRED4(HasCandidate, ready_candidates, "local", "udp",
|
| - kClientIPv6Addr2);
|
| - EXPECT_PRED4(HasCandidate, ready_candidates, "local", "tcp", kClientAddr);
|
| - EXPECT_PRED4(HasCandidate, ready_candidates, "local", "tcp", kClientAddr2);
|
| - EXPECT_PRED4(HasCandidate, ready_candidates, "local", "tcp", kClientIPv6Addr);
|
| - EXPECT_PRED4(HasCandidate, ready_candidates, "local", "tcp",
|
| - kClientIPv6Addr2);
|
| - EXPECT_PRED4(HasCandidate, ready_candidates, "relay", "udp",
|
| - rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0));
|
| +// Tests that if prune_turn_ports is set, each network interface
|
| +// will has its own set of TurnPorts based on their priorities, given that
|
| +// IPv4/TCP TURN port becomes ready first.
|
| +TEST_F(BasicPortAllocatorTest,
|
| + TestEachInterfaceHasItsOwnTurnPortsWithTcpIPv4ReadyFirst) {
|
| + // IPv6/UDP have longer delay than IPv4/TCP, so that IPv4/TCP TURN port
|
| + // becomes ready last.
|
| + virtual_socket_server()->SetDelayOnAddress(kTurnTcpIntAddr, 10);
|
| + virtual_socket_server()->SetDelayOnAddress(kTurnUdpIntAddr, 100);
|
| + virtual_socket_server()->SetDelayOnAddress(kTurnTcpIntIPv6Addr, 20);
|
| + virtual_socket_server()->SetDelayOnAddress(kTurnUdpIntIPv6Addr, 300);
|
| +
|
| + TestEachInterfaceHasItsOwnTurnPorts();
|
| }
|
|
|
| // Testing DNS resolve for the TURN server, this will test AllocationSequence
|
|
|