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}
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index fb07fae..d46ff16 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -2349,7 +2349,6 @@
":audio_track",
":channel",
":channel_interface",
- ":data_channel_controller_unittest",
":dtls_srtp_transport",
":dtls_transport",
":dtmf_sender",
@@ -2362,6 +2361,7 @@
":media_protocol_names",
":media_session",
":media_stream",
+ ":pc_test_utils",
":peer_connection",
":peer_connection_factory",
":peer_connection_internal",
@@ -2397,7 +2397,6 @@
"../api:candidate",
"../api:create_peerconnection_factory",
"../api:dtls_transport_interface",
- "../api:dtmf_sender_interface",
"../api:enable_media",
"../api:enable_media_with_defaults",
"../api:fake_frame_decryptor",
@@ -2419,6 +2418,8 @@
"../api:ref_count",
"../api:rtc_error",
"../api:rtc_error_matchers",
+ "../api:rtc_stats_api",
+ "../api:rtp_parameters",
"../api:rtp_sender_interface",
"../api:rtp_transceiver_direction",
"../api:scoped_refptr",
@@ -2428,6 +2429,13 @@
"../api/audio:audio_mixer_api",
"../api/audio:audio_processing",
"../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_encryptor_interface",
"../api/crypto:options",
@@ -2450,12 +2458,25 @@
"../api/video:builtin_video_bitrate_allocator_factory",
"../api/video:encoded_image",
"../api/video:recordable_encoded_frame",
- "../api/video:resolution",
"../api/video:video_bitrate_allocator_factory",
"../api/video:video_codec_constants",
"../api/video:video_frame",
"../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: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",
"../common_video",
"../logging:fake_rtc_event_log",
@@ -2464,20 +2485,21 @@
"../media:media_constants",
"../media:media_engine",
"../media:rid_description",
+ "../media:rtc_audio_video",
"../media:rtc_data_sctp_transport_internal",
"../media:rtc_media_config",
+ "../media:rtc_media_tests_utils",
"../media:stream_params",
"../modules/audio_processing:mocks",
"../modules/rtp_rtcp:rtp_rtcp_format",
"../p2p:basic_packet_socket_factory",
"../p2p:basic_port_allocator",
- "../p2p:connection",
"../p2p:connection_info",
"../p2p:dtls_transport_internal",
"../p2p:fake_port_allocator",
"../p2p:ice_transport_internal",
"../p2p:p2p_constants",
- "../p2p:p2p_server_utils",
+ "../p2p:p2p_test_utils",
"../p2p:port",
"../p2p:port_allocator",
"../p2p:port_interface",
@@ -2493,7 +2515,6 @@
"../rtc_base:ip_address",
"../rtc_base:logging",
"../rtc_base:macromagic",
- "../rtc_base:mdns_responder_interface",
"../rtc_base:net_helper",
"../rtc_base:network",
"../rtc_base:network_constants",
@@ -2503,6 +2524,7 @@
"../rtc_base:rtc_base_tests_utils",
"../rtc_base:rtc_certificate_generator",
"../rtc_base:rtc_json",
+ "../rtc_base:safe_conversions",
"../rtc_base:socket_address",
"../rtc_base:socket_server",
"../rtc_base:ssl",
@@ -2517,16 +2539,23 @@
"../rtc_base/third_party/base64",
"../rtc_base/third_party/sigslot",
"../system_wrappers:metrics",
+ "../test:audio_codec_mocks",
"../test:rtc_expect_death",
"../test:run_loop",
- "../test:scoped_key_value_config",
+ "../test:test_support",
"../test:wait_until",
"../test/pc/sctp:fake_sctp_transport",
- "//testing/gmock",
- "//testing/gtest",
"//third_party/abseil-cpp/absl/algorithm:container",
"//third_party/abseil-cpp/absl/memory",
"//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) {
@@ -2540,44 +2569,6 @@
]
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") {
diff --git a/pc/peer_connection_bundle_unittest.cc b/pc/peer_connection_bundle_unittest.cc
index fb7b8dd..db828b4 100644
--- a/pc/peer_connection_bundle_unittest.cc
+++ b/pc/peer_connection_bundle_unittest.cc
@@ -18,10 +18,8 @@
#include <vector>
#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/create_peerconnection_factory.h"
+#include "api/enable_media_with_defaults.h"
#include "api/jsep.h"
#include "api/media_types.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_open_h264_adapter.h"
#include "media/base/stream_params.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_info.h"
-#include "p2p/client/basic_port_allocator.h"
#include "pc/channel.h"
#include "pc/peer_connection.h"
#include "pc/peer_connection_proxy.h"
@@ -56,23 +52,24 @@
#include "pc/rtp_transport_internal.h"
#include "pc/sdp_utils.h"
#include "pc/session_description.h"
+#include "pc/test/fake_audio_capture_module.h"
#include "pc/test/integration_test_helpers.h"
#include "pc/test/mock_peer_connection_observers.h"
#include "rtc_base/checks.h"
+#include "rtc_base/fake_network.h"
#include "rtc_base/logging.h"
#include "rtc_base/net_helper.h"
#include "rtc_base/network.h"
#include "rtc_base/socket_address.h"
#include "rtc_base/thread.h"
+#include "rtc_base/virtual_socket_server.h"
+#include "test/gmock.h"
#include "test/gtest.h"
#include "test/wait_until.h"
+
#ifdef WEBRTC_ANDROID
#include "pc/test/android_test_initializer.h"
#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 {
@@ -205,24 +202,10 @@
typedef std::unique_ptr<PeerConnectionWrapperForBundleTest> WrapperPtr;
explicit PeerConnectionBundleBaseTest(SdpSemantics sdp_semantics)
- : vss_(new rtc::VirtualSocketServer()),
- socket_factory_(new rtc::BasicPacketSocketFactory(vss_.get())),
- main_(vss_.get()),
- sdp_semantics_(sdp_semantics) {
+ : main_(&vss_), sdp_semantics_(sdp_semantics) {
#ifdef WEBRTC_ANDROID
InitializeAndroidObjects();
#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() {
@@ -230,25 +213,46 @@
}
WrapperPtr CreatePeerConnection(const RTCConfiguration& config) {
- auto* fake_network = NewFakeNetwork();
- auto port_allocator = std::make_unique<cricket::BasicPortAllocator>(
- fake_network, socket_factory_.get());
- port_allocator->set_flags(cricket::PORTALLOCATOR_DISABLE_TCP |
- cricket::PORTALLOCATOR_DISABLE_RELAY);
- port_allocator->set_step_delay(cricket::kMinimumStepDelay);
+ // Each PeerConnection has its own `NetworkManager` which is injected into
+ // `PeerConnectionFactoryDependencies`, thus each PeerConnection in these
+ // tests is created with own PeerConnectionFactory.
+ PeerConnectionFactoryDependencies pcf_deps;
+ pcf_deps.network_thread = rtc::Thread::Current();
+ 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>();
RTCConfiguration modified_config = config;
+ modified_config.set_port_allocator_flags(
+ cricket::PORTALLOCATOR_DISABLE_TCP |
+ cricket::PORTALLOCATOR_DISABLE_RELAY);
modified_config.sdp_semantics = sdp_semantics_;
- PeerConnectionDependencies pc_dependencies(observer.get());
- pc_dependencies.allocator = std::move(port_allocator);
- auto result = pc_factory_->CreatePeerConnectionOrError(
- modified_config, std::move(pc_dependencies));
+ auto result = pc_factory->CreatePeerConnectionOrError(
+ modified_config, PeerConnectionDependencies(observer.get()));
if (!result.ok()) {
return nullptr;
}
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);
return wrapper;
}
@@ -275,24 +279,8 @@
return candidate;
}
- rtc::FakeNetworkManager* NewFakeNetwork() {
- // 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::VirtualSocketServer vss_;
rtc::AutoSocketServerThread main_;
- rtc::scoped_refptr<PeerConnectionFactoryInterface> pc_factory_;
- std::vector<std::unique_ptr<rtc::FakeNetworkManager>> fake_networks_;
const SdpSemantics sdp_semantics_;
};