| Index: webrtc/p2p/base/p2ptransportchannel_unittest.cc
|
| diff --git a/webrtc/p2p/base/p2ptransportchannel_unittest.cc b/webrtc/p2p/base/p2ptransportchannel_unittest.cc
|
| index d367d269d969dc1eb5270d03ddb96d143d4b44ce..cac6fd58296bb0af369cafb5c1e995dd965769ff 100644
|
| --- a/webrtc/p2p/base/p2ptransportchannel_unittest.cc
|
| +++ b/webrtc/p2p/base/p2ptransportchannel_unittest.cc
|
| @@ -540,16 +540,17 @@ class P2PTransportChannelTestBase : public testing::Test,
|
| }
|
|
|
| void Test(const Result& expected) {
|
| + rtc::ScopedFakeClock clock;
|
| int64_t connect_start = rtc::TimeMillis();
|
| int64_t connect_time;
|
|
|
| // Create the channels and wait for them to connect.
|
| CreateChannels();
|
| - EXPECT_TRUE_WAIT_MARGIN(ep1_ch1() != NULL && ep2_ch1() != NULL &&
|
| - ep1_ch1()->receiving() &&
|
| - ep1_ch1()->writable() &&
|
| - ep2_ch1()->receiving() && ep2_ch1()->writable(),
|
| - expected.connect_wait, kShortTimeout);
|
| + EXPECT_TRUE_SIMULATED_WAIT(
|
| + ep1_ch1() != NULL && ep2_ch1() != NULL && ep1_ch1()->receiving() &&
|
| + ep1_ch1()->writable() && ep2_ch1()->receiving() &&
|
| + ep2_ch1()->writable(),
|
| + expected.connect_wait + kShortTimeout, clock);
|
| connect_time = rtc::TimeMillis() - connect_start;
|
| if (connect_time < expected.connect_wait) {
|
| LOG(LS_INFO) << "Connect time: " << connect_time << " ms";
|
| @@ -563,19 +564,19 @@ class P2PTransportChannelTestBase : public testing::Test,
|
| if (ep1_ch1()->selected_connection() && ep2_ch1()->selected_connection()) {
|
| int64_t converge_start = rtc::TimeMillis();
|
| int64_t converge_time;
|
| - int64_t converge_wait = 2000;
|
| // Verifying local and remote channel selected connection information.
|
| // This is done only for the RFC 5245 as controlled agent will use
|
| // USE-CANDIDATE from controlling (ep1) agent. We can easily predict from
|
| // EP1 result matrix.
|
| - EXPECT_TRUE_WAIT_MARGIN(
|
| - CheckCandidate1(expected) && CheckCandidate2(expected), converge_wait,
|
| - converge_wait);
|
| + EXPECT_TRUE_SIMULATED_WAIT(
|
| + CheckCandidate1(expected) && CheckCandidate2(expected),
|
| + kMediumTimeout, clock);
|
| // Also do EXPECT_EQ on each part so that failures are more verbose.
|
| ExpectCandidate1(expected);
|
| ExpectCandidate2(expected);
|
|
|
| converge_time = rtc::TimeMillis() - converge_start;
|
| + int64_t converge_wait = 2000;
|
| if (converge_time < converge_wait) {
|
| LOG(LS_INFO) << "Converge time: " << converge_time << " ms";
|
| } else {
|
| @@ -584,23 +585,25 @@ class P2PTransportChannelTestBase : public testing::Test,
|
| }
|
| }
|
| // Try sending some data to other end.
|
| - TestSendRecv();
|
| + TestSendRecv(clock);
|
|
|
| // Destroy the channels, and wait for them to be fully cleaned up.
|
| DestroyChannels();
|
| }
|
|
|
| - void TestSendRecv() {
|
| + void TestSendRecv(rtc::FakeClock& clock) {
|
| for (int i = 0; i < 10; ++i) {
|
| const char* data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
|
| int len = static_cast<int>(strlen(data));
|
| // local_channel1 <==> remote_channel1
|
| - EXPECT_EQ_WAIT(len, SendData(ep1_ch1(), data, len), kMediumTimeout);
|
| - EXPECT_TRUE_WAIT(CheckDataOnChannel(ep2_ch1(), data, len),
|
| - kMediumTimeout);
|
| - EXPECT_EQ_WAIT(len, SendData(ep2_ch1(), data, len), kMediumTimeout);
|
| - EXPECT_TRUE_WAIT(CheckDataOnChannel(ep1_ch1(), data, len),
|
| - kMediumTimeout);
|
| + EXPECT_EQ_SIMULATED_WAIT(len, SendData(ep1_ch1(), data, len),
|
| + kMediumTimeout, clock);
|
| + EXPECT_TRUE_SIMULATED_WAIT(CheckDataOnChannel(ep2_ch1(), data, len),
|
| + kMediumTimeout, clock);
|
| + EXPECT_EQ_SIMULATED_WAIT(len, SendData(ep2_ch1(), data, len),
|
| + kMediumTimeout, clock);
|
| + EXPECT_TRUE_SIMULATED_WAIT(CheckDataOnChannel(ep1_ch1(), data, len),
|
| + kMediumTimeout, clock);
|
| }
|
| }
|
|
|
| @@ -610,11 +613,13 @@ class P2PTransportChannelTestBase : public testing::Test,
|
| // new connection using the newly generated ice candidates.
|
| // Before calling this function the end points must be configured.
|
| void TestHandleIceUfragPasswordChanged() {
|
| + rtc::ScopedFakeClock clock;
|
| ep1_ch1()->SetRemoteIceParameters(kIceParams[1]);
|
| ep2_ch1()->SetRemoteIceParameters(kIceParams[0]);
|
| - EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
|
| - ep2_ch1()->receiving() && ep2_ch1()->writable(),
|
| - kShortTimeout, kShortTimeout);
|
| + EXPECT_TRUE_SIMULATED_WAIT(
|
| + ep1_ch1()->receiving() && ep1_ch1()->writable() &&
|
| + ep2_ch1()->receiving() && ep2_ch1()->writable(),
|
| + kMediumTimeout, clock);
|
|
|
| const Candidate* old_local_candidate1 = LocalCandidate(ep1_ch1());
|
| const Candidate* old_local_candidate2 = LocalCandidate(ep2_ch1());
|
| @@ -629,25 +634,26 @@ class P2PTransportChannelTestBase : public testing::Test,
|
| ep2_ch1()->SetRemoteIceParameters(kIceParams[2]);
|
| ep2_ch1()->MaybeStartGathering();
|
|
|
| - EXPECT_TRUE_WAIT_MARGIN(LocalCandidate(ep1_ch1())->generation() !=
|
| - old_local_candidate1->generation(),
|
| - kShortTimeout, kShortTimeout);
|
| - EXPECT_TRUE_WAIT_MARGIN(LocalCandidate(ep2_ch1())->generation() !=
|
| - old_local_candidate2->generation(),
|
| - kShortTimeout, kShortTimeout);
|
| - EXPECT_TRUE_WAIT_MARGIN(RemoteCandidate(ep1_ch1())->generation() !=
|
| - old_remote_candidate1->generation(),
|
| - kShortTimeout, kShortTimeout);
|
| - EXPECT_TRUE_WAIT_MARGIN(RemoteCandidate(ep2_ch1())->generation() !=
|
| - old_remote_candidate2->generation(),
|
| - kShortTimeout, kShortTimeout);
|
| + EXPECT_TRUE_SIMULATED_WAIT(LocalCandidate(ep1_ch1())->generation() !=
|
| + old_local_candidate1->generation(),
|
| + kMediumTimeout, clock);
|
| + EXPECT_TRUE_SIMULATED_WAIT(LocalCandidate(ep2_ch1())->generation() !=
|
| + old_local_candidate2->generation(),
|
| + kMediumTimeout, clock);
|
| + EXPECT_TRUE_SIMULATED_WAIT(RemoteCandidate(ep1_ch1())->generation() !=
|
| + old_remote_candidate1->generation(),
|
| + kMediumTimeout, clock);
|
| + EXPECT_TRUE_SIMULATED_WAIT(RemoteCandidate(ep2_ch1())->generation() !=
|
| + old_remote_candidate2->generation(),
|
| + kMediumTimeout, clock);
|
| EXPECT_EQ(1u, RemoteCandidate(ep2_ch1())->generation());
|
| EXPECT_EQ(1u, RemoteCandidate(ep1_ch1())->generation());
|
| }
|
|
|
| void TestSignalRoleConflict() {
|
| - SetIceTiebreaker(0,
|
| - kLowTiebreaker); // Default EP1 is in controlling state.
|
| + rtc::ScopedFakeClock clock;
|
| + // Default EP1 is in controlling state.
|
| + SetIceTiebreaker(0, kLowTiebreaker);
|
|
|
| SetIceRole(1, ICEROLE_CONTROLLING);
|
| SetIceTiebreaker(1, kHighTiebreaker);
|
| @@ -656,17 +662,18 @@ class P2PTransportChannelTestBase : public testing::Test,
|
| CreateChannels();
|
| // Since both the channels initiated with controlling state and channel2
|
| // has higher tiebreaker value, channel1 should receive SignalRoleConflict.
|
| - EXPECT_TRUE_WAIT(GetRoleConflict(0), kShortTimeout);
|
| + EXPECT_TRUE_SIMULATED_WAIT(GetRoleConflict(0), kShortTimeout, clock);
|
| EXPECT_FALSE(GetRoleConflict(1));
|
|
|
| - EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
|
| - ep2_ch1()->receiving() && ep2_ch1()->writable(),
|
| - kShortTimeout);
|
| + EXPECT_TRUE_SIMULATED_WAIT(
|
| + ep1_ch1()->receiving() && ep1_ch1()->writable() &&
|
| + ep2_ch1()->receiving() && ep2_ch1()->writable(),
|
| + kShortTimeout, clock);
|
|
|
| EXPECT_TRUE(ep1_ch1()->selected_connection() &&
|
| ep2_ch1()->selected_connection());
|
|
|
| - TestSendRecv();
|
| + TestSendRecv(clock);
|
| }
|
|
|
| void OnReadyToSend(TransportChannel* ch) {
|
| @@ -1155,13 +1162,15 @@ TEST_F(P2PTransportChannelTest, HandleUfragPwdChangeSymmetricNat) {
|
|
|
| // Test the operation of GetStats.
|
| TEST_F(P2PTransportChannelTest, GetStats) {
|
| + rtc::ScopedFakeClock clock;
|
| ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags,
|
| kDefaultPortAllocatorFlags);
|
| CreateChannels();
|
| - EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
|
| - ep2_ch1()->receiving() && ep2_ch1()->writable(),
|
| - kShortTimeout, kShortTimeout);
|
| - TestSendRecv();
|
| + EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
|
| + ep2_ch1()->receiving() &&
|
| + ep2_ch1()->writable(),
|
| + kMediumTimeout, clock);
|
| + TestSendRecv(clock);
|
| ConnectionInfos infos;
|
| ASSERT_TRUE(ep1_ch1()->GetStats(&infos));
|
| ASSERT_TRUE(infos.size() >= 1);
|
| @@ -1514,6 +1523,7 @@ TEST_F(P2PTransportChannelTest, RemoteCandidatesWithoutUfragPwd) {
|
| // Test that a host behind NAT cannot be reached when incoming_only
|
| // is set to true.
|
| TEST_F(P2PTransportChannelTest, IncomingOnlyBlocked) {
|
| + rtc::ScopedFakeClock clock;
|
| ConfigureEndpoints(NAT_FULL_CONE, OPEN, kDefaultPortAllocatorFlags,
|
| kDefaultPortAllocatorFlags);
|
|
|
| @@ -1522,7 +1532,7 @@ TEST_F(P2PTransportChannelTest, IncomingOnlyBlocked) {
|
| ep1_ch1()->set_incoming_only(true);
|
|
|
| // Pump for 1 second and verify that the channels are not connected.
|
| - rtc::Thread::Current()->ProcessMessages(kShortTimeout);
|
| + SIMULATED_WAIT(false, kShortTimeout, clock);
|
|
|
| EXPECT_FALSE(ep1_ch1()->receiving());
|
| EXPECT_FALSE(ep1_ch1()->writable());
|
| @@ -1535,6 +1545,7 @@ TEST_F(P2PTransportChannelTest, IncomingOnlyBlocked) {
|
| // Test that a peer behind NAT can connect to a peer that has
|
| // incoming_only flag set.
|
| TEST_F(P2PTransportChannelTest, IncomingOnlyOpen) {
|
| + rtc::ScopedFakeClock clock;
|
| ConfigureEndpoints(OPEN, NAT_FULL_CONE, kDefaultPortAllocatorFlags,
|
| kDefaultPortAllocatorFlags);
|
|
|
| @@ -1542,15 +1553,17 @@ TEST_F(P2PTransportChannelTest, IncomingOnlyOpen) {
|
| CreateChannels();
|
| ep1_ch1()->set_incoming_only(true);
|
|
|
| - EXPECT_TRUE_WAIT_MARGIN(ep1_ch1() != NULL && ep2_ch1() != NULL &&
|
| - ep1_ch1()->receiving() && ep1_ch1()->writable() &&
|
| - ep2_ch1()->receiving() && ep2_ch1()->writable(),
|
| - kShortTimeout, kShortTimeout);
|
| + EXPECT_TRUE_SIMULATED_WAIT(
|
| + ep1_ch1() != NULL && ep2_ch1() != NULL && ep1_ch1()->receiving() &&
|
| + ep1_ch1()->writable() && ep2_ch1()->receiving() &&
|
| + ep2_ch1()->writable(),
|
| + kMediumTimeout, clock);
|
|
|
| DestroyChannels();
|
| }
|
|
|
| TEST_F(P2PTransportChannelTest, TestTcpConnectionsFromActiveToPassive) {
|
| + rtc::ScopedFakeClock clock;
|
| AddAddress(0, kPublicAddrs[0]);
|
| AddAddress(1, kPublicAddrs[1]);
|
|
|
| @@ -1585,15 +1598,16 @@ TEST_F(P2PTransportChannelTest, TestTcpConnectionsFromActiveToPassive) {
|
| ResumeCandidates(0);
|
| ResumeCandidates(1);
|
|
|
| - EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
|
| - ep2_ch1()->receiving() && ep2_ch1()->writable(),
|
| - kShortTimeout);
|
| + EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
|
| + ep2_ch1()->receiving() &&
|
| + ep2_ch1()->writable(),
|
| + kShortTimeout, clock);
|
| EXPECT_TRUE(ep1_ch1()->selected_connection() &&
|
| ep2_ch1()->selected_connection() &&
|
| LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) &&
|
| RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1]));
|
|
|
| - TestSendRecv();
|
| + TestSendRecv(clock);
|
| DestroyChannels();
|
| }
|
|
|
| @@ -1606,6 +1620,7 @@ TEST_F(P2PTransportChannelTest, TestIceRoleConflict) {
|
| // Tests that the ice configs (protocol, tiebreaker and role) can be passed
|
| // down to ports.
|
| TEST_F(P2PTransportChannelTest, TestIceConfigWillPassDownToPort) {
|
| + rtc::ScopedFakeClock clock;
|
| AddAddress(0, kPublicAddrs[0]);
|
| AddAddress(1, kPublicAddrs[1]);
|
|
|
| @@ -1618,7 +1633,7 @@ TEST_F(P2PTransportChannelTest, TestIceConfigWillPassDownToPort) {
|
|
|
| CreateChannels();
|
|
|
| - EXPECT_EQ_WAIT(2u, ep1_ch1()->ports().size(), kShortTimeout);
|
| + EXPECT_EQ_SIMULATED_WAIT(2u, ep1_ch1()->ports().size(), kShortTimeout, clock);
|
|
|
| const std::vector<PortInterface*> ports_before = ep1_ch1()->ports();
|
| for (size_t i = 0; i < ports_before.size(); ++i) {
|
| @@ -1637,14 +1652,15 @@ TEST_F(P2PTransportChannelTest, TestIceConfigWillPassDownToPort) {
|
| EXPECT_EQ(kHighTiebreaker, ports_before[i]->IceTiebreaker());
|
| }
|
|
|
| - EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
|
| - ep2_ch1()->receiving() && ep2_ch1()->writable(),
|
| - kShortTimeout);
|
| + EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
|
| + ep2_ch1()->receiving() &&
|
| + ep2_ch1()->writable(),
|
| + kShortTimeout, clock);
|
|
|
| EXPECT_TRUE(ep1_ch1()->selected_connection() &&
|
| ep2_ch1()->selected_connection());
|
|
|
| - TestSendRecv();
|
| + TestSendRecv(clock);
|
| DestroyChannels();
|
| }
|
|
|
| @@ -1678,6 +1694,7 @@ TEST_F(P2PTransportChannelTest, TestDefaultDscpValue) {
|
|
|
| // Verify IPv6 connection is preferred over IPv4.
|
| TEST_F(P2PTransportChannelTest, TestIPv6Connections) {
|
| + rtc::ScopedFakeClock clock;
|
| AddAddress(0, kIPv6PublicAddrs[0]);
|
| AddAddress(0, kPublicAddrs[0]);
|
| AddAddress(1, kIPv6PublicAddrs[1]);
|
| @@ -1692,20 +1709,22 @@ TEST_F(P2PTransportChannelTest, TestIPv6Connections) {
|
|
|
| CreateChannels();
|
|
|
| - EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
|
| - ep2_ch1()->receiving() && ep2_ch1()->writable(),
|
| - kShortTimeout);
|
| + EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
|
| + ep2_ch1()->receiving() &&
|
| + ep2_ch1()->writable(),
|
| + kShortTimeout, clock);
|
| EXPECT_TRUE(
|
| ep1_ch1()->selected_connection() && ep2_ch1()->selected_connection() &&
|
| LocalCandidate(ep1_ch1())->address().EqualIPs(kIPv6PublicAddrs[0]) &&
|
| RemoteCandidate(ep1_ch1())->address().EqualIPs(kIPv6PublicAddrs[1]));
|
|
|
| - TestSendRecv();
|
| + TestSendRecv(clock);
|
| DestroyChannels();
|
| }
|
|
|
| // Testing forceful TURN connections.
|
| TEST_F(P2PTransportChannelTest, TestForceTurn) {
|
| + rtc::ScopedFakeClock clock;
|
| ConfigureEndpoints(
|
| NAT_PORT_RESTRICTED, NAT_SYMMETRIC,
|
| kDefaultPortAllocatorFlags | PORTALLOCATOR_ENABLE_SHARED_SOCKET,
|
| @@ -1717,9 +1736,10 @@ TEST_F(P2PTransportChannelTest, TestForceTurn) {
|
|
|
| CreateChannels();
|
|
|
| - EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
|
| - ep2_ch1()->receiving() && ep2_ch1()->writable(),
|
| - kMediumTimeout);
|
| + EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
|
| + ep2_ch1()->receiving() &&
|
| + ep2_ch1()->writable(),
|
| + kMediumTimeout, clock);
|
|
|
| EXPECT_TRUE(ep1_ch1()->selected_connection() &&
|
| ep2_ch1()->selected_connection());
|
| @@ -1729,7 +1749,7 @@ TEST_F(P2PTransportChannelTest, TestForceTurn) {
|
| EXPECT_EQ("relay", RemoteCandidate(ep2_ch1())->type());
|
| EXPECT_EQ("relay", LocalCandidate(ep2_ch1())->type());
|
|
|
| - TestSendRecv();
|
| + TestSendRecv(clock);
|
| DestroyChannels();
|
| }
|
|
|
| @@ -1796,7 +1816,7 @@ TEST_F(P2PTransportChannelTest, TestUsingPooledSessionBeforeDoneGathering) {
|
| ep1_ch1()->writable() && ep2_ch1()->receiving() &&
|
| ep2_ch1()->writable(),
|
| kMediumTimeout, clock);
|
| - TestSendRecv();
|
| + TestSendRecv(clock);
|
| // Make sure the P2PTransportChannels are actually using ports from the
|
| // pooled sessions.
|
| auto pooled_ports_1 = pooled_session_1->ReadyPorts();
|
| @@ -1841,7 +1861,7 @@ TEST_F(P2PTransportChannelTest, TestUsingPooledSessionAfterDoneGathering) {
|
| ep1_ch1()->writable() && ep2_ch1()->receiving() &&
|
| ep2_ch1()->writable(),
|
| kMediumTimeout, clock);
|
| - TestSendRecv();
|
| + TestSendRecv(clock);
|
| // Make sure the P2PTransportChannels are actually using ports from the
|
| // pooled sessions.
|
| auto pooled_ports_1 = pooled_session_1->ReadyPorts();
|
| @@ -3267,7 +3287,8 @@ TEST_F(P2PTransportChannelPingTest, ConnectionResurrection) {
|
| EXPECT_TRUE_WAIT(conn1->pruned(), kMediumTimeout);
|
| // Destroy the connection to test SignalUnknownAddress.
|
| conn1->Destroy();
|
| - EXPECT_TRUE_WAIT(GetConnectionTo(&ch, "1.1.1.1", 1) == nullptr, 1000);
|
| + EXPECT_TRUE_WAIT(GetConnectionTo(&ch, "1.1.1.1", 1) == nullptr,
|
| + kMediumTimeout);
|
|
|
| // Create a minimal STUN message with prflx priority.
|
| IceMessage request;
|
| @@ -3296,6 +3317,7 @@ TEST_F(P2PTransportChannelPingTest, ConnectionResurrection) {
|
| }
|
|
|
| TEST_F(P2PTransportChannelPingTest, TestReceivingStateChange) {
|
| + rtc::ScopedFakeClock clock;
|
| FakePortAllocator pa(rtc::Thread::Current(), nullptr);
|
| P2PTransportChannel ch("receiving state change", 1, &pa);
|
| PrepareChannel(&ch);
|
| @@ -3308,13 +3330,14 @@ TEST_F(P2PTransportChannelPingTest, TestReceivingStateChange) {
|
| EXPECT_EQ(50, ch.check_receiving_interval());
|
| ch.MaybeStartGathering();
|
| ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1));
|
| - Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1);
|
| + Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1, &clock);
|
| ASSERT_TRUE(conn1 != nullptr);
|
|
|
| + clock.AdvanceTime(rtc::TimeDelta::FromSeconds(1));
|
| conn1->ReceivedPing();
|
| conn1->OnReadPacket("ABC", 3, rtc::CreatePacketTime(0));
|
| - EXPECT_TRUE_WAIT(ch.receiving(), 1000);
|
| - EXPECT_TRUE_WAIT(!ch.receiving(), 1000);
|
| + EXPECT_TRUE_SIMULATED_WAIT(ch.receiving(), kShortTimeout, clock);
|
| + EXPECT_TRUE_SIMULATED_WAIT(!ch.receiving(), kShortTimeout, clock);
|
| }
|
|
|
| // The controlled side will select a connection as the "selected connection"
|
| @@ -3536,7 +3559,7 @@ TEST_F(P2PTransportChannelPingTest, TestSelectConnectionBasedOnMediaReceived) {
|
| TEST_F(P2PTransportChannelPingTest,
|
| TestControlledAgentDataReceivingTakesHigherPrecedenceThanPriority) {
|
| rtc::ScopedFakeClock clock;
|
| -
|
| + clock.AdvanceTime(rtc::TimeDelta::FromSeconds(1));
|
| FakePortAllocator pa(rtc::Thread::Current(), nullptr);
|
| P2PTransportChannel ch("SwitchSelectedConnection", 1, &pa);
|
| PrepareChannel(&ch);
|
| @@ -3584,6 +3607,7 @@ TEST_F(P2PTransportChannelPingTest,
|
| TEST_F(P2PTransportChannelPingTest,
|
| TestControlledAgentNominationTakesHigherPrecedenceThanDataReceiving) {
|
| rtc::ScopedFakeClock clock;
|
| + clock.AdvanceTime(rtc::TimeDelta::FromSeconds(1));
|
|
|
| FakePortAllocator pa(rtc::Thread::Current(), nullptr);
|
| P2PTransportChannel ch("SwitchSelectedConnection", 1, &pa);
|
| @@ -3623,6 +3647,7 @@ TEST_F(P2PTransportChannelPingTest,
|
| TEST_F(P2PTransportChannelPingTest,
|
| TestControlledAgentSelectsConnectionWithHigherNomination) {
|
| rtc::ScopedFakeClock clock;
|
| + clock.AdvanceTime(rtc::TimeDelta::FromSeconds(1));
|
|
|
| FakePortAllocator pa(rtc::Thread::Current(), nullptr);
|
| P2PTransportChannel ch("test", 1, &pa);
|
| @@ -3665,6 +3690,8 @@ TEST_F(P2PTransportChannelPingTest,
|
| TEST_F(P2PTransportChannelPingTest,
|
| TestControlledAgentIgnoresSmallerNomination) {
|
| rtc::ScopedFakeClock clock;
|
| + clock.AdvanceTime(rtc::TimeDelta::FromSeconds(1));
|
| +
|
| FakePortAllocator pa(rtc::Thread::Current(), nullptr);
|
| P2PTransportChannel ch("test", 1, &pa);
|
| PrepareChannel(&ch);
|
| @@ -3761,6 +3788,7 @@ TEST_F(P2PTransportChannelPingTest, TestAddRemoteCandidateWithAddressReuse) {
|
| // will be pruned. Otherwise, lower-priority connections are kept.
|
| TEST_F(P2PTransportChannelPingTest, TestDontPruneWhenWeak) {
|
| rtc::ScopedFakeClock clock;
|
| + clock.AdvanceTime(rtc::TimeDelta::FromSeconds(1));
|
| FakePortAllocator pa(rtc::Thread::Current(), nullptr);
|
| P2PTransportChannel ch("test channel", 1, &pa);
|
| PrepareChannel(&ch);
|
| @@ -3791,7 +3819,7 @@ TEST_F(P2PTransportChannelPingTest, TestDontPruneWhenWeak) {
|
| // The selected connection should still be conn2. Even through conn3 has lower
|
| // priority and is not receiving/writable, it is not pruned because the
|
| // selected connection is not receiving.
|
| - SIMULATED_WAIT(conn3->pruned(), 1000, clock);
|
| + SIMULATED_WAIT(conn3->pruned(), kShortTimeout, clock);
|
| EXPECT_FALSE(conn3->pruned());
|
| }
|
|
|
| @@ -3819,6 +3847,8 @@ TEST_F(P2PTransportChannelPingTest, TestDontPruneHighPriorityConnections) {
|
|
|
| // Test that GetState returns the state correctly.
|
| TEST_F(P2PTransportChannelPingTest, TestGetState) {
|
| + rtc::ScopedFakeClock clock;
|
| + clock.AdvanceTime(rtc::TimeDelta::FromSeconds(1));
|
| FakePortAllocator pa(rtc::Thread::Current(), nullptr);
|
| P2PTransportChannel ch("test channel", 1, &pa);
|
| PrepareChannel(&ch);
|
| @@ -3826,25 +3856,28 @@ TEST_F(P2PTransportChannelPingTest, TestGetState) {
|
| EXPECT_EQ(TransportChannelState::STATE_INIT, ch.GetState());
|
| ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 100));
|
| ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 1));
|
| - Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1);
|
| - Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2);
|
| + Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1, &clock);
|
| + Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2, &clock);
|
| ASSERT_TRUE(conn1 != nullptr);
|
| ASSERT_TRUE(conn2 != nullptr);
|
| // Now there are two connections, so the transport channel is connecting.
|
| EXPECT_EQ(TransportChannelState::STATE_CONNECTING, ch.GetState());
|
| // |conn1| becomes writable and receiving; it then should prune |conn2|.
|
| conn1->ReceivedPingResponse(LOW_RTT, "id");
|
| - EXPECT_TRUE_WAIT(conn2->pruned(), 1000);
|
| + EXPECT_TRUE_SIMULATED_WAIT(conn2->pruned(), kShortTimeout, clock);
|
| EXPECT_EQ(TransportChannelState::STATE_COMPLETED, ch.GetState());
|
| conn1->Prune(); // All connections are pruned.
|
| // Need to wait until the channel state is updated.
|
| - EXPECT_EQ_WAIT(TransportChannelState::STATE_FAILED, ch.GetState(), 1000);
|
| + EXPECT_EQ_SIMULATED_WAIT(TransportChannelState::STATE_FAILED, ch.GetState(),
|
| + kShortTimeout, clock);
|
| }
|
|
|
| // Test that when a low-priority connection is pruned, it is not deleted
|
| // right away, and it can become active and be pruned again.
|
| TEST_F(P2PTransportChannelPingTest, TestConnectionPrunedAgain) {
|
| rtc::ScopedFakeClock clock;
|
| + clock.AdvanceTime(rtc::TimeDelta::FromSeconds(1));
|
| +
|
| FakePortAllocator pa(rtc::Thread::Current(), nullptr);
|
| P2PTransportChannel ch("test channel", 1, &pa);
|
| PrepareChannel(&ch);
|
| @@ -3894,31 +3927,32 @@ TEST_F(P2PTransportChannelPingTest, TestConnectionPrunedAgain) {
|
| // Test that if all connections in a channel has timed out on writing, they
|
| // will all be deleted. We use Prune to simulate write_time_out.
|
| TEST_F(P2PTransportChannelPingTest, TestDeleteConnectionsIfAllWriteTimedout) {
|
| + rtc::ScopedFakeClock clock;
|
| FakePortAllocator pa(rtc::Thread::Current(), nullptr);
|
| P2PTransportChannel ch("test channel", 1, &pa);
|
| PrepareChannel(&ch);
|
| ch.MaybeStartGathering();
|
| // Have one connection only but later becomes write-time-out.
|
| ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 100));
|
| - Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1);
|
| + Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1, &clock);
|
| ASSERT_TRUE(conn1 != nullptr);
|
| conn1->ReceivedPing(); // Becomes receiving
|
| conn1->Prune();
|
| - EXPECT_TRUE_WAIT(ch.connections().empty(), 1000);
|
| + EXPECT_TRUE_SIMULATED_WAIT(ch.connections().empty(), kShortTimeout, clock);
|
|
|
| // Have two connections but both become write-time-out later.
|
| ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 1));
|
| - Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2);
|
| + Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2, &clock);
|
| ASSERT_TRUE(conn2 != nullptr);
|
| conn2->ReceivedPing(); // Becomes receiving
|
| ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "3.3.3.3", 3, 2));
|
| - Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3);
|
| + Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3, &clock);
|
| ASSERT_TRUE(conn3 != nullptr);
|
| conn3->ReceivedPing(); // Becomes receiving
|
| // Now prune both conn2 and conn3; they will be deleted soon.
|
| conn2->Prune();
|
| conn3->Prune();
|
| - EXPECT_TRUE_WAIT(ch.connections().empty(), 1000);
|
| + EXPECT_TRUE_SIMULATED_WAIT(ch.connections().empty(), kShortTimeout, clock);
|
| }
|
|
|
| // Tests that after a port allocator session is started, it will be stopped
|
|
|