Replace Invoke in tests with SendTask test helper
Bug: webrtc:11318 Change-Id: I14e3fbc694d41c785a61c88d8207005c681576c4 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/271540 Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37774}
This commit is contained in:
parent
6f1c84705f
commit
2aaef45876
@ -134,6 +134,7 @@ if (rtc_include_tests) {
|
||||
# TODO(bugs.webrtc.org/9987): Remove this dep on rtc_base:rtc_base once
|
||||
# rtc_base:threading is fully defined.
|
||||
"../../rtc_base:rtc_base",
|
||||
"../../rtc_base:task_queue_for_test",
|
||||
"../../rtc_base:threading",
|
||||
"../../system_wrappers",
|
||||
"../../test:test_support",
|
||||
|
||||
@ -22,6 +22,7 @@
|
||||
#include "modules/desktop_capture/win/window_capture_utils.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/logging.h"
|
||||
#include "rtc_base/task_queue_for_test.h"
|
||||
#include "rtc_base/thread.h"
|
||||
#include "rtc_base/time_utils.h"
|
||||
#include "rtc_base/win/scoped_com_initializer.h"
|
||||
@ -128,8 +129,7 @@ class WgcCapturerWinTest : public ::testing::TestWithParam<CaptureType>,
|
||||
window_thread_ = rtc::Thread::Create();
|
||||
window_thread_->SetName(kWindowThreadName, nullptr);
|
||||
window_thread_->Start();
|
||||
window_thread_->Invoke<void>(RTC_FROM_HERE, [this, window_width,
|
||||
window_height]() {
|
||||
SendTask(window_thread_.get(), [this, window_width, window_height]() {
|
||||
window_thread_id_ = GetCurrentThreadId();
|
||||
window_info_ =
|
||||
CreateTestWindow(kWindowTitle, window_height, window_width);
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
|
||||
#include "modules/desktop_capture/desktop_capturer.h"
|
||||
#include "modules/desktop_capture/win/test_support/test_window.h"
|
||||
#include "rtc_base/task_queue_for_test.h"
|
||||
#include "rtc_base/thread.h"
|
||||
#include "test/gtest.h"
|
||||
|
||||
@ -34,8 +35,7 @@ std::unique_ptr<rtc::Thread> SetUpUnresponsiveWindow(std::mutex& mtx,
|
||||
window_thread->SetName(kWindowThreadName, nullptr);
|
||||
window_thread->Start();
|
||||
|
||||
window_thread->Invoke<void>(
|
||||
RTC_FROM_HERE, [&info]() { info = CreateTestWindow(kWindowTitle); });
|
||||
SendTask(window_thread.get(), [&] { info = CreateTestWindow(kWindowTitle); });
|
||||
|
||||
// Intentionally create a deadlock to cause the window to become unresponsive.
|
||||
mtx.lock();
|
||||
@ -82,8 +82,7 @@ TEST(WindowCaptureUtilsTest, IncludeUnresponsiveWindows) {
|
||||
window_list.end());
|
||||
|
||||
mtx.unlock();
|
||||
window_thread->Invoke<void>(RTC_FROM_HERE,
|
||||
[&info]() { DestroyTestWindow(info); });
|
||||
SendTask(window_thread.get(), [&info]() { DestroyTestWindow(info); });
|
||||
window_thread->Stop();
|
||||
}
|
||||
|
||||
@ -106,8 +105,7 @@ TEST(WindowCaptureUtilsTest, IgnoreUnresponsiveWindows) {
|
||||
window_list.end());
|
||||
|
||||
mtx.unlock();
|
||||
window_thread->Invoke<void>(RTC_FROM_HERE,
|
||||
[&info]() { DestroyTestWindow(info); });
|
||||
SendTask(window_thread.get(), [&info]() { DestroyTestWindow(info); });
|
||||
window_thread->Stop();
|
||||
}
|
||||
|
||||
|
||||
@ -167,8 +167,8 @@ if (rtc_include_tests) {
|
||||
"../api:libjingle_peerconnection_api",
|
||||
"../api/task_queue:pending_task_safety_flag",
|
||||
"../api/units:time_delta",
|
||||
"../rtc_base",
|
||||
"../rtc_base:copy_on_write_buffer",
|
||||
"../rtc_base:task_queue_for_test",
|
||||
]
|
||||
absl_deps = [
|
||||
"//third_party/abseil-cpp/absl/algorithm:container",
|
||||
@ -183,8 +183,8 @@ if (rtc_include_tests) {
|
||||
sources = [ "base/fake_port_allocator.h" ]
|
||||
deps = [
|
||||
":rtc_p2p",
|
||||
"../rtc_base",
|
||||
"../rtc_base:net_helpers",
|
||||
"../rtc_base:task_queue_for_test",
|
||||
"../rtc_base:threading",
|
||||
"../rtc_base/memory:always_valid_pointer",
|
||||
"../test:scoped_key_value_config",
|
||||
|
||||
@ -24,6 +24,7 @@
|
||||
#include "api/units/time_delta.h"
|
||||
#include "p2p/base/ice_transport_internal.h"
|
||||
#include "rtc_base/copy_on_write_buffer.h"
|
||||
#include "rtc_base/task_queue_for_test.h"
|
||||
|
||||
namespace cricket {
|
||||
using ::webrtc::SafeTask;
|
||||
@ -357,7 +358,7 @@ class FakeIceTransport : public IceTransportInternal {
|
||||
void SetNetworkRoute(absl::optional<rtc::NetworkRoute> network_route) {
|
||||
RTC_DCHECK_RUN_ON(network_thread_);
|
||||
network_route_ = network_route;
|
||||
network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
|
||||
SendTask(network_thread_, [this] {
|
||||
RTC_DCHECK_RUN_ON(network_thread_);
|
||||
SignalNetworkRouteChanged(network_route_);
|
||||
});
|
||||
|
||||
@ -22,6 +22,7 @@
|
||||
#include "p2p/base/udp_port.h"
|
||||
#include "rtc_base/memory/always_valid_pointer.h"
|
||||
#include "rtc_base/net_helpers.h"
|
||||
#include "rtc_base/task_queue_for_test.h"
|
||||
#include "rtc_base/thread.h"
|
||||
#include "test/scoped_key_value_config.h"
|
||||
|
||||
@ -256,7 +257,7 @@ class FakePortAllocator : public cricket::PortAllocator {
|
||||
Initialize();
|
||||
return;
|
||||
}
|
||||
network_thread_->Invoke<void>(RTC_FROM_HERE, [this] { Initialize(); });
|
||||
SendTask(network_thread_, [this] { Initialize(); });
|
||||
}
|
||||
|
||||
webrtc::test::ScopedKeyValueConfig field_trials_;
|
||||
|
||||
@ -2114,12 +2114,12 @@ if (rtc_include_tests && !build_with_chromium) {
|
||||
"../rtc_base:checks",
|
||||
"../rtc_base:copy_on_write_buffer",
|
||||
"../rtc_base:gunit_helpers",
|
||||
"../rtc_base:location",
|
||||
"../rtc_base:logging",
|
||||
"../rtc_base:macromagic",
|
||||
"../rtc_base:rtc_base_tests_utils",
|
||||
"../rtc_base:socket_address",
|
||||
"../rtc_base:stringutils",
|
||||
"../rtc_base:task_queue_for_test",
|
||||
"../rtc_base:threading",
|
||||
"../rtc_base/containers:flat_set",
|
||||
"../rtc_base/third_party/sigslot",
|
||||
@ -2182,10 +2182,10 @@ if (rtc_include_tests && !build_with_chromium) {
|
||||
"../rtc_base",
|
||||
"../rtc_base:checks",
|
||||
"../rtc_base:gunit_helpers",
|
||||
"../rtc_base:location",
|
||||
"../rtc_base:rtc_base_tests_utils",
|
||||
"../rtc_base:socket_address",
|
||||
"../rtc_base:socket_factory",
|
||||
"../rtc_base:task_queue_for_test",
|
||||
"../rtc_base:threading",
|
||||
"../system_wrappers",
|
||||
"../test:perf_test",
|
||||
@ -2399,7 +2399,6 @@ if (rtc_include_tests && !build_with_chromium) {
|
||||
"../rtc_base:event_tracer",
|
||||
"../rtc_base:gunit_helpers",
|
||||
"../rtc_base:ip_address",
|
||||
"../rtc_base:location",
|
||||
"../rtc_base:logging",
|
||||
"../rtc_base:macromagic",
|
||||
"../rtc_base:network_constants",
|
||||
@ -2408,6 +2407,7 @@ if (rtc_include_tests && !build_with_chromium) {
|
||||
"../rtc_base:rtc_json",
|
||||
"../rtc_base:socket_address",
|
||||
"../rtc_base:stringutils",
|
||||
"../rtc_base:task_queue_for_test",
|
||||
"../rtc_base:threading",
|
||||
"../rtc_base:timeutils",
|
||||
"../rtc_base/synchronization:mutex",
|
||||
@ -2591,7 +2591,6 @@ if (rtc_include_tests && !build_with_chromium) {
|
||||
"../rtc_base:checks",
|
||||
"../rtc_base:gunit_helpers",
|
||||
"../rtc_base:ip_address",
|
||||
"../rtc_base:location",
|
||||
"../rtc_base:logging",
|
||||
"../rtc_base:macromagic",
|
||||
"../rtc_base:rtc_base_tests_utils",
|
||||
@ -2599,6 +2598,7 @@ if (rtc_include_tests && !build_with_chromium) {
|
||||
"../rtc_base:rtc_json",
|
||||
"../rtc_base:safe_conversions",
|
||||
"../rtc_base:socket_address",
|
||||
"../rtc_base:task_queue_for_test",
|
||||
"../rtc_base:threading",
|
||||
"../rtc_base:timeutils",
|
||||
"../rtc_base/synchronization:mutex",
|
||||
|
||||
@ -41,9 +41,9 @@
|
||||
#include "rtc_base/buffer.h"
|
||||
#include "rtc_base/byte_order.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/location.h"
|
||||
#include "rtc_base/rtc_certificate.h"
|
||||
#include "rtc_base/ssl_identity.h"
|
||||
#include "rtc_base/task_queue_for_test.h"
|
||||
#include "test/gmock.h"
|
||||
#include "test/gtest.h"
|
||||
#include "test/scoped_key_value_config.h"
|
||||
@ -134,7 +134,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||
|
||||
~ChannelTest() {
|
||||
if (network_thread_) {
|
||||
network_thread_->Invoke<void>(RTC_FROM_HERE, [this]() {
|
||||
SendTask(network_thread_, [this]() {
|
||||
network_thread_safety_->SetNotAlive();
|
||||
DeinitChannels();
|
||||
});
|
||||
@ -285,7 +285,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||
void DeinitChannels() {
|
||||
if (!channel1_ && !channel2_)
|
||||
return;
|
||||
network_thread_->Invoke<void>(RTC_FROM_HERE, [this]() {
|
||||
SendTask(network_thread_, [this]() {
|
||||
if (channel1_) {
|
||||
RTC_DCHECK_RUN_ON(channel1_->network_thread());
|
||||
channel1_->SetRtpTransport(nullptr);
|
||||
@ -303,14 +303,13 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||
auto rtp_transport = std::make_unique<webrtc::RtpTransport>(
|
||||
rtcp_packet_transport == nullptr);
|
||||
|
||||
network_thread_->Invoke<void>(
|
||||
RTC_FROM_HERE,
|
||||
[&rtp_transport, rtp_packet_transport, rtcp_packet_transport] {
|
||||
rtp_transport->SetRtpPacketTransport(rtp_packet_transport);
|
||||
if (rtcp_packet_transport) {
|
||||
rtp_transport->SetRtcpPacketTransport(rtcp_packet_transport);
|
||||
}
|
||||
});
|
||||
SendTask(network_thread_,
|
||||
[&rtp_transport, rtp_packet_transport, rtcp_packet_transport] {
|
||||
rtp_transport->SetRtpPacketTransport(rtp_packet_transport);
|
||||
if (rtcp_packet_transport) {
|
||||
rtp_transport->SetRtcpPacketTransport(rtcp_packet_transport);
|
||||
}
|
||||
});
|
||||
return rtp_transport;
|
||||
}
|
||||
|
||||
@ -320,17 +319,16 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||
auto dtls_srtp_transport = std::make_unique<webrtc::DtlsSrtpTransport>(
|
||||
rtcp_dtls_transport == nullptr, field_trials_);
|
||||
|
||||
network_thread_->Invoke<void>(
|
||||
RTC_FROM_HERE,
|
||||
[&dtls_srtp_transport, rtp_dtls_transport, rtcp_dtls_transport] {
|
||||
dtls_srtp_transport->SetDtlsTransports(rtp_dtls_transport,
|
||||
rtcp_dtls_transport);
|
||||
});
|
||||
SendTask(network_thread_,
|
||||
[&dtls_srtp_transport, rtp_dtls_transport, rtcp_dtls_transport] {
|
||||
dtls_srtp_transport->SetDtlsTransports(rtp_dtls_transport,
|
||||
rtcp_dtls_transport);
|
||||
});
|
||||
return dtls_srtp_transport;
|
||||
}
|
||||
|
||||
void ConnectFakeTransports() {
|
||||
network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
|
||||
SendTask(network_thread_, [this] {
|
||||
bool asymmetric = false;
|
||||
// Depending on test flags, could be using DTLS or raw packet transport.
|
||||
if (fake_rtp_dtls_transport1_ && fake_rtp_dtls_transport2_) {
|
||||
@ -536,18 +534,21 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||
// network thread, which callers need to factor in.
|
||||
bool IsSrtpActive(std::unique_ptr<typename T::Channel>& channel) {
|
||||
RTC_DCHECK(channel.get());
|
||||
return network_thread_->Invoke<bool>(
|
||||
RTC_FROM_HERE, [&] { return channel->srtp_active(); });
|
||||
bool result;
|
||||
SendTask(network_thread_, [&] { result = channel->srtp_active(); });
|
||||
return result;
|
||||
}
|
||||
|
||||
// Returns true iff the transport is set for a channel and rtcp_mux_enabled()
|
||||
// returns true.
|
||||
bool IsRtcpMuxEnabled(std::unique_ptr<typename T::Channel>& channel) {
|
||||
RTC_DCHECK(channel.get());
|
||||
return network_thread_->Invoke<bool>(RTC_FROM_HERE, [&] {
|
||||
return channel->rtp_transport() &&
|
||||
channel->rtp_transport()->rtcp_mux_enabled();
|
||||
bool result;
|
||||
SendTask(network_thread_, [&] {
|
||||
result = channel->rtp_transport() &&
|
||||
channel->rtp_transport()->rtcp_mux_enabled();
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
// Tests that can be used by derived classes.
|
||||
@ -863,7 +864,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||
// when creating the channel.
|
||||
WaitForThreads();
|
||||
media_channel1->set_num_network_route_changes(0);
|
||||
network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
|
||||
SendTask(network_thread_, [this] {
|
||||
rtc::NetworkRoute network_route;
|
||||
// The transport channel becomes disconnected.
|
||||
fake_rtp_dtls_transport1_->ice_transport()->SignalNetworkRouteChanged(
|
||||
@ -874,7 +875,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||
EXPECT_FALSE(media_channel1->last_network_route().connected);
|
||||
media_channel1->set_num_network_route_changes(0);
|
||||
|
||||
network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
|
||||
SendTask(network_thread_, [this] {
|
||||
rtc::NetworkRoute network_route;
|
||||
network_route.connected = true;
|
||||
network_route.local =
|
||||
@ -1034,9 +1035,8 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||
EXPECT_TRUE(CheckNoRtp2());
|
||||
|
||||
// Lose writability, which should fail.
|
||||
network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
|
||||
fake_rtp_dtls_transport1_->SetWritable(false);
|
||||
});
|
||||
SendTask(network_thread_,
|
||||
[this] { fake_rtp_dtls_transport1_->SetWritable(false); });
|
||||
SendRtp1();
|
||||
SendRtp2();
|
||||
WaitForThreads();
|
||||
@ -1044,9 +1044,8 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||
EXPECT_TRUE(CheckNoRtp2());
|
||||
|
||||
// Regain writability
|
||||
network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
|
||||
fake_rtp_dtls_transport1_->SetWritable(true);
|
||||
});
|
||||
SendTask(network_thread_,
|
||||
[this] { fake_rtp_dtls_transport1_->SetWritable(true); });
|
||||
EXPECT_TRUE(media_channel1()->sending());
|
||||
SendRtp1();
|
||||
SendRtp2();
|
||||
@ -1057,7 +1056,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||
EXPECT_TRUE(CheckNoRtp2());
|
||||
|
||||
// Lose writability completely
|
||||
network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
|
||||
SendTask(network_thread_, [this] {
|
||||
bool asymmetric = true;
|
||||
fake_rtp_dtls_transport1_->SetDestination(nullptr, asymmetric);
|
||||
});
|
||||
@ -1072,7 +1071,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||
EXPECT_TRUE(CheckNoRtp1());
|
||||
|
||||
// Gain writability back
|
||||
network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
|
||||
SendTask(network_thread_, [this] {
|
||||
bool asymmetric = true;
|
||||
fake_rtp_dtls_transport1_->SetDestination(fake_rtp_dtls_transport2_.get(),
|
||||
asymmetric);
|
||||
@ -1303,7 +1302,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||
|
||||
bool rcv_success, send_success;
|
||||
int rcv_buf, send_buf;
|
||||
network_thread_->Invoke<void>(RTC_FROM_HERE, [&] {
|
||||
SendTask(network_thread_, [&] {
|
||||
channel1_->SetOption(cricket::BaseChannel::ST_RTP,
|
||||
rtc::Socket::Option::OPT_SNDBUF, kSndBufSize);
|
||||
channel2_->SetOption(cricket::BaseChannel::ST_RTP,
|
||||
@ -1386,14 +1385,13 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||
void WaitForThreads(rtc::ArrayView<rtc::Thread*> threads) {
|
||||
// `threads` and current thread post packets to network thread.
|
||||
for (rtc::Thread* thread : threads) {
|
||||
thread->Invoke<void>(RTC_FROM_HERE,
|
||||
[thread] { ProcessThreadQueue(thread); });
|
||||
SendTask(thread, [thread] { ProcessThreadQueue(thread); });
|
||||
}
|
||||
ProcessThreadQueue(rtc::Thread::Current());
|
||||
// Network thread move them around and post back to worker = current thread.
|
||||
if (!network_thread_->IsCurrent()) {
|
||||
network_thread_->Invoke<void>(
|
||||
RTC_FROM_HERE, [this] { ProcessThreadQueue(network_thread_); });
|
||||
SendTask(network_thread_,
|
||||
[this] { ProcessThreadQueue(network_thread_); });
|
||||
}
|
||||
// Worker thread = current Thread process received messages.
|
||||
ProcessThreadQueue(rtc::Thread::Current());
|
||||
@ -1457,7 +1455,7 @@ std::unique_ptr<cricket::VoiceChannel> ChannelTest<VoiceTraits>::CreateChannel(
|
||||
worker_thread, network_thread, signaling_thread, std::move(ch),
|
||||
cricket::CN_AUDIO, (flags & DTLS) != 0, webrtc::CryptoOptions(),
|
||||
&ssrc_generator_);
|
||||
network_thread->Invoke<void>(RTC_FROM_HERE, [&]() {
|
||||
SendTask(network_thread, [&]() {
|
||||
RTC_DCHECK_RUN_ON(channel->network_thread());
|
||||
channel->SetRtpTransport(rtp_transport);
|
||||
});
|
||||
@ -1543,7 +1541,7 @@ std::unique_ptr<cricket::VideoChannel> ChannelTest<VideoTraits>::CreateChannel(
|
||||
worker_thread, network_thread, signaling_thread, std::move(ch),
|
||||
cricket::CN_VIDEO, (flags & DTLS) != 0, webrtc::CryptoOptions(),
|
||||
&ssrc_generator_);
|
||||
network_thread->Invoke<void>(RTC_FROM_HERE, [&]() {
|
||||
SendTask(network_thread, [&]() {
|
||||
RTC_DCHECK_RUN_ON(channel->network_thread());
|
||||
channel->SetRtpTransport(rtp_transport);
|
||||
});
|
||||
|
||||
@ -24,12 +24,12 @@
|
||||
#include "p2p/base/transport_info.h"
|
||||
#include "rtc_base/fake_ssl_identity.h"
|
||||
#include "rtc_base/gunit.h"
|
||||
#include "rtc_base/location.h"
|
||||
#include "rtc_base/logging.h"
|
||||
#include "rtc_base/net_helper.h"
|
||||
#include "rtc_base/socket_address.h"
|
||||
#include "rtc_base/ssl_fingerprint.h"
|
||||
#include "rtc_base/ssl_identity.h"
|
||||
#include "rtc_base/task_queue_for_test.h"
|
||||
#include "rtc_base/thread.h"
|
||||
#include "test/gtest.h"
|
||||
#include "test/scoped_key_value_config.h"
|
||||
@ -104,8 +104,7 @@ class JsepTransportControllerTest : public JsepTransportController::Observer,
|
||||
transport_controller_ = std::make_unique<JsepTransportController>(
|
||||
network_thread, port_allocator, nullptr /* async_resolver_factory */,
|
||||
config);
|
||||
network_thread->Invoke<void>(RTC_FROM_HERE,
|
||||
[&] { ConnectTransportControllerSignals(); });
|
||||
SendTask(network_thread, [&] { ConnectTransportControllerSignals(); });
|
||||
}
|
||||
|
||||
void ConnectTransportControllerSignals() {
|
||||
@ -259,7 +258,7 @@ class JsepTransportControllerTest : public JsepTransportController::Observer,
|
||||
|
||||
void CreateLocalDescriptionAndCompleteConnectionOnNetworkThread() {
|
||||
if (!network_thread_->IsCurrent()) {
|
||||
network_thread_->Invoke<void>(RTC_FROM_HERE, [&] {
|
||||
SendTask(network_thread_.get(), [&] {
|
||||
CreateLocalDescriptionAndCompleteConnectionOnNetworkThread();
|
||||
});
|
||||
return;
|
||||
@ -978,8 +977,7 @@ TEST_F(JsepTransportControllerTest, IceSignalingOccursOnNetworkThread) {
|
||||
|
||||
EXPECT_EQ(ice_signaled_on_thread_, network_thread_.get());
|
||||
|
||||
network_thread_->Invoke<void>(RTC_FROM_HERE,
|
||||
[&] { transport_controller_.reset(); });
|
||||
SendTask(network_thread_.get(), [&] { transport_controller_.reset(); });
|
||||
}
|
||||
|
||||
// Test that if the TransportController was created with the
|
||||
|
||||
@ -82,13 +82,13 @@
|
||||
#include "rtc_base/firewall_socket_server.h"
|
||||
#include "rtc_base/gunit.h"
|
||||
#include "rtc_base/helpers.h"
|
||||
#include "rtc_base/location.h"
|
||||
#include "rtc_base/logging.h"
|
||||
#include "rtc_base/socket_address.h"
|
||||
#include "rtc_base/ssl_certificate.h"
|
||||
#include "rtc_base/ssl_fingerprint.h"
|
||||
#include "rtc_base/ssl_identity.h"
|
||||
#include "rtc_base/ssl_stream_adapter.h"
|
||||
#include "rtc_base/task_queue_for_test.h"
|
||||
#include "rtc_base/test_certificate_verifier.h"
|
||||
#include "rtc_base/thread.h"
|
||||
#include "rtc_base/time_utils.h"
|
||||
@ -2371,10 +2371,10 @@ TEST_P(PeerConnectionIntegrationTestWithFakeClock,
|
||||
turn_server_2_internal_address, turn_server_2_external_address);
|
||||
// Bypass permission check on received packets so media can be sent before
|
||||
// the candidate is signaled.
|
||||
network_thread()->Invoke<void>(RTC_FROM_HERE, [turn_server_1] {
|
||||
SendTask(network_thread(), [turn_server_1] {
|
||||
turn_server_1->set_enable_permission_checks(false);
|
||||
});
|
||||
network_thread()->Invoke<void>(RTC_FROM_HERE, [turn_server_2] {
|
||||
SendTask(network_thread(), [turn_server_2] {
|
||||
turn_server_2->set_enable_permission_checks(false);
|
||||
});
|
||||
|
||||
|
||||
@ -45,10 +45,10 @@
|
||||
#include "rtc_base/firewall_socket_server.h"
|
||||
#include "rtc_base/gunit.h"
|
||||
#include "rtc_base/helpers.h"
|
||||
#include "rtc_base/location.h"
|
||||
#include "rtc_base/socket_address.h"
|
||||
#include "rtc_base/socket_factory.h"
|
||||
#include "rtc_base/ssl_certificate.h"
|
||||
#include "rtc_base/task_queue_for_test.h"
|
||||
#include "rtc_base/test_certificate_verifier.h"
|
||||
#include "rtc_base/thread.h"
|
||||
#include "rtc_base/virtual_socket_server.h"
|
||||
@ -163,8 +163,7 @@ class PeerConnectionRampUpTest : public ::testing::Test {
|
||||
}
|
||||
|
||||
virtual ~PeerConnectionRampUpTest() {
|
||||
network_thread()->Invoke<void>(RTC_FROM_HERE,
|
||||
[this] { turn_servers_.clear(); });
|
||||
SendTask(network_thread(), [this] { turn_servers_.clear(); });
|
||||
}
|
||||
|
||||
bool CreatePeerConnectionWrappers(const RTCConfiguration& caller_config,
|
||||
@ -235,18 +234,17 @@ class PeerConnectionRampUpTest : public ::testing::Test {
|
||||
const std::string& common_name = "test turn server") {
|
||||
rtc::Thread* thread = network_thread();
|
||||
rtc::SocketFactory* factory = firewall_socket_server_.get();
|
||||
std::unique_ptr<cricket::TestTurnServer> turn_server =
|
||||
network_thread_->Invoke<std::unique_ptr<cricket::TestTurnServer>>(
|
||||
RTC_FROM_HERE, [thread, factory, type, common_name] {
|
||||
static const rtc::SocketAddress turn_server_internal_address{
|
||||
kTurnInternalAddress, kTurnInternalPort};
|
||||
static const rtc::SocketAddress turn_server_external_address{
|
||||
kTurnExternalAddress, kTurnExternalPort};
|
||||
return std::make_unique<cricket::TestTurnServer>(
|
||||
thread, factory, turn_server_internal_address,
|
||||
turn_server_external_address, type,
|
||||
true /*ignore_bad_certs=*/, common_name);
|
||||
});
|
||||
std::unique_ptr<cricket::TestTurnServer> turn_server;
|
||||
SendTask(network_thread_.get(), [&] {
|
||||
static const rtc::SocketAddress turn_server_internal_address{
|
||||
kTurnInternalAddress, kTurnInternalPort};
|
||||
static const rtc::SocketAddress turn_server_external_address{
|
||||
kTurnExternalAddress, kTurnExternalPort};
|
||||
turn_server = std::make_unique<cricket::TestTurnServer>(
|
||||
thread, factory, turn_server_internal_address,
|
||||
turn_server_external_address, type, true /*ignore_bad_certs=*/,
|
||||
common_name);
|
||||
});
|
||||
turn_servers_.push_back(std::move(turn_server));
|
||||
}
|
||||
|
||||
|
||||
@ -62,7 +62,6 @@
|
||||
#include "pc/video_track.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/gunit.h"
|
||||
#include "rtc_base/location.h"
|
||||
#include "rtc_base/thread.h"
|
||||
#include "test/gmock.h"
|
||||
#include "test/gtest.h"
|
||||
|
||||
@ -107,13 +107,13 @@
|
||||
#include "rtc_base/gunit.h"
|
||||
#include "rtc_base/helpers.h"
|
||||
#include "rtc_base/ip_address.h"
|
||||
#include "rtc_base/location.h"
|
||||
#include "rtc_base/logging.h"
|
||||
#include "rtc_base/mdns_responder_interface.h"
|
||||
#include "rtc_base/numerics/safe_conversions.h"
|
||||
#include "rtc_base/rtc_certificate_generator.h"
|
||||
#include "rtc_base/socket_address.h"
|
||||
#include "rtc_base/ssl_stream_adapter.h"
|
||||
#include "rtc_base/task_queue_for_test.h"
|
||||
#include "rtc_base/task_utils/repeating_task.h"
|
||||
#include "rtc_base/test_certificate_verifier.h"
|
||||
#include "rtc_base/thread.h"
|
||||
@ -1429,7 +1429,7 @@ class PeerConnectionIntegrationBaseTest : public ::testing::Test {
|
||||
|
||||
// If turn servers were created for the test they need to be destroyed on
|
||||
// the network thread.
|
||||
network_thread()->Invoke<void>(RTC_FROM_HERE, [this] {
|
||||
SendTask(network_thread(), [this] {
|
||||
turn_servers_.clear();
|
||||
turn_customizers_.clear();
|
||||
});
|
||||
@ -1641,25 +1641,22 @@ class PeerConnectionIntegrationBaseTest : public ::testing::Test {
|
||||
const std::string& common_name = "test turn server") {
|
||||
rtc::Thread* thread = network_thread();
|
||||
rtc::SocketFactory* socket_factory = fss_.get();
|
||||
std::unique_ptr<cricket::TestTurnServer> turn_server =
|
||||
network_thread()->Invoke<std::unique_ptr<cricket::TestTurnServer>>(
|
||||
RTC_FROM_HERE, [thread, socket_factory, internal_address,
|
||||
external_address, type, common_name] {
|
||||
return std::make_unique<cricket::TestTurnServer>(
|
||||
thread, socket_factory, internal_address, external_address,
|
||||
type,
|
||||
/*ignore_bad_certs=*/true, common_name);
|
||||
});
|
||||
std::unique_ptr<cricket::TestTurnServer> turn_server;
|
||||
SendTask(network_thread(), [&] {
|
||||
turn_server = std::make_unique<cricket::TestTurnServer>(
|
||||
thread, socket_factory, internal_address, external_address, type,
|
||||
/*ignore_bad_certs=*/true, common_name);
|
||||
});
|
||||
turn_servers_.push_back(std::move(turn_server));
|
||||
// Interactions with the turn server should be done on the network thread.
|
||||
return turn_servers_.back().get();
|
||||
}
|
||||
|
||||
cricket::TestTurnCustomizer* CreateTurnCustomizer() {
|
||||
std::unique_ptr<cricket::TestTurnCustomizer> turn_customizer =
|
||||
network_thread()->Invoke<std::unique_ptr<cricket::TestTurnCustomizer>>(
|
||||
RTC_FROM_HERE,
|
||||
[] { return std::make_unique<cricket::TestTurnCustomizer>(); });
|
||||
std::unique_ptr<cricket::TestTurnCustomizer> turn_customizer;
|
||||
SendTask(network_thread(), [&] {
|
||||
turn_customizer = std::make_unique<cricket::TestTurnCustomizer>();
|
||||
});
|
||||
turn_customizers_.push_back(std::move(turn_customizer));
|
||||
// Interactions with the turn customizer should be done on the network
|
||||
// thread.
|
||||
@ -1670,16 +1667,10 @@ class PeerConnectionIntegrationBaseTest : public ::testing::Test {
|
||||
// 0.
|
||||
void ExpectTurnCustomizerCountersIncremented(
|
||||
cricket::TestTurnCustomizer* turn_customizer) {
|
||||
unsigned int allow_channel_data_counter =
|
||||
network_thread()->Invoke<unsigned int>(
|
||||
RTC_FROM_HERE, [turn_customizer] {
|
||||
return turn_customizer->allow_channel_data_cnt_;
|
||||
});
|
||||
EXPECT_GT(allow_channel_data_counter, 0u);
|
||||
unsigned int modify_counter = network_thread()->Invoke<unsigned int>(
|
||||
RTC_FROM_HERE,
|
||||
[turn_customizer] { return turn_customizer->modify_cnt_; });
|
||||
EXPECT_GT(modify_counter, 0u);
|
||||
SendTask(network_thread(), [turn_customizer] {
|
||||
EXPECT_GT(turn_customizer->allow_channel_data_cnt_, 0u);
|
||||
EXPECT_GT(turn_customizer->modify_cnt_, 0u);
|
||||
});
|
||||
}
|
||||
|
||||
// Once called, SDP blobs and ICE candidates will be automatically signaled
|
||||
@ -1758,10 +1749,10 @@ class PeerConnectionIntegrationBaseTest : public ::testing::Test {
|
||||
}
|
||||
|
||||
void SetPortAllocatorFlags(uint32_t caller_flags, uint32_t callee_flags) {
|
||||
network_thread()->Invoke<void>(RTC_FROM_HERE, [this, caller_flags] {
|
||||
SendTask(network_thread(), [this, caller_flags] {
|
||||
caller()->port_allocator()->set_flags(caller_flags);
|
||||
});
|
||||
network_thread()->Invoke<void>(RTC_FROM_HERE, [this, callee_flags] {
|
||||
SendTask(network_thread(), [this, callee_flags] {
|
||||
callee()->port_allocator()->set_flags(callee_flags);
|
||||
});
|
||||
}
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
#include "api/video/recordable_encoded_frame.h"
|
||||
#include "api/video/test/mock_recordable_encoded_frame.h"
|
||||
#include "media/base/fake_media_engine.h"
|
||||
#include "rtc_base/location.h"
|
||||
#include "rtc_base/task_queue_for_test.h"
|
||||
#include "test/gmock.h"
|
||||
#include "test/gtest.h"
|
||||
|
||||
@ -77,8 +77,8 @@ class VideoRtpReceiverTest : public testing::Test {
|
||||
}
|
||||
|
||||
void SetMediaChannel(cricket::MediaChannel* media_channel) {
|
||||
worker_thread_->Invoke<void>(
|
||||
RTC_FROM_HERE, [&]() { receiver_->SetMediaChannel(media_channel); });
|
||||
SendTask(worker_thread_.get(),
|
||||
[&]() { receiver_->SetMediaChannel(media_channel); });
|
||||
}
|
||||
|
||||
webrtc::VideoTrackSourceInterface* Source() {
|
||||
@ -178,7 +178,7 @@ TEST_F(VideoRtpReceiverTest, BroadcastsEncodedFramesWhenEnabled) {
|
||||
EXPECT_CALL(sink, OnFrame).Times(2);
|
||||
MockRecordableEncodedFrame frame;
|
||||
broadcast(frame);
|
||||
worker_thread_->Invoke<void>(RTC_FROM_HERE, [&] { broadcast(frame); });
|
||||
SendTask(worker_thread_.get(), [&] { broadcast(frame); });
|
||||
}
|
||||
|
||||
TEST_F(VideoRtpReceiverTest, EnablesEncodedOutputOnChannelRestart) {
|
||||
|
||||
@ -26,8 +26,11 @@ namespace webrtc {
|
||||
|
||||
inline void SendTask(TaskQueueBase* task_queue,
|
||||
rtc::FunctionView<void()> task) {
|
||||
RTC_CHECK(!task_queue->IsCurrent())
|
||||
<< "Called SendTask to a queue from the same queue";
|
||||
if (task_queue->IsCurrent()) {
|
||||
task();
|
||||
return;
|
||||
}
|
||||
|
||||
rtc::Event event;
|
||||
absl::Cleanup cleanup = [&event] { event.Set(); };
|
||||
task_queue->PostTask([task, cleanup = std::move(cleanup)] { task(); });
|
||||
@ -53,6 +56,7 @@ class RTC_LOCKABLE TaskQueueForTest : public rtc::TaskQueue {
|
||||
// Wait for the completion of all tasks posted prior to the
|
||||
// WaitForPreviouslyPostedTasks() call.
|
||||
void WaitForPreviouslyPostedTasks() {
|
||||
RTC_DCHECK(!Get()->IsCurrent());
|
||||
// Post an empty task on the queue and wait for it to finish, to ensure
|
||||
// that all already posted tasks on the queue get executed.
|
||||
SendTask([]() {});
|
||||
|
||||
@ -102,6 +102,7 @@ rtc_library("network_emulation_unittest") {
|
||||
"../../rtc_base:gunit_helpers",
|
||||
"../../rtc_base:logging",
|
||||
"../../rtc_base:rtc_event",
|
||||
"../../rtc_base:task_queue_for_test",
|
||||
"../../rtc_base/synchronization:mutex",
|
||||
]
|
||||
}
|
||||
@ -131,6 +132,7 @@ if (rtc_include_tests && !build_with_chromium) {
|
||||
"../../rtc_base:gunit_helpers",
|
||||
"../../rtc_base:logging",
|
||||
"../../rtc_base:rtc_event",
|
||||
"../../rtc_base:task_queue_for_test",
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@ -15,6 +15,7 @@
|
||||
|
||||
#include "api/packet_socket_factory.h"
|
||||
#include "rtc_base/strings/string_builder.h"
|
||||
#include "rtc_base/task_queue_for_test.h"
|
||||
|
||||
namespace {
|
||||
|
||||
@ -121,7 +122,7 @@ EmulatedTURNServer::EmulatedTURNServer(std::unique_ptr<rtc::Thread> thread,
|
||||
: thread_(std::move(thread)), client_(client), peer_(peer) {
|
||||
ice_config_.username = "keso";
|
||||
ice_config_.password = "keso";
|
||||
thread_->Invoke<void>(RTC_FROM_HERE, [=]() {
|
||||
SendTask(thread_.get(), [=]() {
|
||||
RTC_DCHECK_RUN_ON(thread_.get());
|
||||
turn_server_ = std::make_unique<cricket::TurnServer>(thread_.get());
|
||||
turn_server_->set_realm(kTestRealm);
|
||||
@ -142,14 +143,14 @@ EmulatedTURNServer::EmulatedTURNServer(std::unique_ptr<rtc::Thread> thread,
|
||||
}
|
||||
|
||||
void EmulatedTURNServer::Stop() {
|
||||
thread_->Invoke<void>(RTC_FROM_HERE, [=]() {
|
||||
SendTask(thread_.get(), [=]() {
|
||||
RTC_DCHECK_RUN_ON(thread_.get());
|
||||
sockets_.clear();
|
||||
});
|
||||
}
|
||||
|
||||
EmulatedTURNServer::~EmulatedTURNServer() {
|
||||
thread_->Invoke<void>(RTC_FROM_HERE, [=]() {
|
||||
SendTask(thread_.get(), [=]() {
|
||||
RTC_DCHECK_RUN_ON(thread_.get());
|
||||
turn_server_.reset(nullptr);
|
||||
});
|
||||
|
||||
@ -26,6 +26,7 @@
|
||||
#include "pc/peer_connection_wrapper.h"
|
||||
#include "pc/test/mock_peer_connection_observers.h"
|
||||
#include "rtc_base/gunit.h"
|
||||
#include "rtc_base/task_queue_for_test.h"
|
||||
#include "test/gmock.h"
|
||||
#include "test/gtest.h"
|
||||
#include "test/network/network_emulation.h"
|
||||
@ -146,7 +147,7 @@ TEST(NetworkEmulationManagerPCTest, Run) {
|
||||
std::unique_ptr<MockPeerConnectionObserver> bob_observer =
|
||||
std::make_unique<MockPeerConnectionObserver>();
|
||||
|
||||
signaling_thread->Invoke<void>(RTC_FROM_HERE, [&]() {
|
||||
SendTask(signaling_thread.get(), [&]() {
|
||||
alice_pcf = CreatePeerConnectionFactory(signaling_thread.get(),
|
||||
alice_network->network_thread());
|
||||
alice_pc = CreatePeerConnection(alice_pcf, alice_observer.get(),
|
||||
@ -167,7 +168,7 @@ TEST(NetworkEmulationManagerPCTest, Run) {
|
||||
std::make_unique<PeerConnectionWrapper>(bob_pcf, bob_pc,
|
||||
std::move(bob_observer));
|
||||
|
||||
signaling_thread->Invoke<void>(RTC_FROM_HERE, [&]() {
|
||||
SendTask(signaling_thread.get(), [&]() {
|
||||
rtc::scoped_refptr<webrtc::AudioSourceInterface> source =
|
||||
alice_pcf->CreateAudioSource(cricket::AudioOptions());
|
||||
rtc::scoped_refptr<AudioTrackInterface> track =
|
||||
@ -256,7 +257,7 @@ TEST(NetworkEmulationManagerPCTest, RunTURN) {
|
||||
std::unique_ptr<MockPeerConnectionObserver> bob_observer =
|
||||
std::make_unique<MockPeerConnectionObserver>();
|
||||
|
||||
signaling_thread->Invoke<void>(RTC_FROM_HERE, [&]() {
|
||||
SendTask(signaling_thread.get(), [&]() {
|
||||
alice_pcf = CreatePeerConnectionFactory(signaling_thread.get(),
|
||||
alice_network->network_thread());
|
||||
alice_pc = CreatePeerConnection(
|
||||
@ -277,7 +278,7 @@ TEST(NetworkEmulationManagerPCTest, RunTURN) {
|
||||
std::make_unique<PeerConnectionWrapper>(bob_pcf, bob_pc,
|
||||
std::move(bob_observer));
|
||||
|
||||
signaling_thread->Invoke<void>(RTC_FROM_HERE, [&]() {
|
||||
SendTask(signaling_thread.get(), [&]() {
|
||||
rtc::scoped_refptr<webrtc::AudioSourceInterface> source =
|
||||
alice_pcf->CreateAudioSource(cricket::AudioOptions());
|
||||
rtc::scoped_refptr<AudioTrackInterface> track =
|
||||
|
||||
@ -20,6 +20,7 @@
|
||||
#include "rtc_base/event.h"
|
||||
#include "rtc_base/gunit.h"
|
||||
#include "rtc_base/synchronization/mutex.h"
|
||||
#include "rtc_base/task_queue_for_test.h"
|
||||
#include "test/gmock.h"
|
||||
#include "test/gtest.h"
|
||||
#include "test/network/network_emulation_manager.h"
|
||||
@ -209,10 +210,10 @@ TEST(NetworkEmulationManagerTest, Run) {
|
||||
for (uint64_t j = 0; j < 2; j++) {
|
||||
rtc::Socket* s1 = nullptr;
|
||||
rtc::Socket* s2 = nullptr;
|
||||
t1->Invoke<void>(RTC_FROM_HERE, [&] {
|
||||
SendTask(t1, [&] {
|
||||
s1 = t1->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM);
|
||||
});
|
||||
t2->Invoke<void>(RTC_FROM_HERE, [&] {
|
||||
SendTask(t2, [&] {
|
||||
s2 = t2->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM);
|
||||
});
|
||||
|
||||
@ -222,17 +223,17 @@ TEST(NetworkEmulationManagerTest, Run) {
|
||||
rtc::SocketAddress a1(alice_endpoint->GetPeerLocalAddress(), 0);
|
||||
rtc::SocketAddress a2(bob_endpoint->GetPeerLocalAddress(), 0);
|
||||
|
||||
t1->Invoke<void>(RTC_FROM_HERE, [&] {
|
||||
SendTask(t1, [&] {
|
||||
s1->Bind(a1);
|
||||
a1 = s1->GetLocalAddress();
|
||||
});
|
||||
t2->Invoke<void>(RTC_FROM_HERE, [&] {
|
||||
SendTask(t2, [&] {
|
||||
s2->Bind(a2);
|
||||
a2 = s2->GetLocalAddress();
|
||||
});
|
||||
|
||||
t1->Invoke<void>(RTC_FROM_HERE, [&] { s1->Connect(a2); });
|
||||
t2->Invoke<void>(RTC_FROM_HERE, [&] { s2->Connect(a1); });
|
||||
SendTask(t1, [&] { s1->Connect(a2); });
|
||||
SendTask(t2, [&] { s2->Connect(a1); });
|
||||
|
||||
for (uint64_t i = 0; i < 1000; i++) {
|
||||
t1->PostTask([&]() { s1->Send(data.data(), data.size()); });
|
||||
@ -244,8 +245,8 @@ TEST(NetworkEmulationManagerTest, Run) {
|
||||
EXPECT_EQ(r1.ReceivedCount(), 1000);
|
||||
EXPECT_EQ(r2.ReceivedCount(), 1000);
|
||||
|
||||
t1->Invoke<void>(RTC_FROM_HERE, [&] { delete s1; });
|
||||
t2->Invoke<void>(RTC_FROM_HERE, [&] { delete s2; });
|
||||
SendTask(t1, [&] { delete s1; });
|
||||
SendTask(t2, [&] { delete s2; });
|
||||
}
|
||||
|
||||
const int64_t single_packet_size = data.size() + kOverheadIpv4Udp;
|
||||
@ -363,10 +364,10 @@ TEST(NetworkEmulationManagerTest, DebugStatsCollectedInDebugMode) {
|
||||
for (uint64_t j = 0; j < 2; j++) {
|
||||
rtc::Socket* s1 = nullptr;
|
||||
rtc::Socket* s2 = nullptr;
|
||||
t1->Invoke<void>(RTC_FROM_HERE, [&] {
|
||||
SendTask(t1, [&] {
|
||||
s1 = t1->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM);
|
||||
});
|
||||
t2->Invoke<void>(RTC_FROM_HERE, [&] {
|
||||
SendTask(t2, [&] {
|
||||
s2 = t2->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM);
|
||||
});
|
||||
|
||||
@ -376,17 +377,17 @@ TEST(NetworkEmulationManagerTest, DebugStatsCollectedInDebugMode) {
|
||||
rtc::SocketAddress a1(alice_endpoint->GetPeerLocalAddress(), 0);
|
||||
rtc::SocketAddress a2(bob_endpoint->GetPeerLocalAddress(), 0);
|
||||
|
||||
t1->Invoke<void>(RTC_FROM_HERE, [&] {
|
||||
SendTask(t1, [&] {
|
||||
s1->Bind(a1);
|
||||
a1 = s1->GetLocalAddress();
|
||||
});
|
||||
t2->Invoke<void>(RTC_FROM_HERE, [&] {
|
||||
SendTask(t2, [&] {
|
||||
s2->Bind(a2);
|
||||
a2 = s2->GetLocalAddress();
|
||||
});
|
||||
|
||||
t1->Invoke<void>(RTC_FROM_HERE, [&] { s1->Connect(a2); });
|
||||
t2->Invoke<void>(RTC_FROM_HERE, [&] { s2->Connect(a1); });
|
||||
SendTask(t1, [&] { s1->Connect(a2); });
|
||||
SendTask(t2, [&] { s2->Connect(a1); });
|
||||
|
||||
for (uint64_t i = 0; i < 1000; i++) {
|
||||
t1->PostTask([&]() { s1->Send(data.data(), data.size()); });
|
||||
@ -398,8 +399,8 @@ TEST(NetworkEmulationManagerTest, DebugStatsCollectedInDebugMode) {
|
||||
EXPECT_EQ(r1.ReceivedCount(), 1000);
|
||||
EXPECT_EQ(r2.ReceivedCount(), 1000);
|
||||
|
||||
t1->Invoke<void>(RTC_FROM_HERE, [&] { delete s1; });
|
||||
t2->Invoke<void>(RTC_FROM_HERE, [&] { delete s2; });
|
||||
SendTask(t1, [&] { delete s1; });
|
||||
SendTask(t2, [&] { delete s2; });
|
||||
}
|
||||
|
||||
const int64_t single_packet_size = data.size() + kOverheadIpv4Udp;
|
||||
@ -465,12 +466,10 @@ TEST(NetworkEmulationManagerTest, ThroughputStats) {
|
||||
|
||||
rtc::Socket* s1 = nullptr;
|
||||
rtc::Socket* s2 = nullptr;
|
||||
t1->Invoke<void>(RTC_FROM_HERE, [&] {
|
||||
s1 = t1->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM);
|
||||
});
|
||||
t2->Invoke<void>(RTC_FROM_HERE, [&] {
|
||||
s2 = t2->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM);
|
||||
});
|
||||
SendTask(t1,
|
||||
[&] { s1 = t1->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM); });
|
||||
SendTask(t2,
|
||||
[&] { s2 = t2->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM); });
|
||||
|
||||
SocketReader r1(s1, t1);
|
||||
SocketReader r2(s2, t2);
|
||||
@ -478,17 +477,17 @@ TEST(NetworkEmulationManagerTest, ThroughputStats) {
|
||||
rtc::SocketAddress a1(alice_endpoint->GetPeerLocalAddress(), 0);
|
||||
rtc::SocketAddress a2(bob_endpoint->GetPeerLocalAddress(), 0);
|
||||
|
||||
t1->Invoke<void>(RTC_FROM_HERE, [&] {
|
||||
SendTask(t1, [&] {
|
||||
s1->Bind(a1);
|
||||
a1 = s1->GetLocalAddress();
|
||||
});
|
||||
t2->Invoke<void>(RTC_FROM_HERE, [&] {
|
||||
SendTask(t2, [&] {
|
||||
s2->Bind(a2);
|
||||
a2 = s2->GetLocalAddress();
|
||||
});
|
||||
|
||||
t1->Invoke<void>(RTC_FROM_HERE, [&] { s1->Connect(a2); });
|
||||
t2->Invoke<void>(RTC_FROM_HERE, [&] { s2->Connect(a1); });
|
||||
SendTask(t1, [&] { s1->Connect(a2); });
|
||||
SendTask(t2, [&] { s2->Connect(a1); });
|
||||
|
||||
// Send 11 packets, totalizing 1 second between the first and the last.
|
||||
const int kNumPacketsSent = 11;
|
||||
@ -518,8 +517,8 @@ TEST(NetworkEmulationManagerTest, ThroughputStats) {
|
||||
EXPECT_EQ(r1.ReceivedCount(), 11);
|
||||
EXPECT_EQ(r2.ReceivedCount(), 11);
|
||||
|
||||
t1->Invoke<void>(RTC_FROM_HERE, [&] { delete s1; });
|
||||
t2->Invoke<void>(RTC_FROM_HERE, [&] { delete s2; });
|
||||
SendTask(t1, [&] { delete s1; });
|
||||
SendTask(t2, [&] { delete s2; });
|
||||
}
|
||||
|
||||
// Testing that packets are delivered via all routes using a routing scheme as
|
||||
|
||||
@ -28,6 +28,7 @@
|
||||
#include "rtc_base/gunit.h"
|
||||
#include "rtc_base/numerics/safe_conversions.h"
|
||||
#include "rtc_base/strings/string_builder.h"
|
||||
#include "rtc_base/task_queue_for_test.h"
|
||||
#include "system_wrappers/include/cpu_info.h"
|
||||
#include "system_wrappers/include/field_trial.h"
|
||||
#include "test/field_trial.h"
|
||||
@ -345,18 +346,17 @@ void PeerConnectionE2EQualityTest::Run(RunParams run_params) {
|
||||
});
|
||||
|
||||
// Setup call.
|
||||
signaling_thread->Invoke<void>(RTC_FROM_HERE, [this, &run_params] {
|
||||
SetupCallOnSignalingThread(run_params);
|
||||
});
|
||||
SendTask(signaling_thread.get(),
|
||||
[this, &run_params] { SetupCallOnSignalingThread(run_params); });
|
||||
std::unique_ptr<SignalingInterceptor> signaling_interceptor =
|
||||
CreateSignalingInterceptor(run_params);
|
||||
// Connect peers.
|
||||
signaling_thread->Invoke<void>(RTC_FROM_HERE, [this, &signaling_interceptor] {
|
||||
SendTask(signaling_thread.get(), [this, &signaling_interceptor] {
|
||||
ExchangeOfferAnswer(signaling_interceptor.get());
|
||||
});
|
||||
WaitUntilIceCandidatesGathered(signaling_thread.get());
|
||||
|
||||
signaling_thread->Invoke<void>(RTC_FROM_HERE, [this, &signaling_interceptor] {
|
||||
SendTask(signaling_thread.get(), [this, &signaling_interceptor] {
|
||||
ExchangeIceCandidates(signaling_interceptor.get());
|
||||
});
|
||||
WaitUntilPeersAreConnected(signaling_thread.get());
|
||||
@ -388,8 +388,7 @@ void PeerConnectionE2EQualityTest::Run(RunParams run_params) {
|
||||
alice_->DetachAecDump();
|
||||
bob_->DetachAecDump();
|
||||
// Tear down the call.
|
||||
signaling_thread->Invoke<void>(RTC_FROM_HERE,
|
||||
[this] { TearDownCallOnSignalingThread(); });
|
||||
SendTask(signaling_thread.get(), [this] { TearDownCallOnSignalingThread(); });
|
||||
|
||||
Timestamp end_time = Now();
|
||||
RTC_LOG(LS_INFO) << "All peers are disconnected.";
|
||||
@ -597,9 +596,11 @@ void PeerConnectionE2EQualityTest::WaitUntilIceCandidatesGathered(
|
||||
rtc::Thread* signaling_thread) {
|
||||
ASSERT_TRUE(time_controller_.Wait(
|
||||
[&]() {
|
||||
return signaling_thread->Invoke<bool>(RTC_FROM_HERE, [&]() {
|
||||
return alice_->IsIceGatheringDone() && bob_->IsIceGatheringDone();
|
||||
bool result;
|
||||
SendTask(signaling_thread, [&]() {
|
||||
result = alice_->IsIceGatheringDone() && bob_->IsIceGatheringDone();
|
||||
});
|
||||
return result;
|
||||
},
|
||||
2 * kDefaultTimeout));
|
||||
}
|
||||
@ -609,14 +610,16 @@ void PeerConnectionE2EQualityTest::WaitUntilPeersAreConnected(
|
||||
// This means that ICE and DTLS are connected.
|
||||
alice_connected_ = time_controller_.Wait(
|
||||
[&]() {
|
||||
return signaling_thread->Invoke<bool>(
|
||||
RTC_FROM_HERE, [&]() { return alice_->IsIceConnected(); });
|
||||
bool result;
|
||||
SendTask(signaling_thread, [&] { result = alice_->IsIceConnected(); });
|
||||
return result;
|
||||
},
|
||||
kDefaultTimeout);
|
||||
bob_connected_ = time_controller_.Wait(
|
||||
[&]() {
|
||||
return signaling_thread->Invoke<bool>(
|
||||
RTC_FROM_HERE, [&]() { return bob_->IsIceConnected(); });
|
||||
bool result;
|
||||
SendTask(signaling_thread, [&] { result = bob_->IsIceConnected(); });
|
||||
return result;
|
||||
},
|
||||
kDefaultTimeout);
|
||||
}
|
||||
|
||||
@ -52,6 +52,7 @@ if (rtc_include_tests) {
|
||||
"../../rtc_base",
|
||||
"../../rtc_base:null_socket_server",
|
||||
"../../rtc_base:stringutils",
|
||||
"../../rtc_base:task_queue_for_test",
|
||||
"../../test:explicit_key_value_config",
|
||||
"../../test:scoped_key_value_config",
|
||||
"../logging:log_writer",
|
||||
|
||||
@ -17,6 +17,7 @@
|
||||
#include "pc/jsep_transport_controller.h"
|
||||
#include "pc/rtp_transport_internal.h"
|
||||
#include "pc/session_description.h"
|
||||
#include "rtc_base/task_queue_for_test.h"
|
||||
|
||||
namespace webrtc {
|
||||
class ScenarioIceConnectionImpl : public ScenarioIceConnection,
|
||||
@ -103,7 +104,7 @@ ScenarioIceConnectionImpl::ScenarioIceConnectionImpl(
|
||||
port_allocator_.get(),
|
||||
/*async_resolver_factory*/ nullptr,
|
||||
CreateJsepConfig())) {
|
||||
network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
|
||||
SendTask(network_thread_, [this] {
|
||||
RTC_DCHECK_RUN_ON(network_thread_);
|
||||
uint32_t flags = cricket::PORTALLOCATOR_DISABLE_TCP;
|
||||
port_allocator_->set_flags(port_allocator_->flags() | flags);
|
||||
@ -116,7 +117,7 @@ ScenarioIceConnectionImpl::ScenarioIceConnectionImpl(
|
||||
}
|
||||
|
||||
ScenarioIceConnectionImpl::~ScenarioIceConnectionImpl() {
|
||||
network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
|
||||
SendTask(network_thread_, [this] {
|
||||
RTC_DCHECK_RUN_ON(network_thread_);
|
||||
jsep_controller_.reset();
|
||||
port_allocator_.reset();
|
||||
|
||||
@ -64,6 +64,7 @@ if (rtc_include_tests) {
|
||||
"../../rtc_base:macromagic",
|
||||
"../../rtc_base:rtc_event",
|
||||
"../../rtc_base:rtc_task_queue",
|
||||
"../../rtc_base:task_queue_for_test",
|
||||
"../../rtc_base:threading",
|
||||
"../../rtc_base/synchronization:mutex",
|
||||
"../../rtc_base/task_utils:repeating_task",
|
||||
|
||||
@ -15,6 +15,7 @@
|
||||
|
||||
#include "rtc_base/event.h"
|
||||
#include "rtc_base/task_queue.h"
|
||||
#include "rtc_base/task_queue_for_test.h"
|
||||
#include "rtc_base/task_utils/repeating_task.h"
|
||||
#include "test/gmock.h"
|
||||
#include "test/gtest.h"
|
||||
@ -123,7 +124,7 @@ TEST(SimulatedTimeControllerTest, DelayTaskRunOnTime) {
|
||||
EXPECT_TRUE(delay_task_executed);
|
||||
}
|
||||
|
||||
TEST(SimulatedTimeControllerTest, ThreadYeildsOnInvoke) {
|
||||
TEST(SimulatedTimeControllerTest, ThreadYeildsOnSynchronousCall) {
|
||||
GlobalSimulatedTimeController sim(kStartTime);
|
||||
auto main_thread = sim.GetMainThread();
|
||||
auto t2 = sim.CreateThread("thread", nullptr);
|
||||
@ -131,7 +132,7 @@ TEST(SimulatedTimeControllerTest, ThreadYeildsOnInvoke) {
|
||||
// Posting a task to the main thread, this should not run until AdvanceTime is
|
||||
// called.
|
||||
main_thread->PostTask([&] { task_has_run = true; });
|
||||
t2->Invoke<void>(RTC_FROM_HERE, [] {
|
||||
SendTask(t2.get(), [] {
|
||||
rtc::Event yield_event;
|
||||
// Wait() triggers YieldExecution() which will runs message processing on
|
||||
// all threads that are not in the yielded set.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user