Replace gunit.h macros with WaitUntil in P2P
Bug: webrtc:381524905
Change-Id: Ia2614729b17a40cd2f5f226e351b3f82c2038977
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/374181
Reviewed-by: Jonas Oreland <jonaso@webrtc.org>
Auto-Submit: Evan Shrubsole <eshr@webrtc.org>
Commit-Queue: Evan Shrubsole <eshr@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#43758}
diff --git a/p2p/BUILD.gn b/p2p/BUILD.gn
index 8ede171..05807b3 100644
--- a/p2p/BUILD.gn
+++ b/p2p/BUILD.gn
@@ -1206,6 +1206,7 @@
":p2p_server_utils",
":p2p_test_utils",
":p2p_transport_channel",
+ ":p2p_transport_channel_ice_field_trials",
":packet_transport_internal",
":port",
":port_allocator",
@@ -1230,6 +1231,8 @@
"../api:libjingle_peerconnection_api",
"../api:mock_async_dns_resolver",
"../api:packet_socket_factory",
+ "../api:rtc_error",
+ "../api:rtc_error_matchers",
"../api:scoped_refptr",
"../api/crypto:options",
"../api/task_queue",
@@ -1265,6 +1268,7 @@
"../rtc_base:socket_server",
"../rtc_base:ssl",
"../rtc_base:ssl_adapter",
+ "../rtc_base:stream",
"../rtc_base:stringutils",
"../rtc_base:testclient",
"../rtc_base:threading",
@@ -1277,6 +1281,7 @@
"../test:rtc_expect_death",
"../test:scoped_key_value_config",
"../test:test_support",
+ "../test:wait_until",
"//testing/gtest",
"//third_party/abseil-cpp/absl/algorithm:container",
"//third_party/abseil-cpp/absl/functional:any_invocable",
diff --git a/p2p/base/p2p_transport_channel_unittest.cc b/p2p/base/p2p_transport_channel_unittest.cc
index c23867e..b7fd49a 100644
--- a/p2p/base/p2p_transport_channel_unittest.cc
+++ b/p2p/base/p2p_transport_channel_unittest.cc
@@ -33,6 +33,7 @@
#include "api/scoped_refptr.h"
#include "api/task_queue/pending_task_safety_flag.h"
#include "api/test/mock_async_dns_resolver.h"
+#include "api/test/rtc_error_matchers.h"
#include "api/transport/enums.h"
#include "api/transport/stun.h"
#include "api/units/time_delta.h"
@@ -91,21 +92,23 @@
#include "test/gmock.h"
#include "test/gtest.h"
#include "test/scoped_key_value_config.h"
+#include "test/wait_until.h"
namespace {
using rtc::SocketAddress;
using ::testing::_;
using ::testing::Assign;
-using ::testing::Combine;
using ::testing::Contains;
using ::testing::DoAll;
-using ::testing::InSequence;
-using ::testing::InvokeWithoutArgs;
+using ::testing::Eq;
+using ::testing::Gt;
+using ::testing::IsFalse;
+using ::testing::IsTrue;
using ::testing::MockFunction;
+using ::testing::Ne;
using ::testing::Return;
using ::testing::ReturnRef;
-using ::testing::SaveArg;
using ::testing::SetArgPointee;
using ::testing::SizeIs;
using ::testing::Values;
@@ -286,6 +289,7 @@
} // namespace
namespace cricket {
+using ::testing::NotNull;
// This test simulates 2 P2P endpoints that want to establish connectivity
// with each other over various network topologies and conditions, which can be
@@ -707,8 +711,13 @@
// Create the channels and wait for them to connect.
CreateChannels();
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnected(ep1_ch1(), ep2_ch1()),
- expected.connect_wait + kShortTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(
+ expected.connect_wait + kShortTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
connect_time = rtc::TimeMillis() - connect_start;
if (connect_time < expected.connect_wait) {
RTC_LOG(LS_INFO) << "Connect time: " << connect_time << " ms";
@@ -726,9 +735,15 @@
// 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_SIMULATED_WAIT(
- CheckCandidate1(expected) && CheckCandidate2(expected),
- kDefaultTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckCandidate1(expected) &&
+ CheckCandidate2(expected);
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Also do EXPECT_EQ on each part so that failures are more verbose.
ExpectCandidate1(expected);
ExpectCandidate2(expected);
@@ -754,14 +769,28 @@
const char* data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
int len = static_cast<int>(strlen(data));
// local_channel1 <==> remote_channel1
- 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);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return SendData(ep1_ch1(), data, len); }, Eq(len),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &*clock}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return CheckDataOnChannel(ep2_ch1(), data, len); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &*clock}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return SendData(ep2_ch1(), data, len); }, Eq(len),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &*clock}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return CheckDataOnChannel(ep1_ch1(), data, len); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &*clock}),
+ webrtc::IsRtcOk());
}
}
@@ -774,8 +803,12 @@
rtc::ScopedFakeClock clock;
ep1_ch1()->SetRemoteIceParameters(kIceParams[1]);
ep2_ch1()->SetRemoteIceParameters(kIceParams[0]);
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnected(ep1_ch1(), ep2_ch1()),
- kMediumTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
const Candidate* old_local_candidate1 = LocalCandidate(ep1_ch1());
const Candidate* old_local_candidate2 = LocalCandidate(ep2_ch1());
@@ -790,18 +823,30 @@
ep2_ch1()->SetRemoteIceParameters(kIceParams[2]);
ep2_ch1()->MaybeStartGathering();
- 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_THAT(webrtc::WaitUntil(
+ [&] { return LocalCandidate(ep1_ch1())->generation(); },
+ Ne(old_local_candidate1->generation()),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return LocalCandidate(ep2_ch1())->generation(); },
+ Ne(old_local_candidate2->generation()),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return RemoteCandidate(ep1_ch1())->generation(); },
+ Ne(old_remote_candidate1->generation()),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return RemoteCandidate(ep2_ch1())->generation(); },
+ Ne(old_remote_candidate2->generation()),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(1u, RemoteCandidate(ep2_ch1())->generation());
EXPECT_EQ(1u, RemoteCandidate(ep1_ch1())->generation());
}
@@ -1303,10 +1348,15 @@
ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags,
kDefaultPortAllocatorFlags);
CreateChannels();
- EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
- ep2_ch1()->receiving() &&
- ep2_ch1()->writable(),
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()->receiving() && ep1_ch1()->writable() &&
+ ep2_ch1()->receiving() && ep2_ch1()->writable();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Sends and receives 10 packets.
TestSendRecv(&clock);
@@ -1358,10 +1408,15 @@
AddAddress(0, kAlternateAddrs[1], "rmnet0", rtc::ADAPTER_TYPE_CELLULAR);
CreateChannels(continual_gathering_config, continual_gathering_config);
- EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
- ep2_ch1()->receiving() &&
- ep2_ch1()->writable(),
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()->receiving() && ep1_ch1()->writable() &&
+ ep2_ch1()->receiving() && ep2_ch1()->writable();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Sends and receives 10 packets.
TestSendRecv(&clock);
@@ -1392,8 +1447,11 @@
ep1_ch1()->RemoveConnectionForTest(
const_cast<Connection*>(old_selected_connection));
- EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection() != nullptr,
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Sends and receives 10 packets.
TestSendRecv(&clock);
@@ -1430,15 +1488,24 @@
IceConfig default_config;
CreateChannels(continual_gathering_config, default_config);
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnected(ep1_ch1(), ep2_ch1()),
- kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Adding address in ep1 will trigger continual gathering.
AddAddress(0, kAlternateAddrs[0]);
- EXPECT_EQ_SIMULATED_WAIT(1,
- GetEndpoint(0)->GetIceRegatheringCountForReason(
- IceRegatheringReason::NETWORK_CHANGE),
- kDefaultTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return GetEndpoint(0)->GetIceRegatheringCountForReason(
+ IceRegatheringReason::NETWORK_CHANGE);
+ },
+ Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
ep2_ch1()->SetIceParameters(kIceParams[3]);
ep2_ch1()->SetRemoteIceParameters(kIceParams[2]);
@@ -1467,8 +1534,12 @@
config2.regather_on_failed_networks_interval = 2000;
CreateChannels(config1, config2);
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnected(ep1_ch1(), ep2_ch1()),
- kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[0]);
// Timeout value such that all connections are deleted.
@@ -1499,7 +1570,10 @@
// Wait until the callee becomes writable to make sure that a ping request is
// received by the caller before their remote ICE credentials are set.
- ASSERT_TRUE_WAIT(ep2_ch1()->selected_connection() != nullptr, kMediumTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ep2_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
// Add two sets of remote ICE credentials, so that the ones used by the
// candidate will be generation 1 instead of 0.
ep1_ch1()->SetRemoteIceParameters(kIceParams[3]);
@@ -1507,9 +1581,13 @@
// The caller should have the selected connection connected to the peer
// reflexive candidate.
const Connection* selected_connection = nullptr;
- ASSERT_TRUE_WAIT(
- (selected_connection = ep1_ch1()->selected_connection()) != nullptr,
- kMediumTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return selected_connection = ep1_ch1()->selected_connection();
+ },
+ Ne(nullptr), {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(selected_connection->remote_candidate().is_prflx());
EXPECT_EQ(kIceUfrag[1], selected_connection->remote_candidate().username());
EXPECT_EQ(kIcePwd[1], selected_connection->remote_candidate().password());
@@ -1517,9 +1595,16 @@
ResumeCandidates(1);
// Verify ep1's selected connection is updated to use the 'local' candidate.
- EXPECT_TRUE_WAIT(
- ep1_ch1()->selected_connection()->remote_candidate().is_local(),
- kMediumTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()
+ ->selected_connection()
+ ->remote_candidate()
+ .is_local();
+ },
+ IsTrue(), {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_EQ(selected_connection, ep1_ch1()->selected_connection());
DestroyChannels();
}
@@ -1540,9 +1625,15 @@
// candidate.
PauseCandidates(1);
- ASSERT_TRUE_WAIT(ep2_ch1()->selected_connection() != nullptr, kMediumTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ep2_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
ep1_ch1()->SetRemoteIceParameters(kIceParams[1]);
- ASSERT_TRUE_WAIT(ep1_ch1()->selected_connection() != nullptr, kMediumTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
// Check the selected candidate pair.
auto pair_ep1 = ep1_ch1()->GetSelectedCandidatePair();
@@ -1563,10 +1654,17 @@
// Let ep1 receive the remote candidate to update its type from prflx to host.
ResumeCandidates(1);
- ASSERT_TRUE_WAIT(
- ep1_ch1()->selected_connection() != nullptr &&
- ep1_ch1()->selected_connection()->remote_candidate().is_local(),
- kMediumTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()->selected_connection() != nullptr &&
+ ep1_ch1()
+ ->selected_connection()
+ ->remote_candidate()
+ .is_local();
+ },
+ IsTrue(), {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
// We should be able to reveal the address after it is learnt via
// AddIceCandidate.
@@ -1605,7 +1703,10 @@
// Wait until the callee becomes writable to make sure that a ping request is
// received by the caller before their remote ICE credentials are set.
- ASSERT_TRUE_WAIT(ep2_ch1()->selected_connection() != nullptr, kMediumTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ep2_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
// Add two sets of remote ICE credentials, so that the ones used by the
// candidate will be generation 1 instead of 0.
ep1_ch1()->SetRemoteIceParameters(kIceParams[3]);
@@ -1614,9 +1715,13 @@
// The caller's selected connection should be connected to the peer reflexive
// candidate.
const Connection* selected_connection = nullptr;
- ASSERT_TRUE_WAIT(
- (selected_connection = ep1_ch1()->selected_connection()) != nullptr,
- kMediumTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return selected_connection = ep1_ch1()->selected_connection();
+ },
+ Ne(nullptr), {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(selected_connection->remote_candidate().is_prflx());
EXPECT_EQ(kIceUfrag[1], selected_connection->remote_candidate().username());
EXPECT_EQ(kIcePwd[1], selected_connection->remote_candidate().password());
@@ -1624,9 +1729,16 @@
ResumeCandidates(1);
- EXPECT_TRUE_WAIT(
- ep1_ch1()->selected_connection()->remote_candidate().is_prflx(),
- kMediumTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()
+ ->selected_connection()
+ ->remote_candidate()
+ .is_prflx();
+ },
+ IsTrue(), {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_EQ(selected_connection, ep1_ch1()->selected_connection());
DestroyChannels();
}
@@ -1654,7 +1766,11 @@
// Wait for the initial connection to be made.
ep1_ch1()->SetRemoteIceParameters(kIceParams[1]);
ep2_ch1()->SetRemoteIceParameters(kIceParams[0]);
- EXPECT_TRUE_WAIT(CheckConnected(ep1_ch1(), ep2_ch1()), kDefaultTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return CheckConnected(ep1_ch1(), ep2_ch1()); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Simulate an ICE restart on ep2, but don't signal the candidate or new
// ICE parameters until after a prflx connection has been made.
@@ -1666,9 +1782,16 @@
// The caller should have the selected connection connected to the peer
// reflexive candidate.
- EXPECT_TRUE_WAIT(
- ep1_ch1()->selected_connection()->remote_candidate().is_prflx(),
- kDefaultTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()
+ ->selected_connection()
+ ->remote_candidate()
+ .is_prflx();
+ },
+ IsTrue(), {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
const Connection* prflx_selected_connection =
ep1_ch1()->selected_connection();
@@ -1682,9 +1805,16 @@
// their information to update the peer reflexive candidate.
ResumeCandidates(1);
- EXPECT_TRUE_WAIT(
- ep1_ch1()->selected_connection()->remote_candidate().is_relay(),
- kDefaultTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()
+ ->selected_connection()
+ ->remote_candidate()
+ .is_relay();
+ },
+ IsTrue(), {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_EQ(prflx_selected_connection, ep1_ch1()->selected_connection());
DestroyChannels();
}
@@ -1698,9 +1828,15 @@
CreateChannels();
const Connection* selected_connection = NULL;
// Wait until the callee's connections are created.
- EXPECT_TRUE_SIMULATED_WAIT(
- (selected_connection = ep2_ch1()->selected_connection()) != NULL,
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return selected_connection =
+ ep2_ch1()->selected_connection();
+ },
+ NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Wait to make sure the selected connection is not changed.
SIMULATED_WAIT(ep2_ch1()->selected_connection() != selected_connection,
kShortTimeout, clock);
@@ -1741,8 +1877,12 @@
CreateChannels();
ep1_ch1()->set_incoming_only(true);
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnected(ep1_ch1(), ep2_ch1()),
- kMediumTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
DestroyChannels();
}
@@ -1809,10 +1949,15 @@
ResumeCandidates(0);
ResumeCandidates(1);
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(), kPublicAddrs[0],
- kPublicAddrs[1]),
- kShortTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckCandidatePairAndConnected(
+ ep1_ch1(), ep2_ch1(), kPublicAddrs[0], kPublicAddrs[1]);
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kShortTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
TestSendRecv(&clock);
DestroyChannels();
@@ -1829,8 +1974,12 @@
SetAllowTcpListen(1, true); // actpass.
CreateChannels();
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnected(ep1_ch1(), ep2_ch1()),
- kMediumTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
SIMULATED_WAIT(false, kDefaultTimeout, clock);
EXPECT_EQ(RemoteCandidate(ep1_ch1())->tcptype(), "passive");
@@ -1856,13 +2005,23 @@
GetEndpoint(1)->allocator_->ice_tiebreaker();
// Since both the channels initiated with controlling state, the channel with
// the lower tiebreaker should receive SignalRoleConflict.
- EXPECT_TRUE_SIMULATED_WAIT(
- GetRoleConflict(first_endpoint_has_lower_tiebreaker ? 0 : 1),
- kShortTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return GetRoleConflict(first_endpoint_has_lower_tiebreaker ? 0 : 1);
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kShortTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_FALSE(GetRoleConflict(first_endpoint_has_lower_tiebreaker ? 1 : 0));
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnected(ep1_ch1(), ep2_ch1()),
- kShortTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kShortTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(ep1_ch1()->selected_connection() &&
ep2_ch1()->selected_connection());
@@ -1884,7 +2043,11 @@
CreateChannels();
- EXPECT_EQ_SIMULATED_WAIT(2u, ep1_ch1()->ports().size(), kShortTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ep1_ch1()->ports().size(); }, Eq(2u),
+ {.timeout = webrtc::TimeDelta::Millis(kShortTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
const std::vector<PortInterface*> ports_before = ep1_ch1()->ports();
for (size_t i = 0; i < ports_before.size(); ++i) {
@@ -1898,8 +2061,12 @@
EXPECT_EQ(ICEROLE_CONTROLLED, ports_before[i]->GetIceRole());
}
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnected(ep1_ch1(), ep2_ch1()),
- kShortTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kShortTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(ep1_ch1()->selected_connection() &&
ep2_ch1()->selected_connection());
@@ -1946,10 +2113,16 @@
CreateChannels();
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(), kIPv6PublicAddrs[0],
- kIPv6PublicAddrs[1]),
- kShortTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(),
+ kIPv6PublicAddrs[0],
+ kIPv6PublicAddrs[1]);
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kShortTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
TestSendRecv(&clock);
DestroyChannels();
@@ -1969,8 +2142,12 @@
CreateChannels();
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnected(ep1_ch1(), ep2_ch1()),
- kMediumTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(ep1_ch1()->selected_connection() &&
ep2_ch1()->selected_connection());
@@ -1998,8 +2175,12 @@
IceConfig default_config;
CreateChannels(continual_gathering_config, default_config);
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnected(ep1_ch1(), ep2_ch1()),
- kMediumTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
SIMULATED_WAIT(
IceGatheringState::kIceGatheringComplete == ep1_ch1()->gathering_state(),
kShortTimeout, clock);
@@ -2041,8 +2222,12 @@
EXPECT_TRUE(pooled_session_2->ReadyCandidates().empty());
// Now let the endpoints connect and try exchanging some data.
CreateChannels();
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnected(ep1_ch1(), ep2_ch1()),
- kMediumTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
TestSendRecv(&clock);
// Make sure the P2PTransportChannels are actually using ports from the
// pooled sessions.
@@ -2079,13 +2264,23 @@
ASSERT_NE(nullptr, pooled_session_2);
// Wait for the pooled sessions to finish gathering before the
// P2PTransportChannels try to use them.
- EXPECT_TRUE_SIMULATED_WAIT(pooled_session_1->CandidatesAllocationDone() &&
- pooled_session_2->CandidatesAllocationDone(),
- kDefaultTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return pooled_session_1->CandidatesAllocationDone() &&
+ pooled_session_2->CandidatesAllocationDone();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Now let the endpoints connect and try exchanging some data.
CreateChannels();
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnected(ep1_ch1(), ep2_ch1()),
- kMediumTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
TestSendRecv(&clock);
// Make sure the P2PTransportChannels are actually using ports from the
// pooled sessions.
@@ -2115,8 +2310,11 @@
config.presume_writable_when_fully_relayed = true;
ep1_ch1()->SetIceConfig(config);
ep1_ch1()->MaybeStartGathering();
- EXPECT_EQ_WAIT(IceGatheringState::kIceGatheringComplete,
- ep1_ch1()->gathering_state(), kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1()->gathering_state(); },
+ Eq(IceGatheringState::kIceGatheringComplete),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Add two remote candidates; a host candidate (with higher priority)
// and TURN candidate.
ep1_ch1()->AddRemoteCandidate(
@@ -2125,7 +2323,10 @@
CreateUdpCandidate(IceCandidateType::kRelay, "2.2.2.2", 2, 0));
// Expect that the TURN-TURN candidate pair will be prioritized since it's
// "probably writable".
- EXPECT_TRUE_WAIT(ep1_ch1()->selected_connection() != nullptr, kShortTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kShortTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(LocalCandidate(ep1_ch1())->is_relay());
EXPECT_TRUE(RemoteCandidate(ep1_ch1())->is_relay());
// Also expect that the channel instantly indicates that it's writable since
@@ -2171,8 +2372,13 @@
ep2_ch1()->MaybeStartGathering();
// Wait for the TURN<->prflx connection.
- EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable(),
- kShortTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return ep1_ch1()->receiving() && ep1_ch1()->writable(); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kShortTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
ASSERT_NE(nullptr, ep1_ch1()->selected_connection());
EXPECT_TRUE(LocalCandidate(ep1_ch1())->is_relay());
EXPECT_TRUE(RemoteCandidate(ep1_ch1())->is_prflx());
@@ -2181,8 +2387,12 @@
EXPECT_FALSE(ep1_ch1()->selected_connection()->writable());
// Now wait for it to actually become writable.
- EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection()->writable(),
- kShortTimeout, fake_clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1()->selected_connection()->writable(); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kShortTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
// Explitly destroy channels, before fake clock is destroyed.
DestroyChannels();
@@ -2206,14 +2416,21 @@
ep1_ch1()->MaybeStartGathering();
ep2_ch1()->MaybeStartGathering();
// Wait for initial connection as usual.
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnected(ep1_ch1(), ep2_ch1()),
- kShortTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kShortTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
const Connection* old_selected_connection = ep1_ch1()->selected_connection();
// Destroy the second channel and wait for the current connection on the
// first channel to become "unreliable", making it no longer writable.
GetEndpoint(1)->cd1_.ch_.reset();
- EXPECT_TRUE_SIMULATED_WAIT(!ep1_ch1()->writable(), kDefaultTimeout,
- fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return !ep1_ch1()->writable(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_NE(nullptr, ep1_ch1()->selected_connection());
// Add a remote TURN candidate. The first channel should still have a TURN
// port available to make a TURN<->TURN pair that's presumed writable.
@@ -2241,12 +2458,18 @@
config.presume_writable_when_fully_relayed = true;
ep1_ch1()->SetIceConfig(config);
ep1_ch1()->MaybeStartGathering();
- EXPECT_EQ_WAIT(IceGatheringState::kIceGatheringComplete,
- ep1_ch1()->gathering_state(), kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1()->gathering_state(); },
+ Eq(IceGatheringState::kIceGatheringComplete),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
ep1_ch1()->AddRemoteCandidate(
CreateUdpCandidate(IceCandidateType::kRelay, "1.1.1.1", 1, 0));
// Sanity checking the type of the connection.
- EXPECT_TRUE_WAIT(ep1_ch1()->selected_connection() != nullptr, kShortTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kShortTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(LocalCandidate(ep1_ch1())->is_relay());
EXPECT_TRUE(RemoteCandidate(ep1_ch1())->is_relay());
@@ -2296,8 +2519,13 @@
ep1_ch1()->MaybeStartGathering();
ep2_ch1()->MaybeStartGathering();
- EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable(),
- kMediumTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return ep1_ch1()->receiving() && ep1_ch1()->writable(); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
ASSERT_NE(nullptr, ep1_ch1()->selected_connection());
@@ -2328,8 +2556,12 @@
CreateChannels(ep1_config, ep2_config);
// Wait until both sides become writable for the first time.
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnected(ep1_ch1(), ep2_ch1()),
- kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Block the ingress traffic to ep1 so that there is no check response from
// ep2.
ASSERT_NE(nullptr, LocalCandidate(ep1_ch1()));
@@ -2337,8 +2569,13 @@
LocalCandidate(ep1_ch1())->address());
// Wait until ep1 becomes unwritable. At the same time ep2 should be still
// fine so that it will keep sending pings.
- EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1() != nullptr && !ep1_ch1()->writable(),
- kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return ep1_ch1() != nullptr && !ep1_ch1()->writable(); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(ep2_ch1() != nullptr && ep2_ch1()->writable());
// Now let the pings from ep2 to flow but block any pings from ep1, so that
// ep1 can only become writable again after receiving an incoming ping from
@@ -2348,8 +2585,12 @@
fw()->ClearRules();
fw()->AddRule(false, rtc::FP_ANY, rtc::FD_OUT,
LocalCandidate(ep1_ch1())->address());
- EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1() != nullptr && ep1_ch1()->writable(),
- kDefaultTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1() != nullptr && ep1_ch1()->writable(); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
DestroyChannels();
}
@@ -2486,10 +2727,15 @@
// Create channels and let them go writable, as usual.
CreateChannels(config, config);
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(), kPublicAddrs[0],
- kPublicAddrs[1]),
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckCandidatePairAndConnected(
+ ep1_ch1(), ep2_ch1(), kPublicAddrs[0], kPublicAddrs[1]);
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Blackhole any traffic to or from the public addrs.
RTC_LOG(LS_INFO) << "Failing over...";
@@ -2497,14 +2743,23 @@
// The selected connections may switch, so keep references to them.
const Connection* selected_connection1 = ep1_ch1()->selected_connection();
// We should detect loss of receiving within 1 second or so.
- EXPECT_TRUE_SIMULATED_WAIT(!selected_connection1->receiving(), kMediumTimeout,
- clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return !selected_connection1->receiving(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// We should switch over to use the alternate addr on both sides
// when we are not receiving.
- EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection()->receiving() &&
- ep2_ch1()->selected_connection()->receiving(),
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()->selected_connection()->receiving() &&
+ ep2_ch1()->selected_connection()->receiving();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]));
EXPECT_TRUE(
RemoteCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[1]));
@@ -2531,10 +2786,15 @@
IceConfig config = CreateIceConfig(1000, GATHER_ONCE);
// Create channels and let them go writable, as usual.
CreateChannels(config, config);
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(), kPublicAddrs[0],
- kPublicAddrs[1]),
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckCandidatePairAndConnected(
+ ep1_ch1(), ep2_ch1(), kPublicAddrs[0], kPublicAddrs[1]);
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Blackhole any traffic to or from the public addrs.
RTC_LOG(LS_INFO) << "Failing over...";
@@ -2543,10 +2803,16 @@
// We should detect loss of receiving within 1 second or so.
// We should switch over to use the alternate addr on both sides
// when we are not receiving.
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(), kAlternateAddrs[0],
- kPublicAddrs[1]),
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(),
+ kAlternateAddrs[0],
+ kPublicAddrs[1]);
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
DestroyChannels();
}
@@ -2593,10 +2859,15 @@
IceConfig config = CreateIceConfig(1000, GATHER_CONTINUALLY);
// Create channels and let them go writable, as usual.
CreateChannels(config, config, true /* ice_renomination */);
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(), wifiIpv6[0],
- wifiIpv6[1]),
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckCandidatePairAndConnected(
+ ep1_ch1(), ep2_ch1(), wifiIpv6[0], wifiIpv6[1]);
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Blackhole any traffic to or from the wifi on endpoint 1.
RTC_LOG(LS_INFO) << "Failing over...";
@@ -2606,9 +2877,15 @@
// The selected connections may switch, so keep references to them.
const Connection* selected_connection1 = ep1_ch1()->selected_connection();
const Connection* selected_connection2 = ep2_ch1()->selected_connection();
- EXPECT_TRUE_SIMULATED_WAIT(
- !selected_connection1->receiving() && !selected_connection2->receiving(),
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return !selected_connection1->receiving() &&
+ !selected_connection2->receiving();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Per-network best connections will be pinged at relatively higher rate when
// the selected connection becomes not receiving.
@@ -2617,9 +2894,13 @@
ASSERT_NE(nullptr, per_network_best_connection1);
int64_t last_ping_sent1 = per_network_best_connection1->last_ping_sent();
int num_pings_sent1 = per_network_best_connection1->num_pings_sent();
- EXPECT_TRUE_SIMULATED_WAIT(
- num_pings_sent1 < per_network_best_connection1->num_pings_sent(),
- kMediumTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return per_network_best_connection1->num_pings_sent(); },
+ Gt(num_pings_sent1),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
ASSERT_GT(per_network_best_connection1->num_pings_sent() - num_pings_sent1,
0);
int64_t ping_interval1 =
@@ -2632,10 +2913,15 @@
// It should switch over to use the cellular IPv6 addr on endpoint 1 before
// it timed out on writing.
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(), cellularIpv6[0],
- wifiIpv6[1]),
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckCandidatePairAndConnected(
+ ep1_ch1(), ep2_ch1(), cellularIpv6[0], wifiIpv6[1]);
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
DestroyChannels();
}
@@ -2660,12 +2946,22 @@
IceConfig config = CreateIceConfig(1000, GATHER_ONCE);
// Create channels with ICE renomination and let them go writable as usual.
CreateChannels(config, config, true);
- ASSERT_TRUE_SIMULATED_WAIT(CheckConnected(ep1_ch1(), ep2_ch1()),
- kMediumTimeout, clock);
- EXPECT_TRUE_SIMULATED_WAIT(
- ep2_ch1()->selected_connection()->remote_nomination() > 0 &&
- ep1_ch1()->selected_connection()->acked_nomination() > 0,
- kDefaultTimeout, clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return ep2_ch1()->selected_connection()->remote_nomination() > 0 &&
+ ep1_ch1()->selected_connection()->acked_nomination() > 0;
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
const Connection* selected_connection1 = ep1_ch1()->selected_connection();
Connection* selected_connection2 =
const_cast<Connection*>(ep2_ch1()->selected_connection());
@@ -2681,15 +2977,21 @@
fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[0]);
// The selected connection on the controlling side should switch.
- EXPECT_TRUE_SIMULATED_WAIT(
- ep1_ch1()->selected_connection() != selected_connection1, kMediumTimeout,
- clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ep1_ch1()->selected_connection(); },
+ Ne(selected_connection1),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// The connection on the controlled side should be nominated again
// and have an increased nomination.
- EXPECT_TRUE_SIMULATED_WAIT(
- ep2_ch1()->selected_connection()->remote_nomination() >
- remote_nomination2,
- kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return ep2_ch1()->selected_connection()->remote_nomination(); },
+ Gt(remote_nomination2),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
DestroyChannels();
}
@@ -2714,10 +3016,15 @@
// Create channels and let them go writable, as usual.
CreateChannels();
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(), kPublicAddrs[0],
- kPublicAddrs[1]),
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckCandidatePairAndConnected(
+ ep1_ch1(), ep2_ch1(), kPublicAddrs[0], kPublicAddrs[1]);
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Make the receiving timeout shorter for testing.
IceConfig config = CreateIceConfig(1000, GATHER_ONCE);
@@ -2732,17 +3039,26 @@
// The selected connections may switch, so keep references to them.
const Connection* selected_connection1 = ep1_ch1()->selected_connection();
// We should detect loss of receiving within 1 second or so.
- EXPECT_TRUE_SIMULATED_WAIT(!selected_connection1->receiving(), kMediumTimeout,
- clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return !selected_connection1->receiving(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// After a short while, the link recovers itself.
SIMULATED_WAIT(false, 10, clock);
fw()->ClearRules();
// We should remain on the public address on both sides and no connection
// switches should have happened.
- EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection()->receiving() &&
- ep2_ch1()->selected_connection()->receiving(),
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()->selected_connection()->receiving() &&
+ ep2_ch1()->selected_connection()->receiving();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1]));
EXPECT_TRUE(LocalCandidate(ep2_ch1())->address().EqualIPs(kPublicAddrs[1]));
EXPECT_EQ(0, reset_selected_candidate_pair_switches());
@@ -2766,10 +3082,15 @@
// Create channels and let them go writable, as usual.
CreateChannels();
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(), kPublicAddrs[0],
- kPublicAddrs[1]),
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckCandidatePairAndConnected(
+ ep1_ch1(), ep2_ch1(), kPublicAddrs[0], kPublicAddrs[1]);
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Make the receiving timeout shorter for testing.
IceConfig config = CreateIceConfig(1000, GATHER_ONCE);
@@ -2783,18 +3104,26 @@
// The selected connections may switch, so keep references to them.
const Connection* selected_connection1 = ep1_ch1()->selected_connection();
// We should detect loss of receiving within 1 second or so.
- EXPECT_TRUE_SIMULATED_WAIT(!selected_connection1->receiving(), kMediumTimeout,
- clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return !selected_connection1->receiving(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// The link recovers after a short while.
SIMULATED_WAIT(false, 10, clock);
fw()->ClearRules();
// We should not switch to the alternate addr on both sides because of the
// dampening.
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(), kPublicAddrs[0],
- kPublicAddrs[1]),
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckCandidatePairAndConnected(
+ ep1_ch1(), ep2_ch1(), kPublicAddrs[0], kPublicAddrs[1]);
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(0, reset_selected_candidate_pair_switches());
DestroyChannels();
}
@@ -2824,17 +3153,27 @@
ep1_ch1()->SetIceConfig(config);
ep2_ch1()->SetIceConfig(config);
// Need to wait to make sure the connections on both networks are writable.
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(), wifi[0], wifi[1]),
- kDefaultTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(),
+ wifi[0], wifi[1]);
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
Connection* backup_conn =
GetConnectionWithLocalAddress(ep1_ch1(), cellular[0]);
ASSERT_NE(nullptr, backup_conn);
// After a short while, the backup connection will be writable but not
// receiving because backup connection is pinged at a slower rate.
- EXPECT_TRUE_SIMULATED_WAIT(
- backup_conn->writable() && !backup_conn->receiving(), kDefaultTimeout,
- clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return backup_conn->writable() && !backup_conn->receiving(); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
reset_selected_candidate_pair_switches();
// Blackhole any traffic to or from the remote WiFi networks.
RTC_LOG(LS_INFO) << "Failing over...";
@@ -2867,9 +3206,13 @@
EXPECT_TRUE_WAIT_MARGIN(CheckConnected(ep1_ch1(), ep2_ch1()), 1000, 1000);
// Need to wait to make sure the connections on both networks are writable.
- EXPECT_TRUE_WAIT(
- CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(), wifi[0], wifi[1]),
- 1000);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(),
+ wifi[0], wifi[1]);
+ },
+ IsTrue()),
+ webrtc::IsRtcOk());
DestroyChannels();
}
@@ -2918,16 +3261,22 @@
CreateIceConfig(2000, GATHER_ONCE, backup_ping_interval));
// After the state becomes COMPLETED, the backup connection will be pinged
// once every `backup_ping_interval` milliseconds.
- ASSERT_TRUE_WAIT(ep2_ch1()->GetState() == IceTransportState::STATE_COMPLETED,
- 1000);
+ ASSERT_THAT(webrtc::WaitUntil([&] { return ep2_ch1()->GetState(); },
+ Eq(IceTransportState::STATE_COMPLETED)),
+ webrtc::IsRtcOk());
auto connections = ep2_ch1()->connections();
ASSERT_EQ(2U, connections.size());
Connection* backup_conn = GetBackupConnection(ep2_ch1());
- EXPECT_TRUE_WAIT(backup_conn->writable(), kMediumTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return backup_conn->writable(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
int64_t last_ping_response_ms = backup_conn->last_ping_response_received();
- EXPECT_TRUE_WAIT(
- last_ping_response_ms < backup_conn->last_ping_response_received(),
- kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return backup_conn->last_ping_response_received(); },
+ Gt(last_ping_response_ms),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
int time_elapsed =
backup_conn->last_ping_response_received() - last_ping_response_ms;
RTC_LOG(LS_INFO) << "Time elapsed: " << time_elapsed;
@@ -2959,20 +3308,26 @@
ep2_ch1()->SetIceConfig(config);
// After the state becomes COMPLETED and is stable and writable, the
// connection will be pinged once every `ping_interval_ms` milliseconds.
- ASSERT_TRUE_WAIT(ep2_ch1()->GetState() == IceTransportState::STATE_COMPLETED,
- 1000);
+ ASSERT_THAT(webrtc::WaitUntil([&] { return ep2_ch1()->GetState(); },
+ Eq(IceTransportState::STATE_COMPLETED)),
+ webrtc::IsRtcOk());
auto connections = ep2_ch1()->connections();
ASSERT_EQ(2U, connections.size());
Connection* conn = GetBestConnection(ep2_ch1());
- EXPECT_TRUE_WAIT(conn->writable(), kMediumTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return conn->writable(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
int64_t last_ping_response_ms;
// Burn through some pings so the connection is stable.
for (int i = 0; i < 5; i++) {
last_ping_response_ms = conn->last_ping_response_received();
- EXPECT_TRUE_WAIT(
- last_ping_response_ms < conn->last_ping_response_received(),
- kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return conn->last_ping_response_received(); },
+ Gt(last_ping_response_ms),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
}
EXPECT_TRUE(conn->stable(last_ping_response_ms)) << "Connection not stable";
int time_elapsed =
@@ -2992,10 +3347,18 @@
CreateChannels();
// Both transport channels will reach STATE_COMPLETED quickly.
- EXPECT_EQ_SIMULATED_WAIT(IceTransportState::STATE_COMPLETED,
- ep1_ch1()->GetState(), kShortTimeout, clock);
- EXPECT_EQ_SIMULATED_WAIT(IceTransportState::STATE_COMPLETED,
- ep2_ch1()->GetState(), kShortTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ep1_ch1()->GetState(); },
+ Eq(IceTransportState::STATE_COMPLETED),
+ {.timeout = webrtc::TimeDelta::Millis(kShortTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ep2_ch1()->GetState(); },
+ Eq(IceTransportState::STATE_COMPLETED),
+ {.timeout = webrtc::TimeDelta::Millis(kShortTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
DestroyChannels();
}
@@ -3014,8 +3377,12 @@
SetAllocatorFlags(0, kOnlyLocalPorts);
SetAllocatorFlags(1, kOnlyLocalPorts);
- ASSERT_TRUE_SIMULATED_WAIT(CheckConnected(ep1_ch1(), ep2_ch1()),
- kDefaultTimeout, clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// More than one port has been created.
EXPECT_LE(1U, ep1_ch1()->ports().size());
// Endpoint 1 enabled continual gathering; the port will be removed
@@ -3023,8 +3390,10 @@
RemoveAddress(0, kPublicAddrs[0]);
EXPECT_TRUE(ep1_ch1()->ports().empty());
// The remote candidates will be removed eventually.
- EXPECT_TRUE_SIMULATED_WAIT(ep2_ch1()->remote_candidates().empty(), 1000,
- clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ep2_ch1()->remote_candidates().empty(); },
+ IsTrue(), {.clock = &clock}),
+ webrtc::IsRtcOk());
size_t num_ports = ep2_ch1()->ports().size();
EXPECT_LE(1U, num_ports);
@@ -3034,9 +3403,12 @@
// other participant will not be removed.
RemoveAddress(1, kPublicAddrs[1]);
- EXPECT_EQ_SIMULATED_WAIT(0U, ep2_ch1()->ports().size(), kDefaultTimeout,
- clock);
- SIMULATED_WAIT(0U == ep1_ch1()->remote_candidates().size(), 500, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ep2_ch1()->ports().size(); }, Eq(0U),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ SIMULATED_WAIT(ep1_ch1()->remote_candidates().empty(), 500, clock);
EXPECT_EQ(num_remote_candidates, ep1_ch1()->remote_candidates().size());
DestroyChannels();
@@ -3063,36 +3435,58 @@
// to be created and the new one will be the best connection.
AddAddress(1, wifi[1], "test_wifi1", rtc::ADAPTER_TYPE_WIFI);
const Connection* conn;
- EXPECT_TRUE_WAIT((conn = ep1_ch1()->selected_connection()) != nullptr &&
- HasRemoteAddress(conn, wifi[1]),
- kDefaultTimeout);
- EXPECT_TRUE_WAIT((conn = ep2_ch1()->selected_connection()) != nullptr &&
- HasLocalAddress(conn, wifi[1]),
- kDefaultTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return (conn = ep1_ch1()->selected_connection()) != nullptr &&
+ HasRemoteAddress(conn, wifi[1]);
+ },
+ IsTrue(), {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return (conn = ep2_ch1()->selected_connection()) != nullptr &&
+ HasLocalAddress(conn, wifi[1]);
+ },
+ IsTrue(), {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Add a new cellular interface on end point 1, we should expect a new
// backup connection created using this new interface.
AddAddress(0, cellular[0], "test_cellular0", rtc::ADAPTER_TYPE_CELLULAR);
- EXPECT_TRUE_WAIT(
- ep1_ch1()->GetState() == IceTransportState::STATE_COMPLETED &&
- absl::c_any_of(ep1_ch1()->connections(),
- [channel = ep1_ch1(),
- address = cellular[0]](const Connection* conn) {
- return HasLocalAddress(conn, address) &&
- conn != channel->selected_connection() &&
- conn->writable();
- }),
- kDefaultTimeout);
- EXPECT_TRUE_WAIT(
- ep2_ch1()->GetState() == IceTransportState::STATE_COMPLETED &&
- absl::c_any_of(ep2_ch1()->connections(),
- [channel = ep2_ch1(),
- address = cellular[0]](const Connection* conn) {
- return HasRemoteAddress(conn, address) &&
- conn != channel->selected_connection() &&
- conn->receiving();
- }),
- kDefaultTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()->GetState() ==
+ IceTransportState::STATE_COMPLETED &&
+ absl::c_any_of(
+ ep1_ch1()->connections(),
+ [channel = ep1_ch1(),
+ address = cellular[0]](const Connection* conn) {
+ return HasLocalAddress(conn, address) &&
+ conn != channel->selected_connection() &&
+ conn->writable();
+ });
+ },
+ IsTrue(), {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return ep2_ch1()->GetState() ==
+ IceTransportState::STATE_COMPLETED &&
+ absl::c_any_of(
+ ep2_ch1()->connections(),
+ [channel = ep2_ch1(),
+ address = cellular[0]](const Connection* conn) {
+ return HasRemoteAddress(conn, address) &&
+ conn != channel->selected_connection() &&
+ conn->receiving();
+ });
+ },
+ IsTrue(), {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
DestroyChannels();
}
@@ -3112,29 +3506,46 @@
CreateIceConfig(1000, GATHER_CONTINUALLY);
// Create channels and let them go writable, as usual.
CreateChannels(continual_gathering_config, continual_gathering_config);
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(), kPublicAddrs[0],
- kPublicAddrs[1]),
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckCandidatePairAndConnected(
+ ep1_ch1(), ep2_ch1(), kPublicAddrs[0], kPublicAddrs[1]);
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Add the new address first and then remove the other one.
RTC_LOG(LS_INFO) << "Draining...";
AddAddress(1, kAlternateAddrs[1]);
RemoveAddress(1, kPublicAddrs[1]);
// We should switch to use the alternate address after an exchange of pings.
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(), kPublicAddrs[0],
- kAlternateAddrs[1]),
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(),
+ kPublicAddrs[0],
+ kAlternateAddrs[1]);
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Remove one address first and then add another address.
RTC_LOG(LS_INFO) << "Draining again...";
RemoveAddress(1, kAlternateAddrs[1]);
AddAddress(1, kAlternateAddrs[0]);
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(), kPublicAddrs[0],
- kAlternateAddrs[0]),
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(),
+ kPublicAddrs[0],
+ kAlternateAddrs[0]);
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
DestroyChannels();
}
@@ -3156,22 +3567,38 @@
IceConfig config = CreateIceConfig(1000, GATHER_CONTINUALLY);
config.regather_on_failed_networks_interval = 2000;
CreateChannels(config, config);
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(), wifi[0], wifi[1]),
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckCandidatePairAndConnected(ep1_ch1(), ep2_ch1(),
+ wifi[0], wifi[1]);
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Destroy all backup connections.
DestroyAllButBestConnection(ep1_ch1());
// Ensure the backup connection is removed first.
- EXPECT_TRUE_SIMULATED_WAIT(
- GetConnectionWithLocalAddress(ep1_ch1(), cellular[0]) == nullptr,
- kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return GetConnectionWithLocalAddress(ep1_ch1(), cellular[0]); },
+ Eq(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
const Connection* conn;
- EXPECT_TRUE_SIMULATED_WAIT(
- (conn = GetConnectionWithLocalAddress(ep1_ch1(), cellular[0])) !=
- nullptr &&
- conn != ep1_ch1()->selected_connection() && conn->writable(),
- kDefaultTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return (conn = GetConnectionWithLocalAddress(
+ ep1_ch1(), cellular[0])) != nullptr &&
+ conn != ep1_ch1()->selected_connection() &&
+ conn->writable();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
DestroyChannels();
}
@@ -3184,10 +3611,16 @@
IceConfig config;
CreateChannels(config, config, false);
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckConnected(ep1_ch1(), ep2_ch1()) &&
- !ep1_ch1()->selected_connection()->network()->IsVpn(),
- kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return CheckConnected(ep1_ch1(), ep2_ch1()) &&
+ !ep1_ch1()->selected_connection()->network()->IsVpn();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
}
TEST_F(P2PTransportChannelMultihomedTest, TestVpnPreferVpn) {
@@ -3201,19 +3634,30 @@
config.vpn_preference = webrtc::VpnPreference::kPreferVpn;
RTC_LOG(LS_INFO) << "KESO: config.vpn_preference: " << config.vpn_preference;
CreateChannels(config, config, false);
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckConnected(ep1_ch1(), ep2_ch1()) &&
- ep1_ch1()->selected_connection()->network()->IsVpn(),
- kDefaultTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckConnected(ep1_ch1(), ep2_ch1()) &&
+ ep1_ch1()->selected_connection()->network()->IsVpn();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Block VPN.
fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kAlternateAddrs[0]);
// Check that it switches to non-VPN
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckConnected(ep1_ch1(), ep2_ch1()) &&
- !ep1_ch1()->selected_connection()->network()->IsVpn(),
- kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return CheckConnected(ep1_ch1(), ep2_ch1()) &&
+ !ep1_ch1()->selected_connection()->network()->IsVpn();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
}
TEST_F(P2PTransportChannelMultihomedTest, TestVpnAvoidVpn) {
@@ -3226,19 +3670,30 @@
IceConfig config;
config.vpn_preference = webrtc::VpnPreference::kAvoidVpn;
CreateChannels(config, config, false);
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckConnected(ep1_ch1(), ep2_ch1()) &&
- !ep1_ch1()->selected_connection()->network()->IsVpn(),
- kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return CheckConnected(ep1_ch1(), ep2_ch1()) &&
+ !ep1_ch1()->selected_connection()->network()->IsVpn();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Block non-VPN.
fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[0]);
// Check that it switches to VPN
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckConnected(ep1_ch1(), ep2_ch1()) &&
- ep1_ch1()->selected_connection()->network()->IsVpn(),
- kDefaultTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckConnected(ep1_ch1(), ep2_ch1()) &&
+ ep1_ch1()->selected_connection()->network()->IsVpn();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
}
TEST_F(P2PTransportChannelMultihomedTest, TestVpnNeverVpn) {
@@ -3251,18 +3706,28 @@
IceConfig config;
config.vpn_preference = webrtc::VpnPreference::kNeverUseVpn;
CreateChannels(config, config, false);
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckConnected(ep1_ch1(), ep2_ch1()) &&
- !ep1_ch1()->selected_connection()->network()->IsVpn(),
- kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return CheckConnected(ep1_ch1(), ep2_ch1()) &&
+ !ep1_ch1()->selected_connection()->network()->IsVpn();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Block non-VPN.
fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[0]);
// Check that it does not switches to VPN
clock.AdvanceTime(webrtc::TimeDelta::Millis(kDefaultTimeout));
- EXPECT_TRUE_SIMULATED_WAIT(!CheckConnected(ep1_ch1(), ep2_ch1()),
- kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return !CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
}
TEST_F(P2PTransportChannelMultihomedTest, TestVpnOnlyVpn) {
@@ -3275,18 +3740,27 @@
IceConfig config;
config.vpn_preference = webrtc::VpnPreference::kOnlyUseVpn;
CreateChannels(config, config, false);
- EXPECT_TRUE_SIMULATED_WAIT(
- CheckConnected(ep1_ch1(), ep2_ch1()) &&
- ep1_ch1()->selected_connection()->network()->IsVpn(),
- kDefaultTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return CheckConnected(ep1_ch1(), ep2_ch1()) &&
+ ep1_ch1()->selected_connection()->network()->IsVpn();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Block VPN.
fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kAlternateAddrs[0]);
// Check that it does not switch to non-VPN
clock.AdvanceTime(webrtc::TimeDelta::Millis(kDefaultTimeout));
- EXPECT_TRUE_SIMULATED_WAIT(!CheckConnected(ep1_ch1(), ep2_ch1()),
- kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return !CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
}
TEST_F(P2PTransportChannelMultihomedTest, StunDictionaryPerformsSync) {
@@ -3317,8 +3791,12 @@
EXPECT_EQ(view.GetByteString(12)->string_view(), "keso");
});
EXPECT_CALL(writer_synced_func, Call).Times(1);
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnected(ep1_ch1(), ep2_ch1()),
- kMediumTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
}
// A collection of tests which tests a single P2PTransportChannel by sending
@@ -3355,11 +3833,18 @@
int port_num,
rtc::ThreadProcessingFakeClock* clock = nullptr) {
if (clock == nullptr) {
- EXPECT_TRUE_WAIT(GetConnectionTo(ch, ip, port_num) != nullptr,
- kMediumTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return GetConnectionTo(ch, ip, port_num); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
} else {
- EXPECT_TRUE_SIMULATED_WAIT(GetConnectionTo(ch, ip, port_num) != nullptr,
- kMediumTimeout, *clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return GetConnectionTo(ch, ip, port_num); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &*clock}),
+ webrtc::IsRtcOk());
}
return GetConnectionTo(ch, ip, port_num);
}
@@ -3413,9 +3898,12 @@
bool writable) {
channel->AddRemoteCandidate(
CreateUdpCandidate(IceCandidateType::kHost, ip_addr, port, priority));
- EXPECT_TRUE_SIMULATED_WAIT(
- GetConnectionTo(channel, ip_addr, port) != nullptr, kMediumTimeout,
- *clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return GetConnectionTo(channel, ip_addr, port); },
+ Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &*clock}),
+ webrtc::IsRtcOk());
Connection* conn = GetConnectionTo(channel, ip_addr, port);
if (conn && writable) {
@@ -3597,10 +4085,14 @@
// Low-priority connection becomes writable so that the other connection
// is not pruned.
conn1->ReceivedPingResponse(LOW_RTT, "id");
- EXPECT_TRUE_WAIT(
- conn1->num_pings_sent() >= MIN_PINGS_AT_WEAK_PING_INTERVAL &&
- conn2->num_pings_sent() >= MIN_PINGS_AT_WEAK_PING_INTERVAL,
- kDefaultTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return conn1->num_pings_sent() >= MIN_PINGS_AT_WEAK_PING_INTERVAL &&
+ conn2->num_pings_sent() >= MIN_PINGS_AT_WEAK_PING_INTERVAL;
+ },
+ IsTrue(), {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
}
// Verify that the connections are pinged at the right time.
@@ -3709,8 +4201,11 @@
ch.SetIceRole(ICEROLE_CONTROLLING);
ch.SetIceParameters(kIceParams[0]);
ch.MaybeStartGathering();
- EXPECT_EQ_WAIT(IceGatheringState::kIceGatheringComplete, ch.gathering_state(),
- kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.gathering_state(); },
+ Eq(IceGatheringState::kIceGatheringComplete),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Simulate a binding request being received, creating a peer reflexive
// candidate pair while we still don't have remote ICE parameters.
@@ -3736,7 +4231,9 @@
// the first ping is sent as soon as possible, within one simulated clock
// tick.
ch.SetRemoteIceParameters(kIceParams[1]);
- EXPECT_TRUE_SIMULATED_WAIT(conn->num_pings_sent() > 0, 1, clock);
+ EXPECT_THAT(webrtc::WaitUntil([&] { return conn->num_pings_sent(); }, Gt(0),
+ {.clock = &clock}),
+ webrtc::IsRtcOk());
}
TEST_F(P2PTransportChannelPingTest, TestNoTriggeredChecksWhenWritable) {
@@ -3800,8 +4297,11 @@
// Pruning the connection reduces the set of active connections and changes
// the channel state.
conn1->Prune();
- EXPECT_EQ_WAIT(IceTransportState::STATE_FAILED, channel_state(),
- kDefaultTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return channel_state(); }, Eq(IceTransportState::STATE_FAILED),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
}
// Test adding remote candidates with different ufrags. If a remote candidate
@@ -3845,8 +4345,11 @@
ch.AddRemoteCandidate(CreateUdpCandidate(IceCandidateType::kHost, "3.3.3.3",
3, 0, kIceUfrag[2]));
Connection* conn3 = nullptr;
- ASSERT_TRUE_WAIT((conn3 = GetConnectionTo(&ch, "3.3.3.3", 3)) != nullptr,
- kMediumTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return conn3 = GetConnectionTo(&ch, "3.3.3.3", 3); },
+ Ne(nullptr), {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
const Candidate& new_candidate = conn3->remote_candidate();
EXPECT_EQ(kIcePwd[2], new_candidate.password());
EXPECT_EQ(1U, new_candidate.generation());
@@ -3887,11 +4390,17 @@
conn2->ReceivedPingResponse(LOW_RTT, "id");
// Wait for conn2 to be selected.
- EXPECT_EQ_WAIT(conn2, ch.selected_connection(), kMediumTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch.selected_connection(); }, Eq(conn2),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
// Destroy the connection to test SignalUnknownAddress.
ch.RemoveConnectionForTest(conn1);
- EXPECT_TRUE_WAIT(GetConnectionTo(&ch, "1.1.1.1", 1) == nullptr,
- kMediumTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return GetConnectionTo(&ch, "1.1.1.1", 1); },
+ Eq(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
// Create a minimal STUN message with prflx priority.
IceMessage request(STUN_BINDING_REQUEST);
@@ -3942,8 +4451,16 @@
conn1->OnReadPacket(
rtc::ReceivedPacket::CreateFromLegacy("ABC", 3, rtc::TimeMicros()));
- EXPECT_TRUE_SIMULATED_WAIT(ch.receiving(), kShortTimeout, clock);
- EXPECT_TRUE_SIMULATED_WAIT(!ch.receiving(), kShortTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch.receiving(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kShortTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return !ch.receiving(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kShortTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
}
// The controlled side will select a connection as the "selected connection"
@@ -3973,7 +4490,10 @@
// A connection needs to be writable before it is selected for transmission.
conn1->ReceivedPingResponse(LOW_RTT, "id");
- EXPECT_EQ_WAIT(conn1, ch.selected_connection(), kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.selected_connection(); }, Eq(conn1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(CandidatePairMatchesNetworkRoute(conn1));
EXPECT_TRUE(ConnectionMatchesChangeEvent(
conn1, "remote candidate generation maybe changed"));
@@ -3986,7 +4506,10 @@
Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2);
ASSERT_TRUE(conn2 != nullptr);
conn2->ReceivedPingResponse(LOW_RTT, "id");
- EXPECT_EQ_WAIT(conn2, ch.selected_connection(), kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.selected_connection(); }, Eq(conn2),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(CandidatePairMatchesNetworkRoute(conn2));
EXPECT_TRUE(
ConnectionMatchesChangeEvent(conn2, "candidate pair state changed"));
@@ -4032,7 +4555,10 @@
reset_channel_ready_to_send();
// The selected connection switches after conn4 becomes writable.
conn4->ReceivedPingResponse(LOW_RTT, "id");
- EXPECT_EQ_WAIT(conn4, ch.selected_connection(), kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.selected_connection(); }, Eq(conn4),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(CandidatePairMatchesNetworkRoute(conn4));
EXPECT_TRUE(
ConnectionMatchesChangeEvent(conn4, "candidate pair state changed"));
@@ -4062,7 +4588,10 @@
// A connection needs to be writable before it is selected for transmission.
conn1->ReceivedPingResponse(LOW_RTT, "id");
- EXPECT_EQ_WAIT(conn1, ch.selected_connection(), kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.selected_connection(); }, Eq(conn1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(CandidatePairMatchesNetworkRoute(conn1));
// When a higher priority candidate comes in, the new connection is chosen
@@ -4072,7 +4601,10 @@
Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2);
ASSERT_TRUE(conn2 != nullptr);
conn2->ReceivedPingResponse(LOW_RTT, "id");
- EXPECT_EQ_WAIT(conn2, ch.selected_connection(), kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.selected_connection(); }, Eq(conn2),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(CandidatePairMatchesNetworkRoute(conn2));
// Now nominate conn1 (low prio), it shall be choosen.
@@ -4106,7 +4638,10 @@
// A connection needs to be writable before it is selected for transmission.
conn1->ReceivedPingResponse(LOW_RTT, "id");
- EXPECT_EQ_WAIT(conn1, ch.selected_connection(), kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.selected_connection(); }, Eq(conn1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(CandidatePairMatchesNetworkRoute(conn1));
// When a higher priority candidate comes in, the new connection is chosen
@@ -4119,7 +4654,10 @@
const int before = conn2->num_pings_sent();
conn2->ReceivedPingResponse(LOW_RTT, "id");
- EXPECT_EQ_WAIT(conn2, ch.selected_connection(), kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.selected_connection(); }, Eq(conn2),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(CandidatePairMatchesNetworkRoute(conn2));
// And the additional ping should have been sent directly.
@@ -4149,7 +4687,10 @@
// A connection needs to be writable before it is selected for transmission.
conn1->ReceivedPingResponse(LOW_RTT, "id");
- EXPECT_EQ_WAIT(conn1, ch.selected_connection(), kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.selected_connection(); }, Eq(conn1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(CandidatePairMatchesNetworkRoute(conn1));
// And the additional ping should have been sent directly.
@@ -4184,7 +4725,10 @@
EXPECT_EQ(conn1->stats().sent_ping_responses, 1u);
EXPECT_NE(conn1, ch.selected_connection());
conn1->ReceivedPingResponse(LOW_RTT, "id");
- EXPECT_EQ_WAIT(conn1, ch.selected_connection(), kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.selected_connection(); }, Eq(conn1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Another connection is nominated via use_candidate.
ch.AddRemoteCandidate(
@@ -4222,7 +4766,10 @@
// conn4 is not the selected connection yet because it is not writable.
EXPECT_EQ(conn2, ch.selected_connection());
conn4->ReceivedPingResponse(LOW_RTT, "id"); // Become writable.
- EXPECT_EQ_WAIT(conn4, ch.selected_connection(), kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.selected_connection(); }, Eq(conn4),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Test that the request from an unknown address contains a ufrag from an old
// generation.
@@ -4253,7 +4800,10 @@
Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1);
ASSERT_TRUE(conn1 != nullptr);
conn1->ReceivedPingResponse(LOW_RTT, "id");
- EXPECT_EQ_WAIT(conn1, ch.selected_connection(), kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.selected_connection(); }, Eq(conn1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// If a data packet is received on conn2, the selected connection should
// switch to conn2 because the controlled side must mirror the media path
@@ -4285,7 +4835,10 @@
ASSERT_TRUE(conn3 != nullptr);
EXPECT_NE(conn3, ch.selected_connection()); // Not writable yet.
conn3->ReceivedPingResponse(LOW_RTT, "id"); // Become writable.
- EXPECT_EQ_WAIT(conn3, ch.selected_connection(), kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.selected_connection(); }, Eq(conn3),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Now another data packet will not switch the selected connection because the
// selected connection was nominated by the controlling side.
@@ -4293,7 +4846,10 @@
conn2->ReceivedPingResponse(LOW_RTT, "id");
conn2->OnReadPacket(
rtc::ReceivedPacket::CreateFromLegacy("XYZ", 3, rtc::TimeMicros()));
- EXPECT_EQ_WAIT(conn3, ch.selected_connection(), kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.selected_connection(); }, Eq(conn3),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
}
TEST_F(P2PTransportChannelPingTest,
@@ -4412,8 +4968,11 @@
ASSERT_TRUE(conn2 != nullptr);
// conn1 is the selected connection because it has a higher priority,
- EXPECT_EQ_SIMULATED_WAIT(conn1, ch.selected_connection(), kDefaultTimeout,
- clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch.selected_connection(); }, Eq(conn1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(CandidatePairMatchesNetworkRoute(conn1));
reset_selected_candidate_pair_switches();
@@ -4461,8 +5020,11 @@
ASSERT_TRUE(conn2 != nullptr);
// conn1 is the selected connection because it has a higher priority,
- EXPECT_EQ_SIMULATED_WAIT(conn1, ch.selected_connection(), kDefaultTimeout,
- clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch.selected_connection(); }, Eq(conn1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(CandidatePairMatchesNetworkRoute(conn1));
// No estimateded disconnect time at first connect <=> value is 0.
EXPECT_EQ(LastEstimatedDisconnectedTimeMs(), 0);
@@ -4544,18 +5106,32 @@
// conn2 becomes writable; it is selected even though it is not nominated.
conn2->ReceivedPingResponse(LOW_RTT, "id");
- EXPECT_EQ_SIMULATED_WAIT(1, reset_selected_candidate_pair_switches(),
- kDefaultTimeout, clock);
- EXPECT_EQ_SIMULATED_WAIT(conn2, ch.selected_connection(), kDefaultTimeout,
- clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return reset_selected_candidate_pair_switches(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch.selected_connection(); }, Eq(conn2),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(CandidatePairMatchesNetworkRoute(conn2));
// If conn1 is also writable, it will become selected.
conn1->ReceivedPingResponse(LOW_RTT, "id");
- EXPECT_EQ_SIMULATED_WAIT(1, reset_selected_candidate_pair_switches(),
- kDefaultTimeout, clock);
- EXPECT_EQ_SIMULATED_WAIT(conn1, ch.selected_connection(), kDefaultTimeout,
- clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return reset_selected_candidate_pair_switches(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch.selected_connection(); }, Eq(conn1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(CandidatePairMatchesNetworkRoute(conn1));
// Make sure sorting won't reselect candidate pair.
@@ -4628,11 +5204,19 @@
ASSERT_TRUE(conn2 != nullptr);
conn2->ReceivedPingResponse(LOW_RTT, "id"); // Becomes writable and receiving
NominateConnection(conn2);
- EXPECT_TRUE_SIMULATED_WAIT(conn1->pruned(), kMediumTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return conn1->pruned(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
ch.SetIceConfig(CreateIceConfig(500, GATHER_ONCE));
// Wait until conn2 becomes not receiving.
- EXPECT_TRUE_SIMULATED_WAIT(!conn2->receiving(), kMediumTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return !conn2->receiving(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
ch.AddRemoteCandidate(
CreateUdpCandidate(IceCandidateType::kHost, "3.3.3.3", 3, 1));
@@ -4701,13 +5285,21 @@
EXPECT_EQ(webrtc::IceTransportState::kChecking, ch.GetIceTransportState());
// `conn1` becomes writable and receiving; it then should prune `conn2`.
conn1->ReceivedPingResponse(LOW_RTT, "id");
- EXPECT_TRUE_SIMULATED_WAIT(conn2->pruned(), kShortTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return conn2->pruned(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kShortTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(IceTransportState::STATE_COMPLETED, ch.GetState());
EXPECT_EQ(webrtc::IceTransportState::kConnected, ch.GetIceTransportState());
conn1->Prune(); // All connections are pruned.
// Need to wait until the channel state is updated.
- EXPECT_EQ_SIMULATED_WAIT(IceTransportState::STATE_FAILED, ch.GetState(),
- kShortTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch.GetState(); },
+ Eq(IceTransportState::STATE_FAILED),
+ {.timeout = webrtc::TimeDelta::Millis(kShortTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(webrtc::IceTransportState::kFailed, ch.GetIceTransportState());
}
@@ -4731,8 +5323,11 @@
ASSERT_TRUE(conn1 != nullptr);
EXPECT_EQ(nullptr, ch.selected_connection());
conn1->ReceivedPingResponse(LOW_RTT, "id"); // Becomes writable and receiving
- EXPECT_EQ_SIMULATED_WAIT(conn1, ch.selected_connection(), kDefaultTimeout,
- clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch.selected_connection(); }, Eq(conn1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Add a low-priority connection `conn2`, which will be pruned, but it will
// not be deleted right away. Once the current selected connection becomes not
@@ -4742,27 +5337,49 @@
CreateUdpCandidate(IceCandidateType::kHost, "2.2.2.2", 2, 1));
Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2, &clock);
ASSERT_TRUE(conn2 != nullptr);
- EXPECT_TRUE_SIMULATED_WAIT(!conn2->active(), kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return !conn2->active(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// `conn2` should not send a ping yet.
EXPECT_EQ(IceCandidatePairState::WAITING, conn2->state());
EXPECT_EQ(IceTransportState::STATE_COMPLETED, ch.GetState());
// Wait for `conn1` becoming not receiving.
- EXPECT_TRUE_SIMULATED_WAIT(!conn1->receiving(), kMediumTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return !conn1->receiving(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Make sure conn2 is not deleted.
conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2, &clock);
ASSERT_TRUE(conn2 != nullptr);
- EXPECT_EQ_SIMULATED_WAIT(IceCandidatePairState::IN_PROGRESS, conn2->state(),
- kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return conn2->state(); },
+ Eq(IceCandidatePairState::IN_PROGRESS),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
conn2->ReceivedPingResponse(LOW_RTT, "id");
- EXPECT_EQ_SIMULATED_WAIT(conn2, ch.selected_connection(), kDefaultTimeout,
- clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch.selected_connection(); }, Eq(conn2),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(IceTransportState::STATE_CONNECTING, ch.GetState());
// When `conn1` comes back again, `conn2` will be pruned again.
conn1->ReceivedPingResponse(LOW_RTT, "id");
- EXPECT_EQ_SIMULATED_WAIT(conn1, ch.selected_connection(), kDefaultTimeout,
- clock);
- EXPECT_TRUE_SIMULATED_WAIT(!conn2->active(), kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch.selected_connection(); }, Eq(conn1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return !conn2->active(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(IceTransportState::STATE_COMPLETED, ch.GetState());
}
@@ -4782,7 +5399,11 @@
ASSERT_TRUE(conn1 != nullptr);
conn1->ReceivedPing(); // Becomes receiving
conn1->Prune();
- EXPECT_TRUE_SIMULATED_WAIT(ch.connections().empty(), kShortTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch.connections().empty(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kShortTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Have two connections but both become write-time-out later.
ch.AddRemoteCandidate(
@@ -4798,7 +5419,11 @@
// Now prune both conn2 and conn3; they will be deleted soon.
conn2->Prune();
conn3->Prune();
- EXPECT_TRUE_SIMULATED_WAIT(ch.connections().empty(), kShortTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch.connections().empty(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kShortTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
}
// Tests that after a port allocator session is started, it will be stopped
@@ -4922,8 +5547,12 @@
// If the session prunes all ports, the port will be destroyed.
ch.allocator_session()->PruneAllPorts();
- EXPECT_EQ_SIMULATED_WAIT(nullptr, GetPort(&ch), 1, fake_clock);
- EXPECT_EQ_SIMULATED_WAIT(nullptr, GetPrunedPort(&ch), 1, fake_clock);
+ EXPECT_THAT(webrtc::WaitUntil([&] { return GetPort(&ch); }, Eq(nullptr),
+ {.clock = &fake_clock}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(webrtc::WaitUntil([&] { return GetPrunedPort(&ch); }, Eq(nullptr),
+ {.clock = &fake_clock}),
+ webrtc::IsRtcOk());
}
TEST_F(P2PTransportChannelPingTest, TestMaxOutstandingPingsFieldTrial) {
@@ -4945,8 +5574,13 @@
ASSERT_TRUE(conn1 != nullptr);
ASSERT_TRUE(conn2 != nullptr);
- EXPECT_TRUE_WAIT(conn1->num_pings_sent() == 3 && conn2->num_pings_sent() == 3,
- kDefaultTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return conn1->num_pings_sent() == 3 && conn2->num_pings_sent() == 3;
+ },
+ IsTrue(), {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Check that these connections don't send any more pings.
EXPECT_EQ(nullptr, ch.FindNextPingableConnection());
@@ -4983,7 +5617,7 @@
channel_->SetIceConfig(config);
PrepareChannel(channel_.get());
channel_->MaybeStartGathering();
- return *channel_.get();
+ return *channel_;
}
BasicPortAllocator* allocator() { return allocator_.get(); }
@@ -5020,7 +5654,10 @@
const int max_strong_interval = 500;
P2PTransportChannel& ch =
StartTransportChannel(true, max_strong_interval, &field_trials_);
- EXPECT_TRUE_WAIT(ch.ports().size() == 2, kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.ports().size(); }, Eq(2),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_EQ(ch.ports()[0]->Type(), IceCandidateType::kHost);
EXPECT_EQ(ch.ports()[1]->Type(), IceCandidateType::kRelay);
@@ -5029,7 +5666,10 @@
ch.AddRemoteCandidate(
CreateUdpCandidate(IceCandidateType::kHost, "2.2.2.2", 2, 2));
- EXPECT_TRUE_WAIT(ch.connections().size() == 4, kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.connections().size(); }, Eq(4),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Relay/Relay should be the first pingable connection.
Connection* conn = FindNextPingableConnectionAndPingIt(&ch);
@@ -5081,13 +5721,19 @@
TEST_F(P2PTransportChannelMostLikelyToWorkFirstTest,
TestRelayRelayFirstWhenEverythingPinged) {
P2PTransportChannel& ch = StartTransportChannel(true, 500, &field_trials_);
- EXPECT_TRUE_WAIT(ch.ports().size() == 2, kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.ports().size(); }, Eq(2),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_EQ(ch.ports()[0]->Type(), IceCandidateType::kHost);
EXPECT_EQ(ch.ports()[1]->Type(), IceCandidateType::kRelay);
ch.AddRemoteCandidate(
CreateUdpCandidate(IceCandidateType::kHost, "1.1.1.1", 1, 1));
- EXPECT_TRUE_WAIT(ch.connections().size() == 2, kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.connections().size(); }, Eq(2),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Initially, only have Local/Local and Local/Relay.
VerifyNextPingableConnection(IceCandidateType::kHost,
@@ -5098,7 +5744,10 @@
// Remote Relay candidate arrives.
ch.AddRemoteCandidate(
CreateUdpCandidate(IceCandidateType::kRelay, "2.2.2.2", 2, 2));
- EXPECT_TRUE_WAIT(ch.connections().size() == 4, kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.connections().size(); }, Eq(4),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Relay/Relay should be the first since it hasn't been pinged before.
VerifyNextPingableConnection(IceCandidateType::kRelay,
@@ -5119,13 +5768,19 @@
TEST_F(P2PTransportChannelMostLikelyToWorkFirstTest,
TestNoStarvationOnNonRelayConnection) {
P2PTransportChannel& ch = StartTransportChannel(true, 500, &field_trials_);
- EXPECT_TRUE_WAIT(ch.ports().size() == 2, kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.ports().size(); }, Eq(2),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_EQ(ch.ports()[0]->Type(), IceCandidateType::kHost);
EXPECT_EQ(ch.ports()[1]->Type(), IceCandidateType::kRelay);
ch.AddRemoteCandidate(
CreateUdpCandidate(IceCandidateType::kRelay, "1.1.1.1", 1, 1));
- EXPECT_TRUE_WAIT(ch.connections().size() == 2, kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.connections().size(); }, Eq(2),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Initially, only have Relay/Relay and Local/Relay. Ping Relay/Relay first.
VerifyNextPingableConnection(IceCandidateType::kRelay,
@@ -5138,7 +5793,10 @@
// Remote Local candidate arrives.
ch.AddRemoteCandidate(
CreateUdpCandidate(IceCandidateType::kHost, "2.2.2.2", 2, 2));
- EXPECT_TRUE_WAIT(ch.connections().size() == 4, kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.connections().size(); }, Eq(4),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Local/Local should be the first since it hasn't been pinged before.
VerifyNextPingableConnection(IceCandidateType::kHost,
@@ -5162,19 +5820,28 @@
field_trials_,
"WebRTC-IceFieldTrials/skip_relay_to_non_relay_connections:true/");
P2PTransportChannel& ch = StartTransportChannel(true, 500, &field_trials);
- EXPECT_TRUE_WAIT(ch.ports().size() == 2, kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.ports().size(); }, Eq(2),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_EQ(ch.ports()[0]->Type(), IceCandidateType::kHost);
EXPECT_EQ(ch.ports()[1]->Type(), IceCandidateType::kRelay);
// Remote Relay candidate arrives.
ch.AddRemoteCandidate(
CreateUdpCandidate(IceCandidateType::kRelay, "1.1.1.1", 1, 1));
- EXPECT_TRUE_WAIT(ch.connections().size() == 1, kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.connections().size(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Remote Local candidate arrives.
ch.AddRemoteCandidate(
CreateUdpCandidate(IceCandidateType::kHost, "2.2.2.2", 2, 2));
- EXPECT_TRUE_WAIT(ch.connections().size() == 2, kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.connections().size(); }, Eq(2),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
}
// Test the ping sequence is UDP Relay/Relay followed by TCP Relay/Relay,
@@ -5188,7 +5855,10 @@
allocator()->AddTurnServerForTesting(config);
P2PTransportChannel& ch = StartTransportChannel(true, 500, &field_trials_);
- EXPECT_TRUE_WAIT(ch.ports().size() == 3, kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.ports().size(); }, Eq(3),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_EQ(ch.ports()[0]->Type(), IceCandidateType::kHost);
EXPECT_EQ(ch.ports()[1]->Type(), IceCandidateType::kRelay);
EXPECT_EQ(ch.ports()[2]->Type(), IceCandidateType::kRelay);
@@ -5196,7 +5866,10 @@
// Remote Relay candidate arrives.
ch.AddRemoteCandidate(
CreateUdpCandidate(IceCandidateType::kRelay, "1.1.1.1", 1, 1));
- EXPECT_TRUE_WAIT(ch.connections().size() == 3, kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch.connections().size(); }, Eq(3),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// UDP Relay/Relay should be pinged first.
VerifyNextPingableConnection(IceCandidateType::kRelay,
@@ -5233,7 +5906,10 @@
hostname_candidate.set_address(hostname_address);
channel->AddRemoteCandidate(hostname_candidate);
- ASSERT_EQ_WAIT(1u, channel->remote_candidates().size(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return channel->remote_candidates().size(); }, Eq(1u),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
const RemoteCandidate& candidate = channel->remote_candidates()[0];
EXPECT_FALSE(candidate.address().IsUnresolvedIP());
}
@@ -5259,7 +5935,11 @@
// number is assgined to ep1's host candidate.
PauseCandidates(0);
PauseCandidates(1);
- ASSERT_EQ_WAIT(1u, GetEndpoint(0)->saved_candidates_.size(), kMediumTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return GetEndpoint(0)->saved_candidates_.size(); }, Eq(1u),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
const auto& local_candidate = GetEndpoint(0)->saved_candidates_[0].candidate;
// The IP address of ep1's host candidate should be obfuscated.
EXPECT_TRUE(local_candidate.address().IsUnresolvedIP());
@@ -5271,13 +5951,20 @@
// pair and start to ping. After receiving the ping, ep2 discovers a prflx
// remote candidate and form a candidate pair as well.
ResumeCandidates(1);
- ASSERT_TRUE_WAIT(ep1_ch1()->selected_connection() != nullptr, kMediumTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
// ep2 should have the selected connection connected to the prflx remote
// candidate.
const Connection* selected_connection = nullptr;
- ASSERT_TRUE_WAIT(
- (selected_connection = ep2_ch1()->selected_connection()) != nullptr,
- kMediumTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return selected_connection = ep2_ch1()->selected_connection();
+ },
+ Ne(nullptr), {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(selected_connection->remote_candidate().is_prflx());
EXPECT_EQ(kIceUfrag[0], selected_connection->remote_candidate().username());
EXPECT_EQ(kIcePwd[0], selected_connection->remote_candidate().password());
@@ -5285,9 +5972,16 @@
resolver_fixture.SetAddressToReturn(local_address);
ResumeCandidates(0);
// Verify ep2's selected connection is updated to use the 'local' candidate.
- EXPECT_TRUE_WAIT(
- ep2_ch1()->selected_connection()->remote_candidate().is_local(),
- kMediumTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return ep2_ch1()
+ ->selected_connection()
+ ->remote_candidate()
+ .is_local();
+ },
+ IsTrue(), {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_EQ(selected_connection, ep2_ch1()->selected_connection());
DestroyChannels();
@@ -5317,7 +6011,11 @@
PauseCandidates(0);
PauseCandidates(1);
- ASSERT_EQ_WAIT(1u, GetEndpoint(0)->saved_candidates_.size(), kMediumTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return GetEndpoint(0)->saved_candidates_.size(); }, Eq(1u),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
const auto& local_candidate = GetEndpoint(0)->saved_candidates_[0].candidate;
// The IP address of ep1's host candidate should be obfuscated.
ASSERT_TRUE(local_candidate.address().IsUnresolvedIP());
@@ -5330,7 +6028,10 @@
// by ep1. Let ep2 signal its host candidate with an IP address to ep1, so
// that ep1 can form a candidate pair, select it and start to ping ep2.
ResumeCandidates(1);
- ASSERT_TRUE_WAIT(ep1_ch1()->selected_connection() != nullptr, kMediumTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
// Let the mock resolver of ep2 receives the correct resolution.
resolver_fixture.SetAddressToReturn(local_address);
@@ -5339,16 +6040,26 @@
//
// There is a caveat in our implementation associated with this expectation.
// See the big comment in P2PTransportChannel::OnUnknownAddress.
- ASSERT_TRUE_WAIT(ep2_ch1()->selected_connection() != nullptr, kMediumTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ep2_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(ep2_ch1()->selected_connection()->remote_candidate().is_prflx());
// ep2 should also be able resolve the hostname candidate. The resolved remote
// host candidate should be merged with the prflx remote candidate.
resolver_fixture.FireDelayedResolution();
- EXPECT_TRUE_WAIT(
- ep2_ch1()->selected_connection()->remote_candidate().is_local(),
- kMediumTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return ep2_ch1()
+ ->selected_connection()
+ ->remote_candidate()
+ .is_local();
+ },
+ IsTrue(), {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_EQ(1u, ep2_ch1()->remote_candidates().size());
DestroyChannels();
@@ -5373,7 +6084,11 @@
// number is assgined to ep1's host candidate.
PauseCandidates(0);
PauseCandidates(1);
- ASSERT_EQ_WAIT(1u, GetEndpoint(0)->saved_candidates_.size(), kMediumTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return GetEndpoint(0)->saved_candidates_.size(); }, Eq(1u),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
const auto& local_candidate_ep1 =
GetEndpoint(0)->saved_candidates_[0].candidate;
// The IP address of ep1's host candidate should be obfuscated.
@@ -5389,8 +6104,10 @@
// We should be able to receive a ping from ep2 and establish a connection
// with a peer reflexive candidate from ep2.
- ASSERT_TRUE_WAIT((ep1_ch1()->selected_connection()) != nullptr,
- kMediumTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(ep1_ch1()->selected_connection()->local_candidate().is_local());
EXPECT_TRUE(ep1_ch1()->selected_connection()->remote_candidate().is_prflx());
@@ -5424,8 +6141,16 @@
PauseCandidates(0);
PauseCandidates(1);
// Ep1 has a UDP host, a srflx and a relay candidates.
- ASSERT_EQ_WAIT(3u, GetEndpoint(0)->saved_candidates_.size(), kMediumTimeout);
- ASSERT_EQ_WAIT(1u, GetEndpoint(1)->saved_candidates_.size(), kMediumTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return GetEndpoint(0)->saved_candidates_.size(); }, Eq(3u),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return GetEndpoint(1)->saved_candidates_.size(); }, Eq(1u),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
for (const auto& candidates_data : GetEndpoint(0)->saved_candidates_) {
const auto& local_candidate_ep1 = candidates_data.candidate;
@@ -5441,12 +6166,21 @@
ResumeCandidates(0);
ResumeCandidates(1);
- ASSERT_EQ_WAIT(kIceGatheringComplete, ep1_ch1()->gathering_state(),
- kMediumTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return ep1_ch1()->gathering_state(); },
+ Eq(kIceGatheringComplete),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
// We should have the following candidate pairs on both endpoints:
// ep1_host <-> ep2_host, ep1_srflx <-> ep2_host, ep1_relay <-> ep2_host
- ASSERT_EQ_WAIT(3u, ep1_ch1()->connections().size(), kMediumTimeout);
- ASSERT_EQ_WAIT(3u, ep2_ch1()->connections().size(), kMediumTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return ep1_ch1()->connections().size(); }, Eq(3u),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return ep2_ch1()->connections().size(); }, Eq(3u),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
IceTransportStats ice_transport_stats1;
IceTransportStats ice_transport_stats2;
@@ -5501,8 +6235,11 @@
EXPECT_EQ(0u, ice_transport_stats.selected_candidate_pair_changes);
// Let the channels connect.
- EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection() != nullptr,
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
ASSERT_TRUE(ep1_ch1()->GetStats(&ice_transport_stats));
EXPECT_EQ(1u, ice_transport_stats.selected_candidate_pair_changes);
@@ -5522,8 +6259,11 @@
EXPECT_EQ(0u, ice_transport_stats.selected_candidate_pair_changes);
// Let the channels connect.
- EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection() != nullptr,
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
ASSERT_TRUE(ep1_ch1()->GetStats(&ice_transport_stats));
EXPECT_EQ(1u, ice_transport_stats.selected_candidate_pair_changes);
@@ -5532,8 +6272,11 @@
for (Connection* con : ep1_ch1()->connections()) {
con->Prune();
}
- EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection() == nullptr,
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1()->selected_connection(); }, Eq(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
ASSERT_TRUE(ep1_ch1()->GetStats(&ice_transport_stats));
EXPECT_EQ(2u, ice_transport_stats.selected_candidate_pair_changes);
@@ -5553,8 +6296,11 @@
EXPECT_EQ(0u, ice_transport_stats.selected_candidate_pair_changes);
// Let the channels connect.
- EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection() != nullptr,
- kMediumTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
ASSERT_TRUE(ep1_ch1()->GetStats(&ice_transport_stats));
EXPECT_EQ(1u, ice_transport_stats.selected_candidate_pair_changes);
@@ -5567,11 +6313,17 @@
con->Prune();
}
}
- EXPECT_TRUE_SIMULATED_WAIT(
- ep1_ch1()->selected_connection() != nullptr &&
- (ep1_ch1()->GetStats(&ice_transport_stats),
- ice_transport_stats.selected_candidate_pair_changes >= 2u),
- kMediumTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()->selected_connection() != nullptr &&
+ (ep1_ch1()->GetStats(&ice_transport_stats),
+ ice_transport_stats.selected_candidate_pair_changes >= 2u);
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
ASSERT_TRUE(ep1_ch1()->GetStats(&ice_transport_stats));
EXPECT_GE(ice_transport_stats.selected_candidate_pair_changes, 2u);
@@ -5598,7 +6350,11 @@
// number is assigned to ep1's host candidate.
PauseCandidates(0);
PauseCandidates(1);
- ASSERT_EQ_WAIT(1u, GetEndpoint(0)->saved_candidates_.size(), kMediumTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return GetEndpoint(0)->saved_candidates_.size(); }, Eq(1u),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
const auto& candidates_data = GetEndpoint(0)->saved_candidates_[0];
const auto& local_candidate_ep1 = candidates_data.candidate;
ASSERT_TRUE(local_candidate_ep1.is_local());
@@ -5611,9 +6367,14 @@
ResumeCandidates(0);
ResumeCandidates(1);
- ASSERT_TRUE_WAIT(ep1_ch1()->selected_connection() != nullptr &&
- ep2_ch1()->selected_connection() != nullptr,
- kMediumTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()->selected_connection() != nullptr &&
+ ep2_ch1()->selected_connection() != nullptr;
+ },
+ IsTrue(), {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
const auto pair_ep1 = ep1_ch1()->GetSelectedCandidatePair();
ASSERT_TRUE(pair_ep1.has_value());
@@ -5642,8 +6403,11 @@
// Start gathering and we should have only a single relay port.
ep1_ch1()->SetIceConfig(config);
ep1_ch1()->MaybeStartGathering();
- EXPECT_EQ_WAIT(IceGatheringState::kIceGatheringComplete,
- ep1_ch1()->gathering_state(), kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1()->gathering_state(); },
+ Eq(IceGatheringState::kIceGatheringComplete),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_EQ(1u, ep1_ch1()->ports().size());
// Add a plain remote host candidate and three remote mDNS candidates with the
// host, srflx and relay types. Note that the candidates differ in their
@@ -5723,8 +6487,10 @@
CreateChannels();
// We should be able to form a srflx-host connection to ep2.
- ASSERT_TRUE_WAIT((ep1_ch1()->selected_connection()) != nullptr,
- kMediumTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(ep1_ch1()->selected_connection()->local_candidate().is_stun());
EXPECT_TRUE(ep1_ch1()->selected_connection()->remote_candidate().is_local());
@@ -5753,27 +6519,49 @@
IceConfig ice_config = CreateIceConfig(1000, GATHER_CONTINUALLY);
ice_config.surface_ice_candidates_on_ice_transport_type_changed = true;
CreateChannels(ice_config, ice_config);
- ASSERT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection() != nullptr,
- kDefaultTimeout, clock);
- ASSERT_TRUE_SIMULATED_WAIT(ep2_ch1()->selected_connection() != nullptr,
- kDefaultTimeout, clock);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ep2_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(ep1_ch1()->selected_connection()->local_candidate().is_relay());
EXPECT_TRUE(ep2_ch1()->selected_connection()->local_candidate().is_relay());
// Loosen the candidate filter at ep1.
ep1->allocator_->SetCandidateFilter(CF_ALL);
- EXPECT_TRUE_SIMULATED_WAIT(
- ep1_ch1()->selected_connection() != nullptr &&
- ep1_ch1()->selected_connection()->local_candidate().is_local(),
- kDefaultTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()->selected_connection() != nullptr &&
+ ep1_ch1()
+ ->selected_connection()
+ ->local_candidate()
+ .is_local();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(ep1_ch1()->selected_connection()->remote_candidate().is_relay());
// Loosen the candidate filter at ep2.
ep2->allocator_->SetCandidateFilter(CF_ALL);
- EXPECT_TRUE_SIMULATED_WAIT(
- ep2_ch1()->selected_connection() != nullptr &&
- ep2_ch1()->selected_connection()->local_candidate().is_local(),
- kDefaultTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return ep2_ch1()->selected_connection() != nullptr &&
+ ep2_ch1()
+ ->selected_connection()
+ ->local_candidate()
+ .is_local();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// We have migrated to a host-host candidate pair.
EXPECT_TRUE(ep2_ch1()->selected_connection()->remote_candidate().is_local());
@@ -5784,9 +6572,17 @@
fw()->AddRule(false, rtc::FP_ANY, kPublicAddrs[1], kTurnUdpExtAddr);
// We should be able to reuse the previously gathered relay candidates.
- EXPECT_TRUE_SIMULATED_WAIT(
- ep1_ch1()->selected_connection()->local_candidate().is_relay(),
- kDefaultTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()
+ ->selected_connection()
+ ->local_candidate()
+ .is_relay();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(ep1_ch1()->selected_connection()->remote_candidate().is_relay());
DestroyChannels();
}
@@ -5817,25 +6613,47 @@
IceConfig ice_config = CreateIceConfig(1000, GATHER_CONTINUALLY);
ice_config.surface_ice_candidates_on_ice_transport_type_changed = true;
CreateChannels(ice_config, ice_config);
- ASSERT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection() != nullptr,
- kDefaultTimeout, clock);
- ASSERT_TRUE_SIMULATED_WAIT(ep2_ch1()->selected_connection() != nullptr,
- kDefaultTimeout, clock);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ep2_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
const uint32_t kCandidateFilterNoHost = CF_ALL & ~CF_HOST;
// Loosen the candidate filter at ep1.
ep1->allocator_->SetCandidateFilter(kCandidateFilterNoHost);
- EXPECT_TRUE_SIMULATED_WAIT(
- ep1_ch1()->selected_connection() != nullptr &&
- ep1_ch1()->selected_connection()->local_candidate().is_stun(),
- kDefaultTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()->selected_connection() != nullptr &&
+ ep1_ch1()
+ ->selected_connection()
+ ->local_candidate()
+ .is_stun();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(ep1_ch1()->selected_connection()->remote_candidate().is_relay());
// Loosen the candidate filter at ep2.
ep2->allocator_->SetCandidateFilter(kCandidateFilterNoHost);
- EXPECT_TRUE_SIMULATED_WAIT(
- ep2_ch1()->selected_connection() != nullptr &&
- ep2_ch1()->selected_connection()->local_candidate().is_stun(),
- kDefaultTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return ep2_ch1()->selected_connection() != nullptr &&
+ ep2_ch1()
+ ->selected_connection()
+ ->local_candidate()
+ .is_stun();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// We have migrated to a srflx-srflx candidate pair.
EXPECT_TRUE(ep2_ch1()->selected_connection()->remote_candidate().is_stun());
@@ -5845,9 +6663,17 @@
fw()->AddRule(false, rtc::FP_ANY, kPrivateAddrs[0], kTurnUdpExtAddr);
fw()->AddRule(false, rtc::FP_ANY, kPrivateAddrs[1], kTurnUdpExtAddr);
// We should be able to reuse the previously gathered relay candidates.
- EXPECT_TRUE_SIMULATED_WAIT(
- ep1_ch1()->selected_connection()->local_candidate().is_relay(),
- kDefaultTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()
+ ->selected_connection()
+ ->local_candidate()
+ .is_relay();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(ep1_ch1()->selected_connection()->remote_candidate().is_relay());
DestroyChannels();
}
@@ -5873,10 +6699,16 @@
IceConfig ice_config = CreateIceConfig(1000, GATHER_ONCE);
ice_config.surface_ice_candidates_on_ice_transport_type_changed = true;
CreateChannels(ice_config, ice_config);
- ASSERT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection() != nullptr,
- kDefaultTimeout, clock);
- ASSERT_TRUE_SIMULATED_WAIT(ep2_ch1()->selected_connection() != nullptr,
- kDefaultTimeout, clock);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ep1_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ep2_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Loosen the candidate filter at ep1.
ep1->allocator_->SetCandidateFilter(CF_ALL);
// Wait for a period for any potential surfacing of new candidates.
@@ -5916,18 +6748,35 @@
CreateChannels(ice_config, ice_config);
// We have gathered host, srflx and relay candidates.
- EXPECT_TRUE_SIMULATED_WAIT(ep1->saved_candidates_.size() == 3u,
- kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ep1->saved_candidates_.size(); }, Eq(3u),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
ResumeCandidates(0);
ResumeCandidates(1);
- ASSERT_TRUE_SIMULATED_WAIT(
- ep1_ch1()->selected_connection() != nullptr &&
- ep1_ch1()->selected_connection()->local_candidate().is_local() &&
- ep2_ch1()->selected_connection() != nullptr &&
- ep1_ch1()->selected_connection()->remote_candidate().is_local(),
- kDefaultTimeout, clock);
- ASSERT_TRUE_SIMULATED_WAIT(ep2_ch1()->selected_connection() != nullptr,
- kDefaultTimeout, clock);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()->selected_connection() != nullptr &&
+ ep1_ch1()
+ ->selected_connection()
+ ->local_candidate()
+ .is_local() &&
+ ep2_ch1()->selected_connection() != nullptr &&
+ ep1_ch1()
+ ->selected_connection()
+ ->remote_candidate()
+ .is_local();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ep2_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Test that we have a host-host candidate pair selected and the number of
// candidates signaled to the remote peer stays the same.
auto test_invariants = [this]() {
@@ -5987,21 +6836,41 @@
// On the caller we only have relay,
// on the callee we have host, srflx and relay.
- EXPECT_TRUE_SIMULATED_WAIT(ep1->saved_candidates_.size() == 1u,
- kDefaultTimeout, clock);
- EXPECT_TRUE_SIMULATED_WAIT(ep2->saved_candidates_.size() == 3u,
- kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ep1->saved_candidates_.size(); }, Eq(1u),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ep2->saved_candidates_.size(); }, Eq(3u),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
ResumeCandidates(0);
ResumeCandidates(1);
- ASSERT_TRUE_SIMULATED_WAIT(
- ep1_ch1()->selected_connection() != nullptr &&
- ep1_ch1()->selected_connection()->local_candidate().is_relay() &&
- ep2_ch1()->selected_connection() != nullptr &&
- ep1_ch1()->selected_connection()->remote_candidate().is_relay(),
- kDefaultTimeout, clock);
- ASSERT_TRUE_SIMULATED_WAIT(ep2_ch1()->selected_connection() != nullptr,
- kDefaultTimeout, clock);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()->selected_connection() != nullptr &&
+ ep1_ch1()
+ ->selected_connection()
+ ->local_candidate()
+ .is_relay() &&
+ ep2_ch1()->selected_connection() != nullptr &&
+ ep1_ch1()
+ ->selected_connection()
+ ->remote_candidate()
+ .is_relay();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ep2_ch1()->selected_connection(); }, Ne(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Wait until the callee discards it's candidates
// since they don't manage to connect.
@@ -6044,7 +6913,11 @@
conn1->ReceivedPingResponse(LOW_RTT, "id"); // Becomes writable and receiving
// It shall not be selected until 0ms has passed....i.e it should be connected
// directly.
- EXPECT_EQ_SIMULATED_WAIT(conn1, ch.selected_connection(), kMargin, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return ch.selected_connection(); }, Eq(conn1),
+ {.timeout = webrtc::TimeDelta::Millis(kMargin), .clock = &clock}),
+ webrtc::IsRtcOk());
}
TEST_F(P2PTransportChannelPingTest, TestInitialSelectDampening) {
@@ -6070,7 +6943,11 @@
conn1->ReceivedPingResponse(LOW_RTT, "id"); // Becomes writable and receiving
// It shall not be selected until 100ms has passed.
SIMULATED_WAIT(conn1 == ch.selected_connection(), 100 - kMargin, clock);
- EXPECT_EQ_SIMULATED_WAIT(conn1, ch.selected_connection(), 2 * kMargin, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return ch.selected_connection(); }, Eq(conn1),
+ {.timeout = webrtc::TimeDelta::Millis(2 * kMargin), .clock = &clock}),
+ webrtc::IsRtcOk());
}
TEST_F(P2PTransportChannelPingTest, TestInitialSelectDampeningPingReceived) {
@@ -6098,7 +6975,11 @@
conn1->ReceivedPing("id1"); //
// It shall not be selected until 100ms has passed.
SIMULATED_WAIT(conn1 == ch.selected_connection(), 100 - kMargin, clock);
- EXPECT_EQ_SIMULATED_WAIT(conn1, ch.selected_connection(), 2 * kMargin, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return ch.selected_connection(); }, Eq(conn1),
+ {.timeout = webrtc::TimeDelta::Millis(2 * kMargin), .clock = &clock}),
+ webrtc::IsRtcOk());
}
TEST_F(P2PTransportChannelPingTest, TestInitialSelectDampeningBoth) {
@@ -6129,7 +7010,11 @@
SIMULATED_WAIT(conn1 == ch.selected_connection(), 50 - kMargin, clock);
// Now receiving ping and new timeout should kick in.
conn1->ReceivedPing("id1"); //
- EXPECT_EQ_SIMULATED_WAIT(conn1, ch.selected_connection(), 2 * kMargin, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return ch.selected_connection(); }, Eq(conn1),
+ {.timeout = webrtc::TimeDelta::Millis(2 * kMargin), .clock = &clock}),
+ webrtc::IsRtcOk());
}
TEST(P2PTransportChannelIceControllerTest, InjectIceController) {
@@ -6236,7 +7121,10 @@
// Wait for conn1 to be selected.
conn1->ReceivedPingResponse(LOW_RTT, "id");
- EXPECT_EQ_WAIT(conn1, ch->selected_connection(), kMediumTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch->selected_connection(); }, Eq(conn1),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
conn2->ReceivedPingResponse(LOW_RTT, "id");
EXPECT_TRUE(conn2->writable());
@@ -6248,7 +7136,10 @@
// We don't have a mock Connection, so verify this by checking that it
// is no longer writable.
- EXPECT_EQ_WAIT(false, conn2->writable(), kMediumTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return conn2->writable(); }, IsFalse(),
+ {.timeout = webrtc::TimeDelta::Millis(kMediumTimeout)}),
+ webrtc::IsRtcOk());
}
TEST_F(P2PTransportChannelTest, DisableDnsLookupsWithTransportPolicyRelay) {
@@ -6367,9 +7258,15 @@
PauseCandidates(1);
// We have gathered host candidates but not relay.
- ASSERT_TRUE_SIMULATED_WAIT(ep1->saved_candidates_.size() == 1u &&
- ep2->saved_candidates_.size() == 1u,
- kDefaultTimeout, clock);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] {
+ return ep1->saved_candidates_.size() == 1u &&
+ ep2->saved_candidates_.size() == 1u;
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
ResumeCandidates(0);
ResumeCandidates(1);
@@ -6377,13 +7274,25 @@
PauseCandidates(0);
PauseCandidates(1);
- ASSERT_TRUE_SIMULATED_WAIT(ep1_ch1()->remote_candidates().size() == 1 &&
- ep2_ch1()->remote_candidates().size() == 1,
- kDefaultTimeout, clock);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()->remote_candidates().size() == 1 &&
+ ep2_ch1()->remote_candidates().size() == 1;
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
- ASSERT_TRUE_SIMULATED_WAIT(
- ep1_ch1()->selected_connection() && ep2_ch1()->selected_connection(),
- kDefaultTimeout, clock);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()->selected_connection() &&
+ ep2_ch1()->selected_connection();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
clock.AdvanceTime(webrtc::TimeDelta::Millis(10 * delay));
@@ -6429,9 +7338,15 @@
PauseCandidates(1);
// We have gathered host candidates but not relay.
- ASSERT_TRUE_SIMULATED_WAIT(ep1->saved_candidates_.size() == 2u &&
- ep2->saved_candidates_.size() == 1u,
- kDefaultTimeout, clock);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] {
+ return ep1->saved_candidates_.size() == 2u &&
+ ep2->saved_candidates_.size() == 1u;
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
ResumeCandidates(0);
ResumeCandidates(1);
@@ -6439,13 +7354,25 @@
PauseCandidates(0);
PauseCandidates(1);
- ASSERT_TRUE_SIMULATED_WAIT(ep1_ch1()->remote_candidates().size() == 1 &&
- ep2_ch1()->remote_candidates().size() == 2,
- kDefaultTimeout, clock);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()->remote_candidates().size() == 1 &&
+ ep2_ch1()->remote_candidates().size() == 2;
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
- ASSERT_TRUE_SIMULATED_WAIT(
- ep1_ch1()->selected_connection() && ep2_ch1()->selected_connection(),
- kDefaultTimeout, clock);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] {
+ return ep1_ch1()->selected_connection() &&
+ ep2_ch1()->selected_connection();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
clock.AdvanceTime(webrtc::TimeDelta::Millis(10 * delay));
@@ -6472,16 +7399,24 @@
IceConfig config = CreateIceConfig(1000, GATHER_CONTINUALLY);
CreateChannels(config, config);
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnected(ep1_ch1(), ep2_ch1()),
- kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return CheckConnected(ep1_ch1(), ep2_ch1()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
PauseCandidates(0);
ep1_ch1()->SetIceParameters(kIceParams[3]);
ep1_ch1()->MaybeStartGathering();
- EXPECT_TRUE_SIMULATED_WAIT(GetEndpoint(0)->saved_candidates_.size() > 0,
- kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return GetEndpoint(0)->saved_candidates_.size(); }, Gt(0),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
for (const auto& cd : GetEndpoint(0)->saved_candidates_) {
EXPECT_EQ(cd.candidate.username(), kIceUfrag[3]);
diff --git a/p2p/base/port_unittest.cc b/p2p/base/port_unittest.cc
index 4238757..14786ba 100644
--- a/p2p/base/port_unittest.cc
+++ b/p2p/base/port_unittest.cc
@@ -12,6 +12,7 @@
#include <string.h>
+#include <cmath>
#include <cstdint>
#include <limits>
#include <list>
@@ -24,12 +25,17 @@
#include "absl/memory/memory.h"
#include "absl/strings/string_view.h"
#include "api/array_view.h"
+#include "api/async_dns_resolver.h"
#include "api/candidate.h"
#include "api/packet_socket_factory.h"
+#include "api/rtc_error.h"
+#include "api/test/rtc_error_matchers.h"
#include "api/transport/stun.h"
#include "api/units/time_delta.h"
#include "p2p/base/basic_packet_socket_factory.h"
+#include "p2p/base/connection.h"
#include "p2p/base/p2p_constants.h"
+#include "p2p/base/p2p_transport_channel_ice_field_trials.h"
#include "p2p/base/port_allocator.h"
#include "p2p/base/port_interface.h"
#include "p2p/base/stun_port.h"
@@ -66,8 +72,10 @@
#include "rtc_base/thread.h"
#include "rtc_base/time_utils.h"
#include "rtc_base/virtual_socket_server.h"
+#include "test/gmock.h"
#include "test/gtest.h"
#include "test/scoped_key_value_config.h"
+#include "test/wait_until.h"
using rtc::AsyncListenSocket;
using rtc::AsyncPacketSocket;
@@ -81,6 +89,10 @@
using rtc::PacketSocketFactory;
using rtc::Socket;
using rtc::SocketAddress;
+using ::testing::Eq;
+using ::testing::IsNull;
+using ::testing::IsTrue;
+using ::testing::NotNull;
using webrtc::IceCandidateType;
namespace cricket {
@@ -259,13 +271,19 @@
rtc::ScopedFakeClock* clock,
int64_t ms) {
lconn->Ping(rtc::TimeMillis());
- ASSERT_TRUE_WAIT(lport->last_stun_msg(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return lport->last_stun_msg(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
ASSERT_GT(lport->last_stun_buf().size(), 0u);
rconn->OnReadPacket(rtc::ReceivedPacket(lport->last_stun_buf(),
rtc::SocketAddress(), std::nullopt));
clock->AdvanceTime(webrtc::TimeDelta::Millis(ms));
- ASSERT_TRUE_WAIT(rport->last_stun_msg(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return rport->last_stun_msg(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
ASSERT_GT(rport->last_stun_buf().size(), 0u);
lconn->OnReadPacket(rtc::ReceivedPacket(rport->last_stun_buf(),
rtc::SocketAddress(), std::nullopt));
@@ -286,7 +304,7 @@
int complete_count() { return complete_count_; }
Connection* conn() { return conn_; }
const SocketAddress& remote_address() { return remote_address_; }
- const std::string remote_fragment() { return remote_frag_; }
+ std::string remote_fragment() { return remote_frag_; }
void Start() { port_->PrepareAddress(); }
void CreateConnection(const Candidate& remote_candidate) {
@@ -684,16 +702,21 @@
// TCP reconnecting mechanism before entering this function.
void ConnectStartedChannels(TestChannel* ch1, TestChannel* ch2) {
ASSERT_TRUE(ch1->conn());
- EXPECT_TRUE_WAIT(ch1->conn()->connected(),
- kDefaultTimeout); // for TCP connect
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch1->conn()->connected(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk()); // for TCP connect
ch1->Ping();
WAIT(!ch2->remote_address().IsNil(), kShortTimeout);
// Send a ping from dst to src.
ch2->AcceptConnection(GetCandidate(ch1->port()));
ch2->Ping();
- EXPECT_EQ_WAIT(Connection::STATE_WRITABLE, ch2->conn()->write_state(),
- kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch2->conn()->write_state(); },
+ Eq(Connection::STATE_WRITABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
}
// This connects and disconnects the provided channels in the same sequence as
@@ -722,8 +745,14 @@
tcp_conn2->socket()->GetLocalAddress()));
// Wait for both OnClose are delivered.
- EXPECT_TRUE_WAIT(!ch1->conn()->connected(), kDefaultTimeout);
- EXPECT_TRUE_WAIT(!ch2->conn()->connected(), kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return !ch1->conn()->connected(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return !ch2->conn()->connected(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Ensure redundant SignalClose events on TcpConnection won't break tcp
// reconnection. Chromium will fire SignalClose for all outstanding IPC
@@ -734,7 +763,10 @@
// Speed up destroying ch2's connection such that the test is ready to
// accept a new connection from ch1 before ch1's connection destroys itself.
ch2->Stop();
- EXPECT_TRUE_WAIT(ch2->conn() == NULL, kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch2->conn(); }, IsNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
}
void TestTcpReconnect(bool ping_after_disconnected,
@@ -755,8 +787,14 @@
ch1.Start();
ch2.Start();
- ASSERT_EQ_WAIT(1, ch1.complete_count(), kDefaultTimeout);
- ASSERT_EQ_WAIT(1, ch2.complete_count(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ch2.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Initial connecting the channel, create connection on channel1.
ch1.CreateConnection(GetCandidate(ch2.port()));
@@ -788,11 +826,18 @@
}
// Wait for channel's outgoing TCPConnection connected.
- EXPECT_TRUE_WAIT(ch1.conn()->connected(), kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.conn()->connected(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Verify that we could still connect channels.
ConnectStartedChannels(&ch1, &ch2);
- EXPECT_TRUE_WAIT(ch1.connection_ready_to_send(), kTcpReconnectTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return ch1.connection_ready_to_send(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTcpReconnectTimeout)}),
+ webrtc::IsRtcOk());
// Channel2 is the passive one so a new connection is created during
// reconnect. This new connection should never have issued ENOTCONN
// hence the connection_ready_to_send() should be false.
@@ -801,15 +846,25 @@
EXPECT_EQ(ch1.conn()->write_state(), Connection::STATE_WRITABLE);
// Since the reconnection never happens, the connections should have been
// destroyed after the timeout.
- EXPECT_TRUE_WAIT(!ch1.conn(), kTcpReconnectTimeout + kDefaultTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return !ch1.conn(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(
+ kTcpReconnectTimeout + kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(!ch2.conn());
}
// Tear down and ensure that goes smoothly.
ch1.Stop();
ch2.Stop();
- EXPECT_TRUE_WAIT(ch1.conn() == NULL, kDefaultTimeout);
- EXPECT_TRUE_WAIT(ch2.conn() == NULL, kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.conn(); }, IsNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch2.conn(); }, IsNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
}
std::unique_ptr<IceMessage> CreateStunMessage(StunMessageType type) {
@@ -926,14 +981,25 @@
// Acquire addresses.
ch1.Start();
ch2.Start();
- ASSERT_EQ_SIMULATED_WAIT(1, ch1.complete_count(), kDefaultTimeout, clock);
- ASSERT_EQ_SIMULATED_WAIT(1, ch2.complete_count(), kDefaultTimeout, clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return ch1.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return ch2.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Send a ping from src to dst. This may or may not make it.
ch1.CreateConnection(GetCandidate(ch2.port()));
ASSERT_TRUE(ch1.conn() != NULL);
- EXPECT_TRUE_SIMULATED_WAIT(ch1.conn()->connected(), kDefaultTimeout,
- clock); // for TCP connect
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch1.conn()->connected(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk()); // for TCP connect
ch1.Ping();
SIMULATED_WAIT(!ch2.remote_address().IsNil(), kShortTimeout, clock);
@@ -953,8 +1019,12 @@
ch2.AcceptConnection(GetCandidate(ch1.port()));
ASSERT_TRUE(ch2.conn() != NULL);
ch2.Ping();
- EXPECT_EQ_SIMULATED_WAIT(Connection::STATE_WRITABLE,
- ch2.conn()->write_state(), kDefaultTimeout, clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch2.conn()->write_state(); },
+ Eq(Connection::STATE_WRITABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
} else {
// We can't send a ping from src to dst, so flip it around. This will happen
// when the destination NAT is addr/port restricted or symmetric.
@@ -977,9 +1047,12 @@
// through. So we will have to do another.
if (ch1.conn()->write_state() == Connection::STATE_WRITE_INIT) {
ch1.Ping();
- EXPECT_EQ_SIMULATED_WAIT(Connection::STATE_WRITABLE,
- ch1.conn()->write_state(), kDefaultTimeout,
- clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.conn()->write_state(); },
+ Eq(Connection::STATE_WRITABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
}
} else if (!same_addr1 && possible) {
// The new ping went to the candidate address, but that address was bad.
@@ -990,8 +1063,11 @@
// However, since we have now sent a ping to the source IP, we should be
// able to get a ping from it. This gives us the real source address.
ch1.Ping();
- EXPECT_TRUE_SIMULATED_WAIT(!ch2.remote_address().IsNil(), kDefaultTimeout,
- clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return !ch2.remote_address().IsNil(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_FALSE(ch2.conn()->receiving());
EXPECT_TRUE(ch1.remote_address().IsNil());
@@ -999,9 +1075,12 @@
ch2.AcceptConnection(GetCandidate(ch1.port()));
ASSERT_TRUE(ch2.conn() != NULL);
ch2.Ping();
- EXPECT_EQ_SIMULATED_WAIT(Connection::STATE_WRITABLE,
- ch2.conn()->write_state(), kDefaultTimeout,
- clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch2.conn()->write_state(); },
+ Eq(Connection::STATE_WRITABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
} else if (!same_addr2 && possible) {
// The new ping came in, but from an unexpected address. This will happen
// when the destination NAT is symmetric.
@@ -1011,9 +1090,12 @@
// Update our address and complete the connection.
ch1.AcceptConnection(GetCandidate(ch2.port()));
ch1.Ping();
- EXPECT_EQ_SIMULATED_WAIT(Connection::STATE_WRITABLE,
- ch1.conn()->write_state(), kDefaultTimeout,
- clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.conn()->write_state(); },
+ Eq(Connection::STATE_WRITABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
} else { // (!possible)
// There should be s no way for the pings to reach each other. Check it.
EXPECT_TRUE(ch1.remote_address().IsNil());
@@ -1043,8 +1125,16 @@
// Tear down and ensure that goes smoothly.
ch1.Stop();
ch2.Stop();
- EXPECT_TRUE_SIMULATED_WAIT(ch1.conn() == NULL, kDefaultTimeout, clock);
- EXPECT_TRUE_SIMULATED_WAIT(ch2.conn() == NULL, kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch1.conn(); }, IsNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch2.conn(); }, IsNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
}
class FakePacketSocketFactory : public rtc::PacketSocketFactory {
@@ -1325,7 +1415,10 @@
EXPECT_EQ(0, ch1.complete_count());
ch1.Start();
- ASSERT_EQ_WAIT(1, ch1.complete_count(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
std::unique_ptr<rtc::Socket> server(
vss()->CreateSocket(kLocalAddr2.family(), SOCK_STREAM));
@@ -1337,7 +1430,10 @@
ch1.CreateConnection(c);
EXPECT_TRUE(ch1.conn());
- EXPECT_TRUE_WAIT(!ch1.conn(), kDefaultTimeout); // for TCP connect
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return !ch1.conn(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk()); // for TCP connect
}
/* TODO(?): Enable these once testrelayserver can accept external TCP.
@@ -1372,8 +1468,14 @@
// Acquire address.
ch1.Start();
ch2.Start();
- ASSERT_EQ_WAIT(1, ch1.complete_count(), kDefaultTimeout);
- ASSERT_EQ_WAIT(1, ch2.complete_count(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ch2.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Test case that the connection has never received anything.
int64_t before_created = rtc::TimeMillis();
@@ -1392,7 +1494,10 @@
EXPECT_TRUE(ch1.conn() != nullptr);
// It will be dead after MIN_CONNECTION_LIFETIME and pruned.
conn->UpdateState(after_created + MIN_CONNECTION_LIFETIME + 1);
- EXPECT_TRUE_WAIT(ch1.conn() == nullptr, kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.conn(); }, Eq(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Test case that the connection has received something.
// Create a connection again and receive a ping.
@@ -1408,7 +1513,10 @@
rtc::Thread::Current()->ProcessMessages(100);
EXPECT_TRUE(ch1.conn() != nullptr);
conn->UpdateState(after_last_receiving + DEAD_CONNECTION_RECEIVE_TIMEOUT + 1);
- EXPECT_TRUE_WAIT(ch1.conn() == nullptr, kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.conn(); }, Eq(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
}
TEST_F(PortTest, TestConnectionDeadWithDeadConnectionTimeout) {
@@ -1417,8 +1525,14 @@
// Acquire address.
ch1.Start();
ch2.Start();
- ASSERT_EQ_WAIT(1, ch1.complete_count(), kDefaultTimeout);
- ASSERT_EQ_WAIT(1, ch2.complete_count(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ch2.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Note: set field trials manually since they are parsed by
// P2PTransportChannel but P2PTransportChannel is not used in this test.
@@ -1439,7 +1553,10 @@
rtc::Thread::Current()->ProcessMessages(100);
EXPECT_TRUE(ch1.conn() != nullptr);
conn->UpdateState(after_last_receiving + 90000 + 1);
- EXPECT_TRUE_WAIT(ch1.conn() == nullptr, kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.conn(); }, Eq(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
}
TEST_F(PortTest, TestConnectionDeadOutstandingPing) {
@@ -1455,8 +1572,14 @@
// Acquire address.
ch1.Start();
ch2.Start();
- ASSERT_EQ_WAIT(1, ch1.complete_count(), kDefaultTimeout);
- ASSERT_EQ_WAIT(1, ch2.complete_count(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ch2.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Note: set field trials manually since they are parsed by
// P2PTransportChannel but P2PTransportChannel is not used in this test.
@@ -1479,7 +1602,10 @@
rtc::Thread::Current()->ProcessMessages(100);
EXPECT_TRUE(ch1.conn() != nullptr);
conn->UpdateState(send_ping_timestamp + DEAD_CONNECTION_RECEIVE_TIMEOUT + 1);
- EXPECT_TRUE_WAIT(ch1.conn() == nullptr, kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.conn(); }, Eq(nullptr),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
}
// This test case verifies standard ICE features in STUN messages. Currently it
@@ -1511,12 +1637,18 @@
lport->CreateConnection(lport->Candidates()[0], Port::ORIGIN_MESSAGE);
conn->Ping(0);
- ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return lport->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
IceMessage* msg = lport->last_stun_msg();
EXPECT_EQ(STUN_BINDING_REQUEST, msg->type());
conn->OnReadPacket(rtc::ReceivedPacket(lport->last_stun_buf(),
rtc::SocketAddress(), std::nullopt));
- ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return lport->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
msg = lport->last_stun_msg();
EXPECT_EQ(STUN_BINDING_RESPONSE, msg->type());
@@ -1529,7 +1661,10 @@
lport->CreateConnection(lport->Candidates()[1], Port::ORIGIN_MESSAGE);
conn1->Ping(0);
- ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return lport->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
msg = lport->last_stun_msg();
EXPECT_EQ(STUN_BINDING_REQUEST, msg->type());
std::unique_ptr<IceMessage> modified_req(
@@ -1551,7 +1686,10 @@
conn1->OnReadPacket(rtc::ReceivedPacket::CreateFromLegacy(
reinterpret_cast<const char*>(buf->Data()), buf->Length(),
/*packet_time_us=*/-1));
- ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return lport->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
msg = lport->last_stun_msg();
EXPECT_EQ(STUN_BINDING_ERROR_RESPONSE, msg->type());
}
@@ -1579,14 +1717,20 @@
rport->CreateConnection(lport->Candidates()[0], Port::ORIGIN_MESSAGE);
rconn->Ping(0);
- ASSERT_TRUE_WAIT(rport->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return rport->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
IceMessage* msg = rport->last_stun_msg();
EXPECT_EQ(STUN_BINDING_REQUEST, msg->type());
// Send rport binding request to lport.
lconn->OnReadPacket(rtc::ReceivedPacket(rport->last_stun_buf(),
rtc::SocketAddress(), std::nullopt));
- ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return lport->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_EQ(STUN_BINDING_RESPONSE, lport->last_stun_msg()->type());
EXPECT_TRUE(role_conflict());
}
@@ -1610,13 +1754,24 @@
// Acquire addresses.
ch1.Start();
ch2.Start();
- ASSERT_EQ_SIMULATED_WAIT(1, ch1.complete_count(), kDefaultTimeout, clock);
- ASSERT_EQ_SIMULATED_WAIT(1, ch2.complete_count(), kDefaultTimeout, clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return ch1.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return ch2.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Connect and send a ping from src to dst.
ch1.CreateConnection(GetCandidate(ch2.port()));
ASSERT_TRUE(ch1.conn() != NULL);
- EXPECT_TRUE_SIMULATED_WAIT(ch1.conn()->connected(), kDefaultTimeout,
- clock); // for TCP connect
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch1.conn()->connected(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk()); // for TCP connect
ch1.Ping();
SIMULATED_WAIT(!ch2.remote_address().IsNil(), kShortTimeout, clock);
@@ -1884,7 +2039,10 @@
lconn->Ping(0);
// Check that it's a proper BINDING-REQUEST.
- ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return lport->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
IceMessage* msg = lport->last_stun_msg();
EXPECT_EQ(STUN_BINDING_REQUEST, msg->type());
EXPECT_FALSE(msg->IsLegacy());
@@ -1986,7 +2144,10 @@
rconn->Ping(0);
rconn->Ping(0);
rconn->Ping(0);
- ASSERT_TRUE_WAIT(rport->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return rport->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
msg = rport->last_stun_msg();
EXPECT_EQ(STUN_BINDING_REQUEST, msg->type());
const StunUInt64Attribute* ice_controlled_attr =
@@ -2057,7 +2218,10 @@
// Send ping (including the nomination value) from `lconn` to `rconn`. This
// should set the remote nomination of `rconn`.
lconn->Ping(0);
- ASSERT_TRUE_WAIT(lport->last_stun_msg(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return lport->last_stun_msg(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
ASSERT_GT(lport->last_stun_buf().size(), 0u);
rconn->OnReadPacket(rtc::ReceivedPacket(lport->last_stun_buf(),
rtc::SocketAddress(), std::nullopt));
@@ -2070,7 +2234,10 @@
// This should result in an acknowledgment sent back from `rconn` to `lconn`,
// updating the acknowledged nomination of `lconn`.
- ASSERT_TRUE_WAIT(rport->last_stun_msg(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return rport->last_stun_msg(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
ASSERT_GT(rport->last_stun_buf().size(), 0u);
lconn->OnReadPacket(rtc::ReceivedPacket(rport->last_stun_buf(),
rtc::SocketAddress(), std::nullopt));
@@ -2138,7 +2305,10 @@
Connection* lconn =
lport->CreateConnection(rport->Candidates()[0], Port::ORIGIN_MESSAGE);
lconn->Ping(0);
- ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return lport->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
IceMessage* msg = lport->last_stun_msg();
const StunUInt64Attribute* ice_controlling_attr =
msg->GetUInt64(STUN_ATTR_ICE_CONTROLLING);
@@ -2196,7 +2366,10 @@
// message is handled in rconn, The rconn's remote candidate will have cost
// rtc::kNetworkCostHigh;
EXPECT_EQ(rtc::kNetworkCostLow, rconn->remote_candidate().network_cost());
- ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return lport->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
IceMessage* msg = lport->last_stun_msg();
EXPECT_EQ(STUN_BINDING_REQUEST, msg->type());
// Pass the binding request to rport.
@@ -2204,7 +2377,10 @@
rtc::SocketAddress(), std::nullopt));
// Wait until rport sends the response and then check the remote network cost.
- ASSERT_TRUE_WAIT(rport->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return rport->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_EQ(rtc::kNetworkCostHigh, rconn->remote_candidate().network_cost());
}
@@ -2225,7 +2401,10 @@
Connection* lconn =
lport->CreateConnection(rport->Candidates()[0], Port::ORIGIN_MESSAGE);
lconn->Ping(0);
- ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return lport->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
IceMessage* msg = lport->last_stun_msg();
const StunUInt32Attribute* network_info_attr =
msg->GetUInt32(STUN_ATTR_GOOG_NETWORK_INFO);
@@ -2243,7 +2422,10 @@
Connection* rconn =
rport->CreateConnection(lport->Candidates()[0], Port::ORIGIN_MESSAGE);
rconn->Ping(0);
- ASSERT_TRUE_WAIT(rport->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return rport->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
msg = rport->last_stun_msg();
network_info_attr = msg->GetUInt32(STUN_ATTR_GOOG_NETWORK_INFO);
ASSERT_TRUE(network_info_attr != NULL);
@@ -2530,12 +2712,18 @@
// Send request.
lconn->Ping(0);
- ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return lport->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
rconn->OnReadPacket(rtc::ReceivedPacket(lport->last_stun_buf(),
rtc::SocketAddress(), std::nullopt));
// Intercept request and add comprehension required attribute.
- ASSERT_TRUE_WAIT(rport->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return rport->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
auto modified_response = rport->last_stun_msg()->Clone();
modified_response->AddAttribute(StunAttribute::CreateUInt32(0x7777));
modified_response->RemoveAttribute(STUN_ATTR_FINGERPRINT);
@@ -2615,14 +2803,20 @@
rport->CreateConnection(lport->Candidates()[0], Port::ORIGIN_MESSAGE);
rconn->Ping(0);
- ASSERT_TRUE_WAIT(rport->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return rport->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
IceMessage* msg = rport->last_stun_msg();
EXPECT_EQ(STUN_BINDING_REQUEST, msg->type());
// Send rport binding request to lport.
lconn->OnReadPacket(rtc::ReceivedPacket(rport->last_stun_buf(),
rtc::SocketAddress(), std::nullopt));
- ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return lport->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_EQ(STUN_BINDING_RESPONSE, lport->last_stun_msg()->type());
int64_t last_ping_received1 = lconn->last_ping_received();
@@ -2742,7 +2936,10 @@
tcpport2->Candidates()[0].foundation());
auto stunport = CreateStunPort(kLocalAddr1, nat_socket_factory1());
stunport->PrepareAddress();
- ASSERT_EQ_WAIT(1U, stunport->Candidates().size(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return stunport->Candidates().size(); }, Eq(1U),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_NE(tcpport1->Candidates()[0].foundation(),
stunport->Candidates()[0].foundation());
EXPECT_NE(tcpport2->Candidates()[0].foundation(),
@@ -2755,7 +2952,10 @@
auto turnport1 =
CreateTurnPort(kLocalAddr1, nat_socket_factory1(), PROTO_UDP, PROTO_UDP);
turnport1->PrepareAddress();
- ASSERT_EQ_WAIT(1U, turnport1->Candidates().size(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return turnport1->Candidates().size(); }, Eq(1U),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_NE(udpport1->Candidates()[0].foundation(),
turnport1->Candidates()[0].foundation());
EXPECT_NE(udpport2->Candidates()[0].foundation(),
@@ -2765,7 +2965,10 @@
auto turnport2 =
CreateTurnPort(kLocalAddr1, nat_socket_factory1(), PROTO_UDP, PROTO_UDP);
turnport2->PrepareAddress();
- ASSERT_EQ_WAIT(1U, turnport2->Candidates().size(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return turnport2->Candidates().size(); }, Eq(1U),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_EQ(turnport1->Candidates()[0].foundation(),
turnport2->Candidates()[0].foundation());
@@ -2777,7 +2980,10 @@
auto turnport3 = CreateTurnPort(kLocalAddr1, nat_socket_factory1(), PROTO_UDP,
PROTO_UDP, kTurnUdpIntAddr2);
turnport3->PrepareAddress();
- ASSERT_EQ_WAIT(1U, turnport3->Candidates().size(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return turnport3->Candidates().size(); }, Eq(1U),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_NE(turnport3->Candidates()[0].foundation(),
turnport2->Candidates()[0].foundation());
@@ -2788,7 +2994,10 @@
auto turnport4 =
CreateTurnPort(kLocalAddr1, nat_socket_factory1(), PROTO_TCP, PROTO_UDP);
turnport4->PrepareAddress();
- ASSERT_EQ_WAIT(1U, turnport4->Candidates().size(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return turnport4->Candidates().size(); }, Eq(1U),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_NE(turnport2->Candidates()[0].foundation(),
turnport4->Candidates()[0].foundation());
}
@@ -2806,7 +3015,10 @@
// socket address.
auto stunport = CreateStunPort(kLocalAddr1, nat_socket_factory1());
stunport->PrepareAddress();
- ASSERT_EQ_WAIT(1U, stunport->Candidates().size(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return stunport->Candidates().size(); }, Eq(1U),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Check STUN candidate address.
EXPECT_EQ(stunport->Candidates()[0].address().ipaddr(), kNatAddr1.ipaddr());
// Check STUN candidate related address.
@@ -2817,7 +3029,10 @@
auto turnport =
CreateTurnPort(kLocalAddr1, nat_socket_factory1(), PROTO_UDP, PROTO_UDP);
turnport->PrepareAddress();
- ASSERT_EQ_WAIT(1U, turnport->Candidates().size(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return turnport->Candidates().size(); }, Eq(1U),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_EQ(kTurnUdpExtAddr.ipaddr(),
turnport->Candidates()[0].address().ipaddr());
EXPECT_EQ(kNatAddr1.ipaddr(),
@@ -2938,15 +3153,27 @@
// Acquire addresses.
ch1.Start();
ch2.Start();
- ASSERT_EQ_SIMULATED_WAIT(1, ch1.complete_count(), kDefaultTimeout, clock);
- ASSERT_EQ_SIMULATED_WAIT(1, ch2.complete_count(), kDefaultTimeout, clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return ch1.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return ch2.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Send a ping from src to dst.
ch1.CreateConnection(GetCandidate(ch2.port()));
ASSERT_TRUE(ch1.conn() != NULL);
EXPECT_EQ(Connection::STATE_WRITE_INIT, ch1.conn()->write_state());
// for TCP connect
- EXPECT_TRUE_SIMULATED_WAIT(ch1.conn()->connected(), kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch1.conn()->connected(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
ch1.Ping();
SIMULATED_WAIT(!ch2.remote_address().IsNil(), kShortTimeout, clock);
@@ -2959,8 +3186,12 @@
// Accept the connection to return the binding response, transition to
// writable, and allow data to be sent.
ch2.AcceptConnection(GetCandidate(ch1.port()));
- EXPECT_EQ_SIMULATED_WAIT(Connection::STATE_WRITABLE,
- ch1.conn()->write_state(), kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch1.conn()->write_state(); },
+ Eq(Connection::STATE_WRITABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(data_size, ch1.conn()->Send(data, data_size, options));
// Ask the connection to update state as if enough time has passed to lose
@@ -2979,8 +3210,12 @@
// And now allow the other side to process the pings and send binding
// responses.
- EXPECT_EQ_SIMULATED_WAIT(Connection::STATE_WRITABLE,
- ch1.conn()->write_state(), kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch1.conn()->write_state(); },
+ Eq(Connection::STATE_WRITABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Wait long enough for a full timeout (past however long we've already
// waited).
for (uint32_t i = 1; i <= CONNECTION_WRITE_CONNECT_FAILURES; ++i) {
@@ -3015,8 +3250,16 @@
// Acquire addresses.
ch1.Start();
ch2.Start();
- ASSERT_EQ_SIMULATED_WAIT(1, ch1.complete_count(), kDefaultTimeout, clock);
- ASSERT_EQ_SIMULATED_WAIT(1, ch2.complete_count(), kDefaultTimeout, clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return ch1.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return ch2.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
// Send a ping from src to dst.
ch1.CreateConnection(GetCandidate(ch2.port()));
@@ -3027,8 +3270,12 @@
// Accept the connection to return the binding response, transition to
// writable, and allow data to be sent.
ch2.AcceptConnection(GetCandidate(ch1.port()));
- EXPECT_EQ_SIMULATED_WAIT(Connection::STATE_WRITABLE,
- ch1.conn()->write_state(), kDefaultTimeout, clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return ch1.conn()->write_state(); },
+ Eq(Connection::STATE_WRITABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout),
+ .clock = &clock}),
+ webrtc::IsRtcOk());
ch1.conn()->set_unwritable_timeout(1000);
ch1.conn()->set_unwritable_min_checks(3);
@@ -3102,7 +3349,10 @@
ch1.Start();
ice_lite_port->PrepareAddress();
- ASSERT_EQ_WAIT(1, ch1.complete_count(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
ASSERT_FALSE(ice_lite_port->Candidates().empty());
ch1.CreateConnection(GetCandidate(ice_lite_port.get()));
@@ -3115,7 +3365,10 @@
// Verify stun ping is without USE_CANDIDATE_ATTR. Getting message directly
// from port.
- ASSERT_TRUE_WAIT(ice_full_port_ptr->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ice_full_port_ptr->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
IceMessage* msg = ice_full_port_ptr->last_stun_msg();
EXPECT_TRUE(msg->GetByteString(STUN_ATTR_USE_CANDIDATE) == NULL);
@@ -3133,16 +3386,25 @@
ice_lite_port->last_stun_buf(), rtc::SocketAddress(), std::nullopt));
// Verifying full mode connection becomes writable from the response.
- EXPECT_EQ_WAIT(Connection::STATE_WRITABLE, ch1.conn()->write_state(),
- kDefaultTimeout);
- EXPECT_TRUE_WAIT(ch1.nominated(), kDefaultTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.conn()->write_state(); },
+ Eq(Connection::STATE_WRITABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.nominated(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// Clear existing stun messsages. Otherwise we will process old stun
// message right after we send ping.
ice_full_port_ptr->Reset();
// Send ping. This must have USE_CANDIDATE_ATTR.
ch1.Ping();
- ASSERT_TRUE_WAIT(ice_full_port_ptr->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ice_full_port_ptr->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
msg = ice_full_port_ptr->last_stun_msg();
EXPECT_TRUE(msg->GetByteString(STUN_ATTR_USE_CANDIDATE) != NULL);
ch1.Stop();
@@ -3215,7 +3477,10 @@
ch1.Start();
port2->PrepareAddress();
- ASSERT_EQ_WAIT(1, ch1.complete_count(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
ASSERT_FALSE(port2->Candidates().empty());
ch1.CreateConnection(GetCandidate(port2.get()));
@@ -3226,7 +3491,10 @@
// Send ping.
ch1.Ping();
- ASSERT_TRUE_WAIT(port1->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return port1->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
const IceMessage* request1 = port1->last_stun_msg();
ASSERT_EQ(trials.enable_goog_ping,
@@ -3254,7 +3522,10 @@
port2->Reset();
ch1.Ping();
- ASSERT_TRUE_WAIT(port1->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return port1->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
const IceMessage* request2 = port1->last_stun_msg();
// It should be a GOOG_PING if both of these are TRUE
@@ -3306,7 +3577,10 @@
ch1.Start();
port2->PrepareAddress();
- ASSERT_EQ_WAIT(1, ch1.complete_count(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
ASSERT_FALSE(port2->Candidates().empty());
ch1.CreateConnection(GetCandidate(port2.get()));
@@ -3317,7 +3591,10 @@
// Send ping.
ch1.Ping();
- ASSERT_TRUE_WAIT(port1->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return port1->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
const IceMessage* request1 = port1->last_stun_msg();
ASSERT_TRUE(GetSupportedGoogPingVersion(request1) &&
@@ -3377,7 +3654,10 @@
ch1.Start();
port2->PrepareAddress();
- ASSERT_EQ_WAIT(1, ch1.complete_count(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
ASSERT_FALSE(port2->Candidates().empty());
ch1.CreateConnection(GetCandidate(port2.get()));
@@ -3388,7 +3668,10 @@
// Send ping.
ch1.Ping();
- ASSERT_TRUE_WAIT(port1->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return port1->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
const IceMessage* request1 = port1->last_stun_msg();
ASSERT_TRUE(GetSupportedGoogPingVersion(request1) &&
@@ -3438,7 +3721,10 @@
port2->Reset();
ch1.Ping();
- ASSERT_TRUE_WAIT(port1->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return port1->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
// This should now be a STUN_BINDING...without a kGoogPingVersion
const IceMessage* request2 = port1->last_stun_msg();
@@ -3478,7 +3764,10 @@
ch1.Start();
port2->PrepareAddress();
- ASSERT_EQ_WAIT(1, ch1.complete_count(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
ASSERT_FALSE(port2->Candidates().empty());
ch1.CreateConnection(GetCandidate(port2.get()));
@@ -3489,7 +3778,10 @@
// Send ping.
ch1.Ping();
- ASSERT_TRUE_WAIT(port1->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return port1->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
const IceMessage* msg = port1->last_stun_msg();
auto* con = port2->CreateConnection(port1->Candidates()[0],
cricket::Port::ORIGIN_MESSAGE);
@@ -3511,7 +3803,10 @@
port2->Reset();
ch1.Ping();
- ASSERT_TRUE_WAIT(port1->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return port1->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
const IceMessage* msg2 = port1->last_stun_msg();
// It should be a GOOG_PING if both of these are TRUE
@@ -3532,7 +3827,10 @@
ch1.conn()->set_use_candidate_attr(!ch1.conn()->use_candidate_attr());
ch1.Ping();
- ASSERT_TRUE_WAIT(port1->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return port1->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
const IceMessage* msg3 = port1->last_stun_msg();
// It should be a STUN_BINDING_REQUEST
@@ -3563,7 +3861,10 @@
ch1.Start();
port2->PrepareAddress();
- ASSERT_EQ_WAIT(1, ch1.complete_count(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return ch1.complete_count(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
ASSERT_FALSE(port2->Candidates().empty());
ch1.CreateConnection(GetCandidate(port2.get()));
@@ -3574,7 +3875,10 @@
// Send ping.
ch1.Ping();
- ASSERT_TRUE_WAIT(port1->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return port1->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
const IceMessage* msg = port1->last_stun_msg();
auto* con = port2->CreateConnection(port1->Candidates()[0],
cricket::Port::ORIGIN_MESSAGE);
@@ -3596,7 +3900,10 @@
port2->Reset();
ch1.Ping();
- ASSERT_TRUE_WAIT(port1->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return port1->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
const IceMessage* msg2 = port1->last_stun_msg();
// It should be a GOOG_PING.
@@ -3624,7 +3931,10 @@
port2->Reset();
ch1.Ping();
- ASSERT_TRUE_WAIT(port1->last_stun_msg() != NULL, kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return port1->last_stun_msg(); }, NotNull(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
const IceMessage* msg3 = port1->last_stun_msg();
// It should be a STUN_BINDING_REQUEST
@@ -3659,7 +3969,9 @@
StartConnectAndStopChannels(&ch1, &ch2);
// After the connection is destroyed, the port will be destroyed because
// none of them is marked as "keep alive until pruned.
- EXPECT_EQ_SIMULATED_WAIT(2, ports_destroyed(), 110, clock);
+ EXPECT_THAT(webrtc::WaitUntil([&] { return ports_destroyed(); }, Eq(2),
+ {.clock = &clock}),
+ webrtc::IsRtcOk());
}
// Test that if after all connection are destroyed, new connections are created
@@ -3700,7 +4012,9 @@
EXPECT_EQ(0, ports_destroyed());
// The ports on both sides should be destroyed after timeout.
- EXPECT_TRUE_SIMULATED_WAIT(ports_destroyed() == 2, 30, clock);
+ EXPECT_THAT(webrtc::WaitUntil([&] { return ports_destroyed(); }, Eq(2),
+ {.clock = &clock}),
+ webrtc::IsRtcOk());
}
// This test case verifies that neither the controlling port nor the controlled
@@ -3741,7 +4055,9 @@
ch1.port()->Prune();
ch2.port()->Prune();
// The ports on both sides should be destroyed after timeout.
- EXPECT_TRUE_SIMULATED_WAIT(ports_destroyed() == 2, 1, clock);
+ EXPECT_THAT(webrtc::WaitUntil([&] { return ports_destroyed(); }, Eq(2),
+ {.clock = &clock}),
+ webrtc::IsRtcOk());
}
TEST_F(PortTest, TestSupportsProtocol) {
@@ -3853,13 +4169,19 @@
TestPort* rport =
rconn->PortForTest() == rport_.get() ? rport_.get() : lport_.get();
lconn->Ping(rtc::TimeMillis());
- ASSERT_TRUE_WAIT(lport->last_stun_msg(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return lport->last_stun_msg(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
ASSERT_GT(lport->last_stun_buf().size(), 0u);
rconn->OnReadPacket(rtc::ReceivedPacket(
lport->last_stun_buf(), rtc::SocketAddress(), std::nullopt));
clock_.AdvanceTime(webrtc::TimeDelta::Millis(ms));
- ASSERT_TRUE_WAIT(rport->last_stun_msg(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return rport->last_stun_msg(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
ASSERT_GT(rport->last_stun_buf().size(), 0u);
reply->SetData(rport->last_stun_buf());
}
@@ -4003,14 +4325,20 @@
[](webrtc::RTCErrorOr<const StunUInt64Attribute*> error_or__ack) {});
lconn->Ping(rtc::TimeMillis(), std::move(delta));
- ASSERT_TRUE_WAIT(lport_->last_stun_msg(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return lport_->last_stun_msg(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
ASSERT_GT(lport_->last_stun_buf().size(), 0u);
rconn->OnReadPacket(rtc::ReceivedPacket(lport_->last_stun_buf(),
rtc::SocketAddress(), std::nullopt));
EXPECT_TRUE(received_goog_delta);
clock_.AdvanceTime(webrtc::TimeDelta::Millis(ms));
- ASSERT_TRUE_WAIT(rport_->last_stun_msg(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return rport_->last_stun_msg(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
ASSERT_GT(rport_->last_stun_buf().size(), 0u);
lconn->OnReadPacket(rtc::ReceivedPacket(rport_->last_stun_buf(),
rtc::SocketAddress(), std::nullopt));
@@ -4041,13 +4369,19 @@
});
lconn->Ping(rtc::TimeMillis(), std::move(delta));
- ASSERT_TRUE_WAIT(lport_->last_stun_msg(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return lport_->last_stun_msg(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
ASSERT_GT(lport_->last_stun_buf().size(), 0u);
rconn->OnReadPacket(rtc::ReceivedPacket(lport_->last_stun_buf(),
rtc::SocketAddress(), std::nullopt));
clock_.AdvanceTime(webrtc::TimeDelta::Millis(ms));
- ASSERT_TRUE_WAIT(rport_->last_stun_msg(), kDefaultTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return rport_->last_stun_msg(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultTimeout)}),
+ webrtc::IsRtcOk());
ASSERT_GT(rport_->last_stun_buf().size(), 0u);
lconn->OnReadPacket(rtc::ReceivedPacket(rport_->last_stun_buf(),
rtc::SocketAddress(), std::nullopt));
diff --git a/p2p/base/pseudo_tcp_unittest.cc b/p2p/base/pseudo_tcp_unittest.cc
index 4057e84..fd12410 100644
--- a/p2p/base/pseudo_tcp_unittest.cc
+++ b/p2p/base/pseudo_tcp_unittest.cc
@@ -14,21 +14,28 @@
#include <algorithm>
#include <cstddef>
+#include <cstdint>
#include <string>
#include <utility>
#include <vector>
+#include "api/array_view.h"
#include "api/task_queue/pending_task_safety_flag.h"
#include "api/task_queue/task_queue_base.h"
+#include "api/test/rtc_error_matchers.h"
#include "api/units/time_delta.h"
#include "rtc_base/crypto_random.h"
-#include "rtc_base/gunit.h"
#include "rtc_base/logging.h"
#include "rtc_base/memory_stream.h"
+#include "rtc_base/stream.h"
+#include "rtc_base/thread.h"
#include "rtc_base/time_utils.h"
+#include "test/gmock.h"
#include "test/gtest.h"
+#include "test/wait_until.h"
using ::cricket::PseudoTcp;
+using ::testing::IsTrue;
using ::webrtc::ScopedTaskSafety;
using ::webrtc::TaskQueueBase;
using ::webrtc::TimeDelta;
@@ -243,10 +250,16 @@
// Connect and wait until connected.
start = rtc::Time32();
EXPECT_EQ(0, Connect());
- EXPECT_TRUE_WAIT(have_connected_, kConnectTimeoutMs);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return have_connected_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kConnectTimeoutMs)}),
+ webrtc::IsRtcOk());
// Sending will start from OnTcpWriteable and complete when all data has
// been received.
- EXPECT_TRUE_WAIT(have_disconnected_, kTransferTimeoutMs);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return have_disconnected_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTransferTimeoutMs)}),
+ webrtc::IsRtcOk());
elapsed = rtc::Time32() - start;
recv_stream_.GetSize(&received);
// Ensure we closed down OK and we got the right data.
@@ -366,10 +379,16 @@
// Connect and wait until connected.
start = rtc::Time32();
EXPECT_EQ(0, Connect());
- EXPECT_TRUE_WAIT(have_connected_, kConnectTimeoutMs);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return have_connected_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kConnectTimeoutMs)}),
+ webrtc::IsRtcOk());
// Sending will start from OnTcpWriteable and stop when the required
// number of iterations have completed.
- EXPECT_TRUE_WAIT(have_disconnected_, kTransferTimeoutMs);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return have_disconnected_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTransferTimeoutMs)}),
+ webrtc::IsRtcOk());
elapsed = rtc::TimeSince(start);
RTC_LOG(LS_INFO) << "Performed " << iterations << " pings in " << elapsed
<< " ms";
@@ -488,10 +507,16 @@
// Connect and wait until connected.
EXPECT_EQ(0, Connect());
- EXPECT_TRUE_WAIT(have_connected_, kConnectTimeoutMs);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return have_connected_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kConnectTimeoutMs)}),
+ webrtc::IsRtcOk());
TaskQueueBase::Current()->PostTask([this] { WriteData(); });
- EXPECT_TRUE_WAIT(have_disconnected_, kTransferTimeoutMs);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return have_disconnected_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTransferTimeoutMs)}),
+ webrtc::IsRtcOk());
ASSERT_EQ(2u, send_position_.size());
ASSERT_EQ(2u, recv_position_.size());
diff --git a/p2p/base/stun_port_unittest.cc b/p2p/base/stun_port_unittest.cc
index 2c50784..ac812da 100644
--- a/p2p/base/stun_port_unittest.cc
+++ b/p2p/base/stun_port_unittest.cc
@@ -10,21 +10,45 @@
#include "p2p/base/stun_port.h"
+#include <cstddef>
+#include <cstdint>
#include <memory>
+#include <optional>
+#include <string>
+#include "absl/functional/any_invocable.h"
+#include "api/candidate.h"
+#include "api/field_trials_view.h"
+#include "api/packet_socket_factory.h"
#include "api/test/mock_async_dns_resolver.h"
+#include "api/test/rtc_error_matchers.h"
+#include "api/transport/stun.h"
+#include "api/units/time_delta.h"
#include "p2p/base/basic_packet_socket_factory.h"
#include "p2p/base/mock_dns_resolving_packet_socket_factory.h"
+#include "p2p/base/port.h"
+#include "p2p/base/stun_request.h"
#include "p2p/base/test_stun_server.h"
#include "rtc_base/async_packet_socket.h"
#include "rtc_base/crypto_random.h"
+#include "rtc_base/dscp.h"
+#include "rtc_base/fake_clock.h"
#include "rtc_base/gunit.h"
+#include "rtc_base/ip_address.h"
+#include "rtc_base/mdns_responder_interface.h"
+#include "rtc_base/net_helpers.h"
+#include "rtc_base/network.h"
#include "rtc_base/network/received_packet.h"
+#include "rtc_base/network_constants.h"
+#include "rtc_base/socket.h"
#include "rtc_base/socket_address.h"
-#include "rtc_base/ssl_adapter.h"
+#include "rtc_base/third_party/sigslot/sigslot.h"
+#include "rtc_base/thread.h"
#include "rtc_base/virtual_socket_server.h"
#include "test/gmock.h"
+#include "test/gtest.h"
#include "test/scoped_key_value_config.h"
+#include "test/wait_until.h"
namespace {
@@ -32,6 +56,8 @@
using rtc::SocketAddress;
using ::testing::_;
using ::testing::DoAll;
+using ::testing::Eq;
+using ::testing::IsTrue;
using ::testing::Return;
using ::testing::ReturnPointee;
using ::testing::SetArgPointee;
@@ -286,7 +312,11 @@
TEST_F(StunPortTest, TestPrepareAddress) {
CreateStunPort(kStunAddr1);
PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
ASSERT_EQ(1U, port()->Candidates().size());
EXPECT_TRUE(kLocalAddr.EqualIPs(port()->Candidates()[0].address()));
std::string expected_server_url = "stun:127.0.0.1:5000";
@@ -297,12 +327,19 @@
TEST_F(StunPortTest, TestPrepareAddressFail) {
CreateStunPort(kBadAddr);
PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(error());
EXPECT_EQ(0U, port()->Candidates().size());
- EXPECT_EQ_SIMULATED_WAIT(error_event_.error_code,
- cricket::STUN_ERROR_SERVER_NOT_REACHABLE, kTimeoutMs,
- fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return error_event_.error_code; },
+ Eq(cricket::STUN_ERROR_SERVER_NOT_REACHABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_NE(error_event_.error_text.find('.'), std::string::npos);
EXPECT_NE(error_event_.address.find(kLocalAddr.HostAsSensitiveURIString()),
std::string::npos);
@@ -315,7 +352,11 @@
TEST_F(StunPortTest, TestServerAddressFamilyMismatch) {
CreateStunPort(kIPv6StunAddr1);
PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(error());
EXPECT_EQ(0U, port()->Candidates().size());
EXPECT_EQ(0, error_event_.error_code);
@@ -356,7 +397,11 @@
});
CreateStunPort(kValidHostnameAddr);
PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
ASSERT_EQ(1U, port()->Candidates().size());
EXPECT_TRUE(kLocalAddr.EqualIPs(port()->Candidates()[0].address()));
EXPECT_EQ(kStunCandidatePriority, port()->Candidates()[0].priority());
@@ -381,7 +426,11 @@
});
CreateStunPort(kValidHostnameAddr);
PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
ASSERT_EQ(1U, port()->Candidates().size());
EXPECT_TRUE(kLocalAddr.EqualIPs(port()->Candidates()[0].address()));
EXPECT_EQ(kStunCandidatePriority + (cricket::kMaxTurnServers << 8),
@@ -392,11 +441,17 @@
TEST_F(StunPortTestWithRealClock, TestPrepareAddressHostnameFail) {
CreateStunPort(kBadHostnameAddr);
PrepareAddress();
- EXPECT_TRUE_WAIT(done(), kTimeoutMs);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(error());
EXPECT_EQ(0U, port()->Candidates().size());
- EXPECT_EQ_WAIT(error_event_.error_code,
- cricket::STUN_ERROR_SERVER_NOT_REACHABLE, kTimeoutMs);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return error_event_.error_code; },
+ Eq(cricket::STUN_ERROR_SERVER_NOT_REACHABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs)}),
+ webrtc::IsRtcOk());
}
// This test verifies keepalive response messages don't result in
@@ -405,7 +460,11 @@
SetKeepaliveDelay(500); // 500ms of keepalive delay.
CreateStunPort(kStunAddr1);
PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
ASSERT_EQ(1U, port()->Candidates().size());
EXPECT_TRUE(kLocalAddr.EqualIPs(port()->Candidates()[0].address()));
SIMULATED_WAIT(false, 1000, fake_clock);
@@ -416,7 +475,11 @@
TEST_F(StunPortTest, TestSharedSocketPrepareAddress) {
CreateSharedUdpPort(kStunAddr1, nullptr);
PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
ASSERT_EQ(1U, port()->Candidates().size());
EXPECT_TRUE(kLocalAddr.EqualIPs(port()->Candidates()[0].address()));
}
@@ -428,7 +491,10 @@
TestSharedSocketPrepareAddressInvalidHostname) {
CreateSharedUdpPort(kBadHostnameAddr, nullptr);
PrepareAddress();
- EXPECT_TRUE_WAIT(done(), kTimeoutMs);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs)}),
+ webrtc::IsRtcOk());
ASSERT_EQ(1U, port()->Candidates().size());
EXPECT_TRUE(kLocalAddr.EqualIPs(port()->Candidates()[0].address()));
@@ -444,7 +510,11 @@
TEST_F(StunPortTest, TestStunCandidateDiscardedWithMdnsObfuscationNotEnabled) {
CreateSharedUdpPort(kStunAddr1, nullptr);
PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
ASSERT_EQ(1U, port()->Candidates().size());
EXPECT_TRUE(kLocalAddr.EqualIPs(port()->Candidates()[0].address()));
EXPECT_TRUE(port()->Candidates()[0].is_local());
@@ -456,7 +526,11 @@
EnableMdnsObfuscation();
CreateSharedUdpPort(kStunAddr1, nullptr);
PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
ASSERT_EQ(2U, port()->Candidates().size());
// The addresses of the candidates are both equal to kLocalAddr.
@@ -483,7 +557,11 @@
CreateStunPort(stun_servers);
EXPECT_EQ(IceCandidateType::kSrflx, port()->Type());
PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(1U, port()->Candidates().size());
EXPECT_EQ(port()->Candidates()[0].relay_protocol(), "");
}
@@ -497,11 +575,18 @@
CreateStunPort(stun_servers);
EXPECT_EQ(IceCandidateType::kSrflx, port()->Type());
PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(1U, port()->Candidates().size());
std::string server_url = "stun:" + kBadAddr.ToString();
- ASSERT_EQ_SIMULATED_WAIT(error_event_.url, server_url, kTimeoutMs,
- fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return error_event_.url; }, Eq(server_url),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
}
// Test that two candidates are allocated if the two STUN servers return
@@ -518,7 +603,11 @@
CreateStunPort(stun_servers);
EXPECT_EQ(IceCandidateType::kSrflx, port()->Type());
PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(2U, port()->Candidates().size());
EXPECT_EQ(port()->Candidates()[0].relay_protocol(), "");
EXPECT_EQ(port()->Candidates()[1].relay_protocol(), "");
@@ -567,9 +656,16 @@
SetKeepaliveLifetime(100);
CreateStunPort(kStunAddr1);
PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
- EXPECT_TRUE_SIMULATED_WAIT(!HasPendingRequest(cricket::STUN_BINDING_REQUEST),
- 2000, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return !HasPendingRequest(cricket::STUN_BINDING_REQUEST); },
+ IsTrue(), {.clock = &fake_clock}),
+ webrtc::IsRtcOk());
}
// Test that by default, the STUN binding requests will last for a long time.
@@ -577,9 +673,16 @@
SetKeepaliveDelay(101);
CreateStunPort(kStunAddr1);
PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
- EXPECT_TRUE_SIMULATED_WAIT(HasPendingRequest(cricket::STUN_BINDING_REQUEST),
- 1000, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return HasPendingRequest(cricket::STUN_BINDING_REQUEST); },
+ IsTrue(), {.clock = &fake_clock}),
+ webrtc::IsRtcOk());
}
class MockAsyncPacketSocket : public rtc::AsyncPacketSocket {
@@ -621,10 +724,9 @@
EXPECT_CALL(*socket, SetOption(_, _)).WillRepeatedly(Return(0));
// If DSCP is not set on the socket, stun packets should have no value.
- EXPECT_CALL(*socket,
- SendTo(_, _, _,
- ::testing::Field(&rtc::PacketOptions::dscp,
- ::testing::Eq(rtc::DSCP_NO_CHANGE))))
+ EXPECT_CALL(*socket, SendTo(_, _, _,
+ ::testing::Field(&rtc::PacketOptions::dscp,
+ Eq(rtc::DSCP_NO_CHANGE))))
.WillOnce(Return(100));
PrepareAddress();
@@ -632,9 +734,13 @@
port()->SetOption(rtc::Socket::OPT_DSCP, rtc::DSCP_AF41);
EXPECT_CALL(*socket, SendTo(_, _, _,
::testing::Field(&rtc::PacketOptions::dscp,
- ::testing::Eq(rtc::DSCP_AF41))))
+ Eq(rtc::DSCP_AF41))))
.WillRepeatedly(Return(100));
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
}
class StunIPv6PortTestBase : public StunPortTestBase {
@@ -661,7 +767,11 @@
TEST_F(StunIPv6PortTest, TestPrepareAddress) {
CreateStunPort(kIPv6StunAddr1);
PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
ASSERT_EQ(1U, port()->Candidates().size());
EXPECT_TRUE(kIPv6LocalAddr.EqualIPs(port()->Candidates()[0].address()));
std::string expected_server_url = "stun:::1:5000";
@@ -672,12 +782,19 @@
TEST_F(StunIPv6PortTest, TestPrepareAddressFail) {
CreateStunPort(kIPv6BadAddr);
PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(error());
EXPECT_EQ(0U, port()->Candidates().size());
- EXPECT_EQ_SIMULATED_WAIT(error_event_.error_code,
- cricket::STUN_ERROR_SERVER_NOT_REACHABLE, kTimeoutMs,
- fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return error_event_.error_code; },
+ Eq(cricket::STUN_ERROR_SERVER_NOT_REACHABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_NE(error_event_.error_text.find('.'), std::string::npos);
EXPECT_NE(
error_event_.address.find(kIPv6LocalAddr.HostAsSensitiveURIString()),
@@ -691,7 +808,11 @@
TEST_F(StunIPv6PortTest, TestServerAddressFamilyMismatch) {
CreateStunPort(kStunAddr1);
PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(error());
EXPECT_EQ(0U, port()->Candidates().size());
EXPECT_EQ(0, error_event_.error_code);
@@ -701,11 +822,17 @@
TEST_F(StunIPv6PortTestWithRealClock, TestPrepareAddressHostnameFail) {
CreateStunPort(kBadHostnameAddr);
PrepareAddress();
- EXPECT_TRUE_WAIT(done(), kTimeoutMs);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(error());
EXPECT_EQ(0U, port()->Candidates().size());
- EXPECT_EQ_WAIT(error_event_.error_code,
- cricket::STUN_ERROR_SERVER_NOT_REACHABLE, kTimeoutMs);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return error_event_.error_code; },
+ Eq(cricket::STUN_ERROR_SERVER_NOT_REACHABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs)}),
+ webrtc::IsRtcOk());
}
class StunIPv6PortTestWithMockDnsResolver : public StunIPv6PortTest {
@@ -745,7 +872,11 @@
});
CreateStunPort(kValidHostnameAddr);
PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
ASSERT_EQ(1U, port()->Candidates().size());
EXPECT_TRUE(kIPv6LocalAddr.EqualIPs(port()->Candidates()[0].address()));
EXPECT_EQ(kIPv6StunCandidatePriority, port()->Candidates()[0].priority());
@@ -772,7 +903,11 @@
});
CreateStunPort(kValidHostnameAddr, &field_trials);
PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return done(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
ASSERT_EQ(1U, port()->Candidates().size());
EXPECT_TRUE(kIPv6LocalAddr.EqualIPs(port()->Candidates()[0].address()));
EXPECT_EQ(kIPv6StunCandidatePriority + (cricket::kMaxTurnServers << 8),
diff --git a/p2p/base/stun_request_unittest.cc b/p2p/base/stun_request_unittest.cc
index 188ffbf..8cb8bbe 100644
--- a/p2p/base/stun_request_unittest.cc
+++ b/p2p/base/stun_request_unittest.cc
@@ -10,18 +10,28 @@
#include "p2p/base/stun_request.h"
-#include <utility>
+#include <cstddef>
+#include <cstdint>
+#include <memory>
#include <vector>
-#include "rtc_base/crypto_random.h"
+#include "api/test/rtc_error_matchers.h"
+#include "api/transport/stun.h"
+#include "api/units/time_delta.h"
#include "rtc_base/fake_clock.h"
#include "rtc_base/gunit.h"
#include "rtc_base/logging.h"
+#include "rtc_base/thread.h"
#include "rtc_base/time_utils.h"
+#include "test/gmock.h"
#include "test/gtest.h"
+#include "test/wait_until.h"
namespace cricket {
namespace {
+
+using ::testing::Ne;
+
std::unique_ptr<StunMessage> CreateStunMessage(
StunMessageType type,
const StunMessage* req = nullptr) {
@@ -149,8 +159,11 @@
int64_t start = rtc::TimeMillis();
manager_.Send(request);
for (int i = 0; i < 9; ++i) {
- EXPECT_TRUE_SIMULATED_WAIT(request_count_ != i, STUN_TOTAL_TIMEOUT,
- fake_clock);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return request_count_; }, Ne(i),
+ {.timeout = webrtc::TimeDelta::Millis(STUN_TOTAL_TIMEOUT),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
int64_t elapsed = rtc::TimeMillis() - start;
RTC_DLOG(LS_INFO) << "STUN request #" << (i + 1) << " sent at " << elapsed
<< " ms";
diff --git a/p2p/base/tcp_port_unittest.cc b/p2p/base/tcp_port_unittest.cc
index 9adda3b..81d6e89 100644
--- a/p2p/base/tcp_port_unittest.cc
+++ b/p2p/base/tcp_port_unittest.cc
@@ -10,23 +10,36 @@
#include "p2p/base/tcp_port.h"
+#include <cstdint>
#include <list>
#include <memory>
+#include <string>
#include <vector>
+#include "api/candidate.h"
+#include "api/test/rtc_error_matchers.h"
+#include "api/units/time_delta.h"
#include "p2p/base/basic_packet_socket_factory.h"
+#include "p2p/base/connection.h"
#include "p2p/base/p2p_constants.h"
+#include "p2p/base/port.h"
#include "p2p/base/transport_description.h"
+#include "rtc_base/async_packet_socket.h"
+#include "rtc_base/checks.h"
#include "rtc_base/crypto_random.h"
-#include "rtc_base/gunit.h"
#include "rtc_base/ip_address.h"
+#include "rtc_base/network.h"
+#include "rtc_base/network/sent_packet.h"
+#include "rtc_base/socket.h"
#include "rtc_base/socket_address.h"
#include "rtc_base/third_party/sigslot/sigslot.h"
#include "rtc_base/thread.h"
#include "rtc_base/time_utils.h"
#include "rtc_base/virtual_socket_server.h"
+#include "test/gmock.h"
#include "test/gtest.h"
#include "test/scoped_key_value_config.h"
+#include "test/wait_until.h"
using cricket::Connection;
using cricket::ICE_PWD_LENGTH;
@@ -34,6 +47,8 @@
using cricket::Port;
using cricket::TCPPort;
using rtc::SocketAddress;
+using ::testing::Eq;
+using ::testing::IsTrue;
static int kTimeout = 1000;
static const SocketAddress kLocalAddr("11.11.11.11", 0);
@@ -135,7 +150,10 @@
remote_port->PrepareAddress();
Connection* conn = local_port->CreateConnection(remote_port->Candidates()[0],
Port::ORIGIN_MESSAGE);
- EXPECT_TRUE_WAIT(conn->connected(), kTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return conn->connected(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
// Verify that the socket actually used localhost, otherwise this test isn't
// doing what it meant to.
ASSERT_EQ(local_address.ipaddr(),
@@ -164,7 +182,10 @@
Connection* conn = local_port->CreateConnection(remote_port->Candidates()[0],
Port::ORIGIN_MESSAGE);
ConnectionObserver observer(conn);
- EXPECT_TRUE_WAIT(observer.connection_destroyed(), kTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return observer.connection_destroyed(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
}
// A caveat for the above logic: if the socket ends up bound to one of the IPs
@@ -189,7 +210,10 @@
// Expect connection to succeed.
Connection* conn = local_port->CreateConnection(remote_port->Candidates()[0],
Port::ORIGIN_MESSAGE);
- EXPECT_TRUE_WAIT(conn->connected(), kTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return conn->connected(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
// Verify that the socket actually used the alternate address, otherwise this
// test isn't doing what it meant to.
@@ -213,7 +237,10 @@
Connection* conn = local_port->CreateConnection(remote_port->Candidates()[0],
Port::ORIGIN_MESSAGE);
ASSERT_NE(nullptr, conn);
- EXPECT_TRUE_WAIT(conn->connected(), kTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return conn->connected(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
}
class SentPacketCounter : public sigslot::has_slots<> {
@@ -243,7 +270,10 @@
Connection* client_conn =
client->CreateConnection(server->Candidates()[0], Port::ORIGIN_MESSAGE);
ASSERT_NE(nullptr, client_conn);
- ASSERT_TRUE_WAIT(client_conn->connected(), kTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return client_conn->connected(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
// Need to get the port of the actual outgoing socket, not the server socket..
cricket::Candidate client_candidate = client->Candidates()[0];
@@ -253,12 +283,21 @@
Connection* server_conn =
server->CreateConnection(client_candidate, Port::ORIGIN_THIS_PORT);
ASSERT_NE(nullptr, server_conn);
- ASSERT_TRUE_WAIT(server_conn->connected(), kTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return server_conn->connected(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
client_conn->Ping(rtc::TimeMillis());
server_conn->Ping(rtc::TimeMillis());
- ASSERT_TRUE_WAIT(client_conn->writable(), kTimeout);
- ASSERT_TRUE_WAIT(server_conn->writable(), kTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return client_conn->writable(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return server_conn->writable(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
SentPacketCounter client_counter(client.get());
SentPacketCounter server_counter(server.get());
@@ -267,8 +306,14 @@
client_conn->Send(&kData, sizeof(kData), rtc::PacketOptions());
server_conn->Send(&kData, sizeof(kData), rtc::PacketOptions());
}
- EXPECT_EQ_WAIT(10, client_counter.sent_packets(), kTimeout);
- EXPECT_EQ_WAIT(10, server_counter.sent_packets(), kTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return client_counter.sent_packets(); }, Eq(10),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return server_counter.sent_packets(); }, Eq(10),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
}
// Test that SignalSentPacket is fired when a packet is successfully sent, even
@@ -287,7 +332,10 @@
Connection* client_conn =
client->CreateConnection(server->Candidates()[0], Port::ORIGIN_MESSAGE);
ASSERT_NE(nullptr, client_conn);
- ASSERT_TRUE_WAIT(client_conn->connected(), kTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return client_conn->connected(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
// Need to get the port of the actual outgoing socket.
cricket::Candidate client_candidate = client->Candidates()[0];
@@ -297,10 +345,16 @@
client_candidate.set_tcptype("");
Connection* server_conn =
server->CreateConnection(client_candidate, Port::ORIGIN_THIS_PORT);
- ASSERT_TRUE_WAIT(server_conn->connected(), kTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return server_conn->connected(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_FALSE(client_conn->writable());
client_conn->Ping(rtc::TimeMillis());
- ASSERT_TRUE_WAIT(client_conn->writable(), kTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return client_conn->writable(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
SentPacketCounter client_counter(client.get());
static const char kData[] = "hello";
@@ -310,7 +364,10 @@
// Deleting the server port should break the current connection.
server = nullptr;
server_conn = nullptr;
- ASSERT_TRUE_WAIT(!client_conn->connected(), kTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return !client_conn->connected(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
// Recreate the server port with the same port number.
server = CreateTCPPort(kRemoteAddr, /*allow_listen=*/true, kServerPort);
@@ -321,7 +378,10 @@
// packet will be discarded.
result = client_conn->Send(&kData, sizeof(kData), rtc::PacketOptions());
EXPECT_EQ(result, SOCKET_ERROR);
- ASSERT_TRUE_WAIT(client_conn->connected(), kTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return client_conn->connected(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
// For unknown reasons, connection is still supposed to be writable....
EXPECT_TRUE(client_conn->writable());
for (int i = 0; i < 10; ++i) {
@@ -330,7 +390,10 @@
SOCKET_ERROR);
}
// And are not reported as sent.
- EXPECT_EQ_WAIT(client_counter.sent_packets(), 1, kTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return client_counter.sent_packets(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
// Create the server connection again so server can reply to STUN pings.
// Client outgoing socket port will have changed since the client create a new
@@ -342,13 +405,22 @@
client_candidate.set_tcptype("");
server_conn =
server->CreateConnection(client_candidate, Port::ORIGIN_THIS_PORT);
- ASSERT_TRUE_WAIT(server_conn->connected(), kTimeout);
- EXPECT_EQ_WAIT(client_counter.sent_packets(), 1, kTimeout);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return server_conn->connected(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return client_counter.sent_packets(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
// Send Stun Binding request.
client_conn->Ping(rtc::TimeMillis());
// The Stun Binding request is reported as sent.
- EXPECT_EQ_WAIT(client_counter.sent_packets(), 2, kTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return client_counter.sent_packets(); }, Eq(2),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
// Wait a bit for the Stun response to be received.
rtc::Thread::Current()->ProcessMessages(100);
@@ -358,5 +430,8 @@
EXPECT_EQ(client_conn->Send(&kData, sizeof(kData), rtc::PacketOptions()),
6);
}
- EXPECT_EQ_WAIT(client_counter.sent_packets(), 2 + 5, kTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return client_counter.sent_packets(); }, Eq(2 + 5),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
}
diff --git a/p2p/base/turn_port_unittest.cc b/p2p/base/turn_port_unittest.cc
index d1f9709..f081529 100644
--- a/p2p/base/turn_port_unittest.cc
+++ b/p2p/base/turn_port_unittest.cc
@@ -7,10 +7,29 @@
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
+#include <cstddef>
#include <cstdint>
+#include <string>
+#include "absl/functional/any_invocable.h"
#include "api/array_view.h"
+#include "api/candidate.h"
+#include "api/test/mock_async_dns_resolver.h"
+#include "api/test/rtc_error_matchers.h"
+#include "api/transport/stun.h"
+#include "p2p/base/connection_info.h"
+#include "p2p/base/port.h"
+#include "p2p/base/port_interface.h"
+#include "p2p/base/stun_request.h"
+#include "p2p/client/relay_port_factory_interface.h"
+#include "rtc_base/async_packet_socket.h"
+#include "rtc_base/ip_address.h"
+#include "rtc_base/net_helpers.h"
+#include "rtc_base/network.h"
#include "rtc_base/network/received_packet.h"
+#include "rtc_base/third_party/sigslot/sigslot.h"
+#include "test/gmock.h"
+#include "test/wait_until.h"
#if defined(WEBRTC_POSIX)
#include <dirent.h>
@@ -54,6 +73,9 @@
using ::testing::_;
using ::testing::DoAll;
+using ::testing::Eq;
+using ::testing::IsTrue;
+using ::testing::Ne;
using ::testing::Return;
using ::testing::ReturnPointee;
using ::testing::SetArgPointee;
@@ -384,12 +406,19 @@
// turn_port_ should have been created.
ASSERT_TRUE(turn_port_ != nullptr);
turn_port_->PrepareAddress();
- ASSERT_TRUE_SIMULATED_WAIT(
- turn_ready_, TimeToGetTurnCandidate(protocol_type), fake_clock_);
+ ASSERT_THAT(webrtc::WaitUntil([&] { return turn_ready_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(
+ TimeToGetTurnCandidate(protocol_type)),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
CreateUdpPort();
udp_port_->PrepareAddress();
- ASSERT_TRUE_SIMULATED_WAIT(udp_ready_, kSimulatedRtt, fake_clock_);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return udp_ready_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
}
// Returns the fake clock time to establish a connection over the given
@@ -453,7 +482,11 @@
void TestTurnAllocateSucceeds(unsigned int timeout) {
ASSERT_TRUE(turn_port_);
turn_port_->PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(turn_ready_, timeout, fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return turn_ready_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(timeout),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
ASSERT_EQ(1U, turn_port_->Candidates().size());
EXPECT_EQ(kTurnUdpExtAddr.ipaddr(),
turn_port_->Candidates()[0].address().ipaddr());
@@ -464,8 +497,11 @@
absl::string_view expected_url) {
ASSERT_TRUE(turn_port_);
turn_port_->PrepareAddress();
- ASSERT_TRUE_SIMULATED_WAIT(
- turn_ready_, TimeToGetTurnCandidate(protocol_type), fake_clock_);
+ ASSERT_THAT(webrtc::WaitUntil([&] { return turn_ready_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(
+ TimeToGetTurnCandidate(protocol_type)),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
ASSERT_EQ(1U, turn_port_->Candidates().size());
EXPECT_EQ(turn_port_->Candidates()[0].url(), expected_url);
}
@@ -486,9 +522,12 @@
const SocketAddress old_addr = turn_port_->server_address().address;
turn_port_->PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(turn_ready_,
- TimeToGetAlternateTurnCandidate(protocol_type),
- fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return turn_ready_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(
+ TimeToGetAlternateTurnCandidate(protocol_type)),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// Retrieve the address again, the turn port's address should be
// changed.
const SocketAddress new_addr = turn_port_->server_address().address;
@@ -511,8 +550,12 @@
turn_port_->PrepareAddress();
// Need time to connect to TURN server, send Allocate request and receive
// redirect notice.
- EXPECT_TRUE_SIMULATED_WAIT(
- turn_error_, kSimulatedRtt + TimeToConnect(protocol_type), fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return turn_error_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(
+ kSimulatedRtt + TimeToConnect(protocol_type)),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
}
void TestTurnAlternateServerPingPong(ProtocolType protocol_type) {
@@ -529,9 +572,12 @@
ProtocolAddress(kTurnIntAddr, protocol_type));
turn_port_->PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(turn_error_,
- TimeToGetAlternateTurnCandidate(protocol_type),
- fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return turn_error_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(
+ TimeToGetAlternateTurnCandidate(protocol_type)),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
ASSERT_EQ(0U, turn_port_->Candidates().size());
rtc::SocketAddress address;
// Verify that we have exhausted all alternate servers instead of
@@ -553,9 +599,12 @@
ProtocolAddress(kTurnIntAddr, protocol_type));
turn_port_->PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(turn_error_,
- TimeToGetAlternateTurnCandidate(protocol_type),
- fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return turn_error_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(
+ TimeToGetAlternateTurnCandidate(protocol_type)),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
ASSERT_EQ(0U, turn_port_->Candidates().size());
}
@@ -593,8 +642,11 @@
ProtocolAddress(server_address, protocol_type));
turn_port_->PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(
- turn_error_, TimeToGetTurnCandidate(protocol_type), fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil([&] { return turn_error_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(
+ TimeToGetTurnCandidate(protocol_type)),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// Wait for some extra time, and make sure no packets were received on the
// loopback port we created (or in the case of TCP, no connection attempt
@@ -629,21 +681,32 @@
Connection* conn2 = turn_port_->CreateConnection(udp_port_->Candidates()[0],
Port::ORIGIN_MESSAGE);
ASSERT_TRUE(conn2 != NULL);
- ASSERT_TRUE_SIMULATED_WAIT(turn_create_permission_success_, kSimulatedRtt,
- fake_clock_);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return turn_create_permission_success_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
conn2->Ping(0);
// Two hops from TURN port to UDP port through TURN server, thus two RTTs.
- EXPECT_EQ_SIMULATED_WAIT(Connection::STATE_WRITABLE, conn2->write_state(),
- kSimulatedRtt * 2, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return conn2->write_state(); },
+ Eq(Connection::STATE_WRITABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 2),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(conn1->receiving());
EXPECT_TRUE(conn2->receiving());
EXPECT_EQ(Connection::STATE_WRITE_INIT, conn1->write_state());
// Send another ping from UDP to TURN.
conn1->Ping(0);
- EXPECT_EQ_SIMULATED_WAIT(Connection::STATE_WRITABLE, conn1->write_state(),
- kSimulatedRtt * 2, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return conn1->write_state(); },
+ Eq(Connection::STATE_WRITABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 2),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(conn2->receiving());
}
@@ -661,12 +724,19 @@
turn_port_->set_timeout_delay(10 * 60 * 1000);
ASSERT_TRUE(conn2 != NULL);
- ASSERT_TRUE_SIMULATED_WAIT(turn_create_permission_success_, kSimulatedRtt,
- fake_clock_);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return turn_create_permission_success_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// Make sure turn connection can receive.
conn1->Ping(0);
- EXPECT_EQ_SIMULATED_WAIT(Connection::STATE_WRITABLE, conn1->write_state(),
- kSimulatedRtt * 2, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return conn1->write_state(); },
+ Eq(Connection::STATE_WRITABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 2),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
EXPECT_FALSE(turn_unknown_address_);
// Destroy the connection on the TURN port. The TurnEntry still exists, so
@@ -674,8 +744,11 @@
turn_port_->DestroyConnection(conn2);
conn1->Ping(0);
- EXPECT_TRUE_SIMULATED_WAIT(turn_unknown_address_, kSimulatedRtt,
- fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return turn_unknown_address_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// Wait for TurnEntry to expire. Timeout is 5 minutes.
// Expect that it still processes an incoming ping and signals the
@@ -707,14 +780,21 @@
conn1->set_remote_password_for_test(pwd);
conn1->Ping(0);
- EXPECT_TRUE_SIMULATED_WAIT(turn_unknown_address_, kSimulatedRtt,
- fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return turn_unknown_address_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// If the connection is created again, it will start to receive pings.
conn2 = turn_port_->CreateConnection(udp_port_->Candidates()[0],
Port::ORIGIN_MESSAGE);
conn1->Ping(0);
- EXPECT_TRUE_SIMULATED_WAIT(conn2->receiving(), kSimulatedRtt, fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return conn2->receiving(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
}
void TestTurnSendData(ProtocolType protocol_type) {
@@ -742,11 +822,19 @@
conn2->SignalDestroyed.connect(this,
&TurnPortTest::OnConnectionSignalDestroyed);
conn1->Ping(0);
- EXPECT_EQ_SIMULATED_WAIT(Connection::STATE_WRITABLE, conn1->write_state(),
- kSimulatedRtt * 2, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return conn1->write_state(); },
+ Eq(Connection::STATE_WRITABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 2),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
conn2->Ping(0);
- EXPECT_EQ_SIMULATED_WAIT(Connection::STATE_WRITABLE, conn2->write_state(),
- kSimulatedRtt * 2, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return conn2->write_state(); },
+ Eq(Connection::STATE_WRITABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 2),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// Send some data.
size_t num_packets = 256;
@@ -774,8 +862,12 @@
void TestTurnReleaseAllocation(ProtocolType protocol_type) {
PrepareTurnAndUdpPorts(protocol_type);
turn_port_.reset();
- EXPECT_EQ_SIMULATED_WAIT(0U, turn_server_.server()->allocations().size(),
- kSimulatedRtt, fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return turn_server_.server()->allocations().size(); }, Eq(0U),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
}
// Test that the TURN allocation is released by sending a refresh request
@@ -806,11 +898,19 @@
&TurnPortTest::OnConnectionSignalDestroyed);
conn1->Ping(0);
- EXPECT_EQ_SIMULATED_WAIT(Connection::STATE_WRITABLE, conn1->write_state(),
- kSimulatedRtt * 2, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return conn1->write_state(); },
+ Eq(Connection::STATE_WRITABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 2),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
conn2->Ping(0);
- EXPECT_EQ_SIMULATED_WAIT(Connection::STATE_WRITABLE, conn2->write_state(),
- kSimulatedRtt * 2, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return conn2->write_state(); },
+ Eq(Connection::STATE_WRITABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 2),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// Send some data from Udp to TurnPort.
unsigned char buf[256] = {0};
@@ -821,7 +921,11 @@
turn_port_->Release();
// Wait for the TurnPort to signal closed.
- ASSERT_TRUE_SIMULATED_WAIT(turn_port_closed_, kSimulatedRtt, fake_clock_);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return turn_port_closed_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// But the data should have arrived first.
ASSERT_EQ(1ul, turn_packets_.size());
@@ -908,7 +1012,10 @@
// As VSS doesn't provide DNS resolution, name resolve will fail,
// the error will be set and contain the url.
turn_port_->PrepareAddress();
- EXPECT_TRUE_WAIT(turn_error_, kResolverTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_error_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kResolverTimeout)}),
+ webrtc::IsRtcOk());
std::string server_url =
"turn:" + kTurnInvalidAddr.ToString() + "?transport=udp";
ASSERT_EQ(error_event_.url, server_url);
@@ -963,10 +1070,18 @@
TEST_F(TurnPortTest, TestTurnBadCredentials) {
CreateTurnPort(kTurnUsername, "bad", kTurnUdpProtoAddr);
turn_port_->PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(turn_error_, kSimulatedRtt * 3, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_error_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 3),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
ASSERT_EQ(0U, turn_port_->Candidates().size());
- EXPECT_EQ_SIMULATED_WAIT(error_event_.error_code, STUN_ERROR_UNAUTHORIZED,
- kSimulatedRtt * 3, fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return error_event_.error_code; }, Eq(STUN_ERROR_UNAUTHORIZED),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 3),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
EXPECT_EQ(error_event_.error_text, "Unauthorized");
}
@@ -975,7 +1090,11 @@
TEST_F(TurnPortTest, TestServerAddressFamilyMismatch) {
CreateTurnPort(kTurnUsername, kTurnPassword, kTurnUdpIPv6ProtoAddr);
turn_port_->PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(turn_error_, kSimulatedRtt * 3, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_error_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 3),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
ASSERT_EQ(0U, turn_port_->Candidates().size());
EXPECT_EQ(0, error_event_.error_code);
}
@@ -986,7 +1105,11 @@
CreateTurnPort(kLocalIPv6Addr, kTurnUsername, kTurnPassword,
kTurnUdpProtoAddr);
turn_port_->PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(turn_error_, kSimulatedRtt * 3, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_error_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 3),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
ASSERT_EQ(0U, turn_port_->Candidates().size());
EXPECT_EQ(0, error_event_.error_code);
}
@@ -1039,10 +1162,17 @@
// Shouldn't take more than 1 RTT to realize the bound address isn't the one
// expected.
- EXPECT_TRUE_SIMULATED_WAIT(turn_error_, kSimulatedRtt, fake_clock_);
- EXPECT_EQ_SIMULATED_WAIT(error_event_.error_code,
- STUN_ERROR_SERVER_NOT_REACHABLE, kSimulatedRtt,
- fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return turn_error_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return error_event_.error_code; },
+ Eq(STUN_ERROR_SERVER_NOT_REACHABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
EXPECT_NE(error_event_.error_text.find('.'), std::string::npos);
EXPECT_NE(error_event_.address.find(kLocalAddr2.HostAsSensitiveURIString()),
std::string::npos);
@@ -1074,7 +1204,11 @@
turn_port_->PrepareAddress();
// Candidate should be gathered as normally.
- EXPECT_TRUE_SIMULATED_WAIT(turn_ready_, kSimulatedRtt * 3, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_ready_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 3),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
ASSERT_EQ(1U, turn_port_->Candidates().size());
// Verify that the socket actually used the alternate address, otherwise this
@@ -1101,7 +1235,11 @@
turn_port_->PrepareAddress();
// Candidate should be gathered as normally.
- EXPECT_TRUE_SIMULATED_WAIT(turn_ready_, kSimulatedRtt * 3, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_ready_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 3),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
ASSERT_EQ(1U, turn_port_->Candidates().size());
}
@@ -1112,14 +1250,20 @@
CreateTurnPort(kTurnUsername, kTurnPassword,
ProtocolAddress(kTurnInvalidAddr, PROTO_TCP));
turn_port_->PrepareAddress();
- EXPECT_TRUE_WAIT(turn_error_, kResolverTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_error_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kResolverTimeout)}),
+ webrtc::IsRtcOk());
// As VSS doesn't provide DNS resolution, name resolve will fail. TurnPort
// will proceed in creating a TCP socket which will fail as there is no
// server on the above domain and error will be set to SOCKET_ERROR.
EXPECT_EQ(SOCKET_ERROR, turn_port_->error());
- EXPECT_EQ_SIMULATED_WAIT(error_event_.error_code,
- STUN_ERROR_SERVER_NOT_REACHABLE, kSimulatedRtt,
- fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return error_event_.error_code; },
+ Eq(STUN_ERROR_SERVER_NOT_REACHABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
std::string server_url =
"turn:" + kTurnInvalidAddr.ToString() + "?transport=tcp";
ASSERT_EQ(error_event_.url, server_url);
@@ -1132,7 +1276,10 @@
CreateTurnPort(kTurnUsername, kTurnPassword,
ProtocolAddress(kTurnInvalidAddr, PROTO_TLS));
turn_port_->PrepareAddress();
- EXPECT_TRUE_WAIT(turn_error_, kResolverTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_error_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kResolverTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_EQ(SOCKET_ERROR, turn_port_->error());
}
@@ -1142,7 +1289,10 @@
CreateTurnPort(kTurnUsername, kTurnPassword,
ProtocolAddress(kTurnInvalidAddr, PROTO_UDP));
turn_port_->PrepareAddress();
- EXPECT_TRUE_WAIT(turn_error_, kResolverTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_error_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kResolverTimeout)}),
+ webrtc::IsRtcOk());
// Error from turn port will not be socket error.
EXPECT_NE(SOCKET_ERROR, turn_port_->error());
}
@@ -1151,7 +1301,11 @@
TEST_F(TurnPortTest, TestTurnAllocateBadPassword) {
CreateTurnPort(kTurnUsername, "bad", kTurnUdpProtoAddr);
turn_port_->PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(turn_error_, kSimulatedRtt * 2, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_error_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 2),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
ASSERT_EQ(0U, turn_port_->Candidates().size());
}
@@ -1161,7 +1315,11 @@
// Do a normal allocation first.
CreateTurnPort(kTurnUsername, kTurnPassword, kTurnUdpProtoAddr);
turn_port_->PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(turn_ready_, kSimulatedRtt * 2, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_ready_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 2),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
rtc::SocketAddress first_addr(turn_port_->socket()->GetLocalAddress());
// Destroy the turnport while keeping the drop probability to 1 to
// suppress the release of the allocation at the server.
@@ -1187,7 +1345,11 @@
// Four round trips; first we'll get "stale nonce", then
// "allocate mismatch", then "stale nonce" again, then finally it will
// succeed.
- EXPECT_TRUE_SIMULATED_WAIT(turn_ready_, kSimulatedRtt * 4, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_ready_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 4),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
EXPECT_NE(first_nonce, turn_port_->nonce());
}
@@ -1197,7 +1359,11 @@
// Do a normal allocation first.
CreateTurnPort(kTurnUsername, kTurnPassword, kTurnUdpProtoAddr);
turn_port_->PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(turn_ready_, kSimulatedRtt * 2, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_ready_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 2),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
rtc::SocketAddress first_addr(turn_port_->socket()->GetLocalAddress());
// Clear connected_ flag on turnport to suppress the release of
@@ -1217,7 +1383,11 @@
// Four round trips; first we'll get "stale nonce", then
// "allocate mismatch", then "stale nonce" again, then finally it will
// succeed.
- EXPECT_TRUE_SIMULATED_WAIT(turn_ready_, kSimulatedRtt * 4, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_ready_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 4),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// Verifies that the new port has a different address now.
EXPECT_NE(first_addr, turn_port_->socket()->GetLocalAddress());
@@ -1237,7 +1407,11 @@
// Do a normal allocation first.
CreateSharedTurnPort(kTurnUsername, kTurnPassword, kTurnUdpProtoAddr);
turn_port_->PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(turn_ready_, kSimulatedRtt * 2, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_ready_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 2),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
rtc::SocketAddress first_addr(turn_port_->socket()->GetLocalAddress());
// Clear connected_ flag on turnport to suppress the release of
@@ -1253,7 +1427,11 @@
turn_port_->PrepareAddress();
// Extra 2 round trips due to allocate mismatch.
- EXPECT_TRUE_SIMULATED_WAIT(turn_ready_, kSimulatedRtt * 4, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_ready_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 4),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// Verifies that the new port has a different address now.
EXPECT_NE(first_addr, turn_port_->socket()->GetLocalAddress());
@@ -1266,7 +1444,11 @@
// Do a normal allocation first.
turn_port_->PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(turn_ready_, kSimulatedRtt * 3, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_ready_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 3),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
rtc::SocketAddress first_addr(turn_port_->socket()->GetLocalAddress());
// Clear connected_ flag on turnport to suppress the release of
@@ -1284,7 +1466,11 @@
EXPECT_EQ(first_addr, turn_port_->socket()->GetLocalAddress());
// Extra 2 round trips due to allocate mismatch.
- EXPECT_TRUE_SIMULATED_WAIT(turn_ready_, kSimulatedRtt * 5, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_ready_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 5),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// Verifies that the new port has a different address now.
EXPECT_NE(first_addr, turn_port_->socket()->GetLocalAddress());
@@ -1303,11 +1489,18 @@
// When this succeeds, it will schedule a new RefreshRequest with the bad
// credential.
turn_port_->request_manager().FlushForTest(TURN_REFRESH_REQUEST);
- EXPECT_TRUE_SIMULATED_WAIT(turn_refresh_success_, kSimulatedRtt, fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return turn_refresh_success_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// Flush it again, it will receive a bad response.
turn_port_->request_manager().FlushForTest(TURN_REFRESH_REQUEST);
- EXPECT_TRUE_SIMULATED_WAIT(!turn_refresh_success_, kSimulatedRtt,
- fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return !turn_refresh_success_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
EXPECT_FALSE(turn_port_->connected());
EXPECT_TRUE(CheckAllConnectionsFailedAndPruned());
EXPECT_FALSE(turn_port_->HasRequests());
@@ -1326,8 +1519,12 @@
ASSERT_TRUE(conn2 != NULL);
// Make sure conn2 is writable.
conn2->Ping(0);
- EXPECT_EQ_SIMULATED_WAIT(Connection::STATE_WRITABLE, conn2->write_state(),
- kSimulatedRtt * 2, fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return conn2->write_state(); }, Eq(Connection::STATE_WRITABLE),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 2),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
turn_port_->CloseForTest();
SIMULATED_WAIT(false, kSimulatedRtt, fake_clock_);
@@ -1367,8 +1564,12 @@
EXPECT_NE(nullptr, conn);
EXPECT_TRUE(!turn_port_->connections().empty());
turn_port_->socket()->NotifyClosedForTest(1);
- EXPECT_TRUE_SIMULATED_WAIT(turn_port_->connections().empty(),
- kConnectionDestructionDelay, fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return turn_port_->connections().empty(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kConnectionDestructionDelay),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
}
// Test try-alternate-server feature.
@@ -1511,8 +1712,11 @@
Connection* conn = turn_port_->CreateConnection(udp_port_->Candidates()[0],
Port::ORIGIN_MESSAGE);
ASSERT_TRUE(conn != NULL);
- EXPECT_TRUE_SIMULATED_WAIT(turn_create_permission_success_, kSimulatedRtt,
- fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_create_permission_success_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
turn_create_permission_success_ = false;
// A create-permission-request should be pending.
// After the next create-permission-response is received, it will schedule
@@ -1520,12 +1724,18 @@
RelayCredentials bad_credentials("bad_user", "bad_pwd");
turn_port_->set_credentials(bad_credentials);
turn_port_->request_manager().FlushForTest(kAllRequestsForTest);
- EXPECT_TRUE_SIMULATED_WAIT(turn_create_permission_success_, kSimulatedRtt,
- fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_create_permission_success_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// Flush the requests again; the create-permission-request will fail.
turn_port_->request_manager().FlushForTest(kAllRequestsForTest);
- EXPECT_TRUE_SIMULATED_WAIT(!turn_create_permission_success_, kSimulatedRtt,
- fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return !turn_create_permission_success_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(CheckConnectionFailedAndPruned(conn));
}
@@ -1540,7 +1750,11 @@
ASSERT_TRUE(conn2 != nullptr);
conn1->Ping(0);
- EXPECT_TRUE_SIMULATED_WAIT(conn1->writable(), kSimulatedRtt * 2, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return conn1->writable(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 2),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// Tell the TURN server to reject all bind requests from now on.
turn_server_.server()->set_reject_bind_requests(true);
@@ -1548,8 +1762,12 @@
std::string data = "ABC";
conn1->Send(data.data(), data.length(), options);
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnectionFailedAndPruned(conn1),
- kSimulatedRtt, fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return CheckConnectionFailedAndPruned(conn1); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// Verify that packets are allowed to be sent after a bind request error.
// They'll just use a send indication instead.
@@ -1561,7 +1779,11 @@
rtc::Buffer(packet.payload().data(), packet.payload().size()));
});
conn1->Send(data.data(), data.length(), options);
- EXPECT_TRUE_SIMULATED_WAIT(!udp_packets_.empty(), kSimulatedRtt, fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return !udp_packets_.empty(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
conn2->DeregisterReceivedPacketCallback();
}
@@ -1597,7 +1819,11 @@
CreateTurnPort(kLocalIPv6Addr, kTurnUsername, kTurnPassword,
kTurnUdpProtoAddr);
turn_port_->PrepareAddress();
- ASSERT_TRUE_SIMULATED_WAIT(turn_error_, kSimulatedRtt, fake_clock_);
+ ASSERT_THAT(
+ webrtc::WaitUntil([&] { return turn_error_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(turn_port_->Candidates().empty());
}
@@ -1621,7 +1847,11 @@
CreateTurnPort(kLocalIPv6Addr, kTurnUsername, kTurnPassword,
kTurnUdpIPv6ProtoAddr);
turn_port_->PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(turn_ready_, kSimulatedRtt * 2, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_ready_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 2),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
ASSERT_EQ(1U, turn_port_->Candidates().size());
// Create an IPv4 candidate. It will match the TURN candidate.
@@ -1647,11 +1877,19 @@
turn_server_.server()->set_reject_private_addresses(true);
CreateTurnPort(kTurnUsername, kTurnPassword, kTurnTcpProtoAddr);
turn_port_->PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(turn_ready_, kSimulatedRtt * 3, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return turn_ready_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt * 3),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
CreateUdpPort(SocketAddress("10.0.0.10", 0));
udp_port_->PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(udp_ready_, kSimulatedRtt, fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return udp_ready_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// Create a connection.
TestConnectionWrapper conn(turn_port_->CreateConnection(
udp_port_->Candidates()[0], Port::ORIGIN_MESSAGE));
@@ -1659,10 +1897,18 @@
// Asynchronously, CreatePermission request should be sent and fail, which
// will make the connection pruned and failed.
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnectionFailedAndPruned(conn.connection()),
- kSimulatedRtt, fake_clock_);
- EXPECT_TRUE_SIMULATED_WAIT(!turn_create_permission_success_, kSimulatedRtt,
- fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return CheckConnectionFailedAndPruned(conn.connection()); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return !turn_create_permission_success_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kSimulatedRtt),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// Check that the connection is not deleted asynchronously.
SIMULATED_WAIT(conn.connection() == nullptr, kConnectionDestructionDelay,
fake_clock_);
@@ -1730,12 +1976,17 @@
CreateTurnPort(kLocalIPv6Addr, kTurnUsername, kTurnPassword,
ProtocolAddress(kTurnInvalidAddr, PROTO_UDP));
turn_port_->PrepareAddress();
- ASSERT_TRUE_WAIT(turn_error_, kResolverTimeout);
+ ASSERT_THAT(webrtc::WaitUntil(
+ [&] { return turn_error_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kResolverTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(turn_port_->Candidates().empty());
turn_port_.reset();
rtc::Thread::Current()->PostTask([this] { test_finish_ = true; });
// Waiting for above message to be processed.
- ASSERT_TRUE_SIMULATED_WAIT(test_finish_, 1, fake_clock_);
+ ASSERT_THAT(webrtc::WaitUntil([&] { return test_finish_; }, IsTrue(),
+ {.clock = &fake_clock_}),
+ webrtc::IsRtcOk());
EXPECT_EQ(last_fd_count, GetFDCount());
}
#endif
@@ -1924,9 +2175,12 @@
turn_port_->PrepareAddress();
// This should result in an error event.
- EXPECT_TRUE_SIMULATED_WAIT(error_event_.error_code != 0,
- TimeToGetAlternateTurnCandidate(protocol_type),
- fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return error_event_.error_code; }, Ne(0),
+ {.timeout = webrtc::TimeDelta::Millis(
+ TimeToGetAlternateTurnCandidate(protocol_type)),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// but should NOT result in the port turning ready, and no candidates
// should be gathered.
EXPECT_FALSE(turn_ready_);
diff --git a/p2p/client/basic_port_allocator_unittest.cc b/p2p/client/basic_port_allocator_unittest.cc
index e68013e..1026122 100644
--- a/p2p/client/basic_port_allocator_unittest.cc
+++ b/p2p/client/basic_port_allocator_unittest.cc
@@ -10,12 +10,24 @@
#include "p2p/client/basic_port_allocator.h"
+#include <algorithm>
+#include <cstddef>
+#include <cstdint>
#include <memory>
+#include <string>
+#include <vector>
#include "absl/algorithm/container.h"
#include "absl/strings/string_view.h"
+#include "api/candidate.h"
+#include "api/test/rtc_error_matchers.h"
+#include "api/transport/enums.h"
+#include "api/units/time_delta.h"
#include "p2p/base/basic_packet_socket_factory.h"
#include "p2p/base/p2p_constants.h"
+#include "p2p/base/port.h"
+#include "p2p/base/port_allocator.h"
+#include "p2p/base/port_interface.h"
#include "p2p/base/stun_port.h"
#include "p2p/base/stun_request.h"
#include "p2p/base/stun_server.h"
@@ -32,24 +44,26 @@
#include "rtc_base/nat_socket_factory.h"
#include "rtc_base/nat_types.h"
#include "rtc_base/net_helper.h"
-#include "rtc_base/net_helpers.h"
#include "rtc_base/net_test_helpers.h"
#include "rtc_base/network.h"
#include "rtc_base/network_constants.h"
#include "rtc_base/network_monitor.h"
#include "rtc_base/socket.h"
#include "rtc_base/socket_address.h"
-#include "rtc_base/socket_address_pair.h"
+#include "rtc_base/third_party/sigslot/sigslot.h"
#include "rtc_base/thread.h"
#include "rtc_base/virtual_socket_server.h"
#include "system_wrappers/include/metrics.h"
#include "test/gmock.h"
#include "test/gtest.h"
#include "test/scoped_key_value_config.h"
+#include "test/wait_until.h"
using rtc::IPAddress;
using rtc::SocketAddress;
using testing::Contains;
+using ::testing::Eq;
+using ::testing::IsTrue;
using testing::Not;
using webrtc::IceCandidateType;
@@ -532,8 +546,12 @@
PORTALLOCATOR_ENABLE_SHARED_SOCKET);
allocator().set_allow_tcp_listen(false);
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
uint32_t total_candidates = 0;
if (!host_candidate_addr.IsNil()) {
@@ -591,8 +609,12 @@
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
// 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());
@@ -635,8 +657,12 @@
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
// 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
@@ -693,8 +719,12 @@
PORTALLOCATOR_ENABLE_IPV6 | PORTALLOCATOR_ENABLE_IPV6_ON_WIFI);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
// 10 ports (4 STUN and 1 TURN ports on each interface) will be ready to
// use.
EXPECT_EQ(10U, session_->ReadyPorts().size());
@@ -773,8 +803,12 @@
session_->set_flags(PORTALLOCATOR_DISABLE_STUN | PORTALLOCATOR_DISABLE_RELAY |
PORTALLOCATOR_DISABLE_TCP);
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(4U, candidates_.size());
for (const Candidate& candidate : candidates_) {
EXPECT_LT(candidate.address().ip(), 0x12345604U);
@@ -795,8 +829,12 @@
session_->set_flags(PORTALLOCATOR_DISABLE_STUN | PORTALLOCATOR_DISABLE_RELAY |
PORTALLOCATOR_DISABLE_TCP);
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(1U, candidates_.size());
EXPECT_EQ(0x12345602U, candidates_[0].address().ip());
}
@@ -816,8 +854,12 @@
cricket::PORTALLOCATOR_DISABLE_COSTLY_NETWORKS);
ASSERT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
// Should only get one Wi-Fi candidate.
EXPECT_EQ(1U, candidates_.size());
EXPECT_TRUE(HasCandidate(candidates_, IceCandidateType::kHost, "udp", wifi));
@@ -842,8 +884,12 @@
cricket::PORTALLOCATOR_DISABLE_COSTLY_NETWORKS);
ASSERT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
// Should only get two candidates, none of which is cell.
EXPECT_EQ(2U, candidates_.size());
EXPECT_TRUE(
@@ -872,8 +918,12 @@
cricket::PORTALLOCATOR_DISABLE_COSTLY_NETWORKS);
ASSERT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
// Should only get one Wi-Fi candidate.
EXPECT_EQ(1U, candidates_.size());
EXPECT_TRUE(HasCandidate(candidates_, IceCandidateType::kHost, "udp", wifi));
@@ -893,8 +943,12 @@
cricket::PORTALLOCATOR_DISABLE_COSTLY_NETWORKS);
ASSERT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
// Make sure we got the cell candidate.
EXPECT_EQ(1U, candidates_.size());
EXPECT_TRUE(
@@ -917,8 +971,12 @@
cricket::PORTALLOCATOR_DISABLE_COSTLY_NETWORKS);
ASSERT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
// Make sure we got both wifi and cell candidates.
EXPECT_EQ(2U, candidates_.size());
EXPECT_TRUE(HasCandidate(candidates_, IceCandidateType::kHost, "udp",
@@ -946,8 +1004,12 @@
cricket::PORTALLOCATOR_DISABLE_COSTLY_NETWORKS);
ASSERT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
// Make sure we got only wifi candidates.
EXPECT_EQ(2U, candidates_.size());
EXPECT_TRUE(HasCandidate(candidates_, IceCandidateType::kHost, "udp", wifi));
@@ -968,8 +1030,12 @@
PORTALLOCATOR_DISABLE_TCP);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
// The VPN tap0 network should be filtered out as a costly network, and we
// should have a UDP port and a STUN port from the Ethernet eth0.
ASSERT_EQ(2U, ports_.size());
@@ -993,8 +1059,12 @@
ASSERT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(2U, candidates_.size());
// Ensure the expected two interfaces (eth0 and eth1) were used.
EXPECT_TRUE(HasCandidate(candidates_, IceCandidateType::kHost, "udp",
@@ -1020,8 +1090,12 @@
ASSERT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(3U, candidates_.size());
// Ensure that only one IPv6 interface was used, but both IPv4 interfaces
// were used.
@@ -1041,8 +1115,12 @@
session_->set_flags(PORTALLOCATOR_DISABLE_STUN | PORTALLOCATOR_DISABLE_RELAY |
PORTALLOCATOR_DISABLE_TCP);
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(1U, candidates_.size());
}
@@ -1051,8 +1129,12 @@
AddInterface(kClientAddr);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(3U, candidates_.size());
EXPECT_EQ(3U, ports_.size());
EXPECT_TRUE(
@@ -1071,8 +1153,12 @@
AddInterface(kClientAddr, if_name);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(3U, candidates_.size());
EXPECT_EQ(3U, ports_.size());
candidate_allocation_done_ = false;
@@ -1095,8 +1181,12 @@
fss_->set_tcp_sockets_enabled(true);
fss_->set_udp_sockets_enabled(true);
AddInterface(kClientAddr, if_name);
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(3U, candidates_.size());
EXPECT_EQ(3U, ports_.size());
}
@@ -1109,8 +1199,12 @@
AddInterface(kClientAddr, if_name);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(3U, candidates_.size());
EXPECT_EQ(3U, ports_.size());
session_->StopGettingPorts();
@@ -1147,8 +1241,12 @@
fss_->set_udp_sockets_enabled(false);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
// Make sure we actually prevented candidates from being gathered (other than
// a single TCP active candidate, since that doesn't require creating a
// socket).
@@ -1162,8 +1260,12 @@
fss_->set_tcp_sockets_enabled(true);
fss_->set_udp_sockets_enabled(true);
AddInterface(kClientAddr, if_name);
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
// Should get UDP and TCP candidate.
ASSERT_EQ(2U, candidates_.size());
EXPECT_TRUE(
@@ -1181,12 +1283,18 @@
allocator_->set_step_delay(kDefaultStepDelay);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_EQ_SIMULATED_WAIT(2U, candidates_.size(), 1000, fake_clock);
+ ASSERT_THAT(webrtc::WaitUntil([&] { return candidates_.size(); }, Eq(2U),
+ {.clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(2U, ports_.size());
- ASSERT_EQ_SIMULATED_WAIT(3U, candidates_.size(), 2000, fake_clock);
+ ASSERT_THAT(webrtc::WaitUntil([&] { return candidates_.size(); }, Eq(3U),
+ {.clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(3U, ports_.size());
- ASSERT_EQ_SIMULATED_WAIT(3U, candidates_.size(), 1500, fake_clock);
+ ASSERT_THAT(webrtc::WaitUntil([&] { return candidates_.size(); }, Eq(3U),
+ {.clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(
HasCandidate(candidates_, IceCandidateType::kHost, "tcp", kClientAddr));
EXPECT_EQ(3U, ports_.size());
@@ -1199,8 +1307,12 @@
AddInterface(kClientAddr);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP, CN_VIDEO));
session_->StartGettingPorts();
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(3U, candidates_.size());
// If we Stop gathering now, we shouldn't get a second "done" callback.
session_->StopGettingPorts();
@@ -1215,12 +1327,20 @@
AddInterface(kClientAddr);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_EQ_SIMULATED_WAIT(2U, candidates_.size(), kDefaultAllocationTimeout,
- fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidates_.size(); }, Eq(2U),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(2U, ports_.size());
session_->StopGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
}
// Test that we restrict client ports appropriately when a port range is set.
@@ -1236,8 +1356,12 @@
EXPECT_TRUE(SetPortRange(kMinPort, kMaxPort));
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(3U, candidates_.size());
EXPECT_EQ(3U, ports_.size());
@@ -1263,8 +1387,12 @@
AddTurnServers(kTurnUdpIntIPv6Addr, kTurnTcpIntIPv6Addr);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(4U, ports_.size());
EXPECT_EQ(1,
CountPorts(ports_, IceCandidateType::kSrflx, PROTO_UDP, kAnyAddr));
@@ -1406,8 +1534,12 @@
PORTALLOCATOR_ENABLE_SHARED_SOCKET);
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
// Expect to see 2 ports and 2 candidates - TURN/TCP and TCP ports, TCP and
// TURN/TCP candidates.
@@ -1430,7 +1562,9 @@
session_->set_flags(PORTALLOCATOR_DISABLE_UDP | PORTALLOCATOR_DISABLE_STUN |
PORTALLOCATOR_DISABLE_RELAY | PORTALLOCATOR_DISABLE_TCP);
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, 1000, fake_clock);
+ EXPECT_THAT(webrtc::WaitUntil([&] { return candidate_allocation_done_; },
+ IsTrue(), {.clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(0U, candidates_.size());
}
@@ -1440,8 +1574,12 @@
fss_->set_udp_sockets_enabled(false);
ASSERT_TRUE(CreateSession(1));
session_->StartGettingPorts();
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(1U, candidates_.size());
EXPECT_EQ(1U, ports_.size());
EXPECT_TRUE(
@@ -1457,8 +1595,12 @@
fss_->set_tcp_listen_enabled(false);
ASSERT_TRUE(CreateSession(1));
session_->StartGettingPorts();
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(1U, candidates_.size());
EXPECT_EQ(1U, ports_.size());
EXPECT_TRUE(
@@ -1473,7 +1615,7 @@
fss_->set_udp_sockets_enabled(false);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- SIMULATED_WAIT(candidates_.size() > 0, 2000, fake_clock);
+ SIMULATED_WAIT(!candidates_.empty(), 2000, fake_clock);
// TODO(deadbeef): Check candidate_allocation_done signal.
// In case of Relay, ports creation will succeed but sockets will fail.
// There is no error reporting from RelayEntry to handle this failure.
@@ -1485,8 +1627,12 @@
AddInterface(kClientAddr);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_EQ_SIMULATED_WAIT(2U, candidates_.size(), kDefaultAllocationTimeout,
- fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidates_.size(); }, Eq(2U),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(2U, ports_.size());
EXPECT_TRUE(
HasCandidate(candidates_, IceCandidateType::kHost, "udp", kClientAddr));
@@ -1494,8 +1640,12 @@
HasCandidate(candidates_, IceCandidateType::kHost, "tcp", kClientAddr));
// We wait at least for a full STUN timeout, which
// cricket::STUN_TOTAL_TIMEOUT seconds.
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- cricket::STUN_TOTAL_TIMEOUT, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(cricket::STUN_TOTAL_TIMEOUT),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
// No additional (STUN) candidates.
EXPECT_EQ(2U, candidates_.size());
}
@@ -1509,8 +1659,12 @@
PORTALLOCATOR_DISABLE_RELAY);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
ASSERT_EQ(2U, candidates_.size());
EXPECT_EQ(2U, ports_.size());
// Candidates priorities should be different.
@@ -1522,8 +1676,12 @@
AddInterface(kClientAddr);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(3U, candidates_.size());
EXPECT_EQ(3U, ports_.size());
// TODO(deadbeef): Extend this to verify ICE restart.
@@ -1541,8 +1699,12 @@
session_->StartGettingPorts();
// 7 candidates and 4 ports is what we would normally get (see the
// TestGetAllPorts* tests).
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(3U, candidates_.size());
EXPECT_EQ(3U, ports_.size());
}
@@ -1559,8 +1721,12 @@
allocator().SetCandidateFilter(CF_RELAY);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(HasCandidate(candidates_, IceCandidateType::kRelay, "udp",
rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)));
@@ -1578,8 +1744,12 @@
allocator().SetCandidateFilter(CF_HOST);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(2U, candidates_.size()); // Host UDP/TCP candidates only.
EXPECT_EQ(2U, ports_.size()); // UDP/TCP ports only.
for (const Candidate& candidate : candidates_) {
@@ -1596,8 +1766,12 @@
allocator().SetCandidateFilter(CF_REFLEXIVE);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
// 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.
@@ -1615,8 +1789,12 @@
allocator().SetCandidateFilter(CF_REFLEXIVE);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
// 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.
@@ -1630,8 +1808,12 @@
AddInterface(kClientAddr);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(3U, candidates_.size());
EXPECT_TRUE(
HasCandidate(candidates_, IceCandidateType::kHost, "udp", kClientAddr));
@@ -1656,13 +1838,21 @@
PORTALLOCATOR_ENABLE_SHARED_SOCKET);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_EQ_SIMULATED_WAIT(2U, candidates_.size(), kDefaultAllocationTimeout,
- fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidates_.size(); }, Eq(2U),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(2U, ports_.size());
EXPECT_TRUE(
HasCandidate(candidates_, IceCandidateType::kHost, "udp", kClientAddr));
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
}
// Test that when PORTALLOCATOR_ENABLE_SHARED_SOCKET is enabled only one port
@@ -1676,15 +1866,23 @@
PORTALLOCATOR_ENABLE_SHARED_SOCKET);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_EQ_SIMULATED_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout,
- fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidates_.size(); }, Eq(3U),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
ASSERT_EQ(2U, ports_.size());
EXPECT_TRUE(
HasCandidate(candidates_, IceCandidateType::kHost, "udp", kClientAddr));
EXPECT_TRUE(HasCandidate(candidates_, IceCandidateType::kSrflx, "udp",
rtc::SocketAddress(kNatUdpAddr.ipaddr(), 0)));
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(3U, candidates_.size());
}
@@ -1705,8 +1903,12 @@
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
ASSERT_EQ(3U, candidates_.size());
ASSERT_EQ(3U, ports_.size());
EXPECT_TRUE(
@@ -1845,7 +2047,11 @@
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_EQ_WAIT(2U, ports_.size(), kDefaultAllocationTimeout);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return ports_.size(); }, Eq(2U),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout)}),
+ webrtc::IsRtcOk());
}
// Test that when PORTALLOCATOR_ENABLE_SHARED_SOCKET is enabled only one port
@@ -1864,8 +2070,12 @@
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(3U, candidates_.size());
ASSERT_EQ(2U, ports_.size());
EXPECT_TRUE(
@@ -1874,8 +2084,12 @@
rtc::SocketAddress(kNatUdpAddr.ipaddr(), 0)));
EXPECT_TRUE(HasCandidate(candidates_, IceCandidateType::kRelay, "udp",
rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)));
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
// Local port will be created first and then TURN port.
// TODO(deadbeef): This isn't something the BasicPortAllocator API contract
// guarantees...
@@ -1904,8 +2118,12 @@
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(3U, candidates_.size());
EXPECT_TRUE(
HasCandidate(candidates_, IceCandidateType::kHost, "udp", kClientAddr));
@@ -1941,8 +2159,12 @@
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(2U, candidates_.size());
ASSERT_EQ(2U, ports_.size());
EXPECT_TRUE(
@@ -1969,8 +2191,12 @@
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(3U, candidates_.size());
ASSERT_EQ(3U, ports_.size());
EXPECT_TRUE(
@@ -2009,8 +2235,12 @@
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_EQ_SIMULATED_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout,
- fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidates_.size(); }, Eq(3U),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(
HasCandidate(candidates_, IceCandidateType::kHost, "udp", kClientAddr));
Candidate stun_candidate;
@@ -2037,14 +2267,21 @@
AddInterface(kClientAddr);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_EQ_SIMULATED_WAIT(1U, ports_.size(), kDefaultAllocationTimeout,
- fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return ports_.size(); }, Eq(1U),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(1U, candidates_.size());
EXPECT_TRUE(
HasCandidate(candidates_, IceCandidateType::kHost, "udp", kClientAddr));
// STUN timeout is 9.5sec. We need to wait to get candidate done signal.
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, kStunTimeoutMs,
- fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil([&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kStunTimeoutMs),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(1U, candidates_.size());
}
@@ -2064,8 +2301,12 @@
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
EXPECT_EQ(0U, session_->flags() & PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION);
session_->StartGettingPorts();
- EXPECT_EQ_SIMULATED_WAIT(1U, ports_.size(), kDefaultAllocationTimeout,
- fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return ports_.size(); }, Eq(1U),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(1U, candidates_.size());
EXPECT_TRUE(
HasCandidate(candidates_, IceCandidateType::kHost, "udp", kPrivateAddr));
@@ -2082,8 +2323,12 @@
allocator_->set_step_delay(kMinimumStepDelay);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(4U, ports_.size());
EXPECT_EQ(4U, candidates_.size());
EXPECT_TRUE(HasCandidate(candidates_, IceCandidateType::kHost, "udp",
@@ -2101,10 +2346,14 @@
allocator_->set_step_delay(kDefaultStepDelay);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_EQ_SIMULATED_WAIT(2U, candidates_.size(), 1000, fake_clock);
+ ASSERT_THAT(webrtc::WaitUntil([&] { return candidates_.size(); }, Eq(2U),
+ {.clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(2U, ports_.size());
session_->StopGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, 1000, fake_clock);
+ EXPECT_THAT(webrtc::WaitUntil([&] { return candidate_allocation_done_; },
+ IsTrue(), {.clock = &fake_clock}),
+ webrtc::IsRtcOk());
// After stopping getting ports, adding a new interface will not start
// getting ports again.
@@ -2123,10 +2372,14 @@
allocator_->set_step_delay(kDefaultStepDelay);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_EQ_SIMULATED_WAIT(2U, candidates_.size(), 1000, fake_clock);
+ ASSERT_THAT(webrtc::WaitUntil([&] { return candidates_.size(); }, Eq(2U),
+ {.clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(2U, ports_.size());
session_->ClearGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, 1000, fake_clock);
+ EXPECT_THAT(webrtc::WaitUntil([&] { return candidate_allocation_done_; },
+ IsTrue(), {.clock = &fake_clock}),
+ webrtc::IsRtcOk());
// After clearing getting ports, adding a new interface will start getting
// ports again.
@@ -2135,10 +2388,16 @@
ports_.clear();
candidate_allocation_done_ = false;
network_manager_.AddInterface(kClientAddr2);
- ASSERT_EQ_SIMULATED_WAIT(2U, candidates_.size(), 1000, fake_clock);
+ ASSERT_THAT(webrtc::WaitUntil([&] { return candidates_.size(); }, Eq(2U),
+ {.clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(2U, ports_.size());
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
}
// Test that the ports and candidates are updated with new ufrag/pwd/etc. when
@@ -2151,8 +2410,12 @@
webrtc::NO_PRUNE);
const PortAllocatorSession* peeked_session = allocator_->GetPooledSession();
ASSERT_NE(nullptr, peeked_session);
- EXPECT_EQ_SIMULATED_WAIT(true, peeked_session->CandidatesAllocationDone(),
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return peeked_session->CandidatesAllocationDone(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
// Expect that when TakePooledSession is called,
// UpdateTransportInformationInternal will be called and the
// BasicPortAllocatorSession will update the ufrag/pwd of ports and
@@ -2188,8 +2451,12 @@
webrtc::NO_PRUNE);
const PortAllocatorSession* peeked_session = allocator_->GetPooledSession();
ASSERT_NE(nullptr, peeked_session);
- EXPECT_EQ_SIMULATED_WAIT(true, peeked_session->CandidatesAllocationDone(),
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return peeked_session->CandidatesAllocationDone(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
size_t initial_candidates_size = peeked_session->ReadyCandidates().size();
size_t initial_ports_size = peeked_session->ReadyPorts().size();
allocator_->SetCandidateFilter(CF_RELAY);
@@ -2236,29 +2503,45 @@
allocator_->SetCandidateFilter(CF_NONE);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(candidates_.empty());
EXPECT_TRUE(ports_.empty());
// Surface the relay candidate previously gathered but not signaled.
session_->SetCandidateFilter(CF_RELAY);
- ASSERT_EQ_SIMULATED_WAIT(1u, candidates_.size(), kDefaultAllocationTimeout,
- fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidates_.size(); }, Eq(1u),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(candidates_.back().is_relay());
EXPECT_EQ(1u, ports_.size());
// Surface the srflx candidate previously gathered but not signaled.
session_->SetCandidateFilter(CF_RELAY | CF_REFLEXIVE);
- ASSERT_EQ_SIMULATED_WAIT(2u, candidates_.size(), kDefaultAllocationTimeout,
- fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidates_.size(); }, Eq(2u),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(candidates_.back().is_stun());
EXPECT_EQ(2u, ports_.size());
// Surface the srflx candidate previously gathered but not signaled.
session_->SetCandidateFilter(CF_ALL);
- ASSERT_EQ_SIMULATED_WAIT(3u, candidates_.size(), kDefaultAllocationTimeout,
- fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidates_.size(); }, Eq(3u),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(candidates_.back().is_local());
EXPECT_EQ(2u, ports_.size());
}
@@ -2286,29 +2569,45 @@
allocator_->SetCandidateFilter(CF_NONE);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(candidates_.empty());
EXPECT_TRUE(ports_.empty());
// Surface the relay candidate previously gathered but not signaled.
session_->SetCandidateFilter(CF_RELAY);
- EXPECT_EQ_SIMULATED_WAIT(1u, candidates_.size(), kDefaultAllocationTimeout,
- fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidates_.size(); }, Eq(1u),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(candidates_.back().is_relay());
EXPECT_EQ(1u, ports_.size());
// Surface the srflx candidate previously gathered but not signaled.
session_->SetCandidateFilter(CF_REFLEXIVE);
- EXPECT_EQ_SIMULATED_WAIT(2u, candidates_.size(), kDefaultAllocationTimeout,
- fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidates_.size(); }, Eq(2u),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(candidates_.back().is_stun());
EXPECT_EQ(2u, ports_.size());
// Surface the host candidate previously gathered but not signaled.
session_->SetCandidateFilter(CF_HOST);
- EXPECT_EQ_SIMULATED_WAIT(3u, candidates_.size(), kDefaultAllocationTimeout,
- fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidates_.size(); }, Eq(3u),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_TRUE(candidates_.back().is_local());
// We use a shared socket and cricket::UDPPort handles the srflx candidate.
EXPECT_EQ(2u, ports_.size());
@@ -2331,8 +2630,12 @@
allocator_->SetCandidateFilter(CF_NONE);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
auto test_invariants = [this]() {
EXPECT_TRUE(candidates_.empty());
EXPECT_TRUE(ports_.empty());
@@ -2364,8 +2667,12 @@
webrtc::NO_PRUNE, nullptr, expected_stun_keepalive_interval);
auto* pooled_session = allocator_->GetPooledSession();
ASSERT_NE(nullptr, pooled_session);
- EXPECT_EQ_SIMULATED_WAIT(true, pooled_session->CandidatesAllocationDone(),
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return pooled_session->CandidatesAllocationDone(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
CheckStunKeepaliveIntervalOfAllReadyPorts(pooled_session,
expected_stun_keepalive_interval);
}
@@ -2379,8 +2686,12 @@
webrtc::NO_PRUNE, nullptr, 123 /* stun keepalive interval */);
auto* pooled_session = allocator_->GetPooledSession();
ASSERT_NE(nullptr, pooled_session);
- EXPECT_EQ_SIMULATED_WAIT(true, pooled_session->CandidatesAllocationDone(),
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return pooled_session->CandidatesAllocationDone(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
const int expected_stun_keepalive_interval = 321;
allocator_->SetConfiguration(
allocator_->stun_servers(), allocator_->turn_servers(), pool_size,
@@ -2401,8 +2712,12 @@
webrtc::NO_PRUNE, nullptr, expected_stun_keepalive_interval);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
CheckStunKeepaliveIntervalOfAllReadyPorts(session_.get(),
expected_stun_keepalive_interval);
}
@@ -2419,8 +2734,12 @@
webrtc::NO_PRUNE, nullptr, expected_stun_keepalive_interval);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
CheckStunKeepaliveIntervalOfAllReadyPorts(session_.get(),
expected_stun_keepalive_interval);
}
@@ -2442,8 +2761,12 @@
AddInterface(kClientAddr);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(5u, candidates_.size());
int num_host_udp_candidates = 0;
int num_host_tcp_candidates = 0;
@@ -2520,8 +2843,12 @@
AddInterface(kClientAddr);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ ASSERT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(3u, candidates_.size());
EXPECT_GT((candidates_[0].priority() >> 8) & 0xFFFF,
(candidates_[1].priority() >> 8) & 0xFFFF);
@@ -2675,8 +3002,12 @@
ASSERT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(2U, candidates_.size());
// ethe1 and wifi1 were selected.
@@ -2702,8 +3033,12 @@
ASSERT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(3U, candidates_.size());
// ethe1, wifi1, and cell1 were selected.
@@ -2731,8 +3066,12 @@
ASSERT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
session_->StartGettingPorts();
- EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_,
- kDefaultAllocationTimeout, fake_clock);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return candidate_allocation_done_; }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kDefaultAllocationTimeout),
+ .clock = &fake_clock}),
+ webrtc::IsRtcOk());
EXPECT_EQ(4U, candidates_.size());
// ethe1, ethe2, wifi1, and cell1 were selected.
diff --git a/p2p/dtls/dtls_transport_unittest.cc b/p2p/dtls/dtls_transport_unittest.cc
index 2eed02e..75a31bc 100644
--- a/p2p/dtls/dtls_transport_unittest.cc
+++ b/p2p/dtls/dtls_transport_unittest.cc
@@ -28,6 +28,7 @@
#include "api/crypto/crypto_options.h"
#include "api/dtls_transport_interface.h"
#include "api/scoped_refptr.h"
+#include "api/test/rtc_error_matchers.h"
#include "api/units/time_delta.h"
#include "p2p/base/fake_ice_transport.h"
#include "p2p/base/packet_transport_internal.h"
@@ -39,7 +40,6 @@
#include "rtc_base/checks.h"
#include "rtc_base/copy_on_write_buffer.h"
#include "rtc_base/fake_clock.h"
-#include "rtc_base/gunit.h"
#include "rtc_base/logging.h"
#include "rtc_base/network/received_packet.h"
#include "rtc_base/rtc_certificate.h"
@@ -48,7 +48,9 @@
#include "rtc_base/ssl_stream_adapter.h"
#include "rtc_base/third_party/sigslot/sigslot.h"
#include "rtc_base/thread.h"
+#include "test/gmock.h"
#include "test/gtest.h"
+#include "test/wait_until.h"
#define MAYBE_SKIP_TEST(feature) \
if (!(rtc::SSLStreamAdapter::feature())) { \
@@ -58,6 +60,9 @@
namespace cricket {
+using ::testing::Eq;
+using ::testing::IsTrue;
+
static const size_t kPacketNumOffset = 8;
static const size_t kPacketHeaderLen = 12;
static const int kFakePacketId = 0x1234;
@@ -380,9 +385,15 @@
Negotiate(client1_server);
EXPECT_TRUE(client1_.Connect(&client2_, false));
- EXPECT_TRUE_SIMULATED_WAIT(client1_.dtls_transport()->writable() &&
- client2_.dtls_transport()->writable(),
- kTimeout, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return client1_.dtls_transport()->writable() &&
+ client2_.dtls_transport()->writable();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
if (!client1_.dtls_transport()->writable() ||
!client2_.dtls_transport()->writable())
return false;
@@ -432,8 +443,11 @@
RTC_LOG(LS_INFO) << "Expect packets, size=" << size;
client2_.ExpectPackets(size);
client1_.SendPackets(size, count, srtp);
- EXPECT_EQ_SIMULATED_WAIT(count, client2_.NumPacketsReceived(), kTimeout,
- fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return client2_.NumPacketsReceived(); }, Eq(count),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
}
protected:
@@ -630,9 +644,15 @@
EXPECT_TRUE(client1_.Connect(&client2_, false));
- EXPECT_TRUE_SIMULATED_WAIT(client1_.dtls_transport()->writable() &&
- client2_.dtls_transport()->writable(),
- kTimeout, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return client1_.dtls_transport()->writable() &&
+ client2_.dtls_transport()->writable();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
client1_.fake_ice_transport()->set_packet_send_filter(nullptr);
client2_.fake_ice_transport()->set_packet_send_filter(nullptr);
@@ -842,9 +862,15 @@
Negotiate();
Negotiate();
EXPECT_TRUE(client1_.Connect(&client2_, false));
- EXPECT_TRUE_SIMULATED_WAIT(client1_.dtls_transport()->writable() &&
- client2_.dtls_transport()->writable(),
- kTimeout, fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] {
+ return client1_.dtls_transport()->writable() &&
+ client2_.dtls_transport()->writable();
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
TestTransfer(1000, 100, true);
}
@@ -905,11 +931,18 @@
// Make client2_ writable, but not client1_.
// This means client1_ will send DTLS client hellos but get no response.
EXPECT_TRUE(client2_.Connect(&client1_, true));
- EXPECT_TRUE_SIMULATED_WAIT(client2_.fake_ice_transport()->writable(),
- kTimeout, fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return client2_.fake_ice_transport()->writable(); }, IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// Wait for the first client hello to be sent.
- EXPECT_EQ_WAIT(1, client1_.received_dtls_client_hellos(), kTimeout);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return client1_.received_dtls_client_hellos(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout)}),
+ webrtc::IsRtcOk());
EXPECT_FALSE(client1_.fake_ice_transport()->writable());
static int timeout_schedule_ms[] = {50, 100, 200, 400, 800, 1600,
@@ -992,29 +1025,49 @@
break;
case CALLER_WRITABLE:
EXPECT_TRUE(client1_.Connect(&client2_, true));
- EXPECT_TRUE_SIMULATED_WAIT(client1_.fake_ice_transport()->writable(),
- kTimeout, fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return client1_.fake_ice_transport()->writable(); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
break;
case CALLER_RECEIVES_CLIENTHELLO:
// Sanity check that a ClientHello hasn't already been received.
EXPECT_EQ(0, client1_.received_dtls_client_hellos());
// Making client2_ writable will cause it to send the ClientHello.
EXPECT_TRUE(client2_.Connect(&client1_, true));
- EXPECT_TRUE_SIMULATED_WAIT(client2_.fake_ice_transport()->writable(),
- kTimeout, fake_clock_);
- EXPECT_EQ_SIMULATED_WAIT(1, client1_.received_dtls_client_hellos(),
- kTimeout, fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return client2_.fake_ice_transport()->writable(); },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] { return client1_.received_dtls_client_hellos(); }, Eq(1),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
break;
case HANDSHAKE_FINISHES:
// Sanity check that the handshake hasn't already finished.
EXPECT_FALSE(client1_.dtls_transport()->IsDtlsConnected() ||
client1_.dtls_transport()->dtls_state() ==
webrtc::DtlsTransportState::kFailed);
- EXPECT_TRUE_SIMULATED_WAIT(
- client1_.dtls_transport()->IsDtlsConnected() ||
- client1_.dtls_transport()->dtls_state() ==
- webrtc::DtlsTransportState::kFailed,
- kTimeout, fake_clock_);
+ EXPECT_THAT(
+ webrtc::WaitUntil(
+ [&] {
+ return client1_.dtls_transport()->IsDtlsConnected() ||
+ client1_.dtls_transport()->dtls_state() ==
+ webrtc::DtlsTransportState::kFailed;
+ },
+ IsTrue(),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
break;
}
}
@@ -1022,12 +1075,18 @@
webrtc::DtlsTransportState expected_final_state =
valid_fingerprint ? webrtc::DtlsTransportState::kConnected
: webrtc::DtlsTransportState::kFailed;
- EXPECT_EQ_SIMULATED_WAIT(expected_final_state,
- client1_.dtls_transport()->dtls_state(), kTimeout,
- fake_clock_);
- EXPECT_EQ_SIMULATED_WAIT(expected_final_state,
- client2_.dtls_transport()->dtls_state(), kTimeout,
- fake_clock_);
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return client1_.dtls_transport()->dtls_state(); },
+ Eq(expected_final_state),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
+ EXPECT_THAT(webrtc::WaitUntil(
+ [&] { return client2_.dtls_transport()->dtls_state(); },
+ Eq(expected_final_state),
+ {.timeout = webrtc::TimeDelta::Millis(kTimeout),
+ .clock = &fake_clock_}),
+ webrtc::IsRtcOk());
// Transports should be writable iff there was a valid fingerprint.
EXPECT_EQ(valid_fingerprint, client1_.dtls_transport()->writable());