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 <danilchap@webrtc.org>
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#43872}
This commit is contained in:
Danil Chapovalov 2025-02-11 16:27:56 +01:00 committed by WebRTC LUCI CQ
parent 221013f316
commit 462640e04b
3 changed files with 63 additions and 20 deletions

View File

@ -26,26 +26,29 @@ if (rtc_include_tests) {
"..:fake_video_codecs", "..:fake_video_codecs",
"..:fileutils", "..:fileutils",
"..:frame_generator_capturer", "..:frame_generator_capturer",
"..:scoped_key_value_config",
"..:test_support", "..:test_support",
"../../api:array_view", "../../api:array_view",
"../../api:audio_options_api",
"../../api:candidate", "../../api:candidate",
"../../api:create_time_controller", "../../api:create_time_controller",
"../../api:libjingle_peerconnection_api", "../../api:libjingle_peerconnection_api",
"../../api:make_ref_counted",
"../../api:media_stream_interface",
"../../api:network_emulation_manager_api", "../../api:network_emulation_manager_api",
"../../api:rtc_stats_api", "../../api:rtc_error",
"../../api:scoped_refptr", "../../api:scoped_refptr",
"../../api:sequence_checker", "../../api:sequence_checker",
"../../api:time_controller", "../../api:time_controller",
"../../api/audio_codecs:builtin_audio_decoder_factory",
"../../api/audio_codecs:builtin_audio_encoder_factory",
"../../api/environment", "../../api/environment",
"../../api/rtc_event_log:rtc_event_log_factory", "../../api/rtc_event_log:rtc_event_log_factory",
"../../api/task_queue:default_task_queue_factory",
"../../api/test/network_emulation", "../../api/test/network_emulation",
"../../api/transport:datagram_transport_interface", "../../api/transport:datagram_transport_interface",
"../../api/transport:enums", "../../api/transport:enums",
"../../api/transport:field_trial_based_config", "../../api/transport:field_trial_based_config",
"../../api/video:video_frame",
"../../api/video_codecs:scalability_mode", "../../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",
"../../api/video_codecs:video_decoder_factory_template_dav1d_adapter", "../../api/video_codecs:video_decoder_factory_template_dav1d_adapter",
"../../api/video_codecs:video_decoder_factory_template_libvpx_vp8_adapter", "../../api/video_codecs:video_decoder_factory_template_libvpx_vp8_adapter",
@ -59,31 +62,33 @@ if (rtc_include_tests) {
"../../call:payload_type_picker", "../../call:payload_type_picker",
"../../call:rtp_interfaces", "../../call:rtp_interfaces",
"../../call:rtp_receiver", "../../call:rtp_receiver",
"../../media:rtc_audio_video", "../../media:media_constants",
"../../media:rtp_utils", "../../media:rtp_utils",
"../../modules/audio_device:test_audio_device_module", "../../modules/audio_device:test_audio_device_module",
"../../modules/rtp_rtcp:rtp_rtcp_format", "../../modules/rtp_rtcp:rtp_rtcp_format",
"../../p2p:basic_packet_socket_factory",
"../../p2p:basic_port_allocator", "../../p2p:basic_port_allocator",
"../../p2p:dtls_transport_internal", "../../p2p:dtls_transport_internal",
"../../p2p:p2p_constants", "../../p2p:p2p_constants",
"../../p2p:port_allocator", "../../p2p:port_allocator",
"../../p2p:transport_description", "../../p2p:transport_description",
"../../pc:channel",
"../../pc:dtls_transport", "../../pc:dtls_transport",
"../../pc:jsep_transport_controller", "../../pc:jsep_transport_controller",
"../../pc:pc_test_utils", "../../pc:pc_test_utils",
"../../pc:rtp_transport_internal", "../../pc:rtp_transport_internal",
"../../pc:session_description", "../../pc:session_description",
"../../rtc_base:checks", "../../rtc_base:checks",
"../../rtc_base:copy_on_write_buffer",
"../../rtc_base:crypto_random", "../../rtc_base:crypto_random",
"../../rtc_base:logging",
"../../rtc_base:macromagic", "../../rtc_base:macromagic",
"../../rtc_base:network",
"../../rtc_base:null_socket_server", "../../rtc_base:null_socket_server",
"../../rtc_base:ssl", "../../rtc_base:ssl",
"../../rtc_base:stringutils", "../../rtc_base:stringutils",
"../../rtc_base:task_queue_for_test", "../../rtc_base:task_queue_for_test",
"../../rtc_base:threading",
"../../rtc_base/third_party/sigslot", "../../rtc_base/third_party/sigslot",
"../../test:explicit_key_value_config",
"../../test:scoped_key_value_config",
"../logging:log_writer", "../logging:log_writer",
"../network:emulated_network", "../network:emulated_network",
"../scenario", "../scenario",

View File

@ -9,37 +9,68 @@
*/ */
#include "test/peer_scenario/peer_scenario_client.h" #include "test/peer_scenario/peer_scenario_client.h"
#include <cstdint>
#include <functional>
#include <limits> #include <limits>
#include <map>
#include <memory> #include <memory>
#include <string>
#include <utility> #include <utility>
#include <vector>
#include "absl/container/inlined_vector.h" #include "absl/container/inlined_vector.h"
#include "absl/memory/memory.h" #include "absl/memory/memory.h"
#include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_options.h"
#include "api/audio_codecs/builtin_audio_encoder_factory.h" #include "api/candidate.h"
#include "api/data_channel_interface.h"
#include "api/environment/environment.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/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/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/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/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.h"
#include "api/video_codecs/video_decoder_factory_template_dav1d_adapter.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_vp8_adapter.h"
#include "api/video_codecs/video_decoder_factory_template_libvpx_vp9_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_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.h"
#include "api/video_codecs/video_encoder_factory_template_libaom_av1_adapter.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_vp8_adapter.h"
#include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_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 "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 "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/create_frame_generator_capturer.h"
#include "test/fake_decoder.h" #include "test/fake_decoder.h"
#include "test/fake_vp8_encoder.h" #include "test/fake_vp8_encoder.h"
#include "test/frame_generator_capturer.h" #include "test/frame_generator_capturer.h"
#include "test/logging/log_writer.h"
namespace webrtc { namespace webrtc {
namespace test { namespace test {
@ -252,6 +283,8 @@ PeerScenarioClient::PeerScenarioClient(
pcf_deps.network_thread = manager->network_thread(); pcf_deps.network_thread = manager->network_thread();
pcf_deps.signaling_thread = signaling_thread_; pcf_deps.signaling_thread = signaling_thread_;
pcf_deps.worker_thread = worker_thread_.get(); 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 = pcf_deps.task_queue_factory =
net->time_controller()->CreateTaskQueueFactory(); net->time_controller()->CreateTaskQueueFactory();
pcf_deps.event_log_factory = std::make_unique<RtcEventLogFactory>(); pcf_deps.event_log_factory = std::make_unique<RtcEventLogFactory>();
@ -293,10 +326,8 @@ PeerScenarioClient::PeerScenarioClient(
pc_factory_->SetOptions(pc_options); pc_factory_->SetOptions(pc_options);
PeerConnectionDependencies pc_deps(observer_.get()); PeerConnectionDependencies pc_deps(observer_.get());
pc_deps.allocator = std::make_unique<cricket::BasicPortAllocator>( config.rtc_config.port_allocator_config.flags |=
manager->network_manager(), manager->packet_socket_factory()); cricket::PORTALLOCATOR_DISABLE_TCP;
pc_deps.allocator->set_flags(pc_deps.allocator->flags() |
cricket::PORTALLOCATOR_DISABLE_TCP);
peer_connection_ = peer_connection_ =
pc_factory_ pc_factory_
->CreatePeerConnectionOrError(config.rtc_config, std::move(pc_deps)) ->CreatePeerConnectionOrError(config.rtc_config, std::move(pc_deps))

View File

@ -31,6 +31,7 @@
#include "call/rtp_packet_sink_interface.h" #include "call/rtp_packet_sink_interface.h"
#include "media/base/rtp_utils.h" #include "media/base/rtp_utils.h"
#include "modules/rtp_rtcp/source/rtp_packet_received.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/p2p_constants.h"
#include "p2p/base/port_allocator.h" #include "p2p/base/port_allocator.h"
#include "p2p/base/transport_description.h" #include "p2p/base/transport_description.h"
@ -41,7 +42,9 @@
#include "pc/rtp_transport_internal.h" #include "pc/rtp_transport_internal.h"
#include "pc/session_description.h" #include "pc/session_description.h"
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/copy_on_write_buffer.h"
#include "rtc_base/crypto_random.h" #include "rtc_base/crypto_random.h"
#include "rtc_base/network.h"
#include "rtc_base/rtc_certificate.h" #include "rtc_base/rtc_certificate.h"
#include "rtc_base/ssl_fingerprint.h" #include "rtc_base/ssl_fingerprint.h"
#include "rtc_base/ssl_identity.h" #include "rtc_base/ssl_identity.h"
@ -93,6 +96,8 @@ class ScenarioIceConnectionImpl : public ScenarioIceConnection,
RTC_GUARDED_BY(network_thread_); RTC_GUARDED_BY(network_thread_);
cricket::TransportDescription const transport_description_ cricket::TransportDescription const transport_description_
RTC_GUARDED_BY(signaling_thread_); RTC_GUARDED_BY(signaling_thread_);
std::unique_ptr<rtc::NetworkManager> network_manager_;
rtc::BasicPacketSocketFactory packet_socket_factory_;
std::unique_ptr<cricket::BasicPortAllocator> port_allocator_ std::unique_ptr<cricket::BasicPortAllocator> port_allocator_
RTC_GUARDED_BY(network_thread_); RTC_GUARDED_BY(network_thread_);
PayloadTypePicker payload_type_picker_; PayloadTypePicker payload_type_picker_;
@ -131,9 +136,11 @@ ScenarioIceConnectionImpl::ScenarioIceConnectionImpl(
cricket::ConnectionRole::CONNECTIONROLE_PASSIVE, cricket::ConnectionRole::CONNECTIONROLE_PASSIVE,
rtc::SSLFingerprint::CreateFromCertificate(*certificate_.get()) rtc::SSLFingerprint::CreateFromCertificate(*certificate_.get())
.get()), .get()),
port_allocator_( network_manager_(manager_->ReleaseNetworkManager()),
new cricket::BasicPortAllocator(manager_->network_manager(), packet_socket_factory_(manager_->socket_factory()),
manager_->packet_socket_factory())), port_allocator_(std::make_unique<cricket::BasicPortAllocator>(
network_manager_.get(),
&packet_socket_factory_)),
jsep_controller_( jsep_controller_(
new JsepTransportController(env, new JsepTransportController(env,
network_thread_, network_thread_,