| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 /* |  | 
| 2  *  Copyright 2009 The WebRTC Project Authors. All rights reserved. |  | 
| 3  * |  | 
| 4  *  Use of this source code is governed by a BSD-style license |  | 
| 5  *  that can be found in the LICENSE file in the root of the source |  | 
| 6  *  tree. An additional intellectual property rights grant can be found |  | 
| 7  *  in the file PATENTS.  All contributing project authors may |  | 
| 8  *  be found in the AUTHORS file in the root of the source tree. |  | 
| 9  */ |  | 
| 10 |  | 
| 11 #include <memory> |  | 
| 12 |  | 
| 13 #include "webrtc/p2p/base/basicpacketsocketfactory.h" |  | 
| 14 #include "webrtc/p2p/base/p2pconstants.h" |  | 
| 15 #include "webrtc/p2p/base/p2ptransportchannel.h" |  | 
| 16 #include "webrtc/p2p/base/testrelayserver.h" |  | 
| 17 #include "webrtc/p2p/base/teststunserver.h" |  | 
| 18 #include "webrtc/p2p/base/testturnserver.h" |  | 
| 19 #include "webrtc/p2p/client/basicportallocator.h" |  | 
| 20 #include "webrtc/p2p/client/httpportallocator.h" |  | 
| 21 #include "webrtc/base/fakenetwork.h" |  | 
| 22 #include "webrtc/base/firewallsocketserver.h" |  | 
| 23 #include "webrtc/base/gunit.h" |  | 
| 24 #include "webrtc/base/helpers.h" |  | 
| 25 #include "webrtc/base/ipaddress.h" |  | 
| 26 #include "webrtc/base/logging.h" |  | 
| 27 #include "webrtc/base/natserver.h" |  | 
| 28 #include "webrtc/base/natsocketfactory.h" |  | 
| 29 #include "webrtc/base/network.h" |  | 
| 30 #include "webrtc/base/physicalsocketserver.h" |  | 
| 31 #include "webrtc/base/socketaddress.h" |  | 
| 32 #include "webrtc/base/ssladapter.h" |  | 
| 33 #include "webrtc/base/thread.h" |  | 
| 34 #include "webrtc/base/virtualsocketserver.h" |  | 
| 35 |  | 
| 36 using cricket::ServerAddresses; |  | 
| 37 using rtc::IPAddress; |  | 
| 38 using rtc::SocketAddress; |  | 
| 39 using rtc::Thread; |  | 
| 40 |  | 
| 41 static const SocketAddress kClientAddr("11.11.11.11", 0); |  | 
| 42 static const SocketAddress kLoopbackAddr("127.0.0.1", 0); |  | 
| 43 static const SocketAddress kPrivateAddr("192.168.1.11", 0); |  | 
| 44 static const SocketAddress kPrivateAddr2("192.168.1.12", 0); |  | 
| 45 static const SocketAddress kClientIPv6Addr( |  | 
| 46     "2401:fa00:4:1000:be30:5bff:fee5:c3", 0); |  | 
| 47 static const SocketAddress kClientAddr2("22.22.22.22", 0); |  | 
| 48 static const SocketAddress kNatUdpAddr("77.77.77.77", rtc::NAT_SERVER_UDP_PORT); |  | 
| 49 static const SocketAddress kNatTcpAddr("77.77.77.77", rtc::NAT_SERVER_TCP_PORT); |  | 
| 50 static const SocketAddress kRemoteClientAddr("22.22.22.22", 0); |  | 
| 51 static const SocketAddress kStunAddr("99.99.99.1", cricket::STUN_SERVER_PORT); |  | 
| 52 static const SocketAddress kRelayUdpIntAddr("99.99.99.2", 5000); |  | 
| 53 static const SocketAddress kRelayUdpExtAddr("99.99.99.3", 5001); |  | 
| 54 static const SocketAddress kRelayTcpIntAddr("99.99.99.2", 5002); |  | 
| 55 static const SocketAddress kRelayTcpExtAddr("99.99.99.3", 5003); |  | 
| 56 static const SocketAddress kRelaySslTcpIntAddr("99.99.99.2", 5004); |  | 
| 57 static const SocketAddress kRelaySslTcpExtAddr("99.99.99.3", 5005); |  | 
| 58 static const SocketAddress kTurnUdpIntAddr("99.99.99.4", 3478); |  | 
| 59 static const SocketAddress kTurnTcpIntAddr("99.99.99.5", 3478); |  | 
| 60 static const SocketAddress kTurnUdpExtAddr("99.99.99.6", 0); |  | 
| 61 |  | 
| 62 // Minimum and maximum port for port range tests. |  | 
| 63 static const int kMinPort = 10000; |  | 
| 64 static const int kMaxPort = 10099; |  | 
| 65 |  | 
| 66 // Based on ICE_UFRAG_LENGTH |  | 
| 67 static const char kIceUfrag0[] = "TESTICEUFRAG0000"; |  | 
| 68 // Based on ICE_PWD_LENGTH |  | 
| 69 static const char kIcePwd0[] = "TESTICEPWD00000000000000"; |  | 
| 70 |  | 
| 71 static const char kContentName[] = "test content"; |  | 
| 72 |  | 
| 73 static const int kDefaultAllocationTimeout = 1000; |  | 
| 74 static const char kTurnUsername[] = "test"; |  | 
| 75 static const char kTurnPassword[] = "test"; |  | 
| 76 |  | 
| 77 namespace cricket { |  | 
| 78 |  | 
| 79 // Helper for dumping candidates |  | 
| 80 std::ostream& operator<<(std::ostream& os, const cricket::Candidate& c) { |  | 
| 81   os << c.ToString(); |  | 
| 82   return os; |  | 
| 83 } |  | 
| 84 |  | 
| 85 }  // namespace cricket |  | 
| 86 |  | 
| 87 class PortAllocatorTest : public testing::Test, public sigslot::has_slots<> { |  | 
| 88  public: |  | 
| 89   PortAllocatorTest() |  | 
| 90       : pss_(new rtc::PhysicalSocketServer), |  | 
| 91         vss_(new rtc::VirtualSocketServer(pss_.get())), |  | 
| 92         fss_(new rtc::FirewallSocketServer(vss_.get())), |  | 
| 93         ss_scope_(fss_.get()), |  | 
| 94         nat_factory_(vss_.get(), kNatUdpAddr, kNatTcpAddr), |  | 
| 95         nat_socket_factory_(new rtc::BasicPacketSocketFactory(&nat_factory_)), |  | 
| 96         stun_server_(cricket::TestStunServer::Create(Thread::Current(), |  | 
| 97                                                      kStunAddr)), |  | 
| 98         relay_server_(Thread::Current(), kRelayUdpIntAddr, kRelayUdpExtAddr, |  | 
| 99                       kRelayTcpIntAddr, kRelayTcpExtAddr, |  | 
| 100                       kRelaySslTcpIntAddr, kRelaySslTcpExtAddr), |  | 
| 101         turn_server_(Thread::Current(), kTurnUdpIntAddr, kTurnUdpExtAddr), |  | 
| 102         candidate_allocation_done_(false) { |  | 
| 103     cricket::ServerAddresses stun_servers; |  | 
| 104     stun_servers.insert(kStunAddr); |  | 
| 105     // Passing the addresses of GTURN servers will enable GTURN in |  | 
| 106     // Basicportallocator. |  | 
| 107     allocator_.reset(new cricket::BasicPortAllocator( |  | 
| 108         &network_manager_, |  | 
| 109         stun_servers, |  | 
| 110         kRelayUdpIntAddr, kRelayTcpIntAddr, kRelaySslTcpIntAddr)); |  | 
| 111     allocator_->set_step_delay(cricket::kMinimumStepDelay); |  | 
| 112   } |  | 
| 113 |  | 
| 114   void AddInterface(const SocketAddress& addr) { |  | 
| 115     network_manager_.AddInterface(addr); |  | 
| 116   } |  | 
| 117   void AddInterface(const SocketAddress& addr, const std::string& if_name) { |  | 
| 118     network_manager_.AddInterface(addr, if_name); |  | 
| 119   } |  | 
| 120   void AddInterface(const SocketAddress& addr, |  | 
| 121                     const std::string& if_name, |  | 
| 122                     rtc::AdapterType type) { |  | 
| 123     network_manager_.AddInterface(addr, if_name, type); |  | 
| 124   } |  | 
| 125   // The default route is the public address that STUN server will observe when |  | 
| 126   // the endpoint is sitting on the public internet and the local port is bound |  | 
| 127   // to the "any" address. This may be different from the default local address |  | 
| 128   // which the endpoint observes. This can occur if the route to the public |  | 
| 129   // endpoint like 8.8.8.8 (specified as the default local address) is |  | 
| 130   // different from the route to the STUN server (the default route). |  | 
| 131   void AddInterfaceAsDefaultRoute(const SocketAddress& addr) { |  | 
| 132     AddInterface(addr); |  | 
| 133     // When a binding comes from the any address, the |addr| will be used as the |  | 
| 134     // srflx address. |  | 
| 135     vss_->SetDefaultRoute(addr.ipaddr()); |  | 
| 136   } |  | 
| 137   void RemoveInterface(const SocketAddress& addr) { |  | 
| 138     network_manager_.RemoveInterface(addr); |  | 
| 139   } |  | 
| 140   bool SetPortRange(int min_port, int max_port) { |  | 
| 141     return allocator_->SetPortRange(min_port, max_port); |  | 
| 142   } |  | 
| 143   // Endpoint is on the public network. No STUN or TURN. |  | 
| 144   void ResetWithNoServersOrNat() { |  | 
| 145     allocator_.reset(new cricket::BasicPortAllocator(&network_manager_)); |  | 
| 146     allocator_->set_step_delay(cricket::kMinimumStepDelay); |  | 
| 147   } |  | 
| 148   // Endpoint is behind a NAT, with STUN specified. |  | 
| 149   void ResetWithStunServerAndNat(const rtc::SocketAddress& stun_server) { |  | 
| 150     ResetWithStunServer(stun_server, true); |  | 
| 151   } |  | 
| 152   // Endpoint is on the public network, with STUN specified. |  | 
| 153   void ResetWithStunServerNoNat(const rtc::SocketAddress& stun_server) { |  | 
| 154     ResetWithStunServer(stun_server, false); |  | 
| 155   } |  | 
| 156   // Endpoint is on the public network, with TURN specified. |  | 
| 157   void ResetWithTurnServersNoNat(const rtc::SocketAddress& udp_turn, |  | 
| 158                                  const rtc::SocketAddress& tcp_turn) { |  | 
| 159     ResetWithNoServersOrNat(); |  | 
| 160     AddTurnServers(udp_turn, tcp_turn); |  | 
| 161   } |  | 
| 162 |  | 
| 163   void AddTurnServers(const rtc::SocketAddress& udp_turn, |  | 
| 164                       const rtc::SocketAddress& tcp_turn) { |  | 
| 165     cricket::RelayServerConfig turn_server(cricket::RELAY_TURN); |  | 
| 166     cricket::RelayCredentials credentials(kTurnUsername, kTurnPassword); |  | 
| 167     turn_server.credentials = credentials; |  | 
| 168 |  | 
| 169     if (!udp_turn.IsNil()) { |  | 
| 170       turn_server.ports.push_back( |  | 
| 171           cricket::ProtocolAddress(kTurnUdpIntAddr, cricket::PROTO_UDP, false)); |  | 
| 172     } |  | 
| 173     if (!tcp_turn.IsNil()) { |  | 
| 174       turn_server.ports.push_back( |  | 
| 175           cricket::ProtocolAddress(kTurnTcpIntAddr, cricket::PROTO_TCP, false)); |  | 
| 176     } |  | 
| 177     allocator_->AddTurnServer(turn_server); |  | 
| 178   } |  | 
| 179 |  | 
| 180   bool CreateSession(int component) { |  | 
| 181     session_.reset(CreateSession("session", component)); |  | 
| 182     if (!session_) |  | 
| 183       return false; |  | 
| 184     return true; |  | 
| 185   } |  | 
| 186 |  | 
| 187   bool CreateSession(int component, const std::string& content_name) { |  | 
| 188     session_.reset(CreateSession("session", content_name, component)); |  | 
| 189     if (!session_) |  | 
| 190       return false; |  | 
| 191     return true; |  | 
| 192   } |  | 
| 193 |  | 
| 194   cricket::PortAllocatorSession* CreateSession( |  | 
| 195       const std::string& sid, int component) { |  | 
| 196     return CreateSession(sid, kContentName, component); |  | 
| 197   } |  | 
| 198 |  | 
| 199   cricket::PortAllocatorSession* CreateSession( |  | 
| 200       const std::string& sid, const std::string& content_name, int component) { |  | 
| 201     return CreateSession(sid, content_name, component, kIceUfrag0, kIcePwd0); |  | 
| 202   } |  | 
| 203 |  | 
| 204   cricket::PortAllocatorSession* CreateSession( |  | 
| 205       const std::string& sid, const std::string& content_name, int component, |  | 
| 206       const std::string& ice_ufrag, const std::string& ice_pwd) { |  | 
| 207     cricket::PortAllocatorSession* session = |  | 
| 208         allocator_->CreateSession( |  | 
| 209             sid, content_name, component, ice_ufrag, ice_pwd); |  | 
| 210     session->SignalPortReady.connect(this, |  | 
| 211             &PortAllocatorTest::OnPortReady); |  | 
| 212     session->SignalCandidatesReady.connect(this, |  | 
| 213         &PortAllocatorTest::OnCandidatesReady); |  | 
| 214     session->SignalCandidatesAllocationDone.connect(this, |  | 
| 215         &PortAllocatorTest::OnCandidatesAllocationDone); |  | 
| 216     return session; |  | 
| 217   } |  | 
| 218 |  | 
| 219   static bool CheckCandidate(const cricket::Candidate& c, |  | 
| 220                              int component, const std::string& type, |  | 
| 221                              const std::string& proto, |  | 
| 222                              const SocketAddress& addr) { |  | 
| 223     return (c.component() == component && c.type() == type && |  | 
| 224         c.protocol() == proto && c.address().ipaddr() == addr.ipaddr() && |  | 
| 225         ((addr.port() == 0 && (c.address().port() != 0)) || |  | 
| 226         (c.address().port() == addr.port()))); |  | 
| 227   } |  | 
| 228   static bool CheckPort(const rtc::SocketAddress& addr, |  | 
| 229                         int min_port, int max_port) { |  | 
| 230     return (addr.port() >= min_port && addr.port() <= max_port); |  | 
| 231   } |  | 
| 232 |  | 
| 233   void OnCandidatesAllocationDone(cricket::PortAllocatorSession* session) { |  | 
| 234     // We should only get this callback once, except in the mux test where |  | 
| 235     // we have multiple port allocation sessions. |  | 
| 236     if (session == session_.get()) { |  | 
| 237       ASSERT_FALSE(candidate_allocation_done_); |  | 
| 238       candidate_allocation_done_ = true; |  | 
| 239     } |  | 
| 240   } |  | 
| 241 |  | 
| 242   // Check if all ports allocated have send-buffer size |expected|. If |  | 
| 243   // |expected| == -1, check if GetOptions returns SOCKET_ERROR. |  | 
| 244   void CheckSendBufferSizesOfAllPorts(int expected) { |  | 
| 245     std::vector<cricket::PortInterface*>::iterator it; |  | 
| 246     for (it = ports_.begin(); it < ports_.end(); ++it) { |  | 
| 247       int send_buffer_size; |  | 
| 248       if (expected == -1) { |  | 
| 249         EXPECT_EQ(SOCKET_ERROR, |  | 
| 250                   (*it)->GetOption(rtc::Socket::OPT_SNDBUF, |  | 
| 251                                    &send_buffer_size)); |  | 
| 252       } else { |  | 
| 253         EXPECT_EQ(0, (*it)->GetOption(rtc::Socket::OPT_SNDBUF, |  | 
| 254                                       &send_buffer_size)); |  | 
| 255         ASSERT_EQ(expected, send_buffer_size); |  | 
| 256       } |  | 
| 257     } |  | 
| 258   } |  | 
| 259 |  | 
| 260   // This function starts the port/address gathering and check the existence of |  | 
| 261   // candidates as specified. When |expect_stun_candidate| is true, |  | 
| 262   // |stun_candidate_addr| carries the expected reflective address, which is |  | 
| 263   // also the related address for TURN candidate if it is expected. Otherwise, |  | 
| 264   // it should be ignore. |  | 
| 265   void CheckDisableAdapterEnumeration( |  | 
| 266       uint32_t total_ports, |  | 
| 267       const rtc::IPAddress& host_candidate_addr, |  | 
| 268       const rtc::IPAddress& stun_candidate_addr, |  | 
| 269       const rtc::IPAddress& relay_candidate_udp_transport_addr, |  | 
| 270       const rtc::IPAddress& relay_candidate_tcp_transport_addr) { |  | 
| 271     network_manager_.set_default_local_addresses(kPrivateAddr.ipaddr(), |  | 
| 272                                                  rtc::IPAddress()); |  | 
| 273     if (!session_) { |  | 
| 274       EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 275     } |  | 
| 276     session_->set_flags(session_->flags() | |  | 
| 277                         cricket::PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION | |  | 
| 278                         cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET); |  | 
| 279     allocator().set_allow_tcp_listen(false); |  | 
| 280     session_->StartGettingPorts(); |  | 
| 281     EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |  | 
| 282 |  | 
| 283     uint32_t total_candidates = 0; |  | 
| 284     if (!host_candidate_addr.IsNil()) { |  | 
| 285       EXPECT_PRED5(CheckCandidate, candidates_[total_candidates], |  | 
| 286                    cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp", |  | 
| 287                    rtc::SocketAddress(kPrivateAddr.ipaddr(), 0)); |  | 
| 288       ++total_candidates; |  | 
| 289     } |  | 
| 290     if (!stun_candidate_addr.IsNil()) { |  | 
| 291       EXPECT_PRED5(CheckCandidate, candidates_[total_candidates], |  | 
| 292                    cricket::ICE_CANDIDATE_COMPONENT_RTP, "stun", "udp", |  | 
| 293                    rtc::SocketAddress(stun_candidate_addr, 0)); |  | 
| 294       rtc::IPAddress related_address = host_candidate_addr; |  | 
| 295       if (host_candidate_addr.IsNil()) { |  | 
| 296         related_address = |  | 
| 297             rtc::GetAnyIP(candidates_[total_candidates].address().family()); |  | 
| 298       } |  | 
| 299       EXPECT_EQ(related_address, |  | 
| 300                 candidates_[total_candidates].related_address().ipaddr()); |  | 
| 301       ++total_candidates; |  | 
| 302     } |  | 
| 303     if (!relay_candidate_udp_transport_addr.IsNil()) { |  | 
| 304       EXPECT_PRED5(CheckCandidate, candidates_[total_candidates], |  | 
| 305                    cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", |  | 
| 306                    rtc::SocketAddress(relay_candidate_udp_transport_addr, 0)); |  | 
| 307       EXPECT_EQ(stun_candidate_addr, |  | 
| 308                 candidates_[total_candidates].related_address().ipaddr()); |  | 
| 309       ++total_candidates; |  | 
| 310     } |  | 
| 311     if (!relay_candidate_tcp_transport_addr.IsNil()) { |  | 
| 312       EXPECT_PRED5(CheckCandidate, candidates_[total_candidates], |  | 
| 313                    cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", |  | 
| 314                    rtc::SocketAddress(relay_candidate_tcp_transport_addr, 0)); |  | 
| 315       EXPECT_EQ(stun_candidate_addr, |  | 
| 316                 candidates_[total_candidates].related_address().ipaddr()); |  | 
| 317       ++total_candidates; |  | 
| 318     } |  | 
| 319 |  | 
| 320     EXPECT_EQ(total_candidates, candidates_.size()); |  | 
| 321     EXPECT_EQ(total_ports, ports_.size()); |  | 
| 322   } |  | 
| 323 |  | 
| 324  protected: |  | 
| 325   cricket::BasicPortAllocator& allocator() { |  | 
| 326     return *allocator_; |  | 
| 327   } |  | 
| 328 |  | 
| 329   void OnPortReady(cricket::PortAllocatorSession* ses, |  | 
| 330                    cricket::PortInterface* port) { |  | 
| 331     LOG(LS_INFO) << "OnPortReady: " << port->ToString(); |  | 
| 332     ports_.push_back(port); |  | 
| 333   } |  | 
| 334   void OnCandidatesReady(cricket::PortAllocatorSession* ses, |  | 
| 335                          const std::vector<cricket::Candidate>& candidates) { |  | 
| 336     for (size_t i = 0; i < candidates.size(); ++i) { |  | 
| 337       LOG(LS_INFO) << "OnCandidatesReady: " << candidates[i].ToString(); |  | 
| 338       candidates_.push_back(candidates[i]); |  | 
| 339     } |  | 
| 340   } |  | 
| 341 |  | 
| 342   bool HasRelayAddress(const cricket::ProtocolAddress& proto_addr) { |  | 
| 343     for (size_t i = 0; i < allocator_->turn_servers().size(); ++i) { |  | 
| 344       cricket::RelayServerConfig server_config = allocator_->turn_servers()[i]; |  | 
| 345       cricket::PortList::const_iterator relay_port; |  | 
| 346       for (relay_port = server_config.ports.begin(); |  | 
| 347           relay_port != server_config.ports.end(); ++relay_port) { |  | 
| 348         if (proto_addr.address == relay_port->address && |  | 
| 349             proto_addr.proto == relay_port->proto) |  | 
| 350           return true; |  | 
| 351       } |  | 
| 352     } |  | 
| 353     return false; |  | 
| 354   } |  | 
| 355 |  | 
| 356   void ResetWithStunServer(const rtc::SocketAddress& stun_server, |  | 
| 357                            bool with_nat) { |  | 
| 358     if (with_nat) { |  | 
| 359       nat_server_.reset(new rtc::NATServer( |  | 
| 360           rtc::NAT_OPEN_CONE, vss_.get(), kNatUdpAddr, kNatTcpAddr, vss_.get(), |  | 
| 361           rtc::SocketAddress(kNatUdpAddr.ipaddr(), 0))); |  | 
| 362     } else { |  | 
| 363       nat_socket_factory_.reset(new rtc::BasicPacketSocketFactory()); |  | 
| 364     } |  | 
| 365 |  | 
| 366     ServerAddresses stun_servers; |  | 
| 367     if (!stun_server.IsNil()) { |  | 
| 368       stun_servers.insert(stun_server); |  | 
| 369     } |  | 
| 370     allocator_.reset(new cricket::BasicPortAllocator( |  | 
| 371         &network_manager_, nat_socket_factory_.get(), stun_servers)); |  | 
| 372     allocator().set_step_delay(cricket::kMinimumStepDelay); |  | 
| 373   } |  | 
| 374 |  | 
| 375   std::unique_ptr<rtc::PhysicalSocketServer> pss_; |  | 
| 376   std::unique_ptr<rtc::VirtualSocketServer> vss_; |  | 
| 377   std::unique_ptr<rtc::FirewallSocketServer> fss_; |  | 
| 378   rtc::SocketServerScope ss_scope_; |  | 
| 379   std::unique_ptr<rtc::NATServer> nat_server_; |  | 
| 380   rtc::NATSocketFactory nat_factory_; |  | 
| 381   std::unique_ptr<rtc::BasicPacketSocketFactory> nat_socket_factory_; |  | 
| 382   std::unique_ptr<cricket::TestStunServer> stun_server_; |  | 
| 383   cricket::TestRelayServer relay_server_; |  | 
| 384   cricket::TestTurnServer turn_server_; |  | 
| 385   rtc::FakeNetworkManager network_manager_; |  | 
| 386   std::unique_ptr<cricket::BasicPortAllocator> allocator_; |  | 
| 387   std::unique_ptr<cricket::PortAllocatorSession> session_; |  | 
| 388   std::vector<cricket::PortInterface*> ports_; |  | 
| 389   std::vector<cricket::Candidate> candidates_; |  | 
| 390   bool candidate_allocation_done_; |  | 
| 391 }; |  | 
| 392 |  | 
| 393 // Tests that we can init the port allocator and create a session. |  | 
| 394 TEST_F(PortAllocatorTest, TestBasic) { |  | 
| 395   EXPECT_EQ(&network_manager_, allocator().network_manager()); |  | 
| 396   EXPECT_EQ(kStunAddr, *allocator().stun_servers().begin()); |  | 
| 397   ASSERT_EQ(1u, allocator().turn_servers().size()); |  | 
| 398   EXPECT_EQ(cricket::RELAY_GTURN, allocator().turn_servers()[0].type); |  | 
| 399   // Empty relay credentials are used for GTURN. |  | 
| 400   EXPECT_TRUE(allocator().turn_servers()[0].credentials.username.empty()); |  | 
| 401   EXPECT_TRUE(allocator().turn_servers()[0].credentials.password.empty()); |  | 
| 402   EXPECT_TRUE(HasRelayAddress(cricket::ProtocolAddress( |  | 
| 403       kRelayUdpIntAddr, cricket::PROTO_UDP))); |  | 
| 404   EXPECT_TRUE(HasRelayAddress(cricket::ProtocolAddress( |  | 
| 405       kRelayTcpIntAddr, cricket::PROTO_TCP))); |  | 
| 406   EXPECT_TRUE(HasRelayAddress(cricket::ProtocolAddress( |  | 
| 407       kRelaySslTcpIntAddr, cricket::PROTO_SSLTCP))); |  | 
| 408   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 409 } |  | 
| 410 |  | 
| 411 // Tests that our network filtering works properly. |  | 
| 412 TEST_F(PortAllocatorTest, TestIgnoreOnlyLoopbackNetworkByDefault) { |  | 
| 413   AddInterface(SocketAddress(IPAddress(0x12345600U), 0), "test_eth0", |  | 
| 414                rtc::ADAPTER_TYPE_ETHERNET); |  | 
| 415   AddInterface(SocketAddress(IPAddress(0x12345601U), 0), "test_wlan0", |  | 
| 416                rtc::ADAPTER_TYPE_WIFI); |  | 
| 417   AddInterface(SocketAddress(IPAddress(0x12345602U), 0), "test_cell0", |  | 
| 418                rtc::ADAPTER_TYPE_CELLULAR); |  | 
| 419   AddInterface(SocketAddress(IPAddress(0x12345603U), 0), "test_vpn0", |  | 
| 420                rtc::ADAPTER_TYPE_VPN); |  | 
| 421   AddInterface(SocketAddress(IPAddress(0x12345604U), 0), "test_lo", |  | 
| 422                rtc::ADAPTER_TYPE_LOOPBACK); |  | 
| 423   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 424   session_->set_flags(cricket::PORTALLOCATOR_DISABLE_STUN | |  | 
| 425                       cricket::PORTALLOCATOR_DISABLE_RELAY | |  | 
| 426                       cricket::PORTALLOCATOR_DISABLE_TCP); |  | 
| 427   session_->StartGettingPorts(); |  | 
| 428   EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |  | 
| 429   EXPECT_EQ(4U, candidates_.size()); |  | 
| 430   for (cricket::Candidate candidate : candidates_) { |  | 
| 431     EXPECT_LT(candidate.address().ip(), 0x12345604U); |  | 
| 432   } |  | 
| 433 } |  | 
| 434 |  | 
| 435 TEST_F(PortAllocatorTest, TestIgnoreNetworksAccordingToIgnoreMask) { |  | 
| 436   AddInterface(SocketAddress(IPAddress(0x12345600U), 0), "test_eth0", |  | 
| 437                rtc::ADAPTER_TYPE_ETHERNET); |  | 
| 438   AddInterface(SocketAddress(IPAddress(0x12345601U), 0), "test_wlan0", |  | 
| 439                rtc::ADAPTER_TYPE_WIFI); |  | 
| 440   AddInterface(SocketAddress(IPAddress(0x12345602U), 0), "test_cell0", |  | 
| 441                rtc::ADAPTER_TYPE_CELLULAR); |  | 
| 442   allocator_->SetNetworkIgnoreMask(rtc::ADAPTER_TYPE_ETHERNET | |  | 
| 443                                    rtc::ADAPTER_TYPE_LOOPBACK | |  | 
| 444                                    rtc::ADAPTER_TYPE_WIFI); |  | 
| 445   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 446   session_->set_flags(cricket::PORTALLOCATOR_DISABLE_STUN | |  | 
| 447                       cricket::PORTALLOCATOR_DISABLE_RELAY | |  | 
| 448                       cricket::PORTALLOCATOR_DISABLE_TCP); |  | 
| 449   session_->StartGettingPorts(); |  | 
| 450   EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |  | 
| 451   EXPECT_EQ(1U, candidates_.size()); |  | 
| 452   EXPECT_EQ(0x12345602U, candidates_[0].address().ip()); |  | 
| 453 } |  | 
| 454 |  | 
| 455 // Tests that we allocator session not trying to allocate ports for every 250ms. |  | 
| 456 TEST_F(PortAllocatorTest, TestNoNetworkInterface) { |  | 
| 457   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 458   session_->StartGettingPorts(); |  | 
| 459   // Waiting for one second to make sure BasicPortAllocatorSession has not |  | 
| 460   // called OnAllocate multiple times. In old behavior it's called every 250ms. |  | 
| 461   // When there are no network interfaces, each execution of OnAllocate will |  | 
| 462   // result in SignalCandidatesAllocationDone signal. |  | 
| 463   rtc::Thread::Current()->ProcessMessages(1000); |  | 
| 464   EXPECT_TRUE(candidate_allocation_done_); |  | 
| 465   EXPECT_EQ(0U, candidates_.size()); |  | 
| 466 } |  | 
| 467 |  | 
| 468 // Test that we could use loopback interface as host candidate. |  | 
| 469 TEST_F(PortAllocatorTest, TestLoopbackNetworkInterface) { |  | 
| 470   AddInterface(kLoopbackAddr, "test_loopback", rtc::ADAPTER_TYPE_LOOPBACK); |  | 
| 471   allocator_->SetNetworkIgnoreMask(0); |  | 
| 472   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 473   session_->set_flags(cricket::PORTALLOCATOR_DISABLE_STUN | |  | 
| 474                       cricket::PORTALLOCATOR_DISABLE_RELAY | |  | 
| 475                       cricket::PORTALLOCATOR_DISABLE_TCP); |  | 
| 476   session_->StartGettingPorts(); |  | 
| 477   EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |  | 
| 478   EXPECT_EQ(1U, candidates_.size()); |  | 
| 479 } |  | 
| 480 |  | 
| 481 // Tests that we can get all the desired addresses successfully. |  | 
| 482 TEST_F(PortAllocatorTest, TestGetAllPortsWithMinimumStepDelay) { |  | 
| 483   AddInterface(kClientAddr); |  | 
| 484   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 485   session_->StartGettingPorts(); |  | 
| 486   ASSERT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 487   EXPECT_EQ(4U, ports_.size()); |  | 
| 488   EXPECT_PRED5(CheckCandidate, candidates_[0], |  | 
| 489       cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp", kClientAddr); |  | 
| 490   EXPECT_PRED5(CheckCandidate, candidates_[1], |  | 
| 491       cricket::ICE_CANDIDATE_COMPONENT_RTP, "stun", "udp", kClientAddr); |  | 
| 492   EXPECT_PRED5(CheckCandidate, candidates_[2], |  | 
| 493       cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", kRelayUdpIntAddr); |  | 
| 494   EXPECT_PRED5(CheckCandidate, candidates_[3], |  | 
| 495       cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", kRelayUdpExtAddr); |  | 
| 496   EXPECT_PRED5(CheckCandidate, candidates_[4], |  | 
| 497       cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "tcp", kRelayTcpIntAddr); |  | 
| 498   EXPECT_PRED5(CheckCandidate, candidates_[5], |  | 
| 499       cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "tcp", kClientAddr); |  | 
| 500   EXPECT_PRED5(CheckCandidate, candidates_[6], |  | 
| 501       cricket::ICE_CANDIDATE_COMPONENT_RTP, |  | 
| 502       "relay", "ssltcp", kRelaySslTcpIntAddr); |  | 
| 503   EXPECT_TRUE(candidate_allocation_done_); |  | 
| 504 } |  | 
| 505 |  | 
| 506 // Test that when the same network interface is brought down and up, the |  | 
| 507 // port allocator session will restart a new allocation sequence if |  | 
| 508 // it is not stopped. |  | 
| 509 TEST_F(PortAllocatorTest, TestSameNetworkDownAndUpWhenSessionNotStopped) { |  | 
| 510   std::string if_name("test_net0"); |  | 
| 511   AddInterface(kClientAddr, if_name); |  | 
| 512   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 513   session_->StartGettingPorts(); |  | 
| 514   ASSERT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 515   EXPECT_EQ(4U, ports_.size()); |  | 
| 516   EXPECT_TRUE(candidate_allocation_done_); |  | 
| 517   candidate_allocation_done_ = false; |  | 
| 518   candidates_.clear(); |  | 
| 519   ports_.clear(); |  | 
| 520 |  | 
| 521   RemoveInterface(kClientAddr); |  | 
| 522   ASSERT_EQ_WAIT(0U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 523   EXPECT_EQ(0U, ports_.size()); |  | 
| 524   EXPECT_FALSE(candidate_allocation_done_); |  | 
| 525 |  | 
| 526   // When the same interfaces are added again, new candidates/ports should be |  | 
| 527   // generated. |  | 
| 528   AddInterface(kClientAddr, if_name); |  | 
| 529   ASSERT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 530   EXPECT_EQ(4U, ports_.size()); |  | 
| 531   EXPECT_TRUE(candidate_allocation_done_); |  | 
| 532 } |  | 
| 533 |  | 
| 534 // Test that when the same network interface is brought down and up, the |  | 
| 535 // port allocator session will not restart a new allocation sequence if |  | 
| 536 // it is stopped. |  | 
| 537 TEST_F(PortAllocatorTest, TestSameNetworkDownAndUpWhenSessionStopped) { |  | 
| 538   std::string if_name("test_net0"); |  | 
| 539   AddInterface(kClientAddr, if_name); |  | 
| 540   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 541   session_->StartGettingPorts(); |  | 
| 542   ASSERT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 543   EXPECT_EQ(4U, ports_.size()); |  | 
| 544   EXPECT_TRUE(candidate_allocation_done_); |  | 
| 545   session_->StopGettingPorts(); |  | 
| 546   candidates_.clear(); |  | 
| 547   ports_.clear(); |  | 
| 548 |  | 
| 549   RemoveInterface(kClientAddr); |  | 
| 550   ASSERT_EQ_WAIT(0U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 551   EXPECT_EQ(0U, ports_.size()); |  | 
| 552 |  | 
| 553   // When the same interfaces are added again, new candidates/ports should not |  | 
| 554   // be generated because the session has stopped. |  | 
| 555   AddInterface(kClientAddr, if_name); |  | 
| 556   ASSERT_EQ_WAIT(0U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 557   EXPECT_EQ(0U, ports_.size()); |  | 
| 558   EXPECT_TRUE(candidate_allocation_done_); |  | 
| 559 } |  | 
| 560 |  | 
| 561 // Verify candidates with default step delay of 1sec. |  | 
| 562 TEST_F(PortAllocatorTest, TestGetAllPortsWithOneSecondStepDelay) { |  | 
| 563   AddInterface(kClientAddr); |  | 
| 564   allocator_->set_step_delay(cricket::kDefaultStepDelay); |  | 
| 565   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 566   session_->StartGettingPorts(); |  | 
| 567   ASSERT_EQ_WAIT(2U, candidates_.size(), 1000); |  | 
| 568   EXPECT_EQ(2U, ports_.size()); |  | 
| 569   ASSERT_EQ_WAIT(4U, candidates_.size(), 2000); |  | 
| 570   EXPECT_EQ(3U, ports_.size()); |  | 
| 571   EXPECT_PRED5(CheckCandidate, candidates_[2], |  | 
| 572       cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", kRelayUdpIntAddr); |  | 
| 573   EXPECT_PRED5(CheckCandidate, candidates_[3], |  | 
| 574       cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", kRelayUdpExtAddr); |  | 
| 575   ASSERT_EQ_WAIT(6U, candidates_.size(), 1500); |  | 
| 576   EXPECT_PRED5(CheckCandidate, candidates_[4], |  | 
| 577       cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "tcp", kRelayTcpIntAddr); |  | 
| 578   EXPECT_PRED5(CheckCandidate, candidates_[5], |  | 
| 579       cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "tcp", kClientAddr); |  | 
| 580   EXPECT_EQ(4U, ports_.size()); |  | 
| 581   ASSERT_EQ_WAIT(7U, candidates_.size(), 2000); |  | 
| 582   EXPECT_PRED5(CheckCandidate, candidates_[6], |  | 
| 583       cricket::ICE_CANDIDATE_COMPONENT_RTP, |  | 
| 584                "relay", "ssltcp", kRelaySslTcpIntAddr); |  | 
| 585   EXPECT_EQ(4U, ports_.size()); |  | 
| 586   EXPECT_TRUE(candidate_allocation_done_); |  | 
| 587   // If we Stop gathering now, we shouldn't get a second "done" callback. |  | 
| 588   session_->StopGettingPorts(); |  | 
| 589 } |  | 
| 590 |  | 
| 591 TEST_F(PortAllocatorTest, TestSetupVideoRtpPortsWithNormalSendBuffers) { |  | 
| 592   AddInterface(kClientAddr); |  | 
| 593   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP, |  | 
| 594                             cricket::CN_VIDEO)); |  | 
| 595   session_->StartGettingPorts(); |  | 
| 596   ASSERT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 597   EXPECT_TRUE(candidate_allocation_done_); |  | 
| 598   // If we Stop gathering now, we shouldn't get a second "done" callback. |  | 
| 599   session_->StopGettingPorts(); |  | 
| 600 |  | 
| 601   // All ports should have unset send-buffer sizes. |  | 
| 602   CheckSendBufferSizesOfAllPorts(-1); |  | 
| 603 } |  | 
| 604 |  | 
| 605 // Tests that we can get callback after StopGetAllPorts. |  | 
| 606 TEST_F(PortAllocatorTest, TestStopGetAllPorts) { |  | 
| 607   AddInterface(kClientAddr); |  | 
| 608   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 609   session_->StartGettingPorts(); |  | 
| 610   ASSERT_EQ_WAIT(2U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 611   EXPECT_EQ(2U, ports_.size()); |  | 
| 612   session_->StopGettingPorts(); |  | 
| 613   EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |  | 
| 614 } |  | 
| 615 |  | 
| 616 // Test that we restrict client ports appropriately when a port range is set. |  | 
| 617 // We check the candidates for udp/stun/tcp ports, and the from address |  | 
| 618 // for relay ports. |  | 
| 619 TEST_F(PortAllocatorTest, TestGetAllPortsPortRange) { |  | 
| 620   AddInterface(kClientAddr); |  | 
| 621   // Check that an invalid port range fails. |  | 
| 622   EXPECT_FALSE(SetPortRange(kMaxPort, kMinPort)); |  | 
| 623   // Check that a null port range succeeds. |  | 
| 624   EXPECT_TRUE(SetPortRange(0, 0)); |  | 
| 625   // Check that a valid port range succeeds. |  | 
| 626   EXPECT_TRUE(SetPortRange(kMinPort, kMaxPort)); |  | 
| 627   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 628   session_->StartGettingPorts(); |  | 
| 629   ASSERT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 630   EXPECT_EQ(4U, ports_.size()); |  | 
| 631   // Check the port number for the UDP port object. |  | 
| 632   EXPECT_PRED3(CheckPort, candidates_[0].address(), kMinPort, kMaxPort); |  | 
| 633   // Check the port number for the STUN port object. |  | 
| 634   EXPECT_PRED3(CheckPort, candidates_[1].address(), kMinPort, kMaxPort); |  | 
| 635   // Check the port number used to connect to the relay server. |  | 
| 636   EXPECT_PRED3(CheckPort, relay_server_.GetConnection(0).source(), |  | 
| 637                kMinPort, kMaxPort); |  | 
| 638   // Check the port number for the TCP port object. |  | 
| 639   EXPECT_PRED3(CheckPort, candidates_[5].address(), kMinPort, kMaxPort); |  | 
| 640   EXPECT_TRUE(candidate_allocation_done_); |  | 
| 641 } |  | 
| 642 |  | 
| 643 // Test that we don't crash or malfunction if we have no network adapters. |  | 
| 644 TEST_F(PortAllocatorTest, TestGetAllPortsNoAdapters) { |  | 
| 645   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 646   session_->StartGettingPorts(); |  | 
| 647   rtc::Thread::Current()->ProcessMessages(100); |  | 
| 648   // Without network adapter, we should not get any candidate. |  | 
| 649   EXPECT_EQ(0U, candidates_.size()); |  | 
| 650   EXPECT_TRUE(candidate_allocation_done_); |  | 
| 651 } |  | 
| 652 |  | 
| 653 // Test that when enumeration is disabled, we should not have any ports when |  | 
| 654 // candidate_filter() is set to CF_RELAY and no relay is specified. |  | 
| 655 TEST_F(PortAllocatorTest, |  | 
| 656        TestDisableAdapterEnumerationWithoutNatRelayTransportOnly) { |  | 
| 657   ResetWithStunServerNoNat(kStunAddr); |  | 
| 658   allocator().set_candidate_filter(cricket::CF_RELAY); |  | 
| 659   // Expect to see no ports and no candidates. |  | 
| 660   CheckDisableAdapterEnumeration(0U, rtc::IPAddress(), rtc::IPAddress(), |  | 
| 661                                  rtc::IPAddress(), rtc::IPAddress()); |  | 
| 662 } |  | 
| 663 |  | 
| 664 // Test that even with multiple interfaces, the result should still be a single |  | 
| 665 // default private, one STUN and one TURN candidate since we bind to any address |  | 
| 666 // (i.e. all 0s). |  | 
| 667 TEST_F(PortAllocatorTest, |  | 
| 668        TestDisableAdapterEnumerationBehindNatMultipleInterfaces) { |  | 
| 669   AddInterface(kPrivateAddr); |  | 
| 670   AddInterface(kPrivateAddr2); |  | 
| 671   ResetWithStunServerAndNat(kStunAddr); |  | 
| 672   AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress()); |  | 
| 673 |  | 
| 674   // Enable IPv6 here. Since the network_manager doesn't have IPv6 default |  | 
| 675   // address set and we have no IPv6 STUN server, there should be no IPv6 |  | 
| 676   // candidates. |  | 
| 677   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 678   session_->set_flags(cricket::PORTALLOCATOR_ENABLE_IPV6); |  | 
| 679 |  | 
| 680   // Expect to see 3 ports for IPv4: HOST/STUN, TURN/UDP and TCP ports, 2 ports |  | 
| 681   // for IPv6: HOST, and TCP. Only IPv4 candidates: a default private, STUN and |  | 
| 682   // TURN/UDP candidates. |  | 
| 683   CheckDisableAdapterEnumeration(5U, kPrivateAddr.ipaddr(), |  | 
| 684                                  kNatUdpAddr.ipaddr(), kTurnUdpExtAddr.ipaddr(), |  | 
| 685                                  rtc::IPAddress()); |  | 
| 686 } |  | 
| 687 |  | 
| 688 // Test that we should get a default private, STUN, TURN/UDP and TURN/TCP |  | 
| 689 // candidates when both TURN/UDP and TURN/TCP servers are specified. |  | 
| 690 TEST_F(PortAllocatorTest, TestDisableAdapterEnumerationBehindNatWithTcp) { |  | 
| 691   turn_server_.AddInternalSocket(kTurnTcpIntAddr, cricket::PROTO_TCP); |  | 
| 692   AddInterface(kPrivateAddr); |  | 
| 693   ResetWithStunServerAndNat(kStunAddr); |  | 
| 694   AddTurnServers(kTurnUdpIntAddr, kTurnTcpIntAddr); |  | 
| 695   // Expect to see 4 ports - STUN, TURN/UDP, TURN/TCP and TCP port. A default |  | 
| 696   // private, STUN, TURN/UDP, and TURN/TCP candidates. |  | 
| 697   CheckDisableAdapterEnumeration(4U, kPrivateAddr.ipaddr(), |  | 
| 698                                  kNatUdpAddr.ipaddr(), kTurnUdpExtAddr.ipaddr(), |  | 
| 699                                  kTurnUdpExtAddr.ipaddr()); |  | 
| 700 } |  | 
| 701 |  | 
| 702 // Test that when adapter enumeration is disabled, for endpoints without |  | 
| 703 // STUN/TURN specified, a default private candidate is still generated. |  | 
| 704 TEST_F(PortAllocatorTest, TestDisableAdapterEnumerationWithoutNatOrServers) { |  | 
| 705   ResetWithNoServersOrNat(); |  | 
| 706   // Expect to see 2 ports: STUN and TCP ports, one default private candidate. |  | 
| 707   CheckDisableAdapterEnumeration(2U, kPrivateAddr.ipaddr(), rtc::IPAddress(), |  | 
| 708                                  rtc::IPAddress(), rtc::IPAddress()); |  | 
| 709 } |  | 
| 710 |  | 
| 711 // Test that when adapter enumeration is disabled, with |  | 
| 712 // PORTALLOCATOR_DISABLE_LOCALHOST_CANDIDATE specified, for endpoints not behind |  | 
| 713 // a NAT, there is no local candidate. |  | 
| 714 TEST_F(PortAllocatorTest, |  | 
| 715        TestDisableAdapterEnumerationWithoutNatLocalhostCandidateDisabled) { |  | 
| 716   ResetWithStunServerNoNat(kStunAddr); |  | 
| 717   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 718   session_->set_flags(cricket::PORTALLOCATOR_DISABLE_DEFAULT_LOCAL_CANDIDATE); |  | 
| 719   // Expect to see 2 ports: STUN and TCP ports, localhost candidate and STUN |  | 
| 720   // candidate. |  | 
| 721   CheckDisableAdapterEnumeration(2U, rtc::IPAddress(), rtc::IPAddress(), |  | 
| 722                                  rtc::IPAddress(), rtc::IPAddress()); |  | 
| 723 } |  | 
| 724 |  | 
| 725 // Test that when adapter enumeration is disabled, with |  | 
| 726 // PORTALLOCATOR_DISABLE_LOCALHOST_CANDIDATE specified, for endpoints not behind |  | 
| 727 // a NAT, there is no local candidate. However, this specified default route |  | 
| 728 // (kClientAddr) which was discovered when sending STUN requests, will become |  | 
| 729 // the srflx addresses. |  | 
| 730 TEST_F( |  | 
| 731     PortAllocatorTest, |  | 
| 732     TestDisableAdapterEnumerationWithoutNatLocalhostCandidateDisabledWithDiffere
      ntDefaultRoute) { |  | 
| 733   ResetWithStunServerNoNat(kStunAddr); |  | 
| 734   AddInterfaceAsDefaultRoute(kClientAddr); |  | 
| 735   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 736   session_->set_flags(cricket::PORTALLOCATOR_DISABLE_DEFAULT_LOCAL_CANDIDATE); |  | 
| 737   // Expect to see 2 ports: STUN and TCP ports, localhost candidate and STUN |  | 
| 738   // candidate. |  | 
| 739   CheckDisableAdapterEnumeration(2U, rtc::IPAddress(), kClientAddr.ipaddr(), |  | 
| 740                                  rtc::IPAddress(), rtc::IPAddress()); |  | 
| 741 } |  | 
| 742 |  | 
| 743 // Test that when adapter enumeration is disabled, with |  | 
| 744 // PORTALLOCATOR_DISABLE_LOCALHOST_CANDIDATE specified, for endpoints behind a |  | 
| 745 // NAT, there is only one STUN candidate. |  | 
| 746 TEST_F(PortAllocatorTest, |  | 
| 747        TestDisableAdapterEnumerationWithNatLocalhostCandidateDisabled) { |  | 
| 748   ResetWithStunServerAndNat(kStunAddr); |  | 
| 749   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 750   session_->set_flags(cricket::PORTALLOCATOR_DISABLE_DEFAULT_LOCAL_CANDIDATE); |  | 
| 751   // Expect to see 2 ports: STUN and TCP ports, and single STUN candidate. |  | 
| 752   CheckDisableAdapterEnumeration(2U, rtc::IPAddress(), kNatUdpAddr.ipaddr(), |  | 
| 753                                  rtc::IPAddress(), rtc::IPAddress()); |  | 
| 754 } |  | 
| 755 |  | 
| 756 // Test that we disable relay over UDP, and only TCP is used when connecting to |  | 
| 757 // the relay server. |  | 
| 758 TEST_F(PortAllocatorTest, TestDisableUdpTurn) { |  | 
| 759   turn_server_.AddInternalSocket(kTurnTcpIntAddr, cricket::PROTO_TCP); |  | 
| 760   AddInterface(kClientAddr); |  | 
| 761   ResetWithStunServerAndNat(kStunAddr); |  | 
| 762   AddTurnServers(kTurnUdpIntAddr, kTurnTcpIntAddr); |  | 
| 763   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 764   session_->set_flags(cricket::PORTALLOCATOR_DISABLE_UDP_RELAY | |  | 
| 765                       cricket::PORTALLOCATOR_DISABLE_UDP | |  | 
| 766                       cricket::PORTALLOCATOR_DISABLE_STUN | |  | 
| 767                       cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET); |  | 
| 768 |  | 
| 769   session_->StartGettingPorts(); |  | 
| 770   EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |  | 
| 771 |  | 
| 772   // Expect to see 2 ports and 2 candidates - TURN/TCP and TCP ports, TCP and |  | 
| 773   // TURN/TCP candidates. |  | 
| 774   EXPECT_EQ(2U, ports_.size()); |  | 
| 775   EXPECT_EQ(2U, candidates_.size()); |  | 
| 776   EXPECT_PRED5(CheckCandidate, candidates_[0], |  | 
| 777                cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", |  | 
| 778                kTurnUdpExtAddr); |  | 
| 779   // The TURN candidate should use TCP to contact the TURN server. |  | 
| 780   EXPECT_EQ(cricket::TCP_PROTOCOL_NAME, candidates_[0].relay_protocol()); |  | 
| 781   EXPECT_PRED5(CheckCandidate, candidates_[1], |  | 
| 782                cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "tcp", |  | 
| 783                kClientAddr); |  | 
| 784 } |  | 
| 785 |  | 
| 786 // Disable for asan, see |  | 
| 787 // https://code.google.com/p/webrtc/issues/detail?id=4743 for details. |  | 
| 788 #if !defined(ADDRESS_SANITIZER) |  | 
| 789 |  | 
| 790 // Test that we can get OnCandidatesAllocationDone callback when all the ports |  | 
| 791 // are disabled. |  | 
| 792 TEST_F(PortAllocatorTest, TestDisableAllPorts) { |  | 
| 793   AddInterface(kClientAddr); |  | 
| 794   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 795   session_->set_flags(cricket::PORTALLOCATOR_DISABLE_UDP | |  | 
| 796                       cricket::PORTALLOCATOR_DISABLE_STUN | |  | 
| 797                       cricket::PORTALLOCATOR_DISABLE_RELAY | |  | 
| 798                       cricket::PORTALLOCATOR_DISABLE_TCP); |  | 
| 799   session_->StartGettingPorts(); |  | 
| 800   rtc::Thread::Current()->ProcessMessages(100); |  | 
| 801   EXPECT_EQ(0U, candidates_.size()); |  | 
| 802   EXPECT_TRUE(candidate_allocation_done_); |  | 
| 803 } |  | 
| 804 |  | 
| 805 // Test that we don't crash or malfunction if we can't create UDP sockets. |  | 
| 806 TEST_F(PortAllocatorTest, TestGetAllPortsNoUdpSockets) { |  | 
| 807   AddInterface(kClientAddr); |  | 
| 808   fss_->set_udp_sockets_enabled(false); |  | 
| 809   EXPECT_TRUE(CreateSession(1)); |  | 
| 810   session_->StartGettingPorts(); |  | 
| 811   ASSERT_EQ_WAIT(5U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 812   EXPECT_EQ(2U, ports_.size()); |  | 
| 813   EXPECT_PRED5(CheckCandidate, candidates_[0], |  | 
| 814       cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", kRelayUdpIntAddr); |  | 
| 815   EXPECT_PRED5(CheckCandidate, candidates_[1], |  | 
| 816       cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", kRelayUdpExtAddr); |  | 
| 817   EXPECT_PRED5(CheckCandidate, candidates_[2], |  | 
| 818       cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "tcp", kRelayTcpIntAddr); |  | 
| 819   EXPECT_PRED5(CheckCandidate, candidates_[3], |  | 
| 820       cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "tcp", kClientAddr); |  | 
| 821   EXPECT_PRED5(CheckCandidate, candidates_[4], |  | 
| 822       cricket::ICE_CANDIDATE_COMPONENT_RTP, |  | 
| 823       "relay", "ssltcp", kRelaySslTcpIntAddr); |  | 
| 824   EXPECT_TRUE(candidate_allocation_done_); |  | 
| 825 } |  | 
| 826 |  | 
| 827 #endif // if !defined(ADDRESS_SANITIZER) |  | 
| 828 |  | 
| 829 // Test that we don't crash or malfunction if we can't create UDP sockets or |  | 
| 830 // listen on TCP sockets. We still give out a local TCP address, since |  | 
| 831 // apparently this is needed for the remote side to accept our connection. |  | 
| 832 TEST_F(PortAllocatorTest, TestGetAllPortsNoUdpSocketsNoTcpListen) { |  | 
| 833   AddInterface(kClientAddr); |  | 
| 834   fss_->set_udp_sockets_enabled(false); |  | 
| 835   fss_->set_tcp_listen_enabled(false); |  | 
| 836   EXPECT_TRUE(CreateSession(1)); |  | 
| 837   session_->StartGettingPorts(); |  | 
| 838   ASSERT_EQ_WAIT(5U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 839   EXPECT_EQ(2U, ports_.size()); |  | 
| 840   EXPECT_PRED5(CheckCandidate, candidates_[0], |  | 
| 841       1, "relay", "udp", kRelayUdpIntAddr); |  | 
| 842   EXPECT_PRED5(CheckCandidate, candidates_[1], |  | 
| 843       1, "relay", "udp", kRelayUdpExtAddr); |  | 
| 844   EXPECT_PRED5(CheckCandidate, candidates_[2], |  | 
| 845       1, "relay", "tcp", kRelayTcpIntAddr); |  | 
| 846   EXPECT_PRED5(CheckCandidate, candidates_[3], |  | 
| 847       1, "local", "tcp", kClientAddr); |  | 
| 848   EXPECT_PRED5(CheckCandidate, candidates_[4], |  | 
| 849       1, "relay", "ssltcp", kRelaySslTcpIntAddr); |  | 
| 850   EXPECT_TRUE(candidate_allocation_done_); |  | 
| 851 } |  | 
| 852 |  | 
| 853 // Test that we don't crash or malfunction if we can't create any sockets. |  | 
| 854 // TODO: Find a way to exit early here. |  | 
| 855 TEST_F(PortAllocatorTest, TestGetAllPortsNoSockets) { |  | 
| 856   AddInterface(kClientAddr); |  | 
| 857   fss_->set_tcp_sockets_enabled(false); |  | 
| 858   fss_->set_udp_sockets_enabled(false); |  | 
| 859   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 860   session_->StartGettingPorts(); |  | 
| 861   WAIT(candidates_.size() > 0, 2000); |  | 
| 862   // TODO - Check candidate_allocation_done signal. |  | 
| 863   // In case of Relay, ports creation will succeed but sockets will fail. |  | 
| 864   // There is no error reporting from RelayEntry to handle this failure. |  | 
| 865 } |  | 
| 866 |  | 
| 867 // Testing STUN timeout. |  | 
| 868 TEST_F(PortAllocatorTest, TestGetAllPortsNoUdpAllowed) { |  | 
| 869   fss_->AddRule(false, rtc::FP_UDP, rtc::FD_ANY, kClientAddr); |  | 
| 870   AddInterface(kClientAddr); |  | 
| 871   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 872   session_->StartGettingPorts(); |  | 
| 873   EXPECT_EQ_WAIT(2U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 874   EXPECT_EQ(2U, ports_.size()); |  | 
| 875   EXPECT_PRED5(CheckCandidate, candidates_[0], |  | 
| 876       cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp", kClientAddr); |  | 
| 877   EXPECT_PRED5(CheckCandidate, candidates_[1], |  | 
| 878       cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "tcp", kClientAddr); |  | 
| 879   // RelayPort connection timeout is 3sec. TCP connection with RelayServer |  | 
| 880   // will be tried after 3 seconds. |  | 
| 881   EXPECT_EQ_WAIT(6U, candidates_.size(), 4000); |  | 
| 882   EXPECT_EQ(3U, ports_.size()); |  | 
| 883   EXPECT_PRED5(CheckCandidate, candidates_[2], |  | 
| 884       cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", kRelayUdpIntAddr); |  | 
| 885   EXPECT_PRED5(CheckCandidate, candidates_[3], |  | 
| 886       cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "tcp", kRelayTcpIntAddr); |  | 
| 887   EXPECT_PRED5(CheckCandidate, candidates_[4], |  | 
| 888       cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "ssltcp", |  | 
| 889       kRelaySslTcpIntAddr); |  | 
| 890   EXPECT_PRED5(CheckCandidate, candidates_[5], |  | 
| 891       cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", kRelayUdpExtAddr); |  | 
| 892   // Stun Timeout is 9sec. |  | 
| 893   EXPECT_TRUE_WAIT(candidate_allocation_done_, 9000); |  | 
| 894 } |  | 
| 895 |  | 
| 896 TEST_F(PortAllocatorTest, TestCandidatePriorityOfMultipleInterfaces) { |  | 
| 897   AddInterface(kClientAddr); |  | 
| 898   AddInterface(kClientAddr2); |  | 
| 899   // Allocating only host UDP ports. This is done purely for testing |  | 
| 900   // convenience. |  | 
| 901   allocator().set_flags(cricket::PORTALLOCATOR_DISABLE_TCP | |  | 
| 902                         cricket::PORTALLOCATOR_DISABLE_STUN | |  | 
| 903                         cricket::PORTALLOCATOR_DISABLE_RELAY); |  | 
| 904   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 905   session_->StartGettingPorts(); |  | 
| 906   EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |  | 
| 907   ASSERT_EQ(2U, candidates_.size()); |  | 
| 908   EXPECT_EQ(2U, ports_.size()); |  | 
| 909   // Candidates priorities should be different. |  | 
| 910   EXPECT_NE(candidates_[0].priority(), candidates_[1].priority()); |  | 
| 911 } |  | 
| 912 |  | 
| 913 // Test to verify ICE restart process. |  | 
| 914 TEST_F(PortAllocatorTest, TestGetAllPortsRestarts) { |  | 
| 915   AddInterface(kClientAddr); |  | 
| 916   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 917   session_->StartGettingPorts(); |  | 
| 918   EXPECT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 919   EXPECT_EQ(4U, ports_.size()); |  | 
| 920   EXPECT_TRUE(candidate_allocation_done_); |  | 
| 921   // TODO - Extend this to verify ICE restart. |  | 
| 922 } |  | 
| 923 |  | 
| 924 // Test ICE candidate filter mechanism with options Relay/Host/Reflexive. |  | 
| 925 // This test also verifies that when the allocator is only allowed to use |  | 
| 926 // relay (i.e. IceTransportsType is relay), the raddr is an empty |  | 
| 927 // address with the correct family. This is to prevent any local |  | 
| 928 // reflective address leakage in the sdp line. |  | 
| 929 TEST_F(PortAllocatorTest, TestCandidateFilterWithRelayOnly) { |  | 
| 930   AddInterface(kClientAddr); |  | 
| 931   // GTURN is not configured here. |  | 
| 932   ResetWithTurnServersNoNat(kTurnUdpIntAddr, rtc::SocketAddress()); |  | 
| 933   allocator().set_candidate_filter(cricket::CF_RELAY); |  | 
| 934   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 935   session_->StartGettingPorts(); |  | 
| 936   EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |  | 
| 937   EXPECT_PRED5(CheckCandidate, |  | 
| 938                candidates_[0], |  | 
| 939                cricket::ICE_CANDIDATE_COMPONENT_RTP, |  | 
| 940                "relay", |  | 
| 941                "udp", |  | 
| 942                rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)); |  | 
| 943 |  | 
| 944   EXPECT_EQ(1U, candidates_.size()); |  | 
| 945   EXPECT_EQ(1U, ports_.size());  // Only Relay port will be in ready state. |  | 
| 946   for (size_t i = 0; i < candidates_.size(); ++i) { |  | 
| 947     EXPECT_EQ(std::string(cricket::RELAY_PORT_TYPE), candidates_[i].type()); |  | 
| 948     EXPECT_EQ( |  | 
| 949         candidates_[0].related_address(), |  | 
| 950         rtc::EmptySocketAddressWithFamily(candidates_[0].address().family())); |  | 
| 951   } |  | 
| 952 } |  | 
| 953 |  | 
| 954 TEST_F(PortAllocatorTest, TestCandidateFilterWithHostOnly) { |  | 
| 955   AddInterface(kClientAddr); |  | 
| 956   allocator().set_flags(cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET); |  | 
| 957   allocator().set_candidate_filter(cricket::CF_HOST); |  | 
| 958   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 959   session_->StartGettingPorts(); |  | 
| 960   EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |  | 
| 961   EXPECT_EQ(2U, candidates_.size()); // Host UDP/TCP candidates only. |  | 
| 962   EXPECT_EQ(2U, ports_.size()); // UDP/TCP ports only. |  | 
| 963   for (size_t i = 0; i < candidates_.size(); ++i) { |  | 
| 964     EXPECT_EQ(std::string(cricket::LOCAL_PORT_TYPE), candidates_[i].type()); |  | 
| 965   } |  | 
| 966 } |  | 
| 967 |  | 
| 968 // Host is behind the NAT. |  | 
| 969 TEST_F(PortAllocatorTest, TestCandidateFilterWithReflexiveOnly) { |  | 
| 970   AddInterface(kPrivateAddr); |  | 
| 971   ResetWithStunServerAndNat(kStunAddr); |  | 
| 972 |  | 
| 973   allocator().set_flags(cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET); |  | 
| 974   allocator().set_candidate_filter(cricket::CF_REFLEXIVE); |  | 
| 975   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 976   session_->StartGettingPorts(); |  | 
| 977   EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |  | 
| 978   // Host is behind NAT, no private address will be exposed. Hence only UDP |  | 
| 979   // port with STUN candidate will be sent outside. |  | 
| 980   EXPECT_EQ(1U, candidates_.size()); // Only STUN candidate. |  | 
| 981   EXPECT_EQ(1U, ports_.size());  // Only UDP port will be in ready state. |  | 
| 982   for (size_t i = 0; i < candidates_.size(); ++i) { |  | 
| 983     EXPECT_EQ(std::string(cricket::STUN_PORT_TYPE), candidates_[i].type()); |  | 
| 984     EXPECT_EQ( |  | 
| 985         candidates_[0].related_address(), |  | 
| 986         rtc::EmptySocketAddressWithFamily(candidates_[0].address().family())); |  | 
| 987   } |  | 
| 988 } |  | 
| 989 |  | 
| 990 // Host is not behind the NAT. |  | 
| 991 TEST_F(PortAllocatorTest, TestCandidateFilterWithReflexiveOnlyAndNoNAT) { |  | 
| 992   AddInterface(kClientAddr); |  | 
| 993   allocator().set_flags(cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET); |  | 
| 994   allocator().set_candidate_filter(cricket::CF_REFLEXIVE); |  | 
| 995   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 996   session_->StartGettingPorts(); |  | 
| 997   EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |  | 
| 998   // Host has a public address, both UDP and TCP candidates will be exposed. |  | 
| 999   EXPECT_EQ(2U, candidates_.size()); // Local UDP + TCP candidate. |  | 
| 1000   EXPECT_EQ(2U, ports_.size());  //  UDP and TCP ports will be in ready state. |  | 
| 1001   for (size_t i = 0; i < candidates_.size(); ++i) { |  | 
| 1002     EXPECT_EQ(std::string(cricket::LOCAL_PORT_TYPE), candidates_[i].type()); |  | 
| 1003   } |  | 
| 1004 } |  | 
| 1005 |  | 
| 1006 // Test that we get the same ufrag and pwd for all candidates. |  | 
| 1007 TEST_F(PortAllocatorTest, TestEnableSharedUfrag) { |  | 
| 1008   AddInterface(kClientAddr); |  | 
| 1009   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 1010   session_->StartGettingPorts(); |  | 
| 1011   ASSERT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 1012   EXPECT_PRED5(CheckCandidate, candidates_[0], |  | 
| 1013       cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp", kClientAddr); |  | 
| 1014   EXPECT_PRED5(CheckCandidate, candidates_[1], |  | 
| 1015       cricket::ICE_CANDIDATE_COMPONENT_RTP, "stun", "udp", kClientAddr); |  | 
| 1016   EXPECT_PRED5(CheckCandidate, candidates_[5], |  | 
| 1017       cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "tcp", kClientAddr); |  | 
| 1018   EXPECT_EQ(4U, ports_.size()); |  | 
| 1019   EXPECT_EQ(kIceUfrag0, candidates_[0].username()); |  | 
| 1020   EXPECT_EQ(kIceUfrag0, candidates_[1].username()); |  | 
| 1021   EXPECT_EQ(kIceUfrag0, candidates_[2].username()); |  | 
| 1022   EXPECT_EQ(kIcePwd0, candidates_[0].password()); |  | 
| 1023   EXPECT_EQ(kIcePwd0, candidates_[1].password()); |  | 
| 1024   EXPECT_TRUE(candidate_allocation_done_); |  | 
| 1025 } |  | 
| 1026 |  | 
| 1027 // Test that when PORTALLOCATOR_ENABLE_SHARED_SOCKET is enabled only one port |  | 
| 1028 // is allocated for udp and stun. Also verify there is only one candidate |  | 
| 1029 // (local) if stun candidate is same as local candidate, which will be the case |  | 
| 1030 // in a public network like the below test. |  | 
| 1031 TEST_F(PortAllocatorTest, TestSharedSocketWithoutNat) { |  | 
| 1032   AddInterface(kClientAddr); |  | 
| 1033   allocator_->set_flags(allocator().flags() | |  | 
| 1034                         cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET); |  | 
| 1035   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 1036   session_->StartGettingPorts(); |  | 
| 1037   ASSERT_EQ_WAIT(6U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 1038   EXPECT_EQ(3U, ports_.size()); |  | 
| 1039   EXPECT_PRED5(CheckCandidate, candidates_[0], |  | 
| 1040       cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp", kClientAddr); |  | 
| 1041   EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |  | 
| 1042 } |  | 
| 1043 |  | 
| 1044 // Test that when PORTALLOCATOR_ENABLE_SHARED_SOCKET is enabled only one port |  | 
| 1045 // is allocated for udp and stun. In this test we should expect both stun and |  | 
| 1046 // local candidates as client behind a nat. |  | 
| 1047 TEST_F(PortAllocatorTest, TestSharedSocketWithNat) { |  | 
| 1048   AddInterface(kClientAddr); |  | 
| 1049   ResetWithStunServerAndNat(kStunAddr); |  | 
| 1050 |  | 
| 1051   allocator_->set_flags(allocator().flags() | |  | 
| 1052                         cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET); |  | 
| 1053   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 1054   session_->StartGettingPorts(); |  | 
| 1055   ASSERT_EQ_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 1056   ASSERT_EQ(2U, ports_.size()); |  | 
| 1057   EXPECT_PRED5(CheckCandidate, candidates_[0], |  | 
| 1058       cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp", kClientAddr); |  | 
| 1059   EXPECT_PRED5(CheckCandidate, candidates_[1], |  | 
| 1060       cricket::ICE_CANDIDATE_COMPONENT_RTP, "stun", "udp", |  | 
| 1061       rtc::SocketAddress(kNatUdpAddr.ipaddr(), 0)); |  | 
| 1062   EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |  | 
| 1063   EXPECT_EQ(3U, candidates_.size()); |  | 
| 1064 } |  | 
| 1065 |  | 
| 1066 // Test TURN port in shared socket mode with UDP and TCP TURN server addresses. |  | 
| 1067 TEST_F(PortAllocatorTest, TestSharedSocketWithoutNatUsingTurn) { |  | 
| 1068   turn_server_.AddInternalSocket(kTurnTcpIntAddr, cricket::PROTO_TCP); |  | 
| 1069   AddInterface(kClientAddr); |  | 
| 1070   allocator_.reset(new cricket::BasicPortAllocator(&network_manager_)); |  | 
| 1071 |  | 
| 1072   AddTurnServers(kTurnUdpIntAddr, kTurnTcpIntAddr); |  | 
| 1073 |  | 
| 1074   allocator_->set_step_delay(cricket::kMinimumStepDelay); |  | 
| 1075   allocator_->set_flags(allocator().flags() | |  | 
| 1076                         cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET | |  | 
| 1077                         cricket::PORTALLOCATOR_DISABLE_TCP); |  | 
| 1078 |  | 
| 1079   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 1080   session_->StartGettingPorts(); |  | 
| 1081 |  | 
| 1082   ASSERT_EQ_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 1083   ASSERT_EQ(3U, ports_.size()); |  | 
| 1084   EXPECT_PRED5(CheckCandidate, candidates_[0], |  | 
| 1085       cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp", kClientAddr); |  | 
| 1086   EXPECT_PRED5(CheckCandidate, candidates_[1], |  | 
| 1087       cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", |  | 
| 1088       rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)); |  | 
| 1089   EXPECT_PRED5(CheckCandidate, candidates_[2], |  | 
| 1090       cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", |  | 
| 1091       rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)); |  | 
| 1092   EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |  | 
| 1093   EXPECT_EQ(3U, candidates_.size()); |  | 
| 1094 } |  | 
| 1095 |  | 
| 1096 // Testing DNS resolve for the TURN server, this will test AllocationSequence |  | 
| 1097 // handling the unresolved address signal from TurnPort. |  | 
| 1098 TEST_F(PortAllocatorTest, TestSharedSocketWithServerAddressResolve) { |  | 
| 1099   turn_server_.AddInternalSocket(rtc::SocketAddress("127.0.0.1", 3478), |  | 
| 1100                                  cricket::PROTO_UDP); |  | 
| 1101   AddInterface(kClientAddr); |  | 
| 1102   allocator_.reset(new cricket::BasicPortAllocator(&network_manager_)); |  | 
| 1103   cricket::RelayServerConfig turn_server(cricket::RELAY_TURN); |  | 
| 1104   cricket::RelayCredentials credentials(kTurnUsername, kTurnPassword); |  | 
| 1105   turn_server.credentials = credentials; |  | 
| 1106   turn_server.ports.push_back(cricket::ProtocolAddress( |  | 
| 1107       rtc::SocketAddress("localhost", 3478), cricket::PROTO_UDP, false)); |  | 
| 1108   allocator_->AddTurnServer(turn_server); |  | 
| 1109 |  | 
| 1110   allocator_->set_step_delay(cricket::kMinimumStepDelay); |  | 
| 1111   allocator_->set_flags(allocator().flags() | |  | 
| 1112                         cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET | |  | 
| 1113                         cricket::PORTALLOCATOR_DISABLE_TCP); |  | 
| 1114 |  | 
| 1115   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 1116   session_->StartGettingPorts(); |  | 
| 1117 |  | 
| 1118   EXPECT_EQ_WAIT(2U, ports_.size(), kDefaultAllocationTimeout); |  | 
| 1119 } |  | 
| 1120 |  | 
| 1121 // Test that when PORTALLOCATOR_ENABLE_SHARED_SOCKET is enabled only one port |  | 
| 1122 // is allocated for udp/stun/turn. In this test we should expect all local, |  | 
| 1123 // stun and turn candidates. |  | 
| 1124 TEST_F(PortAllocatorTest, TestSharedSocketWithNatUsingTurn) { |  | 
| 1125   AddInterface(kClientAddr); |  | 
| 1126   ResetWithStunServerAndNat(kStunAddr); |  | 
| 1127 |  | 
| 1128   AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress()); |  | 
| 1129 |  | 
| 1130   allocator_->set_flags(allocator().flags() | |  | 
| 1131                         cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET | |  | 
| 1132                         cricket::PORTALLOCATOR_DISABLE_TCP); |  | 
| 1133 |  | 
| 1134   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 1135   session_->StartGettingPorts(); |  | 
| 1136 |  | 
| 1137   ASSERT_EQ_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 1138   ASSERT_EQ(2U, ports_.size()); |  | 
| 1139   EXPECT_PRED5(CheckCandidate, candidates_[0], |  | 
| 1140       cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp", kClientAddr); |  | 
| 1141   EXPECT_PRED5(CheckCandidate, candidates_[1], |  | 
| 1142       cricket::ICE_CANDIDATE_COMPONENT_RTP, "stun", "udp", |  | 
| 1143       rtc::SocketAddress(kNatUdpAddr.ipaddr(), 0)); |  | 
| 1144   EXPECT_PRED5(CheckCandidate, candidates_[2], |  | 
| 1145       cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", |  | 
| 1146       rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)); |  | 
| 1147   EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |  | 
| 1148   EXPECT_EQ(3U, candidates_.size()); |  | 
| 1149   // Local port will be created first and then TURN port. |  | 
| 1150   EXPECT_EQ(2U, ports_[0]->Candidates().size()); |  | 
| 1151   EXPECT_EQ(1U, ports_[1]->Candidates().size()); |  | 
| 1152 } |  | 
| 1153 |  | 
| 1154 // Test that when PORTALLOCATOR_ENABLE_SHARED_SOCKET is enabled and the TURN |  | 
| 1155 // server is also used as the STUN server, we should get 'local', 'stun', and |  | 
| 1156 // 'relay' candidates. |  | 
| 1157 TEST_F(PortAllocatorTest, TestSharedSocketWithNatUsingTurnAsStun) { |  | 
| 1158   AddInterface(kClientAddr); |  | 
| 1159   // Use an empty SocketAddress to add a NAT without STUN server. |  | 
| 1160   ResetWithStunServerAndNat(SocketAddress()); |  | 
| 1161   AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress()); |  | 
| 1162 |  | 
| 1163   // Must set the step delay to 0 to make sure the relay allocation phase is |  | 
| 1164   // started before the STUN candidates are obtained, so that the STUN binding |  | 
| 1165   // response is processed when both StunPort and TurnPort exist to reproduce |  | 
| 1166   // webrtc issue 3537. |  | 
| 1167   allocator_->set_step_delay(0); |  | 
| 1168   allocator_->set_flags(allocator().flags() | |  | 
| 1169                         cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET | |  | 
| 1170                         cricket::PORTALLOCATOR_DISABLE_TCP); |  | 
| 1171 |  | 
| 1172   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 1173   session_->StartGettingPorts(); |  | 
| 1174 |  | 
| 1175   ASSERT_EQ_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 1176   EXPECT_PRED5(CheckCandidate, candidates_[0], |  | 
| 1177       cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp", kClientAddr); |  | 
| 1178   EXPECT_PRED5(CheckCandidate, candidates_[1], |  | 
| 1179       cricket::ICE_CANDIDATE_COMPONENT_RTP, "stun", "udp", |  | 
| 1180       rtc::SocketAddress(kNatUdpAddr.ipaddr(), 0)); |  | 
| 1181   EXPECT_PRED5(CheckCandidate, candidates_[2], |  | 
| 1182       cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", |  | 
| 1183       rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)); |  | 
| 1184   EXPECT_EQ(candidates_[2].related_address(), candidates_[1].address()); |  | 
| 1185 |  | 
| 1186   EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |  | 
| 1187   EXPECT_EQ(3U, candidates_.size()); |  | 
| 1188   // Local port will be created first and then TURN port. |  | 
| 1189   EXPECT_EQ(2U, ports_[0]->Candidates().size()); |  | 
| 1190   EXPECT_EQ(1U, ports_[1]->Candidates().size()); |  | 
| 1191 } |  | 
| 1192 |  | 
| 1193 // Test that when only a TCP TURN server is available, we do NOT use it as |  | 
| 1194 // a UDP STUN server, as this could leak our IP address. Thus we should only |  | 
| 1195 // expect two ports, a UDPPort and TurnPort. |  | 
| 1196 TEST_F(PortAllocatorTest, TestSharedSocketWithNatUsingTurnTcpOnly) { |  | 
| 1197   turn_server_.AddInternalSocket(kTurnTcpIntAddr, cricket::PROTO_TCP); |  | 
| 1198   AddInterface(kClientAddr); |  | 
| 1199   ResetWithStunServerAndNat(rtc::SocketAddress()); |  | 
| 1200   AddTurnServers(rtc::SocketAddress(), kTurnTcpIntAddr); |  | 
| 1201 |  | 
| 1202   allocator_->set_flags(allocator().flags() | |  | 
| 1203                         cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET | |  | 
| 1204                         cricket::PORTALLOCATOR_DISABLE_TCP); |  | 
| 1205 |  | 
| 1206   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 1207   session_->StartGettingPorts(); |  | 
| 1208 |  | 
| 1209   ASSERT_EQ_WAIT(2U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 1210   ASSERT_EQ(2U, ports_.size()); |  | 
| 1211   EXPECT_PRED5(CheckCandidate, candidates_[0], |  | 
| 1212                cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp", |  | 
| 1213                kClientAddr); |  | 
| 1214   EXPECT_PRED5(CheckCandidate, candidates_[1], |  | 
| 1215                cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", |  | 
| 1216                rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)); |  | 
| 1217   EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |  | 
| 1218   EXPECT_EQ(2U, candidates_.size()); |  | 
| 1219   EXPECT_EQ(1U, ports_[0]->Candidates().size()); |  | 
| 1220   EXPECT_EQ(1U, ports_[1]->Candidates().size()); |  | 
| 1221 } |  | 
| 1222 |  | 
| 1223 // Test that even when PORTALLOCATOR_ENABLE_SHARED_SOCKET is NOT enabled, the |  | 
| 1224 // TURN server is used as the STUN server and we get 'local', 'stun', and |  | 
| 1225 // 'relay' candidates. |  | 
| 1226 // TODO(deadbeef): Remove this test when support for non-shared socket mode |  | 
| 1227 // is removed. |  | 
| 1228 TEST_F(PortAllocatorTest, TestNonSharedSocketWithNatUsingTurnAsStun) { |  | 
| 1229   AddInterface(kClientAddr); |  | 
| 1230   // Use an empty SocketAddress to add a NAT without STUN server. |  | 
| 1231   ResetWithStunServerAndNat(SocketAddress()); |  | 
| 1232   AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress()); |  | 
| 1233 |  | 
| 1234   allocator_->set_flags(allocator().flags() | |  | 
| 1235                         cricket::PORTALLOCATOR_DISABLE_TCP); |  | 
| 1236 |  | 
| 1237   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 1238   session_->StartGettingPorts(); |  | 
| 1239 |  | 
| 1240   ASSERT_EQ_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 1241   ASSERT_EQ(3U, ports_.size()); |  | 
| 1242   EXPECT_PRED5(CheckCandidate, candidates_[0], |  | 
| 1243                cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp", |  | 
| 1244                kClientAddr); |  | 
| 1245   EXPECT_PRED5(CheckCandidate, candidates_[1], |  | 
| 1246                cricket::ICE_CANDIDATE_COMPONENT_RTP, "stun", "udp", |  | 
| 1247                rtc::SocketAddress(kNatUdpAddr.ipaddr(), 0)); |  | 
| 1248   EXPECT_PRED5(CheckCandidate, candidates_[2], |  | 
| 1249                cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", |  | 
| 1250                rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)); |  | 
| 1251   // Not using shared socket, so the STUN request's server reflexive address |  | 
| 1252   // should be different than the TURN request's server reflexive address. |  | 
| 1253   EXPECT_NE(candidates_[2].related_address(), candidates_[1].address()); |  | 
| 1254 |  | 
| 1255   EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |  | 
| 1256   EXPECT_EQ(3U, candidates_.size()); |  | 
| 1257   EXPECT_EQ(1U, ports_[0]->Candidates().size()); |  | 
| 1258   EXPECT_EQ(1U, ports_[1]->Candidates().size()); |  | 
| 1259   EXPECT_EQ(1U, ports_[2]->Candidates().size()); |  | 
| 1260 } |  | 
| 1261 |  | 
| 1262 // Test that even when both a STUN and TURN server are configured, the TURN |  | 
| 1263 // server is used as a STUN server and we get a 'stun' candidate. |  | 
| 1264 TEST_F(PortAllocatorTest, TestSharedSocketWithNatUsingTurnAndStun) { |  | 
| 1265   AddInterface(kClientAddr); |  | 
| 1266   // Configure with STUN server but destroy it, so we can ensure that it's |  | 
| 1267   // the TURN server actually being used as a STUN server. |  | 
| 1268   ResetWithStunServerAndNat(kStunAddr); |  | 
| 1269   stun_server_.reset(); |  | 
| 1270   AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress()); |  | 
| 1271 |  | 
| 1272   allocator_->set_flags(allocator().flags() | |  | 
| 1273                         cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET | |  | 
| 1274                         cricket::PORTALLOCATOR_DISABLE_TCP); |  | 
| 1275 |  | 
| 1276   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 1277   session_->StartGettingPorts(); |  | 
| 1278 |  | 
| 1279   ASSERT_EQ_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout); |  | 
| 1280   EXPECT_PRED5(CheckCandidate, candidates_[0], |  | 
| 1281                cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp", |  | 
| 1282                kClientAddr); |  | 
| 1283   EXPECT_PRED5(CheckCandidate, candidates_[1], |  | 
| 1284                cricket::ICE_CANDIDATE_COMPONENT_RTP, "stun", "udp", |  | 
| 1285                rtc::SocketAddress(kNatUdpAddr.ipaddr(), 0)); |  | 
| 1286   EXPECT_PRED5(CheckCandidate, candidates_[2], |  | 
| 1287                cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", |  | 
| 1288                rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)); |  | 
| 1289   EXPECT_EQ(candidates_[2].related_address(), candidates_[1].address()); |  | 
| 1290 |  | 
| 1291   // Don't bother waiting for STUN timeout, since we already verified |  | 
| 1292   // that we got a STUN candidate from the TURN server. |  | 
| 1293 } |  | 
| 1294 |  | 
| 1295 // This test verifies when PORTALLOCATOR_ENABLE_SHARED_SOCKET flag is enabled |  | 
| 1296 // and fail to generate STUN candidate, local UDP candidate is generated |  | 
| 1297 // properly. |  | 
| 1298 TEST_F(PortAllocatorTest, TestSharedSocketNoUdpAllowed) { |  | 
| 1299   allocator().set_flags(allocator().flags() | |  | 
| 1300                         cricket::PORTALLOCATOR_DISABLE_RELAY | |  | 
| 1301                         cricket::PORTALLOCATOR_DISABLE_TCP | |  | 
| 1302                         cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET); |  | 
| 1303   fss_->AddRule(false, rtc::FP_UDP, rtc::FD_ANY, kClientAddr); |  | 
| 1304   AddInterface(kClientAddr); |  | 
| 1305   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 1306   session_->StartGettingPorts(); |  | 
| 1307   ASSERT_EQ_WAIT(1U, ports_.size(), kDefaultAllocationTimeout); |  | 
| 1308   EXPECT_EQ(1U, candidates_.size()); |  | 
| 1309   EXPECT_PRED5(CheckCandidate, candidates_[0], |  | 
| 1310       cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp", kClientAddr); |  | 
| 1311   // STUN timeout is 9sec. We need to wait to get candidate done signal. |  | 
| 1312   EXPECT_TRUE_WAIT(candidate_allocation_done_, 10000); |  | 
| 1313   EXPECT_EQ(1U, candidates_.size()); |  | 
| 1314 } |  | 
| 1315 |  | 
| 1316 // Test that when the NetworkManager doesn't have permission to enumerate |  | 
| 1317 // adapters, the PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION is specified |  | 
| 1318 // automatically. |  | 
| 1319 TEST_F(PortAllocatorTest, TestNetworkPermissionBlocked) { |  | 
| 1320   network_manager_.set_default_local_addresses(kPrivateAddr.ipaddr(), |  | 
| 1321                                                rtc::IPAddress()); |  | 
| 1322   network_manager_.set_enumeration_permission( |  | 
| 1323       rtc::NetworkManager::ENUMERATION_BLOCKED); |  | 
| 1324   allocator().set_flags(allocator().flags() | |  | 
| 1325                         cricket::PORTALLOCATOR_DISABLE_RELAY | |  | 
| 1326                         cricket::PORTALLOCATOR_DISABLE_TCP | |  | 
| 1327                         cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET); |  | 
| 1328   EXPECT_EQ(0U, allocator_->flags() & |  | 
| 1329                     cricket::PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION); |  | 
| 1330   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 1331   EXPECT_EQ(0U, session_->flags() & |  | 
| 1332                     cricket::PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION); |  | 
| 1333   session_->StartGettingPorts(); |  | 
| 1334   EXPECT_EQ_WAIT(1U, ports_.size(), kDefaultAllocationTimeout); |  | 
| 1335   EXPECT_EQ(1U, candidates_.size()); |  | 
| 1336   EXPECT_PRED5(CheckCandidate, candidates_[0], |  | 
| 1337                cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp", |  | 
| 1338                kPrivateAddr); |  | 
| 1339   EXPECT_TRUE((session_->flags() & |  | 
| 1340                cricket::PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION) != 0); |  | 
| 1341 } |  | 
| 1342 |  | 
| 1343 // This test verifies allocator can use IPv6 addresses along with IPv4. |  | 
| 1344 TEST_F(PortAllocatorTest, TestEnableIPv6Addresses) { |  | 
| 1345   allocator().set_flags(allocator().flags() | |  | 
| 1346                         cricket::PORTALLOCATOR_DISABLE_RELAY | |  | 
| 1347                         cricket::PORTALLOCATOR_ENABLE_IPV6 | |  | 
| 1348                         cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET); |  | 
| 1349   AddInterface(kClientIPv6Addr); |  | 
| 1350   AddInterface(kClientAddr); |  | 
| 1351   allocator_->set_step_delay(cricket::kMinimumStepDelay); |  | 
| 1352   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 1353   session_->StartGettingPorts(); |  | 
| 1354   ASSERT_EQ_WAIT(4U, ports_.size(), kDefaultAllocationTimeout); |  | 
| 1355   EXPECT_EQ(4U, candidates_.size()); |  | 
| 1356   EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); |  | 
| 1357   EXPECT_PRED5(CheckCandidate, candidates_[0], |  | 
| 1358       cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp", |  | 
| 1359       kClientIPv6Addr); |  | 
| 1360   EXPECT_PRED5(CheckCandidate, candidates_[1], |  | 
| 1361       cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp", |  | 
| 1362       kClientAddr); |  | 
| 1363   EXPECT_PRED5(CheckCandidate, candidates_[2], |  | 
| 1364       cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "tcp", |  | 
| 1365       kClientIPv6Addr); |  | 
| 1366   EXPECT_PRED5(CheckCandidate, candidates_[3], |  | 
| 1367       cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "tcp", |  | 
| 1368       kClientAddr); |  | 
| 1369   EXPECT_EQ(4U, candidates_.size()); |  | 
| 1370 } |  | 
| 1371 |  | 
| 1372 TEST_F(PortAllocatorTest, TestStopGettingPorts) { |  | 
| 1373   AddInterface(kClientAddr); |  | 
| 1374   allocator_->set_step_delay(cricket::kDefaultStepDelay); |  | 
| 1375   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 1376   session_->StartGettingPorts(); |  | 
| 1377   ASSERT_EQ_WAIT(2U, candidates_.size(), 1000); |  | 
| 1378   EXPECT_EQ(2U, ports_.size()); |  | 
| 1379   session_->StopGettingPorts(); |  | 
| 1380   EXPECT_TRUE_WAIT(candidate_allocation_done_, 1000); |  | 
| 1381 |  | 
| 1382   // After stopping getting ports, adding a new interface will not start |  | 
| 1383   // getting ports again. |  | 
| 1384   candidates_.clear(); |  | 
| 1385   ports_.clear(); |  | 
| 1386   candidate_allocation_done_ = false; |  | 
| 1387   network_manager_.AddInterface(kClientAddr2); |  | 
| 1388   rtc::Thread::Current()->ProcessMessages(1000); |  | 
| 1389   EXPECT_EQ(0U, candidates_.size()); |  | 
| 1390   EXPECT_EQ(0U, ports_.size()); |  | 
| 1391 } |  | 
| 1392 |  | 
| 1393 TEST_F(PortAllocatorTest, TestClearGettingPorts) { |  | 
| 1394   AddInterface(kClientAddr); |  | 
| 1395   allocator_->set_step_delay(cricket::kDefaultStepDelay); |  | 
| 1396   EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |  | 
| 1397   session_->StartGettingPorts(); |  | 
| 1398   ASSERT_EQ_WAIT(2U, candidates_.size(), 1000); |  | 
| 1399   EXPECT_EQ(2U, ports_.size()); |  | 
| 1400   session_->ClearGettingPorts(); |  | 
| 1401   WAIT(candidate_allocation_done_, 1000); |  | 
| 1402   EXPECT_FALSE(candidate_allocation_done_); |  | 
| 1403 |  | 
| 1404   // After clearing getting ports, adding a new interface will start getting |  | 
| 1405   // ports again. |  | 
| 1406   candidates_.clear(); |  | 
| 1407   ports_.clear(); |  | 
| 1408   candidate_allocation_done_ = false; |  | 
| 1409   network_manager_.AddInterface(kClientAddr2); |  | 
| 1410   ASSERT_EQ_WAIT(2U, candidates_.size(), 1000); |  | 
| 1411   EXPECT_EQ(2U, ports_.size()); |  | 
| 1412 } |  | 
| OLD | NEW | 
|---|