From 2bd81c62e13ef06ad46fa8abf85c9f85cbda4e7c Mon Sep 17 00:00:00 2001 From: Evan Shrubsole Date: Tue, 7 Jan 2025 11:37:48 +0000 Subject: [PATCH] Replace gunit macros with WaitUntil in test/network Bug: webrtc:381524905 Change-Id: Ice2888b04ec9105ce4e439a163b35378ae773e61 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/372302 Auto-Submit: Evan Shrubsole Reviewed-by: Mirko Bonadei Commit-Queue: Evan Shrubsole Cr-Commit-Position: refs/heads/main@{#43666} --- test/DEPS | 1 + test/network/BUILD.gn | 25 ++++++++ test/network/network_emulation_pc_unittest.cc | 59 +++++++++++++------ test/network/network_emulation_unittest.cc | 52 +++++++++++----- 4 files changed, 104 insertions(+), 33 deletions(-) diff --git a/test/DEPS b/test/DEPS index 1b0b340d96..a8b7df1557 100644 --- a/test/DEPS +++ b/test/DEPS @@ -70,6 +70,7 @@ specific_include_rules = { "+p2p/base/port_allocator.h", ], ".*network_emulation_pc_unittest\.cc": [ + "+p2p/base/port_allocator.h", "+pc/peer_connection_wrapper.h", "+pc/test/mock_peer_connection_observers.h", "+p2p/client/basic_port_allocator.h", diff --git a/test/network/BUILD.gn b/test/network/BUILD.gn index d1ba8f57fc..fa99fd2aa7 100644 --- a/test/network/BUILD.gn +++ b/test/network/BUILD.gn @@ -99,23 +99,32 @@ if (rtc_include_tests && !build_with_chromium) { sources = [ "network_emulation_pc_unittest.cc" ] deps = [ ":emulated_network", + "..:wait_until", "../:test_support", "../..//test/network:simulated_network", + "../../api:audio_options_api", "../../api:enable_media_with_defaults", "../../api:libjingle_peerconnection_api", + "../../api:media_stream_interface", + "../../api:network_emulation_manager_api", + "../../api:packet_socket_factory", + "../../api:rtc_error_matchers", "../../api:scoped_refptr", "../../api:simulated_network_api", "../../api/rtc_event_log:rtc_event_log_factory", "../../api/task_queue:default_task_queue_factory", + "../../api/test/network_emulation", "../../api/transport:field_trial_based_config", "../../media:rtc_audio_video", "../../modules/audio_device:test_audio_device_module", "../../p2p:basic_packet_socket_factory", "../../p2p:basic_port_allocator", + "../../p2p:port_allocator", "../../pc:pc_test_utils", "../../pc:peerconnection_wrapper", "../../rtc_base:gunit_helpers", "../../rtc_base:logging", + "../../rtc_base:network", "../../rtc_base:rtc_event", "../../rtc_base:task_queue_for_test", ] @@ -146,21 +155,37 @@ if (rtc_include_tests) { sources = [ "network_emulation_unittest.cc" ] deps = [ ":emulated_network", + "..:wait_until", "../:test_support", "../..//test/network:simulated_network", "../../api:create_time_controller", + "../../api:network_emulation_manager_api", + "../../api:rtc_error_matchers", "../../api:simulated_network_api", "../../api/task_queue:task_queue", + "../../api/test/network_emulation", "../../api/transport:ecn_marking", + "../../api/transport:stun_types", + "../../api/units:data_size", "../../api/units:time_delta", "../../api/units:timestamp", "../../rtc_base:buffer", + "../../rtc_base:byte_buffer", + "../../rtc_base:checks", + "../../rtc_base:copy_on_write_buffer", "../../rtc_base:gunit_helpers", + "../../rtc_base:ip_address", "../../rtc_base:logging", + "../../rtc_base:macromagic", + "../../rtc_base:net_helpers", "../../rtc_base:rtc_event", "../../rtc_base:socket", + "../../rtc_base:socket_address", "../../rtc_base:task_queue_for_test", + "../../rtc_base:threading", "../../rtc_base/synchronization:mutex", + "../../rtc_base/third_party/sigslot", + "//third_party/abseil-cpp/absl/functional:any_invocable", ] } diff --git a/test/network/network_emulation_pc_unittest.cc b/test/network/network_emulation_pc_unittest.cc index 61fb47cb8f..298e9534f9 100644 --- a/test/network/network_emulation_pc_unittest.cc +++ b/test/network/network_emulation_pc_unittest.cc @@ -8,34 +8,45 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include #include +#include +#include +#include "api/audio_options.h" #include "api/enable_media_with_defaults.h" +#include "api/jsep.h" +#include "api/media_stream_interface.h" +#include "api/packet_socket_factory.h" #include "api/peer_connection_interface.h" #include "api/rtc_event_log/rtc_event_log_factory.h" #include "api/scoped_refptr.h" #include "api/task_queue/default_task_queue_factory.h" +#include "api/test/network_emulation/network_emulation_interfaces.h" +#include "api/test/network_emulation_manager.h" +#include "api/test/rtc_error_matchers.h" +#include "api/test/simulated_network.h" #include "api/transport/field_trial_based_config.h" -#include "media/engine/webrtc_media_engine.h" #include "modules/audio_device/include/test_audio_device.h" -#include "p2p/base/basic_packet_socket_factory.h" +#include "p2p/base/port_allocator.h" #include "p2p/client/basic_port_allocator.h" #include "pc/peer_connection_wrapper.h" #include "pc/test/mock_peer_connection_observers.h" -#include "rtc_base/gunit.h" +#include "rtc_base/network.h" #include "rtc_base/task_queue_for_test.h" #include "test/gmock.h" #include "test/gtest.h" #include "test/network/network_emulation.h" #include "test/network/network_emulation_manager.h" #include "test/network/simulated_network.h" +#include "test/wait_until.h" namespace webrtc { namespace test { namespace { -constexpr int kDefaultTimeoutMs = 1000; +using ::testing::Eq; +using ::testing::IsTrue; + constexpr int kMaxAptitude = 32000; constexpr int kSamplingFrequency = 48000; constexpr char kSignalThreadName[] = "signaling_thread"; @@ -171,11 +182,14 @@ TEST(NetworkEmulationManagerPCTest, Run) { // Connect peers. ASSERT_TRUE(alice->ExchangeOfferAnswerWith(bob.get())); // Do the SDP negotiation, and also exchange ice candidates. - ASSERT_TRUE_WAIT( - alice->signaling_state() == PeerConnectionInterface::kStable, - kDefaultTimeoutMs); - ASSERT_TRUE_WAIT(alice->IsIceGatheringDone(), kDefaultTimeoutMs); - ASSERT_TRUE_WAIT(bob->IsIceGatheringDone(), kDefaultTimeoutMs); + ASSERT_THAT(WaitUntil([&] { return alice->signaling_state(); }, + Eq(PeerConnectionInterface::kStable)), + IsRtcOk()); + ASSERT_THAT( + WaitUntil([&] { return alice->IsIceGatheringDone(); }, IsTrue()), + IsRtcOk()); + ASSERT_THAT(WaitUntil([&] { return bob->IsIceGatheringDone(); }, IsTrue()), + IsRtcOk()); // Connect an ICE candidate pairs. ASSERT_TRUE( @@ -183,8 +197,10 @@ TEST(NetworkEmulationManagerPCTest, Run) { ASSERT_TRUE( AddIceCandidates(alice.get(), bob->observer()->GetAllCandidates())); // This means that ICE and DTLS are connected. - ASSERT_TRUE_WAIT(bob->IsIceConnected(), kDefaultTimeoutMs); - ASSERT_TRUE_WAIT(alice->IsIceConnected(), kDefaultTimeoutMs); + ASSERT_THAT(WaitUntil([&] { return bob->IsIceConnected(); }, IsTrue()), + IsRtcOk()); + ASSERT_THAT(WaitUntil([&] { return alice->IsIceConnected(); }, IsTrue()), + IsRtcOk()); // Close peer connections alice->pc()->Close(); @@ -281,11 +297,14 @@ TEST(NetworkEmulationManagerPCTest, RunTURN) { // Connect peers. ASSERT_TRUE(alice->ExchangeOfferAnswerWith(bob.get())); // Do the SDP negotiation, and also exchange ice candidates. - ASSERT_TRUE_WAIT( - alice->signaling_state() == PeerConnectionInterface::kStable, - kDefaultTimeoutMs); - ASSERT_TRUE_WAIT(alice->IsIceGatheringDone(), kDefaultTimeoutMs); - ASSERT_TRUE_WAIT(bob->IsIceGatheringDone(), kDefaultTimeoutMs); + ASSERT_THAT(WaitUntil([&] { return alice->signaling_state(); }, + Eq(PeerConnectionInterface::kStable)), + IsRtcOk()); + ASSERT_THAT( + WaitUntil([&] { return alice->IsIceGatheringDone(); }, IsTrue()), + IsRtcOk()); + ASSERT_THAT(WaitUntil([&] { return bob->IsIceGatheringDone(); }, IsTrue()), + IsRtcOk()); // Connect an ICE candidate pairs. ASSERT_TRUE( @@ -293,8 +312,10 @@ TEST(NetworkEmulationManagerPCTest, RunTURN) { ASSERT_TRUE( AddIceCandidates(alice.get(), bob->observer()->GetAllCandidates())); // This means that ICE and DTLS are connected. - ASSERT_TRUE_WAIT(bob->IsIceConnected(), kDefaultTimeoutMs); - ASSERT_TRUE_WAIT(alice->IsIceConnected(), kDefaultTimeoutMs); + ASSERT_THAT(WaitUntil([&] { return bob->IsIceConnected(); }, IsTrue()), + IsRtcOk()); + ASSERT_THAT(WaitUntil([&] { return alice->IsIceConnected(); }, IsTrue()), + IsRtcOk()); // Close peer connections alice->pc()->Close(); diff --git a/test/network/network_emulation_unittest.cc b/test/network/network_emulation_unittest.cc index 610dc17825..d8455b937f 100644 --- a/test/network/network_emulation_unittest.cc +++ b/test/network/network_emulation_unittest.cc @@ -11,32 +11,52 @@ #include "test/network/network_emulation.h" #include +#include #include #include #include +#include #include +#include +#include +#include +#include "absl/functional/any_invocable.h" #include "api/task_queue/task_queue_base.h" -#include "api/test/create_time_controller.h" +#include "api/test/network_emulation/network_emulation_interfaces.h" +#include "api/test/network_emulation_manager.h" +#include "api/test/rtc_error_matchers.h" #include "api/test/simulated_network.h" #include "api/transport/ecn_marking.h" +#include "api/transport/stun.h" +#include "api/units/data_size.h" #include "api/units/time_delta.h" #include "api/units/timestamp.h" #include "rtc_base/buffer.h" -#include "rtc_base/gunit.h" +#include "rtc_base/byte_buffer.h" +#include "rtc_base/checks.h" +#include "rtc_base/copy_on_write_buffer.h" +#include "rtc_base/ip_address.h" +#include "rtc_base/net_helpers.h" #include "rtc_base/socket.h" +#include "rtc_base/socket_address.h" #include "rtc_base/synchronization/mutex.h" #include "rtc_base/task_queue_for_test.h" +#include "rtc_base/third_party/sigslot/sigslot.h" +#include "rtc_base/thread.h" +#include "rtc_base/thread_annotations.h" #include "test/gmock.h" #include "test/gtest.h" #include "test/network/network_emulation_manager.h" #include "test/network/simulated_network.h" +#include "test/wait_until.h" namespace webrtc { namespace test { namespace { using ::testing::ElementsAreArray; +using ::testing::Eq; constexpr TimeDelta kNetworkPacketWaitTimeout = TimeDelta::Millis(100); constexpr TimeDelta kStatsWaitTimeout = TimeDelta::Seconds(1); @@ -359,9 +379,10 @@ TEST(NetworkEmulationManagerTest, Run) { received_stats_count++; }); - ASSERT_EQ_SIMULATED_WAIT(received_stats_count.load(), 2, - kStatsWaitTimeout.ms(), - *network_manager.time_controller()); + ASSERT_THAT(WaitUntil([&] { return received_stats_count.load(); }, Eq(2), + {.timeout = kStatsWaitTimeout, + .clock = network_manager.time_controller()}), + IsRtcOk()); } TEST(NetworkEmulationManagerTest, EcnMarkingIsPropagated) { @@ -440,9 +461,10 @@ TEST(NetworkEmulationManagerTest, EcnMarkingIsPropagated) { EXPECT_EQ(st.overall_incoming_stats.ecn_count.not_ect(), 0); ++received_stats_count; }); - ASSERT_EQ_SIMULATED_WAIT(received_stats_count.load(), 2, - kStatsWaitTimeout.ms(), - *network_manager.time_controller()); + ASSERT_THAT(WaitUntil([&] { return received_stats_count.load(); }, Eq(2), + {.timeout = kStatsWaitTimeout, + .clock = network_manager.time_controller()}), + IsRtcOk()); SendTask(t1, [&] { delete s1; }); SendTask(t2, [&] { delete s2; }); @@ -544,9 +566,10 @@ TEST(NetworkEmulationManagerTest, DebugStatsCollectedInDebugMode) { received_stats_count++; }); - ASSERT_EQ_SIMULATED_WAIT(received_stats_count.load(), 1, - kStatsWaitTimeout.ms(), - *network_manager.time_controller()); + ASSERT_THAT(WaitUntil([&] { return received_stats_count.load(); }, Eq(1), + {.timeout = kStatsWaitTimeout, + .clock = network_manager.time_controller()}), + IsRtcOk()); } TEST(NetworkEmulationManagerTest, ThroughputStats) { @@ -622,9 +645,10 @@ TEST(NetworkEmulationManagerTest, ThroughputStats) { received_stats_count++; }); - ASSERT_EQ_SIMULATED_WAIT(received_stats_count.load(), 1, - kStatsWaitTimeout.ms(), - *network_manager.time_controller()); + ASSERT_THAT(WaitUntil([&] { return received_stats_count.load(); }, Eq(1), + {.timeout = kStatsWaitTimeout, + .clock = network_manager.time_controller()}), + IsRtcOk()); EXPECT_EQ(r1.ReceivedCount(), 11); EXPECT_EQ(r2.ReceivedCount(), 11);