Index: webrtc/p2p/client/portallocator_unittest.cc |
diff --git a/webrtc/p2p/client/portallocator_unittest.cc b/webrtc/p2p/client/portallocator_unittest.cc |
index baa4807ab2cb62bcf0c06da7c36cef053594b9fe..5fce3b5762d24db571c8569dac4d583126e1f1a0 100644 |
--- a/webrtc/p2p/client/portallocator_unittest.cc |
+++ b/webrtc/p2p/client/portallocator_unittest.cc |
@@ -32,6 +32,7 @@ |
#include "webrtc/base/virtualsocketserver.h" |
using cricket::ServerAddresses; |
+using rtc::IPAddress; |
using rtc::SocketAddress; |
using rtc::Thread; |
@@ -114,6 +115,11 @@ 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); |
} |
+ void AddInterface(const SocketAddress& addr, |
+ const std::string& if_name, |
+ rtc::AdapterType type) { |
+ network_manager_.AddInterface(addr, if_name, type); |
+ } |
// 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 |
@@ -400,6 +406,50 @@ TEST_F(PortAllocatorTest, TestBasic) { |
EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |
} |
+// Tests that our network filtering works properly. |
+TEST_F(PortAllocatorTest, TestIgnoreOnlyLoopbackNetworkByDefault) { |
+ AddInterface(SocketAddress(IPAddress(0x12345600U), 0), "test_eth0", |
+ rtc::ADAPTER_TYPE_ETHERNET); |
+ AddInterface(SocketAddress(IPAddress(0x12345601U), 0), "test_wlan0", |
+ rtc::ADAPTER_TYPE_WIFI); |
+ AddInterface(SocketAddress(IPAddress(0x12345602U), 0), "test_cell0", |
+ rtc::ADAPTER_TYPE_CELLULAR); |
+ AddInterface(SocketAddress(IPAddress(0x12345603U), 0), "test_vpn0", |
+ rtc::ADAPTER_TYPE_VPN); |
+ AddInterface(SocketAddress(IPAddress(0x12345604U), 0), "test_lo", |
+ rtc::ADAPTER_TYPE_LOOPBACK); |
+ EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |
+ session_->set_flags(cricket::PORTALLOCATOR_DISABLE_STUN | |
+ cricket::PORTALLOCATOR_DISABLE_RELAY | |
+ cricket::PORTALLOCATOR_DISABLE_TCP); |
+ session_->StartGettingPorts(); |
+ EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |
+ EXPECT_EQ(4U, candidates_.size()); |
+ for (cricket::Candidate candidate : candidates_) { |
+ EXPECT_LT(candidate.address().ip(), 0x12345604U); |
+ } |
+} |
+ |
+TEST_F(PortAllocatorTest, TestIgnoreNetworksAccordingToIgnoreMask) { |
+ AddInterface(SocketAddress(IPAddress(0x12345600U), 0), "test_eth0", |
+ rtc::ADAPTER_TYPE_ETHERNET); |
+ AddInterface(SocketAddress(IPAddress(0x12345601U), 0), "test_wlan0", |
+ rtc::ADAPTER_TYPE_WIFI); |
+ AddInterface(SocketAddress(IPAddress(0x12345602U), 0), "test_cell0", |
+ rtc::ADAPTER_TYPE_CELLULAR); |
+ allocator_->SetNetworkIgnoreMask(rtc::ADAPTER_TYPE_ETHERNET | |
+ rtc::ADAPTER_TYPE_LOOPBACK | |
+ rtc::ADAPTER_TYPE_WIFI); |
+ EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |
+ session_->set_flags(cricket::PORTALLOCATOR_DISABLE_STUN | |
+ cricket::PORTALLOCATOR_DISABLE_RELAY | |
+ cricket::PORTALLOCATOR_DISABLE_TCP); |
+ session_->StartGettingPorts(); |
+ EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |
+ EXPECT_EQ(1U, candidates_.size()); |
+ EXPECT_EQ(0x12345602U, candidates_[0].address().ip()); |
+} |
+ |
// Tests that we allocator session not trying to allocate ports for every 250ms. |
TEST_F(PortAllocatorTest, TestNoNetworkInterface) { |
EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |
@@ -415,7 +465,8 @@ TEST_F(PortAllocatorTest, TestNoNetworkInterface) { |
// Test that we could use loopback interface as host candidate. |
TEST_F(PortAllocatorTest, TestLoopbackNetworkInterface) { |
- AddInterface(kLoopbackAddr); |
+ AddInterface(kLoopbackAddr, "test_loopback", rtc::ADAPTER_TYPE_LOOPBACK); |
+ allocator_->SetNetworkIgnoreMask(0); |
EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |
session_->set_flags(cricket::PORTALLOCATOR_DISABLE_STUN | |
cricket::PORTALLOCATOR_DISABLE_RELAY | |