From f47a72416840d0de587d9b0bc99ed06f53573cfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= Date: Mon, 22 Nov 2021 16:07:35 +0100 Subject: [PATCH] New struct PeerNetworkDependencies Preparation to make landing of https://webrtc-review.googlesource.com/c/src/+/238660 easier. Bug: webrtc:13145 Change-Id: I314a53cc634f842e5df009d0802b214aa6f8728b Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/238663 Reviewed-by: Artem Titov Reviewed-by: Ilya Nikolaevskiy Reviewed-by: Gustaf Ullberg Reviewed-by: Mirko Bonadei Commit-Queue: Niels Moller Cr-Commit-Position: refs/heads/main@{#35403} --- api/BUILD.gn | 12 +++++++ api/test/DEPS | 4 +++ api/test/network_emulation_manager.h | 4 +++ api/test/peer_network_dependencies.h | 32 +++++++++++++++++++ .../peerconnection_quality_test_fixture.h | 14 ++++++-- audio/test/pc_low_bandwidth_audio_test.cc | 8 ++--- test/pc/e2e/peer_connection_e2e_smoke_test.cc | 3 +- video/pc_full_stack_tests.cc | 8 ++--- 8 files changed, 72 insertions(+), 13 deletions(-) create mode 100644 api/test/peer_network_dependencies.h diff --git a/api/BUILD.gn b/api/BUILD.gn index 0352f993f3..c9dabe34e1 100644 --- a/api/BUILD.gn +++ b/api/BUILD.gn @@ -410,6 +410,16 @@ rtc_source_set("stats_observer_interface") { absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] } +rtc_source_set("peer_network_dependencies") { + visibility = [ "*" ] + sources = [ "test/peer_network_dependencies.h" ] + deps = [ + ":packet_socket_factory", + "../rtc_base", + "../rtc_base:threading", + ] +} + rtc_source_set("peer_connection_quality_test_fixture_api") { visibility = [ "*" ] testonly = true @@ -425,6 +435,7 @@ rtc_source_set("peer_connection_quality_test_fixture_api") { ":media_stream_interface", ":network_state_predictor_api", ":packet_socket_factory", + ":peer_network_dependencies", ":rtp_parameters", ":simulated_network_api", ":stats_observer_interface", @@ -654,6 +665,7 @@ rtc_source_set("network_emulation_manager_api") { deps = [ ":array_view", ":packet_socket_factory", + ":peer_network_dependencies", ":simulated_network_api", ":time_controller", "../call:simulated_network", diff --git a/api/test/DEPS b/api/test/DEPS index 329076830c..6c3a9ebed1 100644 --- a/api/test/DEPS +++ b/api/test/DEPS @@ -16,6 +16,10 @@ specific_include_rules = { "+rtc_base/network.h", "+rtc_base/network_constants.h", ], + "peer_network_dependencies\.h": [ + "+rtc_base/network.h", + "+rtc_base/thread.h", + ], "peerconnection_quality_test_fixture\.h": [ "+logging/rtc_event_log/rtc_event_log_factory_interface.h", "+rtc_base/network.h", diff --git a/api/test/network_emulation_manager.h b/api/test/network_emulation_manager.h index 61973ebfac..b5c68af5f3 100644 --- a/api/test/network_emulation_manager.h +++ b/api/test/network_emulation_manager.h @@ -20,6 +20,7 @@ #include "api/packet_socket_factory.h" #include "api/test/network_emulation/cross_traffic.h" #include "api/test/network_emulation/network_emulation_interfaces.h" +#include "api/test/peer_network_dependencies.h" #include "api/test/simulated_network.h" #include "api/test/time_controller.h" #include "api/units/timestamp.h" @@ -130,6 +131,9 @@ class EmulatedNetworkManagerInterface { // into WebRTC to properly setup network emulation. Returned factory is owned // by EmulatedNetworkManagerInterface implementation. virtual rtc::PacketSocketFactory* packet_socket_factory() = 0; + webrtc::webrtc_pc_e2e::PeerNetworkDependencies network_dependencies() { + return {network_thread(), network_manager(), packet_socket_factory()}; + } // Returns list of endpoints that are associated with this instance. Pointers // are guaranteed to be non-null and are owned by NetworkEmulationManager. virtual std::vector endpoints() const = 0; diff --git a/api/test/peer_network_dependencies.h b/api/test/peer_network_dependencies.h new file mode 100644 index 0000000000..6f85ad0a4d --- /dev/null +++ b/api/test/peer_network_dependencies.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef API_TEST_PEER_NETWORK_DEPENDENCIES_H_ +#define API_TEST_PEER_NETWORK_DEPENDENCIES_H_ + +#include "api/packet_socket_factory.h" +#include "rtc_base/network.h" +#include "rtc_base/thread.h" + +namespace webrtc { +namespace webrtc_pc_e2e { + +// The network dependencies needed when adding a peer to tests using +// PeerConnectionE2EQualityTestFixture. +struct PeerNetworkDependencies { + rtc::Thread* network_thread; + rtc::NetworkManager* network_manager; + rtc::PacketSocketFactory* packet_socket_factory; +}; + +} // namespace webrtc_pc_e2e +} // namespace webrtc + +#endif // API_TEST_PEER_NETWORK_DEPENDENCIES_H_ diff --git a/api/test/peerconnection_quality_test_fixture.h b/api/test/peerconnection_quality_test_fixture.h index 8d07ccb5ba..fb7264b687 100644 --- a/api/test/peerconnection_quality_test_fixture.h +++ b/api/test/peerconnection_quality_test_fixture.h @@ -30,6 +30,7 @@ #include "api/task_queue/task_queue_factory.h" #include "api/test/audio_quality_analyzer_interface.h" #include "api/test/frame_generator_interface.h" +#include "api/test/peer_network_dependencies.h" #include "api/test/simulated_network.h" #include "api/test/stats_observer_interface.h" #include "api/test/track_id_stream_info_map.h" @@ -494,10 +495,17 @@ class PeerConnectionE2EQualityTestFixture { // Add a new peer to the call and return an object through which caller // can configure peer's behavior. - // `network_thread` will be used as network thread for peer's peer connection - // `network_manager` will be used to provide network interfaces for peer's - // peer connection. + // `network_dependencies` are used to provide networking for peer's peer + // connection. Members must be non-null. // `configurer` function will be used to configure peer in the call. + virtual PeerHandle* AddPeer( + const PeerNetworkDependencies& network_dependencies, + rtc::FunctionView configurer) { + return AddPeer(network_dependencies.network_thread, + network_dependencies.network_manager, configurer); + } + // TODO(bugs.webrtc.org/13145): Delete, replaced by above overload with + // PeerNetworkDependencies. virtual PeerHandle* AddPeer( rtc::Thread* network_thread, rtc::NetworkManager* network_manager, diff --git a/audio/test/pc_low_bandwidth_audio_test.cc b/audio/test/pc_low_bandwidth_audio_test.cc index 95a32238c5..9cecc8dd41 100644 --- a/audio/test/pc_low_bandwidth_audio_test.cc +++ b/audio/test/pc_low_bandwidth_audio_test.cc @@ -80,10 +80,10 @@ CreateTestFixture(const std::string& test_case_name, auto fixture = webrtc_pc_e2e::CreatePeerConnectionE2EQualityTestFixture( test_case_name, time_controller, /*audio_quality_analyzer=*/nullptr, /*video_quality_analyzer=*/nullptr); - fixture->AddPeer(network_links.first->network_thread(), - network_links.first->network_manager(), alice_configurer); - fixture->AddPeer(network_links.second->network_thread(), - network_links.second->network_manager(), bob_configurer); + fixture->AddPeer(network_links.first->network_dependencies(), + alice_configurer); + fixture->AddPeer(network_links.second->network_dependencies(), + bob_configurer); fixture->AddQualityMetricsReporter( std::make_unique( network_links.first, network_links.second)); diff --git a/test/pc/e2e/peer_connection_e2e_smoke_test.cc b/test/pc/e2e/peer_connection_e2e_smoke_test.cc index d9c268570c..5a7f10b9bc 100644 --- a/test/pc/e2e/peer_connection_e2e_smoke_test.cc +++ b/test/pc/e2e/peer_connection_e2e_smoke_test.cc @@ -85,8 +85,7 @@ class PeerConnectionE2EQualityTestSmokeTest : public ::testing::Test { void AddPeer(EmulatedNetworkManagerInterface* network, rtc::FunctionView configurer) { - fixture_->AddPeer(network->network_thread(), network->network_manager(), - configurer); + fixture_->AddPeer(network->network_dependencies(), configurer); } void RunAndCheckEachVideoStreamReceivedFrames(const RunParams& run_params) { diff --git a/video/pc_full_stack_tests.cc b/video/pc_full_stack_tests.cc index 6fb83f8c25..6728e4bd19 100644 --- a/video/pc_full_stack_tests.cc +++ b/video/pc_full_stack_tests.cc @@ -85,10 +85,10 @@ CreateTestFixture(const std::string& test_case_name, auto fixture = webrtc_pc_e2e::CreatePeerConnectionE2EQualityTestFixture( test_case_name, time_controller, /*audio_quality_analyzer=*/nullptr, /*video_quality_analyzer=*/nullptr); - fixture->AddPeer(network_links.first->network_thread(), - network_links.first->network_manager(), alice_configurer); - fixture->AddPeer(network_links.second->network_thread(), - network_links.second->network_manager(), bob_configurer); + fixture->AddPeer(network_links.first->network_dependencies(), + alice_configurer); + fixture->AddPeer(network_links.second->network_dependencies(), + bob_configurer); fixture->AddQualityMetricsReporter( std::make_unique( network_links.first, network_links.second));