| Index: webrtc/p2p/client/basicportallocator_unittest.cc
 | 
| diff --git a/webrtc/p2p/client/basicportallocator_unittest.cc b/webrtc/p2p/client/basicportallocator_unittest.cc
 | 
| index 4ace7c8a3c20496f7038b7300888bca6db7d6c38..29d29ce1f4d7429b59be2ad9aec8e75f30df2c6d 100644
 | 
| --- a/webrtc/p2p/client/basicportallocator_unittest.cc
 | 
| +++ b/webrtc/p2p/client/basicportallocator_unittest.cc
 | 
| @@ -18,6 +18,7 @@
 | 
|  #include "webrtc/p2p/base/teststunserver.h"
 | 
|  #include "webrtc/p2p/base/testturnserver.h"
 | 
|  #include "webrtc/p2p/client/basicportallocator.h"
 | 
| +#include "webrtc/base/fakeclock.h"
 | 
|  #include "webrtc/base/fakenetwork.h"
 | 
|  #include "webrtc/base/firewallsocketserver.h"
 | 
|  #include "webrtc/base/gunit.h"
 | 
| @@ -107,10 +108,10 @@ std::ostream& operator<<(std::ostream& os,
 | 
|    return os;
 | 
|  }
 | 
|  
 | 
| -class BasicPortAllocatorTest : public testing::Test,
 | 
| -                               public sigslot::has_slots<> {
 | 
| +class BasicPortAllocatorTestBase : public testing::Test,
 | 
| +                                   public sigslot::has_slots<> {
 | 
|   public:
 | 
| -  BasicPortAllocatorTest()
 | 
| +  BasicPortAllocatorTestBase()
 | 
|        : pss_(new rtc::PhysicalSocketServer),
 | 
|          vss_(new rtc::VirtualSocketServer(pss_.get())),
 | 
|          fss_(new rtc::FirewallSocketServer(vss_.get())),
 | 
| @@ -243,15 +244,15 @@ class BasicPortAllocatorTest : public testing::Test,
 | 
|      std::unique_ptr<PortAllocatorSession> session =
 | 
|          allocator_->CreateSession(content_name, component, ice_ufrag, ice_pwd);
 | 
|      session->SignalPortReady.connect(this,
 | 
| -                                     &BasicPortAllocatorTest::OnPortReady);
 | 
| -    session->SignalPortsPruned.connect(this,
 | 
| -                                       &BasicPortAllocatorTest::OnPortsPruned);
 | 
| +                                     &BasicPortAllocatorTestBase::OnPortReady);
 | 
| +    session->SignalPortsPruned.connect(
 | 
| +        this, &BasicPortAllocatorTestBase::OnPortsPruned);
 | 
|      session->SignalCandidatesReady.connect(
 | 
| -        this, &BasicPortAllocatorTest::OnCandidatesReady);
 | 
| +        this, &BasicPortAllocatorTestBase::OnCandidatesReady);
 | 
|      session->SignalCandidatesRemoved.connect(
 | 
| -        this, &BasicPortAllocatorTest::OnCandidatesRemoved);
 | 
| +        this, &BasicPortAllocatorTestBase::OnCandidatesRemoved);
 | 
|      session->SignalCandidatesAllocationDone.connect(
 | 
| -        this, &BasicPortAllocatorTest::OnCandidatesAllocationDone);
 | 
| +        this, &BasicPortAllocatorTestBase::OnCandidatesAllocationDone);
 | 
|      return session;
 | 
|    }
 | 
|  
 | 
| @@ -367,61 +368,6 @@ class BasicPortAllocatorTest : public testing::Test,
 | 
|      }
 | 
|    }
 | 
|  
 | 
| -  // This function starts the port/address gathering and check the existence of
 | 
| -  // candidates as specified. When |expect_stun_candidate| is true,
 | 
| -  // |stun_candidate_addr| carries the expected reflective address, which is
 | 
| -  // also the related address for TURN candidate if it is expected. Otherwise,
 | 
| -  // it should be ignore.
 | 
| -  void CheckDisableAdapterEnumeration(
 | 
| -      uint32_t total_ports,
 | 
| -      const rtc::IPAddress& host_candidate_addr,
 | 
| -      const rtc::IPAddress& stun_candidate_addr,
 | 
| -      const rtc::IPAddress& relay_candidate_udp_transport_addr,
 | 
| -      const rtc::IPAddress& relay_candidate_tcp_transport_addr) {
 | 
| -    network_manager_.set_default_local_addresses(kPrivateAddr.ipaddr(),
 | 
| -                                                 rtc::IPAddress());
 | 
| -    if (!session_) {
 | 
| -      EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
| -    }
 | 
| -    session_->set_flags(session_->flags() |
 | 
| -                        PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION |
 | 
| -                        PORTALLOCATOR_ENABLE_SHARED_SOCKET);
 | 
| -    allocator().set_allow_tcp_listen(false);
 | 
| -    session_->StartGettingPorts();
 | 
| -    EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| -
 | 
| -    uint32_t total_candidates = 0;
 | 
| -    if (!host_candidate_addr.IsNil()) {
 | 
| -      EXPECT_PRED4(HasCandidate, candidates_, "local", "udp",
 | 
| -                   rtc::SocketAddress(kPrivateAddr.ipaddr(), 0));
 | 
| -      ++total_candidates;
 | 
| -    }
 | 
| -    if (!stun_candidate_addr.IsNil()) {
 | 
| -      rtc::SocketAddress related_address(host_candidate_addr, 0);
 | 
| -      if (host_candidate_addr.IsNil()) {
 | 
| -        related_address.SetIP(rtc::GetAnyIP(stun_candidate_addr.family()));
 | 
| -      }
 | 
| -      EXPECT_PRED5(HasCandidateWithRelatedAddr, candidates_, "stun", "udp",
 | 
| -                   rtc::SocketAddress(stun_candidate_addr, 0), related_address);
 | 
| -      ++total_candidates;
 | 
| -    }
 | 
| -    if (!relay_candidate_udp_transport_addr.IsNil()) {
 | 
| -      EXPECT_PRED5(HasCandidateWithRelatedAddr, candidates_, "relay", "udp",
 | 
| -                   rtc::SocketAddress(relay_candidate_udp_transport_addr, 0),
 | 
| -                   rtc::SocketAddress(stun_candidate_addr, 0));
 | 
| -      ++total_candidates;
 | 
| -    }
 | 
| -    if (!relay_candidate_tcp_transport_addr.IsNil()) {
 | 
| -      EXPECT_PRED5(HasCandidateWithRelatedAddr, candidates_, "relay", "udp",
 | 
| -                   rtc::SocketAddress(relay_candidate_tcp_transport_addr, 0),
 | 
| -                   rtc::SocketAddress(stun_candidate_addr, 0));
 | 
| -      ++total_candidates;
 | 
| -    }
 | 
| -
 | 
| -    EXPECT_EQ(total_candidates, candidates_.size());
 | 
| -    EXPECT_EQ(total_ports, ports_.size());
 | 
| -  }
 | 
