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 <titovartem@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#35403}
This commit is contained in:
Niels Möller 2021-11-22 16:07:35 +01:00 committed by WebRTC LUCI CQ
parent 89f1aa59b6
commit f47a724168
8 changed files with 72 additions and 13 deletions

View File

@ -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",

View File

@ -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",

View File

@ -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<EmulatedEndpoint*> endpoints() const = 0;

View File

@ -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_

View File

@ -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<void(PeerConfigurer*)> 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,

View File

@ -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<webrtc_pc_e2e::NetworkQualityMetricsReporter>(
network_links.first, network_links.second));

View File

@ -85,8 +85,7 @@ class PeerConnectionE2EQualityTestSmokeTest : public ::testing::Test {
void AddPeer(EmulatedNetworkManagerInterface* network,
rtc::FunctionView<void(PeerConfigurer*)> configurer) {
fixture_->AddPeer(network->network_thread(), network->network_manager(),
configurer);
fixture_->AddPeer(network->network_dependencies(), configurer);
}
void RunAndCheckEachVideoStreamReceivedFrames(const RunParams& run_params) {

View File

@ -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<webrtc_pc_e2e::NetworkQualityMetricsReporter>(
network_links.first, network_links.second));