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

Unified Diff: webrtc/p2p/client/basicportallocator_unittest.cc

Issue 2599673003: If network enumeration fails, try binding to the "ANY" address. (Closed)
Patch Set: Getting rid of redundant test. Created 4 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/p2p/client/basicportallocator.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/p2p/client/basicportallocator_unittest.cc
diff --git a/webrtc/p2p/client/basicportallocator_unittest.cc b/webrtc/p2p/client/basicportallocator_unittest.cc
index 0eeac06debc017aed6eaaf5ecc8e2ff64d778789..4ace7c8a3c20496f7038b7300888bca6db7d6c38 100644
--- a/webrtc/p2p/client/basicportallocator_unittest.cc
+++ b/webrtc/p2p/client/basicportallocator_unittest.cc
@@ -37,6 +37,7 @@ using rtc::IPAddress;
using rtc::SocketAddress;
using rtc::Thread;
+static const SocketAddress kAnyAddr("0.0.0.0", 0);
static const SocketAddress kClientAddr("11.11.11.11", 0);
static const SocketAddress kClientAddr2("22.22.22.22", 0);
static const SocketAddress kLoopbackAddr("127.0.0.1", 0);
@@ -114,6 +115,8 @@ class BasicPortAllocatorTest : public testing::Test,
vss_(new rtc::VirtualSocketServer(pss_.get())),
fss_(new rtc::FirewallSocketServer(vss_.get())),
ss_scope_(fss_.get()),
+ // Note that the NAT is not used by default. ResetWithStunServerAndNat
+ // must be called.
nat_factory_(vss_.get(), kNatUdpAddr, kNatTcpAddr),
nat_socket_factory_(new rtc::BasicPacketSocketFactory(&nat_factory_)),
stun_server_(TestStunServer::Create(Thread::Current(), kStunAddr)),
@@ -130,6 +133,9 @@ class BasicPortAllocatorTest : public testing::Test,
stun_servers.insert(kStunAddr);
// Passing the addresses of GTURN servers will enable GTURN in
// Basicportallocator.
+ // TODO(deadbeef): Stop using GTURN by default in this test... Either the
+ // configuration should be blank by default (preferred), or it should use
+ // TURN instead.
allocator_.reset(new BasicPortAllocator(&network_manager_, stun_servers,
kRelayUdpIntAddr, kRelayTcpIntAddr,
kRelaySslTcpIntAddr));
@@ -275,6 +281,17 @@ class BasicPortAllocatorTest : public testing::Test,
});
}
+ static int CountCandidates(const std::vector<Candidate>& candidates,
+ const std::string& type,
+ const std::string& proto,
+ const SocketAddress& addr) {
+ return std::count_if(candidates.begin(), candidates.end(),
+ [type, proto, addr](const Candidate& c) {
+ return c.type() == type && c.protocol() == proto &&
+ AddressMatch(c.address(), addr);
+ });
+ }
+
// Find a candidate and return it.
static bool FindCandidate(const std::vector<Candidate>& candidates,
const std::string& type,
@@ -758,19 +775,6 @@ TEST_F(BasicPortAllocatorTest, TestGatherLowCostNetworkOnly) {
EXPECT_TRUE(addr_wifi.EqualIPs(candidates_[0].address()));
}
-// Tests that we allocator session not trying to allocate ports for every 250ms.
-TEST_F(BasicPortAllocatorTest, TestNoNetworkInterface) {
- EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
- session_->StartGettingPorts();
- // Waiting for one second to make sure BasicPortAllocatorSession has not
- // called OnAllocate multiple times. In old behavior it's called every 250ms.
- // When there are no network interfaces, each execution of OnAllocate will
- // result in SignalCandidatesAllocationDone signal.
- rtc::Thread::Current()->ProcessMessages(1000);
- EXPECT_TRUE(candidate_allocation_done_);
- EXPECT_EQ(0U, candidates_.size());
-}
-
// Test that we could use loopback interface as host candidate.
TEST_F(BasicPortAllocatorTest, TestLoopbackNetworkInterface) {
AddInterface(kLoopbackAddr, "test_loopback", rtc::ADAPTER_TYPE_LOOPBACK);
@@ -936,14 +940,39 @@ TEST_F(BasicPortAllocatorTest, TestGetAllPortsPortRange) {
EXPECT_TRUE(candidate_allocation_done_);
}
-// Test that we don't crash or malfunction if we have no network adapters.
+// Test that if we have no network adapters, we bind to the ANY address and
+// still get non-host candidates.
TEST_F(BasicPortAllocatorTest, TestGetAllPortsNoAdapters) {
+ // Default config uses GTURN and no NAT, so replace that with the
+ // desired setup (NAT, STUN server, TURN server, UDP/TCP).
+ ResetWithStunServerAndNat(kStunAddr);
+ turn_server_.AddInternalSocket(kTurnTcpIntAddr, PROTO_TCP);
+ AddTurnServers(kTurnUdpIntAddr, kTurnTcpIntAddr);
+ AddTurnServers(kTurnUdpIntIPv6Addr, kTurnTcpIntIPv6Addr);
+ // Disable IPv6, because our test infrastructure doesn't support having IPv4
+ // behind a NAT but IPv6 not, or having an IPv6 NAT.
+ // TODO(deadbeef): Fix this.
+ network_manager_.set_ipv6_enabled(false);
EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- rtc::Thread::Current()->ProcessMessages(100);
- // Without network adapter, we should not get any candidate.
- EXPECT_EQ(0U, candidates_.size());
- EXPECT_TRUE(candidate_allocation_done_);
+ EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
+ EXPECT_EQ(4U, ports_.size());
+ EXPECT_EQ(1, CountPorts(ports_, "stun", PROTO_UDP, kAnyAddr));
+ EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_TCP, kAnyAddr));
+ // Two TURN ports, using UDP/TCP for the first hop to the TURN server.
+ EXPECT_EQ(1, CountPorts(ports_, "relay", PROTO_UDP, kAnyAddr));
+ EXPECT_EQ(1, CountPorts(ports_, "relay", PROTO_TCP, kAnyAddr));
+ // The "any" address port should be in the signaled ready ports, but the host
+ // candidate for it is useless and shouldn't be signaled. So we only have
+ // STUN/TURN candidates.
+ EXPECT_EQ(3U, candidates_.size());
+ EXPECT_PRED4(HasCandidate, candidates_, "stun", "udp",
+ rtc::SocketAddress(kNatUdpAddr.ipaddr(), 0));
+ // Again, two TURN candidates, using UDP/TCP for the first hop to the TURN
+ // server.
+ EXPECT_EQ(2,
+ CountCandidates(candidates_, "relay", "udp",
+ rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)));
}
// Test that when enumeration is disabled, we should not have any ports when
« no previous file with comments | « webrtc/p2p/client/basicportallocator.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698