| -
 | 
|    rtc::VirtualSocketServer* virtual_socket_server() { return vss_.get(); }
 | 
|  
 | 
|   protected:
 | 
| @@ -514,43 +460,89 @@ class BasicPortAllocatorTest : public testing::Test,
 | 
|      allocator().set_step_delay(kMinimumStepDelay);
 | 
|    }
 | 
|  
 | 
| -  void TestUdpTurnPortPrunesTcpTurnPort() {
 | 
| -    turn_server_.AddInternalSocket(kTurnTcpIntAddr, PROTO_TCP);
 | 
| -    AddInterface(kClientAddr);
 | 
| -    allocator_.reset(new BasicPortAllocator(&network_manager_));
 | 
| -    allocator_->SetConfiguration(allocator_->stun_servers(),
 | 
| -                                 allocator_->turn_servers(), 0, true);
 | 
| -    AddTurnServers(kTurnUdpIntAddr, kTurnTcpIntAddr);
 | 
| -    allocator_->set_step_delay(kMinimumStepDelay);
 | 
| -    allocator_->set_flags(allocator().flags() |
 | 
| -                          PORTALLOCATOR_ENABLE_SHARED_SOCKET |
 | 
| -                          PORTALLOCATOR_DISABLE_TCP);
 | 
| +  std::unique_ptr<rtc::PhysicalSocketServer> pss_;
 | 
| +  std::unique_ptr<rtc::VirtualSocketServer> vss_;
 | 
| +  std::unique_ptr<rtc::FirewallSocketServer> fss_;
 | 
| +  rtc::SocketServerScope ss_scope_;
 | 
| +  std::unique_ptr<rtc::NATServer> nat_server_;
 | 
| +  rtc::NATSocketFactory nat_factory_;
 | 
| +  std::unique_ptr<rtc::BasicPacketSocketFactory> nat_socket_factory_;
 | 
| +  std::unique_ptr<TestStunServer> stun_server_;
 | 
| +  TestRelayServer relay_server_;
 | 
| +  TestTurnServer turn_server_;
 | 
| +  rtc::FakeNetworkManager network_manager_;
 | 
| +  std::unique_ptr<BasicPortAllocator> allocator_;
 | 
| +  std::unique_ptr<PortAllocatorSession> session_;
 | 
| +  std::vector<PortInterface*> ports_;
 | 
| +  std::vector<Candidate> candidates_;
 | 
| +  bool candidate_allocation_done_;
 | 
| +};
 | 
|  
 | 
| -    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
| +class BasicPortAllocatorTestWithRealClock : public BasicPortAllocatorTestBase {
 | 
| +};
 | 
| +
 | 
| +class FakeClockBase {
 | 
| + public:
 | 
| +  rtc::ScopedFakeClock fake_clock;
 | 
| +};
 | 
| +
 | 
| +class BasicPortAllocatorTest : public FakeClockBase,
 | 
| +                               public BasicPortAllocatorTestBase {
 | 
| + public:
 | 
| +  // This function starts the port/address gathering and check the existence of
 | 
| +  // candidates as specified. When |expect_stun_candidate| is true,
 | 
| +  // |stun_candidate_addr| carries the expected reflective address, which is
 | 
| +  // also the related address for TURN candidate if it is expected. Otherwise,
 | 
| +  // it should be ignore.
 | 
| +  void CheckDisableAdapterEnumeration(
 | 
| +      uint32_t total_ports,
 | 
| +      const rtc::IPAddress& host_candidate_addr,
 | 
| +      const rtc::IPAddress& stun_candidate_addr,
 | 
| +      const rtc::IPAddress& relay_candidate_udp_transport_addr,
 | 
| +      const rtc::IPAddress& relay_candidate_tcp_transport_addr) {
 | 
| +    network_manager_.set_default_local_addresses(kPrivateAddr.ipaddr(),
 | 
| +                                                 rtc::IPAddress());
 | 
| +    if (!session_) {
 | 
| +      EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
| +    }
 | 
| +    session_->set_flags(session_->flags() |
 | 
| +                        PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION |
 | 
| +                        PORTALLOCATOR_ENABLE_SHARED_SOCKET);
 | 
| +    allocator().set_allow_tcp_listen(false);
 | 
|      session_->StartGettingPorts();
 | 
| -    EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| -    // Only 2 ports (one STUN and one TURN) are actually being used.
 | 
| -    EXPECT_EQ(2U, session_->ReadyPorts().size());
 | 
| -    // We have verified that each port, when it is added to |ports_|, it is
 | 
| -    // found in |ready_ports|, and when it is pruned, it is not found in
 | 
| -    // |ready_ports|, so we only need to verify the content in one of them.
 | 
| -    EXPECT_EQ(2U, ports_.size());
 | 
| -    EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_UDP, kClientAddr));
 | 
| -    EXPECT_EQ(1, CountPorts(ports_, "relay", PROTO_UDP, kClientAddr));
 | 
| -    EXPECT_EQ(0, CountPorts(ports_, "relay", PROTO_TCP, kClientAddr));
 | 
| +    EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                               kDefaultAllocationTimeout, fake_clock);
 | 
|  
 | 
| -    // Now that we remove candidates when a TURN port is pruned, |candidates_|
 | 
| -    // should only contains two candidates regardless whether the TCP TURN port
 | 
