| Index: webrtc/p2p/client/portallocator_unittest.cc
|
| diff --git a/webrtc/p2p/client/portallocator_unittest.cc b/webrtc/p2p/client/portallocator_unittest.cc
|
| index 9617688302acc33cf95f8793c6c60fc88ea29f8e..45545f5c50db304c419128fb34f378be41f3eb5a 100644
|
| --- a/webrtc/p2p/client/portallocator_unittest.cc
|
| +++ b/webrtc/p2p/client/portallocator_unittest.cc
|
| @@ -114,6 +114,12 @@ class PortAllocatorTest : public testing::Test, public sigslot::has_slots<> {
|
| void AddInterface(const SocketAddress& addr, const std::string& if_name) {
|
| network_manager_.AddInterface(addr, if_name);
|
| }
|
| + // The default route is the public address that STUN server will observe when
|
| + // the endpoint is sitting on the public internet and the local port is bound
|
| + // to the "any" address. This may be different from the default local address
|
| + // which the endpoint observes. This can occur if the route to the public
|
| + // endpoint like 8.8.8.8 (specified as the default local address) is
|
| + // different from the route to the STUN server (the default route).
|
| void AddInterfaceAsDefaultRoute(const SocketAddress& addr) {
|
| AddInterface(addr);
|
| // When a binding comes from the any address, the |addr| will be used as the
|
| @@ -254,6 +260,8 @@ class PortAllocatorTest : public testing::Test, public sigslot::has_slots<> {
|
| const rtc::IPAddress& stun_candidate_addr,
|
| const rtc::IPAddress& relay_candidate_udp_transport_addr,
|
| const rtc::IPAddress& relay_candidate_tcp_transport_addr) {
|
| + network_manager_.set_default_local_addresses(kPrivateAddr.ipaddr(),
|
| + rtc::IPAddress());
|
| if (!session_) {
|
| EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
|
| }
|
| @@ -268,16 +276,20 @@ class PortAllocatorTest : public testing::Test, public sigslot::has_slots<> {
|
| if (!host_candidate_addr.IsNil()) {
|
| EXPECT_PRED5(CheckCandidate, candidates_[total_candidates],
|
| cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp",
|
| - rtc::SocketAddress(host_candidate_addr, 0));
|
| + rtc::SocketAddress(kPrivateAddr.ipaddr(), 0));
|
| ++total_candidates;
|
| }
|
| if (!stun_candidate_addr.IsNil()) {
|
| EXPECT_PRED5(CheckCandidate, candidates_[total_candidates],
|
| cricket::ICE_CANDIDATE_COMPONENT_RTP, "stun", "udp",
|
| rtc::SocketAddress(stun_candidate_addr, 0));
|
| - EXPECT_EQ(rtc::EmptySocketAddressWithFamily(
|
| - candidates_[total_candidates].address().family()),
|
| - candidates_[total_candidates].related_address());
|
| + rtc::IPAddress related_address = host_candidate_addr;
|
| + if (host_candidate_addr.IsNil()) {
|
| + related_address =
|
| + rtc::GetAnyIP(candidates_[total_candidates].address().family());
|
| + }
|
| + EXPECT_EQ(related_address,
|
| + candidates_[total_candidates].related_address().ipaddr());
|
| ++total_candidates;
|
| }
|
| if (!relay_candidate_udp_transport_addr.IsNil()) {
|
| @@ -589,7 +601,6 @@ TEST_F(PortAllocatorTest, TestGetAllPortsNoAdapters) {
|
| // candidate_filter() is set to CF_RELAY and no relay is specified.
|
| TEST_F(PortAllocatorTest,
|
| TestDisableAdapterEnumerationWithoutNatRelayTransportOnly) {
|
| - AddInterfaceAsDefaultRoute(kClientAddr);
|
| ResetWithStunServerNoNat(kStunAddr);
|
| allocator().set_candidate_filter(cricket::CF_RELAY);
|
| // Expect to see no ports and no candidates.
|
| @@ -597,86 +608,88 @@ TEST_F(PortAllocatorTest,
|
| rtc::IPAddress(), rtc::IPAddress());
|
| }
|
|
|
| -// Test that we should only get STUN and TURN candidates when adapter
|
| -// enumeration is disabled.
|
| -TEST_F(PortAllocatorTest, TestDisableAdapterEnumerationBehindNat) {
|
| - AddInterface(kClientAddr);
|
| - // GTURN is not configured here.
|
| - ResetWithStunServerAndNat(kStunAddr);
|
| - AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress());
|
| - // Expect to see 3 ports: STUN, TURN/UDP and TCP ports, and both STUN and
|
| - // TURN/UDP candidates.
|
| - CheckDisableAdapterEnumeration(3U, rtc::IPAddress(), kNatUdpAddr.ipaddr(),
|
| - kTurnUdpExtAddr.ipaddr(), rtc::IPAddress());
|
| -}
|
| -
|
| -// Test that even with multiple interfaces, the result should still be one STUN
|
| -// and one TURN candidate since we bind to any address (i.e. all 0s).
|
| +// Test that even with multiple interfaces, the result should still be a single
|
| +// default private, one STUN and one TURN candidate since we bind to any address
|
| +// (i.e. all 0s).
|
| TEST_F(PortAllocatorTest,
|
| TestDisableAdapterEnumerationBehindNatMultipleInterfaces) {
|
| AddInterface(kPrivateAddr);
|
| AddInterface(kPrivateAddr2);
|
| ResetWithStunServerAndNat(kStunAddr);
|
| AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress());
|
| - // Expect to see 3 ports: STUN, TURN/UDP and TCP ports, and both STUN and
|
| - // TURN/UDP candidates.
|
| - CheckDisableAdapterEnumeration(3U, rtc::IPAddress(), kNatUdpAddr.ipaddr(),
|
| - kTurnUdpExtAddr.ipaddr(), rtc::IPAddress());
|
| + // Expect to see 3 ports: STUN, TURN/UDP and TCP ports, and a default private,
|
| + // STUN and TURN/UDP candidates.
|
| + CheckDisableAdapterEnumeration(3U, kPrivateAddr.ipaddr(),
|
| + kNatUdpAddr.ipaddr(), kTurnUdpExtAddr.ipaddr(),
|
| + rtc::IPAddress());
|
| }
|
|
|
| -// Test that we should get STUN, TURN/UDP and TURN/TCP candidates when a
|
| -// TURN/TCP server is specified.
|
| +// Test that we should get a default private, STUN, TURN/UDP and TURN/TCP
|
| +// candidates when both TURN/UDP and TURN/TCP servers are specified.
|
| TEST_F(PortAllocatorTest, TestDisableAdapterEnumerationBehindNatWithTcp) {
|
| turn_server_.AddInternalSocket(kTurnTcpIntAddr, cricket::PROTO_TCP);
|
| - AddInterface(kClientAddr);
|
| - // GTURN is not configured here.
|
| + AddInterface(kPrivateAddr);
|
| ResetWithStunServerAndNat(kStunAddr);
|
| AddTurnServers(kTurnUdpIntAddr, kTurnTcpIntAddr);
|
| - // Expect to see 4 ports - STUN, TURN/UDP, TURN/TCP and TCP port. STUN,
|
| - // TURN/UDP, and TURN/TCP candidates.
|
| - CheckDisableAdapterEnumeration(4U, rtc::IPAddress(), kNatUdpAddr.ipaddr(),
|
| - kTurnUdpExtAddr.ipaddr(),
|
| + // Expect to see 4 ports - STUN, TURN/UDP, TURN/TCP and TCP port. A default
|
| + // private, STUN, TURN/UDP, and TURN/TCP candidates.
|
| + CheckDisableAdapterEnumeration(4U, kPrivateAddr.ipaddr(),
|
| + kNatUdpAddr.ipaddr(), kTurnUdpExtAddr.ipaddr(),
|
| kTurnUdpExtAddr.ipaddr());
|
| }
|
|
|
| -// Test that we should only get STUN and TURN candidates when adapter
|
| -// enumeration is disabled. Since the endpoint is not behind NAT, the srflx
|
| -// address should be the public client interface.
|
| -TEST_F(PortAllocatorTest, TestDisableAdapterEnumerationWithoutNat) {
|
| - AddInterfaceAsDefaultRoute(kClientAddr);
|
| - ResetWithStunServerNoNat(kStunAddr);
|
| - AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress());
|
| - // Expect to see 3 ports: STUN, TURN/UDP and TCP ports, but only both STUN and
|
| - // TURN candidates. The STUN candidate should have kClientAddr as srflx
|
| - // address, and TURN candidate with kClientAddr as the related address.
|
| - CheckDisableAdapterEnumeration(3U, rtc::IPAddress(), kClientAddr.ipaddr(),
|
| - kTurnUdpExtAddr.ipaddr(), rtc::IPAddress());
|
| -}
|
| -
|
| // Test that when adapter enumeration is disabled, for endpoints without
|
| -// STUN/TURN specified, no candidate is generated.
|
| +// STUN/TURN specified, a default private candidate is still generated.
|
| TEST_F(PortAllocatorTest, TestDisableAdapterEnumerationWithoutNatOrServers) {
|
| - AddInterfaceAsDefaultRoute(kClientAddr);
|
| ResetWithNoServersOrNat();
|
| - // Expect to see 2 ports: STUN and TCP ports, but no candidate.
|
| - CheckDisableAdapterEnumeration(2U, rtc::IPAddress(), rtc::IPAddress(),
|
| + // Expect to see 2 ports: STUN and TCP ports, one default private candidate.
|
| + CheckDisableAdapterEnumeration(2U, kPrivateAddr.ipaddr(), rtc::IPAddress(),
|
| rtc::IPAddress(), rtc::IPAddress());
|
| }
|
|
|
| // Test that when adapter enumeration is disabled, with
|
| -// PORTALLOCATOR_ENABLE_LOCALHOST_CANDIDATE specified, for endpoints not behind
|
| -// a NAT, there are a localhost candidate in addition to a STUN candidate.
|
| +// PORTALLOCATOR_DISABLE_LOCALHOST_CANDIDATE specified, for endpoints not behind
|
| +// a NAT, there is no local candidate.
|
| TEST_F(PortAllocatorTest,
|
| - TestDisableAdapterEnumerationWithoutNatLocalhostCandidateRequested) {
|
| - AddInterfaceAsDefaultRoute(kClientAddr);
|
| + TestDisableAdapterEnumerationWithoutNatLocalhostCandidateDisabled) {
|
| ResetWithStunServerNoNat(kStunAddr);
|
| EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
|
| - session_->set_flags(cricket::PORTALLOCATOR_ENABLE_LOCALHOST_CANDIDATE);
|
| + session_->set_flags(cricket::PORTALLOCATOR_DISABLE_DEFAULT_LOCAL_CANDIDATE);
|
| // Expect to see 2 ports: STUN and TCP ports, localhost candidate and STUN
|
| // candidate.
|
| - CheckDisableAdapterEnumeration(2U, rtc::GetLoopbackIP(AF_INET),
|
| - kClientAddr.ipaddr(), rtc::IPAddress(),
|
| - rtc::IPAddress());
|
| + CheckDisableAdapterEnumeration(2U, rtc::IPAddress(), rtc::IPAddress(),
|
| + rtc::IPAddress(), rtc::IPAddress());
|
| +}
|
| +
|
| +// Test that when adapter enumeration is disabled, with
|
| +// PORTALLOCATOR_DISABLE_LOCALHOST_CANDIDATE specified, for endpoints not behind
|
| +// a NAT, there is no local candidate. However, this specified default route
|
| +// (kClientAddr) which was discovered when sending STUN requests, will become
|
| +// the srflx addresses.
|
| +TEST_F(
|
| + PortAllocatorTest,
|
| + TestDisableAdapterEnumerationWithoutNatLocalhostCandidateDisabledWithDifferentDefaultRoute) {
|
| + ResetWithStunServerNoNat(kStunAddr);
|
| + AddInterfaceAsDefaultRoute(kClientAddr);
|
| + EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
|
| + session_->set_flags(cricket::PORTALLOCATOR_DISABLE_DEFAULT_LOCAL_CANDIDATE);
|
| + // Expect to see 2 ports: STUN and TCP ports, localhost candidate and STUN
|
| + // candidate.
|
| + CheckDisableAdapterEnumeration(2U, rtc::IPAddress(), kClientAddr.ipaddr(),
|
| + rtc::IPAddress(), rtc::IPAddress());
|
| +}
|
| +
|
| +// Test that when adapter enumeration is disabled, with
|
| +// PORTALLOCATOR_DISABLE_LOCALHOST_CANDIDATE specified, for endpoints behind a
|
| +// NAT, there is only one STUN candidate.
|
| +TEST_F(PortAllocatorTest,
|
| + TestDisableAdapterEnumerationWithNatLocalhostCandidateDisabled) {
|
| + ResetWithStunServerAndNat(kStunAddr);
|
| + EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
|
| + session_->set_flags(cricket::PORTALLOCATOR_DISABLE_DEFAULT_LOCAL_CANDIDATE);
|
| + // Expect to see 2 ports: STUN and TCP ports, and single STUN candidate.
|
| + CheckDisableAdapterEnumeration(2U, rtc::IPAddress(), kNatUdpAddr.ipaddr(),
|
| + rtc::IPAddress(), rtc::IPAddress());
|
| }
|
|
|
| // Test that we disable relay over UDP, and only TCP is used when connecting to
|
| @@ -1244,7 +1257,8 @@ TEST_F(PortAllocatorTest, TestSharedSocketNoUdpAllowed) {
|
| // adapters, the PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION is specified
|
| // automatically.
|
| TEST_F(PortAllocatorTest, TestNetworkPermissionBlocked) {
|
| - AddInterface(kClientAddr);
|
| + network_manager_.set_default_local_addresses(kPrivateAddr.ipaddr(),
|
| + rtc::IPAddress());
|
| network_manager_.set_enumeration_permission(
|
| rtc::NetworkManager::ENUMERATION_BLOCKED);
|
| allocator().set_flags(allocator().flags() |
|
| @@ -1258,7 +1272,10 @@ TEST_F(PortAllocatorTest, TestNetworkPermissionBlocked) {
|
| cricket::PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION);
|
| session_->StartGettingPorts();
|
| EXPECT_EQ_WAIT(1U, ports_.size(), kDefaultAllocationTimeout);
|
| - EXPECT_EQ(0U, candidates_.size());
|
| + EXPECT_EQ(1U, candidates_.size());
|
| + EXPECT_PRED5(CheckCandidate, candidates_[0],
|
| + cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp",
|
| + kPrivateAddr);
|
| EXPECT_TRUE((session_->flags() &
|
| cricket::PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION) != 0);
|
| }
|
|
|