From 462640e04b33708658ccd1ebd8d8c84a6f54dc1c Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Tue, 11 Feb 2025 16:27:56 +0100 Subject: [PATCH] Update peer scenario test helpers to newer emulation network api To minimize direct construction of BasicPortAllocator, network emulation manager api is changed to push toward injecting network dependencies to PeerConnectionFactory and let it create PortAllocator Bug: webrtc:42232556 Change-Id: I0c86d797a97d543c2f033286281dc1145d4ef51b Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/376880 Commit-Queue: Danil Chapovalov Reviewed-by: Per Kjellander Cr-Commit-Position: refs/heads/main@{#43872} --- test/peer_scenario/BUILD.gn | 21 ++++++---- test/peer_scenario/peer_scenario_client.cc | 49 ++++++++++++++++++---- test/peer_scenario/scenario_connection.cc | 13 ++++-- 3 files changed, 63 insertions(+), 20 deletions(-) diff --git a/test/peer_scenario/BUILD.gn b/test/peer_scenario/BUILD.gn index 335f7f322d..41bcd65f0b 100644 --- a/test/peer_scenario/BUILD.gn +++ b/test/peer_scenario/BUILD.gn @@ -26,26 +26,29 @@ if (rtc_include_tests) { "..:fake_video_codecs", "..:fileutils", "..:frame_generator_capturer", + "..:scoped_key_value_config", "..:test_support", "../../api:array_view", + "../../api:audio_options_api", "../../api:candidate", "../../api:create_time_controller", "../../api:libjingle_peerconnection_api", + "../../api:make_ref_counted", + "../../api:media_stream_interface", "../../api:network_emulation_manager_api", - "../../api:rtc_stats_api", + "../../api:rtc_error", "../../api:scoped_refptr", "../../api:sequence_checker", "../../api:time_controller", - "../../api/audio_codecs:builtin_audio_decoder_factory", - "../../api/audio_codecs:builtin_audio_encoder_factory", "../../api/environment", "../../api/rtc_event_log:rtc_event_log_factory", - "../../api/task_queue:default_task_queue_factory", "../../api/test/network_emulation", "../../api/transport:datagram_transport_interface", "../../api/transport:enums", "../../api/transport:field_trial_based_config", + "../../api/video:video_frame", "../../api/video_codecs:scalability_mode", + "../../api/video_codecs:video_codecs_api", "../../api/video_codecs:video_decoder_factory_template", "../../api/video_codecs:video_decoder_factory_template_dav1d_adapter", "../../api/video_codecs:video_decoder_factory_template_libvpx_vp8_adapter", @@ -59,31 +62,33 @@ if (rtc_include_tests) { "../../call:payload_type_picker", "../../call:rtp_interfaces", "../../call:rtp_receiver", - "../../media:rtc_audio_video", + "../../media:media_constants", "../../media:rtp_utils", "../../modules/audio_device:test_audio_device_module", "../../modules/rtp_rtcp:rtp_rtcp_format", + "../../p2p:basic_packet_socket_factory", "../../p2p:basic_port_allocator", "../../p2p:dtls_transport_internal", "../../p2p:p2p_constants", "../../p2p:port_allocator", "../../p2p:transport_description", - "../../pc:channel", "../../pc:dtls_transport", "../../pc:jsep_transport_controller", "../../pc:pc_test_utils", "../../pc:rtp_transport_internal", "../../pc:session_description", "../../rtc_base:checks", + "../../rtc_base:copy_on_write_buffer", "../../rtc_base:crypto_random", + "../../rtc_base:logging", "../../rtc_base:macromagic", + "../../rtc_base:network", "../../rtc_base:null_socket_server", "../../rtc_base:ssl", "../../rtc_base:stringutils", "../../rtc_base:task_queue_for_test", + "../../rtc_base:threading", "../../rtc_base/third_party/sigslot", - "../../test:explicit_key_value_config", - "../../test:scoped_key_value_config", "../logging:log_writer", "../network:emulated_network", "../scenario", diff --git a/test/peer_scenario/peer_scenario_client.cc b/test/peer_scenario/peer_scenario_client.cc index 2a73cf2636..543161669a 100644 --- a/test/peer_scenario/peer_scenario_client.cc +++ b/test/peer_scenario/peer_scenario_client.cc @@ -9,37 +9,68 @@ */ #include "test/peer_scenario/peer_scenario_client.h" +#include +#include #include +#include #include +#include #include +#include #include "absl/container/inlined_vector.h" #include "absl/memory/memory.h" -#include "api/audio_codecs/builtin_audio_decoder_factory.h" -#include "api/audio_codecs/builtin_audio_encoder_factory.h" +#include "api/audio_options.h" +#include "api/candidate.h" +#include "api/data_channel_interface.h" #include "api/environment/environment.h" +#include "api/jsep.h" +#include "api/make_ref_counted.h" +#include "api/media_stream_interface.h" +#include "api/peer_connection_interface.h" +#include "api/rtc_error.h" #include "api/rtc_event_log/rtc_event_log_factory.h" -#include "api/task_queue/default_task_queue_factory.h" +#include "api/rtp_receiver_interface.h" +#include "api/rtp_transceiver_interface.h" +#include "api/scoped_refptr.h" +#include "api/sequence_checker.h" +#include "api/set_local_description_observer_interface.h" +#include "api/set_remote_description_observer_interface.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/transport/field_trial_based_config.h" +#include "api/video/video_frame.h" +#include "api/video/video_sink_interface.h" +#include "api/video/video_source_interface.h" #include "api/video_codecs/scalability_mode.h" +#include "api/video_codecs/sdp_video_format.h" +#include "api/video_codecs/video_decoder.h" +#include "api/video_codecs/video_decoder_factory.h" #include "api/video_codecs/video_decoder_factory_template.h" #include "api/video_codecs/video_decoder_factory_template_dav1d_adapter.h" #include "api/video_codecs/video_decoder_factory_template_libvpx_vp8_adapter.h" #include "api/video_codecs/video_decoder_factory_template_libvpx_vp9_adapter.h" #include "api/video_codecs/video_decoder_factory_template_open_h264_adapter.h" +#include "api/video_codecs/video_encoder.h" +#include "api/video_codecs/video_encoder_factory.h" #include "api/video_codecs/video_encoder_factory_template.h" #include "api/video_codecs/video_encoder_factory_template_libaom_av1_adapter.h" #include "api/video_codecs/video_encoder_factory_template_libvpx_vp8_adapter.h" #include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h" #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h" -#include "media/engine/webrtc_media_engine.h" +#include "media/base/media_constants.h" #include "modules/audio_device/include/test_audio_device.h" -#include "p2p/client/basic_port_allocator.h" +#include "p2p/base/port_allocator.h" +#include "pc/test/frame_generator_capturer_video_track_source.h" +#include "rtc_base/checks.h" +#include "rtc_base/logging.h" +#include "rtc_base/thread.h" #include "test/create_frame_generator_capturer.h" #include "test/fake_decoder.h" #include "test/fake_vp8_encoder.h" #include "test/frame_generator_capturer.h" +#include "test/logging/log_writer.h" namespace webrtc { namespace test { @@ -252,6 +283,8 @@ PeerScenarioClient::PeerScenarioClient( pcf_deps.network_thread = manager->network_thread(); pcf_deps.signaling_thread = signaling_thread_; pcf_deps.worker_thread = worker_thread_.get(); + pcf_deps.socket_factory = manager->socket_factory(); + pcf_deps.network_manager = manager->ReleaseNetworkManager(); pcf_deps.task_queue_factory = net->time_controller()->CreateTaskQueueFactory(); pcf_deps.event_log_factory = std::make_unique(); @@ -293,10 +326,8 @@ PeerScenarioClient::PeerScenarioClient( pc_factory_->SetOptions(pc_options); PeerConnectionDependencies pc_deps(observer_.get()); - pc_deps.allocator = std::make_unique( - manager->network_manager(), manager->packet_socket_factory()); - pc_deps.allocator->set_flags(pc_deps.allocator->flags() | - cricket::PORTALLOCATOR_DISABLE_TCP); + config.rtc_config.port_allocator_config.flags |= + cricket::PORTALLOCATOR_DISABLE_TCP; peer_connection_ = pc_factory_ ->CreatePeerConnectionOrError(config.rtc_config, std::move(pc_deps)) diff --git a/test/peer_scenario/scenario_connection.cc b/test/peer_scenario/scenario_connection.cc index 22c52c0a91..3084994d2c 100644 --- a/test/peer_scenario/scenario_connection.cc +++ b/test/peer_scenario/scenario_connection.cc @@ -31,6 +31,7 @@ #include "call/rtp_packet_sink_interface.h" #include "media/base/rtp_utils.h" #include "modules/rtp_rtcp/source/rtp_packet_received.h" +#include "p2p/base/basic_packet_socket_factory.h" #include "p2p/base/p2p_constants.h" #include "p2p/base/port_allocator.h" #include "p2p/base/transport_description.h" @@ -41,7 +42,9 @@ #include "pc/rtp_transport_internal.h" #include "pc/session_description.h" #include "rtc_base/checks.h" +#include "rtc_base/copy_on_write_buffer.h" #include "rtc_base/crypto_random.h" +#include "rtc_base/network.h" #include "rtc_base/rtc_certificate.h" #include "rtc_base/ssl_fingerprint.h" #include "rtc_base/ssl_identity.h" @@ -93,6 +96,8 @@ class ScenarioIceConnectionImpl : public ScenarioIceConnection, RTC_GUARDED_BY(network_thread_); cricket::TransportDescription const transport_description_ RTC_GUARDED_BY(signaling_thread_); + std::unique_ptr network_manager_; + rtc::BasicPacketSocketFactory packet_socket_factory_; std::unique_ptr port_allocator_ RTC_GUARDED_BY(network_thread_); PayloadTypePicker payload_type_picker_; @@ -131,9 +136,11 @@ ScenarioIceConnectionImpl::ScenarioIceConnectionImpl( cricket::ConnectionRole::CONNECTIONROLE_PASSIVE, rtc::SSLFingerprint::CreateFromCertificate(*certificate_.get()) .get()), - port_allocator_( - new cricket::BasicPortAllocator(manager_->network_manager(), - manager_->packet_socket_factory())), + network_manager_(manager_->ReleaseNetworkManager()), + packet_socket_factory_(manager_->socket_factory()), + port_allocator_(std::make_unique( + network_manager_.get(), + &packet_socket_factory_)), jsep_controller_( new JsepTransportController(env, network_thread_,