| -    // is created before or after the UDP turn port.
 | 
| -    EXPECT_EQ(2U, candidates_.size());
 | 
| -    // There will only be 2 candidates in |ready_candidates| because it only
 | 
| -    // includes the candidates in the ready ports.
 | 
| -    const std::vector<Candidate>& ready_candidates =
 | 
| -        session_->ReadyCandidates();
 | 
| -    EXPECT_EQ(2U, ready_candidates.size());
 | 
| -    EXPECT_PRED4(HasCandidate, ready_candidates, "local", "udp", kClientAddr);
 | 
| -    EXPECT_PRED4(HasCandidate, ready_candidates, "relay", "udp",
 | 
| -                 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0));
 | 
| +    uint32_t total_candidates = 0;
 | 
| +    if (!host_candidate_addr.IsNil()) {
 | 
| +      EXPECT_PRED4(HasCandidate, candidates_, "local", "udp",
 | 
| +                   rtc::SocketAddress(kPrivateAddr.ipaddr(), 0));
 | 
| +      ++total_candidates;
 | 
| +    }
 | 
| +    if (!stun_candidate_addr.IsNil()) {
 | 
| +      rtc::SocketAddress related_address(host_candidate_addr, 0);
 | 
| +      if (host_candidate_addr.IsNil()) {
 | 
| +        related_address.SetIP(rtc::GetAnyIP(stun_candidate_addr.family()));
 | 
| +      }
 | 
| +      EXPECT_PRED5(HasCandidateWithRelatedAddr, candidates_, "stun", "udp",
 | 
| +                   rtc::SocketAddress(stun_candidate_addr, 0), related_address);
 | 
| +      ++total_candidates;
 | 
| +    }
 | 
| +    if (!relay_candidate_udp_transport_addr.IsNil()) {
 | 
| +      EXPECT_PRED5(HasCandidateWithRelatedAddr, candidates_, "relay", "udp",
 | 
| +                   rtc::SocketAddress(relay_candidate_udp_transport_addr, 0),
 | 
| +                   rtc::SocketAddress(stun_candidate_addr, 0));
 | 
| +      ++total_candidates;
 | 
| +    }
 | 
| +    if (!relay_candidate_tcp_transport_addr.IsNil()) {
 | 
| +      EXPECT_PRED5(HasCandidateWithRelatedAddr, candidates_, "relay", "udp",
 | 
| +                   rtc::SocketAddress(relay_candidate_tcp_transport_addr, 0),
 | 
| +                   rtc::SocketAddress(stun_candidate_addr, 0));
 | 
| +      ++total_candidates;
 | 
| +    }
 | 
| +
 | 
| +    EXPECT_EQ(total_candidates, candidates_.size());
 | 
| +    EXPECT_EQ(total_ports, ports_.size());
 | 
|    }
 | 
|  
 | 
|    void TestIPv6TurnPortPrunesIPv4TurnPort() {
 | 
| @@ -571,7 +563,8 @@ class BasicPortAllocatorTest : public testing::Test,
 | 
|  
 | 
|      EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|      session_->StartGettingPorts();
 | 
| -    EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +    EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                               kDefaultAllocationTimeout, fake_clock);
 | 
|      // Three ports (one IPv4 STUN, one IPv6 STUN and one TURN) will be ready.
 | 
|      EXPECT_EQ(3U, session_->ReadyPorts().size());
 | 
|      EXPECT_EQ(3U, ports_.size());
 | 
| @@ -591,6 +584,46 @@ class BasicPortAllocatorTest : public testing::Test,
 | 
|                   rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0));
 | 
|    }
 | 
|  
 | 
| +  void TestUdpTurnPortPrunesTcpTurnPort() {
 | 
| +    turn_server_.AddInternalSocket(kTurnTcpIntAddr, PROTO_TCP);
 | 
| +    AddInterface(kClientAddr);
 | 
| +    allocator_.reset(new BasicPortAllocator(&network_manager_));
 | 
| +    allocator_->SetConfiguration(allocator_->stun_servers(),
 | 
| +                                 allocator_->turn_servers(), 0, true);
 | 
| +    AddTurnServers(kTurnUdpIntAddr, kTurnTcpIntAddr);
 | 
| +    allocator_->set_step_delay(kMinimumStepDelay);
 | 
| +    allocator_->set_flags(allocator().flags() |
 | 
| +                          PORTALLOCATOR_ENABLE_SHARED_SOCKET |
 | 
| +                          PORTALLOCATOR_DISABLE_TCP);
 | 
| +
 | 
| +    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
| +    session_->StartGettingPorts();
 | 
| +    EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                               kDefaultAllocationTimeout, fake_clock);
 | 
| +    // Only 2 ports (one STUN and one TURN) are actually being used.
 | 
| +    EXPECT_EQ(2U, session_->ReadyPorts().size());
 | 
| +    // We have verified that each port, when it is added to |ports_|, it is
 | 
| +    // found in |ready_ports|, and when it is pruned, it is not found in
 | 
| +    // |ready_ports|, so we only need to verify the content in one of them.
 | 
| +    EXPECT_EQ(2U, ports_.size());
 | 
| +    EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_UDP, kClientAddr));
 | 
| +    EXPECT_EQ(1, CountPorts(ports_, "relay", PROTO_UDP, kClientAddr));
 | 
| +    EXPECT_EQ(0, CountPorts(ports_, "relay", PROTO_TCP, kClientAddr));
 | 
| +
 | 
| +    // Now that we remove candidates when a TURN port is pruned, |candidates_|
 | 
| +    // should only contains two candidates regardless whether the TCP TURN port
 | 
| +    // is created before or after the UDP turn port.
 | 
| +    EXPECT_EQ(2U, candidates_.size());
 | 
| +    // There will only be 2 candidates in |ready_candidates| because it only
 | 
| +    // includes the candidates in the ready ports.
 | 
| +    const std::vector<Candidate>& ready_candidates =
 | 
| +        session_->ReadyCandidates();
 | 
| +    EXPECT_EQ(2U, ready_candidates.size());
 | 
| +    EXPECT_PRED4(HasCandidate, ready_candidates, "local", "udp", kClientAddr);
 | 
