Index: webrtc/p2p/client/portallocator_unittest.cc |
diff --git a/webrtc/p2p/client/portallocator_unittest.cc b/webrtc/p2p/client/portallocator_unittest.cc |
index 9ea22dd189487192cb56152c5117f102939454b0..28938075756328e5d9a2cdf319195101f4eb6f08 100644 |
--- a/webrtc/p2p/client/portallocator_unittest.cc |
+++ b/webrtc/p2p/client/portallocator_unittest.cc |
@@ -111,12 +111,18 @@ class PortAllocatorTest : public testing::Test, public sigslot::has_slots<> { |
void AddInterface(const SocketAddress& addr) { |
network_manager_.AddInterface(addr); |
} |
+ void AddInterface(const SocketAddress& addr, const std::string& if_name) { |
+ network_manager_.AddInterface(addr, if_name); |
+ } |
void AddInterfaceAsDefaultRoute(const SocketAddress& addr) { |
AddInterface(addr); |
// When a binding comes from the any address, the |addr| will be used as the |
// srflx address. |
vss_->SetDefaultRoute(addr.ipaddr()); |
} |
+ void RemoveInterface(const SocketAddress& addr) { |
+ network_manager_.RemoveInterface(addr); |
+ } |
bool SetPortRange(int min_port, int max_port) { |
return allocator_->SetPortRange(min_port, max_port); |
} |
@@ -432,6 +438,61 @@ TEST_F(PortAllocatorTest, TestGetAllPortsWithMinimumStepDelay) { |
EXPECT_TRUE(candidate_allocation_done_); |
} |
+// Test that when the same network interface is brought down and up, the |
+// port allocator session will restart a new allocation sequence if |
+// it is not stopped. |
+TEST_F(PortAllocatorTest, TestSameNetworkDownAndUpWhenSessionNotStopped) { |
+ std::string if_name("test_net0"); |
+ AddInterface(kClientAddr, if_name); |
+ EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |
+ session_->StartGettingPorts(); |
+ ASSERT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout); |
+ EXPECT_EQ(4U, ports_.size()); |
+ EXPECT_TRUE(candidate_allocation_done_); |
+ candidate_allocation_done_ = false; |
+ candidates_.clear(); |
+ ports_.clear(); |
+ |
+ RemoveInterface(kClientAddr); |
+ ASSERT_EQ_WAIT(0U, candidates_.size(), kDefaultAllocationTimeout); |
+ EXPECT_EQ(0U, ports_.size()); |
+ EXPECT_FALSE(candidate_allocation_done_); |
+ |
+ // When the same interfaces are added again, new candidates/ports should be |
+ // generated. |
+ AddInterface(kClientAddr, if_name); |
+ ASSERT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout); |
+ EXPECT_EQ(4U, ports_.size()); |
+ EXPECT_TRUE(candidate_allocation_done_); |
+} |
+ |
+// Test that when the same network interface is brought down and up, the |
+// port allocator session will not restart a new allocation sequence if |
+// it is stopped. |
+TEST_F(PortAllocatorTest, TestSameNetworkDownAndUpWhenSessionStopped) { |
+ std::string if_name("test_net0"); |
+ AddInterface(kClientAddr, if_name); |
+ EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |
+ session_->StartGettingPorts(); |
+ ASSERT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout); |
+ EXPECT_EQ(4U, ports_.size()); |
+ EXPECT_TRUE(candidate_allocation_done_); |
+ session_->StopGettingPorts(); |
+ candidates_.clear(); |
+ ports_.clear(); |
+ |
+ RemoveInterface(kClientAddr); |
+ ASSERT_EQ_WAIT(0U, candidates_.size(), kDefaultAllocationTimeout); |
+ EXPECT_EQ(0U, ports_.size()); |
+ |
+ // When the same interfaces are added again, new candidates/ports should not |
+ // be generated because the session has stopped. |
+ AddInterface(kClientAddr, if_name); |
+ ASSERT_EQ_WAIT(0U, candidates_.size(), kDefaultAllocationTimeout); |
+ EXPECT_EQ(0U, ports_.size()); |
+ EXPECT_TRUE(candidate_allocation_done_); |
+} |
+ |
// Verify candidates with default step delay of 1sec. |
TEST_F(PortAllocatorTest, TestGetAllPortsWithOneSecondStepDelay) { |
AddInterface(kClientAddr); |