Restructure PeerConnectionBundleTest helper not to create PortAllocator

Instead rely on PeerConnectionFactory to create it.

Bug: webrtc:42232556
Change-Id: If3de8a2e311fcdca4371cca03d10bd383fbd3e01
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/375922
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#43835}
This commit is contained in:
Danil Chapovalov 2025-01-31 16:12:12 +01:00 committed by WebRTC LUCI CQ
parent 9830de94e2
commit 34c15bc511
2 changed files with 78 additions and 99 deletions

View File

@ -2349,7 +2349,6 @@ if (rtc_include_tests && !build_with_chromium) {
":audio_track", ":audio_track",
":channel", ":channel",
":channel_interface", ":channel_interface",
":data_channel_controller_unittest",
":dtls_srtp_transport", ":dtls_srtp_transport",
":dtls_transport", ":dtls_transport",
":dtmf_sender", ":dtmf_sender",
@ -2362,6 +2361,7 @@ if (rtc_include_tests && !build_with_chromium) {
":media_protocol_names", ":media_protocol_names",
":media_session", ":media_session",
":media_stream", ":media_stream",
":pc_test_utils",
":peer_connection", ":peer_connection",
":peer_connection_factory", ":peer_connection_factory",
":peer_connection_internal", ":peer_connection_internal",
@ -2397,7 +2397,6 @@ if (rtc_include_tests && !build_with_chromium) {
"../api:candidate", "../api:candidate",
"../api:create_peerconnection_factory", "../api:create_peerconnection_factory",
"../api:dtls_transport_interface", "../api:dtls_transport_interface",
"../api:dtmf_sender_interface",
"../api:enable_media", "../api:enable_media",
"../api:enable_media_with_defaults", "../api:enable_media_with_defaults",
"../api:fake_frame_decryptor", "../api:fake_frame_decryptor",
@ -2419,6 +2418,8 @@ if (rtc_include_tests && !build_with_chromium) {
"../api:ref_count", "../api:ref_count",
"../api:rtc_error", "../api:rtc_error",
"../api:rtc_error_matchers", "../api:rtc_error_matchers",
"../api:rtc_stats_api",
"../api:rtp_parameters",
"../api:rtp_sender_interface", "../api:rtp_sender_interface",
"../api:rtp_transceiver_direction", "../api:rtp_transceiver_direction",
"../api:scoped_refptr", "../api:scoped_refptr",
@ -2428,6 +2429,13 @@ if (rtc_include_tests && !build_with_chromium) {
"../api/audio:audio_mixer_api", "../api/audio:audio_mixer_api",
"../api/audio:audio_processing", "../api/audio:audio_processing",
"../api/audio:audio_processing_statistics", "../api/audio:audio_processing_statistics",
"../api/audio_codecs:audio_codecs_api",
"../api/audio_codecs:builtin_audio_decoder_factory",
"../api/audio_codecs:builtin_audio_encoder_factory",
"../api/audio_codecs:opus_audio_decoder_factory",
"../api/audio_codecs:opus_audio_encoder_factory",
"../api/audio_codecs/L16:audio_decoder_L16",
"../api/audio_codecs/L16:audio_encoder_L16",
"../api/crypto:frame_decryptor_interface", "../api/crypto:frame_decryptor_interface",
"../api/crypto:frame_encryptor_interface", "../api/crypto:frame_encryptor_interface",
"../api/crypto:options", "../api/crypto:options",
@ -2450,12 +2458,25 @@ if (rtc_include_tests && !build_with_chromium) {
"../api/video:builtin_video_bitrate_allocator_factory", "../api/video:builtin_video_bitrate_allocator_factory",
"../api/video:encoded_image", "../api/video:encoded_image",
"../api/video:recordable_encoded_frame", "../api/video:recordable_encoded_frame",
"../api/video:resolution",
"../api/video:video_bitrate_allocator_factory", "../api/video:video_bitrate_allocator_factory",
"../api/video:video_codec_constants", "../api/video:video_codec_constants",
"../api/video:video_frame", "../api/video:video_frame",
"../api/video:video_rtp_headers", "../api/video:video_rtp_headers",
"../api/video_codecs:builtin_video_decoder_factory",
"../api/video_codecs:builtin_video_encoder_factory",
"../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_dav1d_adapter",
"../api/video_codecs:video_decoder_factory_template_libvpx_vp8_adapter",
"../api/video_codecs:video_decoder_factory_template_libvpx_vp9_adapter",
"../api/video_codecs:video_decoder_factory_template_open_h264_adapter",
"../api/video_codecs:video_encoder_factory_template",
"../api/video_codecs:video_encoder_factory_template_libaom_av1_adapter",
"../api/video_codecs:video_encoder_factory_template_libvpx_vp8_adapter",
"../api/video_codecs:video_encoder_factory_template_libvpx_vp9_adapter",
"../api/video_codecs:video_encoder_factory_template_open_h264_adapter",
"../call:call_interfaces",
"../call/adaptation:resource_adaptation_test_utilities", "../call/adaptation:resource_adaptation_test_utilities",
"../common_video", "../common_video",
"../logging:fake_rtc_event_log", "../logging:fake_rtc_event_log",
@ -2464,20 +2485,21 @@ if (rtc_include_tests && !build_with_chromium) {
"../media:media_constants", "../media:media_constants",
"../media:media_engine", "../media:media_engine",
"../media:rid_description", "../media:rid_description",
"../media:rtc_audio_video",
"../media:rtc_data_sctp_transport_internal", "../media:rtc_data_sctp_transport_internal",
"../media:rtc_media_config", "../media:rtc_media_config",
"../media:rtc_media_tests_utils",
"../media:stream_params", "../media:stream_params",
"../modules/audio_processing:mocks", "../modules/audio_processing:mocks",
"../modules/rtp_rtcp:rtp_rtcp_format", "../modules/rtp_rtcp:rtp_rtcp_format",
"../p2p:basic_packet_socket_factory", "../p2p:basic_packet_socket_factory",
"../p2p:basic_port_allocator", "../p2p:basic_port_allocator",
"../p2p:connection",
"../p2p:connection_info", "../p2p:connection_info",
"../p2p:dtls_transport_internal", "../p2p:dtls_transport_internal",
"../p2p:fake_port_allocator", "../p2p:fake_port_allocator",
"../p2p:ice_transport_internal", "../p2p:ice_transport_internal",
"../p2p:p2p_constants", "../p2p:p2p_constants",
"../p2p:p2p_server_utils", "../p2p:p2p_test_utils",
"../p2p:port", "../p2p:port",
"../p2p:port_allocator", "../p2p:port_allocator",
"../p2p:port_interface", "../p2p:port_interface",
@ -2493,7 +2515,6 @@ if (rtc_include_tests && !build_with_chromium) {
"../rtc_base:ip_address", "../rtc_base:ip_address",
"../rtc_base:logging", "../rtc_base:logging",
"../rtc_base:macromagic", "../rtc_base:macromagic",
"../rtc_base:mdns_responder_interface",
"../rtc_base:net_helper", "../rtc_base:net_helper",
"../rtc_base:network", "../rtc_base:network",
"../rtc_base:network_constants", "../rtc_base:network_constants",
@ -2503,6 +2524,7 @@ if (rtc_include_tests && !build_with_chromium) {
"../rtc_base:rtc_base_tests_utils", "../rtc_base:rtc_base_tests_utils",
"../rtc_base:rtc_certificate_generator", "../rtc_base:rtc_certificate_generator",
"../rtc_base:rtc_json", "../rtc_base:rtc_json",
"../rtc_base:safe_conversions",
"../rtc_base:socket_address", "../rtc_base:socket_address",
"../rtc_base:socket_server", "../rtc_base:socket_server",
"../rtc_base:ssl", "../rtc_base:ssl",
@ -2517,16 +2539,23 @@ if (rtc_include_tests && !build_with_chromium) {
"../rtc_base/third_party/base64", "../rtc_base/third_party/base64",
"../rtc_base/third_party/sigslot", "../rtc_base/third_party/sigslot",
"../system_wrappers:metrics", "../system_wrappers:metrics",
"../test:audio_codec_mocks",
"../test:rtc_expect_death", "../test:rtc_expect_death",
"../test:run_loop", "../test:run_loop",
"../test:scoped_key_value_config", "../test:test_support",
"../test:wait_until", "../test:wait_until",
"../test/pc/sctp:fake_sctp_transport", "../test/pc/sctp:fake_sctp_transport",
"//testing/gmock",
"//testing/gtest",
"//third_party/abseil-cpp/absl/algorithm:container", "//third_party/abseil-cpp/absl/algorithm:container",
"//third_party/abseil-cpp/absl/memory", "//third_party/abseil-cpp/absl/memory",
"//third_party/abseil-cpp/absl/strings", "//third_party/abseil-cpp/absl/strings",
"//third_party/abseil-cpp/absl/strings:string_view",
]
# These deps are kept separately because they can't be automatically
# regenerated by gn_check_autofix tool
deps += [
":data_channel_controller_unittest",
"../test:test_main",
] ]
if (is_android) { if (is_android) {
@ -2540,44 +2569,6 @@ if (rtc_include_tests && !build_with_chromium) {
] ]
shard_timeout = 900 shard_timeout = 900
} }
deps += [
":libjingle_peerconnection",
":pc_test_utils",
":rtc_pc",
"../api:rtc_event_log_output_file",
"../api:rtc_stats_api",
"../api:rtp_parameters",
"../api/audio_codecs:audio_codecs_api",
"../api/audio_codecs:builtin_audio_decoder_factory",
"../api/audio_codecs:builtin_audio_encoder_factory",
"../api/audio_codecs:opus_audio_decoder_factory",
"../api/audio_codecs:opus_audio_encoder_factory",
"../api/audio_codecs/L16:audio_decoder_L16",
"../api/audio_codecs/L16:audio_encoder_L16",
"../api/video_codecs:builtin_video_decoder_factory",
"../api/video_codecs:builtin_video_encoder_factory",
"../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",
"../api/video_codecs:video_decoder_factory_template_libvpx_vp9_adapter",
"../api/video_codecs:video_decoder_factory_template_open_h264_adapter",
"../api/video_codecs:video_encoder_factory_template",
"../api/video_codecs:video_encoder_factory_template_libaom_av1_adapter",
"../api/video_codecs:video_encoder_factory_template_libvpx_vp8_adapter",
"../api/video_codecs:video_encoder_factory_template_libvpx_vp9_adapter",
"../api/video_codecs:video_encoder_factory_template_open_h264_adapter",
"../call:call_interfaces",
"../media:rtc_audio_video",
"../media:rtc_media_tests_utils",
"../modules/audio_processing",
"../p2p:p2p_test_utils",
"../rtc_base:safe_conversions",
"../test:audio_codec_mocks",
"../test:test_main",
"../test:test_support",
]
} }
rtc_library("data_channel_controller_unittest") { rtc_library("data_channel_controller_unittest") {

View File

@ -18,10 +18,8 @@
#include <vector> #include <vector>
#include "api/audio/audio_device.h" #include "api/audio/audio_device.h"
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
#include "api/candidate.h" #include "api/candidate.h"
#include "api/create_peerconnection_factory.h" #include "api/enable_media_with_defaults.h"
#include "api/jsep.h" #include "api/jsep.h"
#include "api/media_types.h" #include "api/media_types.h"
#include "api/peer_connection_interface.h" #include "api/peer_connection_interface.h"
@ -43,11 +41,9 @@
#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/base/stream_params.h" #include "media/base/stream_params.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_info.h" #include "p2p/base/transport_info.h"
#include "p2p/client/basic_port_allocator.h"
#include "pc/channel.h" #include "pc/channel.h"
#include "pc/peer_connection.h" #include "pc/peer_connection.h"
#include "pc/peer_connection_proxy.h" #include "pc/peer_connection_proxy.h"
@ -56,23 +52,24 @@
#include "pc/rtp_transport_internal.h" #include "pc/rtp_transport_internal.h"
#include "pc/sdp_utils.h" #include "pc/sdp_utils.h"
#include "pc/session_description.h" #include "pc/session_description.h"
#include "pc/test/fake_audio_capture_module.h"
#include "pc/test/integration_test_helpers.h" #include "pc/test/integration_test_helpers.h"
#include "pc/test/mock_peer_connection_observers.h" #include "pc/test/mock_peer_connection_observers.h"
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/fake_network.h"
#include "rtc_base/logging.h" #include "rtc_base/logging.h"
#include "rtc_base/net_helper.h" #include "rtc_base/net_helper.h"
#include "rtc_base/network.h" #include "rtc_base/network.h"
#include "rtc_base/socket_address.h" #include "rtc_base/socket_address.h"
#include "rtc_base/thread.h" #include "rtc_base/thread.h"
#include "rtc_base/virtual_socket_server.h"
#include "test/gmock.h"
#include "test/gtest.h" #include "test/gtest.h"
#include "test/wait_until.h" #include "test/wait_until.h"
#ifdef WEBRTC_ANDROID #ifdef WEBRTC_ANDROID
#include "pc/test/android_test_initializer.h" #include "pc/test/android_test_initializer.h"
#endif #endif
#include "pc/test/fake_audio_capture_module.h"
#include "rtc_base/fake_network.h"
#include "rtc_base/virtual_socket_server.h"
#include "test/gmock.h"
namespace webrtc { namespace webrtc {
@ -205,24 +202,10 @@ class PeerConnectionBundleBaseTest : public ::testing::Test {
typedef std::unique_ptr<PeerConnectionWrapperForBundleTest> WrapperPtr; typedef std::unique_ptr<PeerConnectionWrapperForBundleTest> WrapperPtr;
explicit PeerConnectionBundleBaseTest(SdpSemantics sdp_semantics) explicit PeerConnectionBundleBaseTest(SdpSemantics sdp_semantics)
: vss_(new rtc::VirtualSocketServer()), : main_(&vss_), sdp_semantics_(sdp_semantics) {
socket_factory_(new rtc::BasicPacketSocketFactory(vss_.get())),
main_(vss_.get()),
sdp_semantics_(sdp_semantics) {
#ifdef WEBRTC_ANDROID #ifdef WEBRTC_ANDROID
InitializeAndroidObjects(); InitializeAndroidObjects();
#endif #endif
pc_factory_ = CreatePeerConnectionFactory(
rtc::Thread::Current(), rtc::Thread::Current(), rtc::Thread::Current(),
rtc::scoped_refptr<AudioDeviceModule>(FakeAudioCaptureModule::Create()),
CreateBuiltinAudioEncoderFactory(), CreateBuiltinAudioDecoderFactory(),
std::make_unique<VideoEncoderFactoryTemplate<
LibvpxVp8EncoderTemplateAdapter, LibvpxVp9EncoderTemplateAdapter,
OpenH264EncoderTemplateAdapter, LibaomAv1EncoderTemplateAdapter>>(),
std::make_unique<VideoDecoderFactoryTemplate<
LibvpxVp8DecoderTemplateAdapter, LibvpxVp9DecoderTemplateAdapter,
OpenH264DecoderTemplateAdapter, Dav1dDecoderTemplateAdapter>>(),
nullptr /* audio_mixer */, nullptr /* audio_processing */);
} }
WrapperPtr CreatePeerConnection() { WrapperPtr CreatePeerConnection() {
@ -230,25 +213,46 @@ class PeerConnectionBundleBaseTest : public ::testing::Test {
} }
WrapperPtr CreatePeerConnection(const RTCConfiguration& config) { WrapperPtr CreatePeerConnection(const RTCConfiguration& config) {
auto* fake_network = NewFakeNetwork(); // Each PeerConnection has its own `NetworkManager` which is injected into
auto port_allocator = std::make_unique<cricket::BasicPortAllocator>( // `PeerConnectionFactoryDependencies`, thus each PeerConnection in these
fake_network, socket_factory_.get()); // tests is created with own PeerConnectionFactory.
port_allocator->set_flags(cricket::PORTALLOCATOR_DISABLE_TCP | PeerConnectionFactoryDependencies pcf_deps;
cricket::PORTALLOCATOR_DISABLE_RELAY); pcf_deps.network_thread = rtc::Thread::Current();
port_allocator->set_step_delay(cricket::kMinimumStepDelay); pcf_deps.worker_thread = rtc::Thread::Current();
pcf_deps.signaling_thread = rtc::Thread::Current();
pcf_deps.socket_factory = &vss_;
auto network_manager =
std::make_unique<FakeNetworkManagerWithNoAnyNetwork>();
auto* fake_network = network_manager.get();
pcf_deps.network_manager = std::move(network_manager);
pcf_deps.adm = FakeAudioCaptureModule::Create();
pcf_deps.video_encoder_factory =
std::make_unique<VideoEncoderFactoryTemplate<
LibvpxVp8EncoderTemplateAdapter, LibvpxVp9EncoderTemplateAdapter,
OpenH264EncoderTemplateAdapter, LibaomAv1EncoderTemplateAdapter>>();
pcf_deps.video_decoder_factory =
std::make_unique<VideoDecoderFactoryTemplate<
LibvpxVp8DecoderTemplateAdapter, LibvpxVp9DecoderTemplateAdapter,
OpenH264DecoderTemplateAdapter, Dav1dDecoderTemplateAdapter>>();
EnableMediaWithDefaults(pcf_deps);
scoped_refptr<PeerConnectionFactoryInterface> pc_factory =
CreateModularPeerConnectionFactory(std::move(pcf_deps));
auto observer = std::make_unique<MockPeerConnectionObserver>(); auto observer = std::make_unique<MockPeerConnectionObserver>();
RTCConfiguration modified_config = config; RTCConfiguration modified_config = config;
modified_config.set_port_allocator_flags(
cricket::PORTALLOCATOR_DISABLE_TCP |
cricket::PORTALLOCATOR_DISABLE_RELAY);
modified_config.sdp_semantics = sdp_semantics_; modified_config.sdp_semantics = sdp_semantics_;
PeerConnectionDependencies pc_dependencies(observer.get()); auto result = pc_factory->CreatePeerConnectionOrError(
pc_dependencies.allocator = std::move(port_allocator); modified_config, PeerConnectionDependencies(observer.get()));
auto result = pc_factory_->CreatePeerConnectionOrError(
modified_config, std::move(pc_dependencies));
if (!result.ok()) { if (!result.ok()) {
return nullptr; return nullptr;
} }
auto wrapper = std::make_unique<PeerConnectionWrapperForBundleTest>( auto wrapper = std::make_unique<PeerConnectionWrapperForBundleTest>(
pc_factory_, result.MoveValue(), std::move(observer)); std::move(pc_factory), result.MoveValue(), std::move(observer));
wrapper->set_network(fake_network); wrapper->set_network(fake_network);
return wrapper; return wrapper;
} }
@ -275,24 +279,8 @@ class PeerConnectionBundleBaseTest : public ::testing::Test {
return candidate; return candidate;
} }
rtc::FakeNetworkManager* NewFakeNetwork() { rtc::VirtualSocketServer vss_;
// The PeerConnection's port allocator is tied to the PeerConnection's
// lifetime and expects the underlying NetworkManager to outlive it. If
// PeerConnectionWrapper owned the NetworkManager, it would be destroyed
// before the PeerConnection (since subclass members are destroyed before
// base class members). Therefore, the test fixture will own all the fake
// networks even though tests should access the fake network through the
// PeerConnectionWrapper.
auto* fake_network = new FakeNetworkManagerWithNoAnyNetwork();
fake_networks_.emplace_back(fake_network);
return fake_network;
}
std::unique_ptr<rtc::VirtualSocketServer> vss_;
std::unique_ptr<rtc::BasicPacketSocketFactory> socket_factory_;
rtc::AutoSocketServerThread main_; rtc::AutoSocketServerThread main_;
rtc::scoped_refptr<PeerConnectionFactoryInterface> pc_factory_;
std::vector<std::unique_ptr<rtc::FakeNetworkManager>> fake_networks_;
const SdpSemantics sdp_semantics_; const SdpSemantics sdp_semantics_;
}; };