| +    EXPECT_PRED4(HasCandidate, ready_candidates, "relay", "udp",
 | 
| +                 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0));
 | 
| +  }
 | 
| +
 | 
|    void TestEachInterfaceHasItsOwnTurnPorts() {
 | 
|      turn_server_.AddInternalSocket(kTurnTcpIntAddr, PROTO_TCP);
 | 
|      turn_server_.AddInternalSocket(kTurnUdpIntIPv6Addr, PROTO_UDP);
 | 
| @@ -613,7 +646,8 @@ class BasicPortAllocatorTest : public testing::Test,
 | 
|                            PORTALLOCATOR_ENABLE_IPV6);
 | 
|      EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|      session_->StartGettingPorts();
 | 
| -    EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +    EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                               kDefaultAllocationTimeout, fake_clock);
 | 
|      // 10 ports (4 STUN and 1 TURN ports on each interface) will be ready to
 | 
|      // use.
 | 
|      EXPECT_EQ(10U, session_->ReadyPorts().size());
 | 
| @@ -650,23 +684,6 @@ class BasicPortAllocatorTest : public testing::Test,
 | 
|      EXPECT_PRED4(HasCandidate, ready_candidates, "relay", "udp",
 | 
|                   rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0));
 | 
|    }
 | 
| -
 | 
| -  std::unique_ptr<rtc::PhysicalSocketServer> pss_;
 | 
| -  std::unique_ptr<rtc::VirtualSocketServer> vss_;
 | 
| -  std::unique_ptr<rtc::FirewallSocketServer> fss_;
 | 
| -  rtc::SocketServerScope ss_scope_;
 | 
| -  std::unique_ptr<rtc::NATServer> nat_server_;
 | 
| -  rtc::NATSocketFactory nat_factory_;
 | 
| -  std::unique_ptr<rtc::BasicPacketSocketFactory> nat_socket_factory_;
 | 
| -  std::unique_ptr<TestStunServer> stun_server_;
 | 
| -  TestRelayServer relay_server_;
 | 
| -  TestTurnServer turn_server_;
 | 
| -  rtc::FakeNetworkManager network_manager_;
 | 
| -  std::unique_ptr<BasicPortAllocator> allocator_;
 | 
| -  std::unique_ptr<PortAllocatorSession> session_;
 | 
| -  std::vector<PortInterface*> ports_;
 | 
| -  std::vector<Candidate> candidates_;
 | 
| -  bool candidate_allocation_done_;
 | 
|  };
 | 
|  
 | 
|  // Tests that we can init the port allocator and create a session.
 | 
| @@ -702,7 +719,8 @@ TEST_F(BasicPortAllocatorTest, TestIgnoreOnlyLoopbackNetworkByDefault) {
 | 
|    session_->set_flags(PORTALLOCATOR_DISABLE_STUN | PORTALLOCATOR_DISABLE_RELAY |
 | 
|                        PORTALLOCATOR_DISABLE_TCP);
 | 
|    session_->StartGettingPorts();
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|    EXPECT_EQ(4U, candidates_.size());
 | 
|    for (Candidate candidate : candidates_) {
 | 
|      EXPECT_LT(candidate.address().ip(), 0x12345604U);
 | 
| @@ -723,7 +741,8 @@ TEST_F(BasicPortAllocatorTest, TestIgnoreNetworksAccordingToIgnoreMask) {
 | 
|    session_->set_flags(PORTALLOCATOR_DISABLE_STUN | PORTALLOCATOR_DISABLE_RELAY |
 | 
|                        PORTALLOCATOR_DISABLE_TCP);
 | 
|    session_->StartGettingPorts();
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|    EXPECT_EQ(1U, candidates_.size());
 | 
|    EXPECT_EQ(0x12345602U, candidates_[0].address().ip());
 | 
|  }
 | 
| @@ -745,7 +764,8 @@ TEST_F(BasicPortAllocatorTest, TestGatherLowCostNetworkOnly) {
 | 
|                          cricket::PORTALLOCATOR_DISABLE_COSTLY_NETWORKS);
 | 
|    EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|    EXPECT_EQ(1U, candidates_.size());
 | 
|    EXPECT_TRUE(addr_wifi.EqualIPs(candidates_[0].address()));
 | 
|  
 | 
| @@ -757,7 +777,8 @@ TEST_F(BasicPortAllocatorTest, TestGatherLowCostNetworkOnly) {
 | 
|    AddInterface(addr_unknown1, "test_unknown0", rtc::ADAPTER_TYPE_UNKNOWN);
 | 
|    AddInterface(addr_unknown2, "test_unknown1", rtc::ADAPTER_TYPE_UNKNOWN);
 | 
|    session_->StartGettingPorts();
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|    EXPECT_EQ(2U, candidates_.size());
 | 
|    EXPECT_TRUE((addr_unknown1.EqualIPs(candidates_[0].address()) &&
 | 
|                 addr_unknown2.EqualIPs(candidates_[1].address())) ||
 | 
| @@ -770,7 +791,8 @@ TEST_F(BasicPortAllocatorTest, TestGatherLowCostNetworkOnly) {
 | 
|    candidate_allocation_done_ = false;
 | 
|    AddInterface(addr_wifi, "test_wlan0", rtc::ADAPTER_TYPE_WIFI);
 | 
|    session_->StartGettingPorts();
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|    EXPECT_EQ(1U, candidates_.size());
 | 
|    EXPECT_TRUE(addr_wifi.EqualIPs(candidates_[0].address()));
 | 
|  }
 | 
| @@ -783,7 +805,8 @@ TEST_F(BasicPortAllocatorTest, TestLoopbackNetworkInterface) {
 | 
|    session_->set_flags(PORTALLOCATOR_DISABLE_STUN | PORTALLOCATOR_DISABLE_RELAY |
 | 
|                        PORTALLOCATOR_DISABLE_TCP);
 | 
|    session_->StartGettingPorts();
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|    EXPECT_EQ(1U, candidates_.size());
 | 
|  }
 | 
|  
 | 
| @@ -792,7 +815,8 @@ TEST_F(BasicPortAllocatorTest, TestGetAllPortsWithMinimumStepDelay) {
 | 
|    AddInterface(kClientAddr);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  ASSERT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    EXPECT_EQ(4U, ports_.size());
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "stun", "udp", kClientAddr);
 | 
| @@ -813,7 +837,8 @@ TEST_F(BasicPortAllocatorTest, TestSameNetworkDownAndUpWhenSessionNotStopped) {
 | 
|    AddInterface(kClientAddr, if_name);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  ASSERT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    EXPECT_EQ(4U, ports_.size());
 | 
|    EXPECT_TRUE(candidate_allocation_done_);
 | 
|    candidate_allocation_done_ = false;
 | 
| @@ -821,14 +846,16 @@ TEST_F(BasicPortAllocatorTest, TestSameNetworkDownAndUpWhenSessionNotStopped) {
 | 
|    ports_.clear();
 | 
|  
 | 
|    RemoveInterface(kClientAddr);
 | 
| -  ASSERT_EQ_WAIT(0U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(0U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    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);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    EXPECT_EQ(4U, ports_.size());
 | 
|    EXPECT_TRUE(candidate_allocation_done_);
 | 
|  }
 | 
| @@ -841,7 +868,8 @@ TEST_F(BasicPortAllocatorTest, TestSameNetworkDownAndUpWhenSessionStopped) {
 | 
|    AddInterface(kClientAddr, if_name);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  ASSERT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    EXPECT_EQ(4U, ports_.size());
 | 
|    EXPECT_TRUE(candidate_allocation_done_);
 | 
|    session_->StopGettingPorts();
 | 
| @@ -849,13 +877,15 @@ TEST_F(BasicPortAllocatorTest, TestSameNetworkDownAndUpWhenSessionStopped) {
 | 
|    ports_.clear();
 | 
|  
 | 
|    RemoveInterface(kClientAddr);
 | 
| -  ASSERT_EQ_WAIT(0U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(0U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    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);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(0U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    EXPECT_EQ(0U, ports_.size());
 | 
|    EXPECT_TRUE(candidate_allocation_done_);
 | 
|  }
 | 
| @@ -866,17 +896,17 @@ TEST_F(BasicPortAllocatorTest, TestGetAllPortsWithOneSecondStepDelay) {
 | 
|    allocator_->set_step_delay(kDefaultStepDelay);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  ASSERT_EQ_WAIT(2U, candidates_.size(), 1000);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(2U, candidates_.size(), 1000, fake_clock);
 | 
|    EXPECT_EQ(2U, ports_.size());
 | 
| -  ASSERT_EQ_WAIT(4U, candidates_.size(), 2000);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(4U, candidates_.size(), 2000, fake_clock);
 | 
|    EXPECT_EQ(3U, ports_.size());
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpIntAddr);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpExtAddr);
 | 
| -  ASSERT_EQ_WAIT(6U, candidates_.size(), 1500);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(6U, candidates_.size(), 1500, fake_clock);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "relay", "tcp", kRelayTcpIntAddr);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "local", "tcp", kClientAddr);
 | 
|    EXPECT_EQ(4U, ports_.size());
 | 
| -  ASSERT_EQ_WAIT(7U, candidates_.size(), 2000);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(7U, candidates_.size(), 2000, fake_clock);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "relay", "ssltcp",
 | 
|                 kRelaySslTcpIntAddr);
 | 
|    EXPECT_EQ(4U, ports_.size());
 | 
| @@ -889,7 +919,8 @@ TEST_F(BasicPortAllocatorTest, TestSetupVideoRtpPortsWithNormalSendBuffers) {
 | 
|    AddInterface(kClientAddr);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP, CN_VIDEO));
 | 
|    session_->StartGettingPorts();
 | 
| -  ASSERT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    EXPECT_TRUE(candidate_allocation_done_);
 | 
|    // If we Stop gathering now, we shouldn't get a second "done" callback.
 | 
|    session_->StopGettingPorts();
 | 
| @@ -922,7 +953,8 @@ TEST_F(BasicPortAllocatorTest, TestGetAllPortsPortRange) {
 | 
|    EXPECT_TRUE(SetPortRange(kMinPort, kMaxPort));
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  ASSERT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    EXPECT_EQ(4U, ports_.size());
 | 
|  
 | 
|    int num_nonrelay_candidates = 0;
 | 
| @@ -955,7 +987,8 @@ TEST_F(BasicPortAllocatorTest, TestGetAllPortsNoAdapters) {
 | 
|    network_manager_.set_ipv6_enabled(false);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|    EXPECT_EQ(4U, ports_.size());
 | 
|    EXPECT_EQ(1, CountPorts(ports_, "stun", PROTO_UDP, kAnyAddr));
 | 
|    EXPECT_EQ(1, CountPorts(ports_, "local", PROTO_TCP, kAnyAddr));
 | 
| @@ -1092,7 +1125,8 @@ TEST_F(BasicPortAllocatorTest, TestDisableUdpTurn) {
 | 
|                        PORTALLOCATOR_ENABLE_SHARED_SOCKET);
 | 
|  
 | 
|    session_->StartGettingPorts();
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|  
 | 
|    // Expect to see 2 ports and 2 candidates - TURN/TCP and TCP ports, TCP and
 | 
|    // TURN/TCP candidates.
 | 
| @@ -1118,9 +1152,8 @@ TEST_F(BasicPortAllocatorTest, TestDisableAllPorts) {
 | 
|    session_->set_flags(PORTALLOCATOR_DISABLE_UDP | PORTALLOCATOR_DISABLE_STUN |
 | 
|                        PORTALLOCATOR_DISABLE_RELAY | PORTALLOCATOR_DISABLE_TCP);
 | 
|    session_->StartGettingPorts();
 | 
| -  rtc::Thread::Current()->ProcessMessages(100);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, 1000, fake_clock);
 | 
|    EXPECT_EQ(0U, candidates_.size());
 | 
| -  EXPECT_TRUE(candidate_allocation_done_);
 | 
|  }
 | 
|  
 | 
|  // Test that we don't crash or malfunction if we can't create UDP sockets.
 | 
| @@ -1129,7 +1162,8 @@ TEST_F(BasicPortAllocatorTest, TestGetAllPortsNoUdpSockets) {
 | 
|    fss_->set_udp_sockets_enabled(false);
 | 
|    EXPECT_TRUE(CreateSession(1));
 | 
|    session_->StartGettingPorts();
 | 
| -  ASSERT_EQ_WAIT(5U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(5U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    EXPECT_EQ(2U, ports_.size());
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpIntAddr);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpExtAddr);
 | 
| @@ -1151,7 +1185,8 @@ TEST_F(BasicPortAllocatorTest, TestGetAllPortsNoUdpSocketsNoTcpListen) {
 | 
|    fss_->set_tcp_listen_enabled(false);
 | 
|    EXPECT_TRUE(CreateSession(1));
 | 
|    session_->StartGettingPorts();
 | 
| -  ASSERT_EQ_WAIT(5U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(5U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    EXPECT_EQ(2U, ports_.size());
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpIntAddr);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpExtAddr);
 | 
| @@ -1182,23 +1217,24 @@ TEST_F(BasicPortAllocatorTest, TestGetAllPortsNoUdpAllowed) {
 | 
|    AddInterface(kClientAddr);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  EXPECT_EQ_WAIT(2U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  EXPECT_EQ_SIMULATED_WAIT(2U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    EXPECT_EQ(2U, ports_.size());
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "local", "tcp", kClientAddr);
 | 
|    // RelayPort connection timeout is 3sec. TCP connection with RelayServer
 | 
| -  // will be tried after 3 seconds.
 | 
| -  // TODO(deadbeef): Use simulated clock here, waiting for exactly 3 seconds.
 | 
| -  EXPECT_EQ_WAIT(6U, candidates_.size(), kStunTimeoutMs);
 | 
| +  // will be tried after about 3 seconds.
 | 
| +  EXPECT_EQ_SIMULATED_WAIT(6U, candidates_.size(), 3500, fake_clock);
 | 
|    EXPECT_EQ(3U, ports_.size());
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpIntAddr);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "relay", "tcp", kRelayTcpIntAddr);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "relay", "ssltcp",
 | 
|                 kRelaySslTcpIntAddr);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpExtAddr);
 | 
| -  // Stun Timeout is 9.5sec.
 | 
| -  // TODO(deadbeef): Use simulated clock here, waiting exactly 6.5 seconds.
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kStunTimeoutMs);
 | 
| +  // We wait at least for a full STUN timeout, which is currently 9.5
 | 
| +  // seconds.  But since 3-3.5 seconds already passed (see above), we
 | 
| +  // only need 6.5 more seconds.
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, 6500, fake_clock);
 | 
|  }
 | 
|  
 | 
|  TEST_F(BasicPortAllocatorTest, TestCandidatePriorityOfMultipleInterfaces) {
 | 
| @@ -1210,7 +1246,8 @@ TEST_F(BasicPortAllocatorTest, TestCandidatePriorityOfMultipleInterfaces) {
 | 
|                          PORTALLOCATOR_DISABLE_RELAY);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|    ASSERT_EQ(2U, candidates_.size());
 | 
|    EXPECT_EQ(2U, ports_.size());
 | 
|    // Candidates priorities should be different.
 | 
| @@ -1222,7 +1259,8 @@ TEST_F(BasicPortAllocatorTest, TestGetAllPortsRestarts) {
 | 
|    AddInterface(kClientAddr);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  EXPECT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  EXPECT_EQ_SIMULATED_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    EXPECT_EQ(4U, ports_.size());
 | 
|    EXPECT_TRUE(candidate_allocation_done_);
 | 
|    // TODO(deadbeef): Extend this to verify ICE restart.
 | 
| @@ -1240,7 +1278,8 @@ TEST_F(BasicPortAllocatorTest, TestSessionUsesOwnCandidateFilter) {
 | 
|    session_->StartGettingPorts();
 | 
|    // 7 candidates and 4 ports is what we would normally get (see the
 | 
|    // TestGetAllPorts* tests).
 | 
| -  EXPECT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  EXPECT_EQ_SIMULATED_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    EXPECT_EQ(4U, ports_.size());
 | 
|    EXPECT_TRUE(candidate_allocation_done_);
 | 
|  }
 | 
| @@ -1257,7 +1296,8 @@ TEST_F(BasicPortAllocatorTest, TestCandidateFilterWithRelayOnly) {
 | 
|    allocator().set_candidate_filter(CF_RELAY);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp",
 | 
|                 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0));
 | 
|  
 | 
| @@ -1275,7 +1315,8 @@ TEST_F(BasicPortAllocatorTest, TestCandidateFilterWithHostOnly) {
 | 
|    allocator().set_candidate_filter(CF_HOST);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|    EXPECT_EQ(2U, candidates_.size());  // Host UDP/TCP candidates only.
 | 
|    EXPECT_EQ(2U, ports_.size());       // UDP/TCP ports only.
 | 
|    for (const Candidate& candidate : candidates_) {
 | 
| @@ -1292,7 +1333,8 @@ TEST_F(BasicPortAllocatorTest, TestCandidateFilterWithReflexiveOnly) {
 | 
|    allocator().set_candidate_filter(CF_REFLEXIVE);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|    // Host is behind NAT, no private address will be exposed. Hence only UDP
 | 
|    // port with STUN candidate will be sent outside.
 | 
|    EXPECT_EQ(1U, candidates_.size());  // Only STUN candidate.
 | 
| @@ -1310,7 +1352,8 @@ TEST_F(BasicPortAllocatorTest, TestCandidateFilterWithReflexiveOnlyAndNoNAT) {
 | 
|    allocator().set_candidate_filter(CF_REFLEXIVE);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|    // Host has a public address, both UDP and TCP candidates will be exposed.
 | 
|    EXPECT_EQ(2U, candidates_.size());  // Local UDP + TCP candidate.
 | 
|    EXPECT_EQ(2U, ports_.size());  //  UDP and TCP ports will be in ready state.
 | 
| @@ -1324,7 +1367,8 @@ TEST_F(BasicPortAllocatorTest, TestEnableSharedUfrag) {
 | 
|    AddInterface(kClientAddr);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  ASSERT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "stun", "udp", kClientAddr);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "local", "tcp", kClientAddr);
 | 
| @@ -1346,10 +1390,12 @@ TEST_F(BasicPortAllocatorTest, TestSharedSocketWithoutNat) {
 | 
|                          PORTALLOCATOR_ENABLE_SHARED_SOCKET);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  ASSERT_EQ_WAIT(6U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(6U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    EXPECT_EQ(3U, ports_.size());
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr);
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|  }
 | 
|  
 | 
|  // Test that when PORTALLOCATOR_ENABLE_SHARED_SOCKET is enabled only one port
 | 
| @@ -1363,12 +1409,14 @@ TEST_F(BasicPortAllocatorTest, TestSharedSocketWithNat) {
 | 
|                          PORTALLOCATOR_ENABLE_SHARED_SOCKET);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  ASSERT_EQ_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    ASSERT_EQ(2U, ports_.size());
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "stun", "udp",
 | 
|                 rtc::SocketAddress(kNatUdpAddr.ipaddr(), 0));
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|    EXPECT_EQ(3U, candidates_.size());
 | 
|  }
 | 
|  
 | 
| @@ -1388,14 +1436,16 @@ TEST_F(BasicPortAllocatorTest, TestSharedSocketWithoutNatUsingTurn) {
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
|  
 | 
| -  ASSERT_EQ_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    ASSERT_EQ(3U, ports_.size());
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp",
 | 
|                 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0));
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp",
 | 
|                 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0));
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|    EXPECT_EQ(3U, candidates_.size());
 | 
|  }
 | 
|  
 | 
| @@ -1469,7 +1519,11 @@ TEST_F(BasicPortAllocatorTest,
 | 
|  
 | 
|  // Testing DNS resolve for the TURN server, this will test AllocationSequence
 | 
|  // handling the unresolved address signal from TurnPort.
 | 
| -TEST_F(BasicPortAllocatorTest, TestSharedSocketWithServerAddressResolve) {
 | 
| +// TODO(pthatcher): Make this test work with SIMULATED_WAIT. It
 | 
| +// appears that it doesn't currently because of the DNS look up not
 | 
| +// using the fake clock.
 | 
| +TEST_F(BasicPortAllocatorTestWithRealClock,
 | 
| +       TestSharedSocketWithServerAddressResolve) {
 | 
|    turn_server_.AddInternalSocket(rtc::SocketAddress("127.0.0.1", 3478),
 | 
|                                   PROTO_UDP);
 | 
|    AddInterface(kClientAddr);
 | 
| @@ -1508,14 +1562,16 @@ TEST_F(BasicPortAllocatorTest, TestSharedSocketWithNatUsingTurn) {
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
|  
 | 
| -  ASSERT_EQ_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    ASSERT_EQ(2U, ports_.size());
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "stun", "udp",
 | 
|                 rtc::SocketAddress(kNatUdpAddr.ipaddr(), 0));
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp",
 | 
|                 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0));
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|    EXPECT_EQ(3U, candidates_.size());
 | 
|    // Local port will be created first and then TURN port.
 | 
|    EXPECT_EQ(2U, ports_[0]->Candidates().size());
 | 
| @@ -1543,7 +1599,8 @@ TEST_F(BasicPortAllocatorTest, TestSharedSocketWithNatUsingTurnAsStun) {
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
|  
 | 
| -  ASSERT_EQ_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr);
 | 
|    Candidate stun_candidate;
 | 
|    EXPECT_PRED5(FindCandidate, candidates_, "stun", "udp",
 | 
| @@ -1552,7 +1609,8 @@ TEST_F(BasicPortAllocatorTest, TestSharedSocketWithNatUsingTurnAsStun) {
 | 
|                 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0),
 | 
|                 stun_candidate.address());
 | 
|  
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|    EXPECT_EQ(3U, candidates_.size());
 | 
|    // Local port will be created first and then TURN port.
 | 
|    EXPECT_EQ(2U, ports_[0]->Candidates().size());
 | 
| @@ -1575,12 +1633,14 @@ TEST_F(BasicPortAllocatorTest, TestSharedSocketWithNatUsingTurnTcpOnly) {
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
|  
 | 
| -  ASSERT_EQ_WAIT(2U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(2U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    ASSERT_EQ(2U, ports_.size());
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp",
 | 
|                 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0));
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|    EXPECT_EQ(2U, candidates_.size());
 | 
|    EXPECT_EQ(1U, ports_[0]->Candidates().size());
 | 
|    EXPECT_EQ(1U, ports_[1]->Candidates().size());
 | 
| @@ -1602,7 +1662,8 @@ TEST_F(BasicPortAllocatorTest, TestNonSharedSocketWithNatUsingTurnAsStun) {
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
|  
 | 
| -  ASSERT_EQ_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    ASSERT_EQ(3U, ports_.size());
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr);
 | 
|    Candidate stun_candidate;
 | 
| @@ -1616,7 +1677,8 @@ TEST_F(BasicPortAllocatorTest, TestNonSharedSocketWithNatUsingTurnAsStun) {
 | 
|    // should be different than the TURN request's server reflexive address.
 | 
|    EXPECT_NE(turn_candidate.related_address(), stun_candidate.address());
 | 
|  
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|    EXPECT_EQ(3U, candidates_.size());
 | 
|    EXPECT_EQ(1U, ports_[0]->Candidates().size());
 | 
|    EXPECT_EQ(1U, ports_[1]->Candidates().size());
 | 
| @@ -1640,7 +1702,8 @@ TEST_F(BasicPortAllocatorTest, TestSharedSocketWithNatUsingTurnAndStun) {
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
|  
 | 
| -  ASSERT_EQ_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr);
 | 
|    Candidate stun_candidate;
 | 
|    EXPECT_PRED5(FindCandidate, candidates_, "stun", "udp",
 | 
| @@ -1664,11 +1727,13 @@ TEST_F(BasicPortAllocatorTest, TestSharedSocketNoUdpAllowed) {
 | 
|    AddInterface(kClientAddr);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  ASSERT_EQ_WAIT(1U, ports_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(1U, ports_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    EXPECT_EQ(1U, candidates_.size());
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr);
 | 
|    // STUN timeout is 9.5sec. We need to wait to get candidate done signal.
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kStunTimeoutMs);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, kStunTimeoutMs,
 | 
| +                             fake_clock);
 | 
|    EXPECT_EQ(1U, candidates_.size());
 | 
|  }
 | 
|  
 | 
| @@ -1688,7 +1753,8 @@ TEST_F(BasicPortAllocatorTest, TestNetworkPermissionBlocked) {
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    EXPECT_EQ(0U, session_->flags() & PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION);
 | 
|    session_->StartGettingPorts();
 | 
| -  EXPECT_EQ_WAIT(1U, ports_.size(), kDefaultAllocationTimeout);
 | 
| +  EXPECT_EQ_SIMULATED_WAIT(1U, ports_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    EXPECT_EQ(1U, candidates_.size());
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kPrivateAddr);
 | 
|    EXPECT_NE(0U, session_->flags() & PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION);
 | 
| @@ -1704,9 +1770,11 @@ TEST_F(BasicPortAllocatorTest, TestEnableIPv6Addresses) {
 | 
|    allocator_->set_step_delay(kMinimumStepDelay);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  ASSERT_EQ_WAIT(4U, ports_.size(), kDefaultAllocationTimeout);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(4U, ports_.size(), kDefaultAllocationTimeout,
 | 
| +                           fake_clock);
 | 
|    EXPECT_EQ(4U, candidates_.size());
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientIPv6Addr);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr);
 | 
|    EXPECT_PRED4(HasCandidate, candidates_, "local", "tcp", kClientIPv6Addr);
 | 
| @@ -1719,10 +1787,10 @@ TEST_F(BasicPortAllocatorTest, TestStopGettingPorts) {
 | 
|    allocator_->set_step_delay(kDefaultStepDelay);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  ASSERT_EQ_WAIT(2U, candidates_.size(), 1000);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(2U, candidates_.size(), 1000, fake_clock);
 | 
|    EXPECT_EQ(2U, ports_.size());
 | 
|    session_->StopGettingPorts();
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, 1000);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, 1000, fake_clock);
 | 
|  
 | 
|    // After stopping getting ports, adding a new interface will not start
 | 
|    // getting ports again.
 | 
| @@ -1731,7 +1799,7 @@ TEST_F(BasicPortAllocatorTest, TestStopGettingPorts) {
 | 
|    ports_.clear();
 | 
|    candidate_allocation_done_ = false;
 | 
|    network_manager_.AddInterface(kClientAddr2);
 | 
| -  rtc::Thread::Current()->ProcessMessages(1000);
 | 
| +  SIMULATED_WAIT(false, 1000, fake_clock);
 | 
|    EXPECT_EQ(0U, candidates_.size());
 | 
|    EXPECT_EQ(0U, ports_.size());
 | 
|  }
 | 
| @@ -1741,10 +1809,10 @@ TEST_F(BasicPortAllocatorTest, TestClearGettingPorts) {
 | 
|    allocator_->set_step_delay(kDefaultStepDelay);
 | 
|    EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
 | 
|    session_->StartGettingPorts();
 | 
| -  ASSERT_EQ_WAIT(2U, candidates_.size(), 1000);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(2U, candidates_.size(), 1000, fake_clock);
 | 
|    EXPECT_EQ(2U, ports_.size());
 | 
|    session_->ClearGettingPorts();
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, 1000);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, 1000, fake_clock);
 | 
|  
 | 
|    // After clearing getting ports, adding a new interface will start getting
 | 
|    // ports again.
 | 
| @@ -1753,9 +1821,10 @@ TEST_F(BasicPortAllocatorTest, TestClearGettingPorts) {
 | 
|    ports_.clear();
 | 
|    candidate_allocation_done_ = false;
 | 
|    network_manager_.AddInterface(kClientAddr2);
 | 
| -  ASSERT_EQ_WAIT(2U, candidates_.size(), 1000);
 | 
| +  ASSERT_EQ_SIMULATED_WAIT(2U, candidates_.size(), 1000, fake_clock);
 | 
|    EXPECT_EQ(2U, ports_.size());
 | 
| -  EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
 | 
| +  EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
 | 
| +                             kDefaultAllocationTimeout, fake_clock);
 | 
|  }
 | 
|  
 | 
|  // Test that the ports and candidates are updated with new ufrag/pwd/etc. when
 | 
| @@ -1767,8 +1836,8 @@ TEST_F(BasicPortAllocatorTest, TestTransportInformationUpdated) {
 | 
|                                 allocator_->turn_servers(), pool_size, false);
 | 
|    const PortAllocatorSession* peeked_session = allocator_->GetPooledSession();
 | 
|    ASSERT_NE(nullptr, peeked_session);
 | 
| -  EXPECT_EQ_WAIT(true, peeked_session->CandidatesAllocationDone(),
 | 
| -                 kDefaultAllocationTimeout);
 | 
| +  EXPECT_EQ_SIMULATED_WAIT(true, peeked_session->CandidatesAllocationDone(),
 | 
| +                           kDefaultAllocationTimeout, fake_clock);
 | 
|    // Expect that when TakePooledSession is called,
 | 
|    // UpdateTransportInformationInternal will be called and the
 | 
|    // BasicPortAllocatorSession will update the ufrag/pwd of ports and
 | 
| @@ -1803,8 +1872,8 @@ TEST_F(BasicPortAllocatorTest, TestSetCandidateFilterAfterCandidatesGathered) {
 | 
|                                 allocator_->turn_servers(), pool_size, false);
 | 
|    const PortAllocatorSession* peeked_session = allocator_->GetPooledSession();
 | 
|    ASSERT_NE(nullptr, peeked_session);
 | 
| -  EXPECT_EQ_WAIT(true, peeked_session->CandidatesAllocationDone(),
 | 
| -                 kDefaultAllocationTimeout);
 | 
| +  EXPECT_EQ_SIMULATED_WAIT(true, peeked_session->CandidatesAllocationDone(),
 | 
| +                           kDefaultAllocationTimeout, fake_clock);
 | 
|    size_t initial_candidates_size = peeked_session->ReadyCandidates().size();
 | 
|    size_t initial_ports_size = peeked_session->ReadyPorts().size();
 | 
|    allocator_->set_candidate_filter(CF_RELAY);
 | 
| 
 |