Add a new PeerConnectionE2EQualityTestFixture::AddPeer method.

Change-Id: Ic5879613db51a00e3e958931f5eda19fda1ae94a
Bug: webrtc:14627
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/282640
Reviewed-by: Artem Titov <titovartem@webrtc.org>
Commit-Queue: Jeremy Leconte <jleconte@google.com>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#38608}
This commit is contained in:
Jeremy Leconte 2022-11-10 15:42:53 +01:00 committed by WebRTC LUCI CQ
parent c97651cbb4
commit a3e51df5f3
14 changed files with 110 additions and 71 deletions

View File

@ -547,6 +547,7 @@ rtc_source_set("peer_connection_quality_test_fixture_api") {
"video_codecs:video_codecs_api", "video_codecs:video_codecs_api",
] ]
absl_deps = [ absl_deps = [
"//third_party/abseil-cpp/absl/base:core_headers",
"//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/types:optional", "//third_party/abseil-cpp/absl/types:optional",

View File

@ -20,6 +20,7 @@
#include <utility> #include <utility>
#include <vector> #include <vector>
#include "absl/base/macros.h"
#include "absl/memory/memory.h" #include "absl/memory/memory.h"
#include "absl/strings/string_view.h" #include "absl/strings/string_view.h"
#include "absl/types/optional.h" #include "absl/types/optional.h"
@ -132,9 +133,18 @@ class PeerConnectionE2EQualityTestFixture {
// `network_dependencies` are used to provide networking for peer's peer // `network_dependencies` are used to provide networking for peer's peer
// connection. Members must be non-null. // connection. Members must be non-null.
// `configurer` function will be used to configure peer in the call. // `configurer` function will be used to configure peer in the call.
virtual PeerHandle* AddPeer( [[deprecated("bugs.webrtc.org/14627")]] virtual PeerHandle* AddPeer(
const PeerNetworkDependencies& network_dependencies, const PeerNetworkDependencies& network_dependencies,
rtc::FunctionView<void(PeerConfigurer*)> configurer) = 0; rtc::FunctionView<void(PeerConfigurer*)> configurer) {
RTC_CHECK_NOTREACHED();
return nullptr;
}
// TODO(bugs.webrtc.org/14627): make pure virtual once all subclasses
// implement it.
virtual PeerHandle* AddPeer(std::unique_ptr<PeerConfigurer> configurer) {
RTC_CHECK_NOTREACHED();
return nullptr;
}
// Runs the media quality test, which includes setting up the call with // Runs the media quality test, which includes setting up the call with
// configured participants, running it according to provided `run_params` and // configured participants, running it according to provided `run_params` and

View File

@ -233,6 +233,9 @@ if (rtc_include_tests) {
"../api/test/metrics:global_metrics_logger_and_exporter", "../api/test/metrics:global_metrics_logger_and_exporter",
"../api/test/metrics:metrics_exporter", "../api/test/metrics:metrics_exporter",
"../api/test/metrics:stdout_metrics_exporter", "../api/test/metrics:stdout_metrics_exporter",
"../api/test/pclf:media_configuration",
"../api/test/pclf:media_quality_test_params",
"../api/test/pclf:peer_configurer",
"../call:simulated_network", "../call:simulated_network",
"../common_audio", "../common_audio",
"../system_wrappers", "../system_wrappers",

View File

@ -20,6 +20,9 @@
#include "api/test/metrics/metrics_exporter.h" #include "api/test/metrics/metrics_exporter.h"
#include "api/test/metrics/stdout_metrics_exporter.h" #include "api/test/metrics/stdout_metrics_exporter.h"
#include "api/test/network_emulation_manager.h" #include "api/test/network_emulation_manager.h"
#include "api/test/pclf/media_configuration.h"
#include "api/test/pclf/media_quality_test_params.h"
#include "api/test/pclf/peer_configurer.h"
#include "api/test/peerconnection_quality_test_fixture.h" #include "api/test/peerconnection_quality_test_fixture.h"
#include "api/test/simulated_network.h" #include "api/test/simulated_network.h"
#include "api/test/time_controller.h" #include "api/test/time_controller.h"
@ -35,11 +38,9 @@ ABSL_DECLARE_FLAG(bool, quick);
namespace webrtc { namespace webrtc {
namespace test { namespace test {
using PeerConfigurer = using ::webrtc::webrtc_pc_e2e::AudioConfig;
webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::PeerConfigurer; using ::webrtc::webrtc_pc_e2e::PeerConfigurer;
using RunParams = webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::RunParams; using ::webrtc::webrtc_pc_e2e::RunParams;
using AudioConfig =
webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::AudioConfig;
namespace { namespace {
@ -67,10 +68,14 @@ CreateTestFixture(absl::string_view test_case_name,
std::string(test_case_name), time_controller, std::string(test_case_name), time_controller,
/*audio_quality_analyzer=*/nullptr, /*audio_quality_analyzer=*/nullptr,
/*video_quality_analyzer=*/nullptr); /*video_quality_analyzer=*/nullptr);
fixture->AddPeer(network_links.first->network_dependencies(), auto alice = std::make_unique<PeerConfigurer>(
alice_configurer); network_links.first->network_dependencies());
fixture->AddPeer(network_links.second->network_dependencies(), auto bob = std::make_unique<PeerConfigurer>(
bob_configurer); network_links.second->network_dependencies());
alice_configurer(alice.get());
bob_configurer(bob.get());
fixture->AddPeer(std::move(alice));
fixture->AddPeer(std::move(bob));
fixture->AddQualityMetricsReporter( fixture->AddQualityMetricsReporter(
std::make_unique<webrtc_pc_e2e::NetworkQualityMetricsReporter>( std::make_unique<webrtc_pc_e2e::NetworkQualityMetricsReporter>(
network_links.first, network_links.second, network_links.first, network_links.second,

View File

@ -2714,6 +2714,9 @@ if (rtc_include_tests && !build_with_chromium) {
"../api:simulated_network_api", "../api:simulated_network_api",
"../api:time_controller", "../api:time_controller",
"../api/test/metrics:global_metrics_logger_and_exporter", "../api/test/metrics:global_metrics_logger_and_exporter",
"../api/test/pclf:media_configuration",
"../api/test/pclf:media_quality_test_params",
"../api/test/pclf:peer_configurer",
"../api/video_codecs:video_codecs_api", "../api/video_codecs:video_codecs_api",
"../call:simulated_network", "../call:simulated_network",
"../modules/video_coding:webrtc_vp9", "../modules/video_coding:webrtc_vp9",

View File

@ -19,6 +19,9 @@
#include "api/test/frame_generator_interface.h" #include "api/test/frame_generator_interface.h"
#include "api/test/metrics/global_metrics_logger_and_exporter.h" #include "api/test/metrics/global_metrics_logger_and_exporter.h"
#include "api/test/network_emulation_manager.h" #include "api/test/network_emulation_manager.h"
#include "api/test/pclf/media_configuration.h"
#include "api/test/pclf/media_quality_test_params.h"
#include "api/test/pclf/peer_configurer.h"
#include "api/test/peerconnection_quality_test_fixture.h" #include "api/test/peerconnection_quality_test_fixture.h"
#include "api/test/simulated_network.h" #include "api/test/simulated_network.h"
#include "api/test/time_controller.h" #include "api/test/time_controller.h"
@ -38,18 +41,6 @@
namespace webrtc { namespace webrtc {
namespace { namespace {
using PeerConfigurer = ::webrtc::webrtc_pc_e2e::
PeerConnectionE2EQualityTestFixture::PeerConfigurer;
using RunParams =
::webrtc::webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::RunParams;
using VideoConfig =
::webrtc::webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoConfig;
using ScreenShareConfig = ::webrtc::webrtc_pc_e2e::
PeerConnectionE2EQualityTestFixture::ScreenShareConfig;
using VideoCodecConfig = ::webrtc::webrtc_pc_e2e::
PeerConnectionE2EQualityTestFixture::VideoCodecConfig;
using EmulatedSFUConfig = ::webrtc::webrtc_pc_e2e::
PeerConnectionE2EQualityTestFixture::EmulatedSFUConfig;
using ::cricket::kAv1CodecName; using ::cricket::kAv1CodecName;
using ::cricket::kH264CodecName; using ::cricket::kH264CodecName;
using ::cricket::kVp8CodecName; using ::cricket::kVp8CodecName;
@ -58,6 +49,12 @@ using ::testing::Combine;
using ::testing::UnitTest; using ::testing::UnitTest;
using ::testing::Values; using ::testing::Values;
using ::testing::ValuesIn; using ::testing::ValuesIn;
using ::webrtc::webrtc_pc_e2e::EmulatedSFUConfig;
using ::webrtc::webrtc_pc_e2e::PeerConfigurer;
using ::webrtc::webrtc_pc_e2e::RunParams;
using ::webrtc::webrtc_pc_e2e::ScreenShareConfig;
using ::webrtc::webrtc_pc_e2e::VideoCodecConfig;
using ::webrtc::webrtc_pc_e2e::VideoConfig;
std::unique_ptr<webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture> std::unique_ptr<webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture>
CreateTestFixture(absl::string_view test_case_name, CreateTestFixture(absl::string_view test_case_name,
@ -71,10 +68,14 @@ CreateTestFixture(absl::string_view test_case_name,
auto fixture = webrtc_pc_e2e::CreatePeerConnectionE2EQualityTestFixture( auto fixture = webrtc_pc_e2e::CreatePeerConnectionE2EQualityTestFixture(
std::string(test_case_name), time_controller, nullptr, std::string(test_case_name), time_controller, nullptr,
std::move(video_quality_analyzer)); std::move(video_quality_analyzer));
fixture->AddPeer(network_links.first->network_dependencies(), auto alice = std::make_unique<PeerConfigurer>(
alice_configurer); network_links.first->network_dependencies());
fixture->AddPeer(network_links.second->network_dependencies(), auto bob = std::make_unique<PeerConfigurer>(
bob_configurer); network_links.second->network_dependencies());
alice_configurer(alice.get());
bob_configurer(bob.get());
fixture->AddPeer(std::move(alice));
fixture->AddPeer(std::move(bob));
return fixture; return fixture;
} }

View File

@ -613,6 +613,7 @@ if (!build_with_chromium) {
"../../../api/test/metrics:global_metrics_logger_and_exporter", "../../../api/test/metrics:global_metrics_logger_and_exporter",
"../../../api/test/pclf:media_configuration", "../../../api/test/pclf:media_configuration",
"../../../api/test/pclf:media_quality_test_params", "../../../api/test/pclf:media_quality_test_params",
"../../../api/test/pclf:peer_configurer",
"../../../api/video_codecs:builtin_video_decoder_factory", "../../../api/video_codecs:builtin_video_decoder_factory",
"../../../api/video_codecs:builtin_video_encoder_factory", "../../../api/video_codecs:builtin_video_encoder_factory",
"../../../call:simulated_network", "../../../call:simulated_network",
@ -655,6 +656,7 @@ if (!build_with_chromium) {
"../../../api/test/metrics:stdout_metrics_exporter", "../../../api/test/metrics:stdout_metrics_exporter",
"../../../api/test/pclf:media_configuration", "../../../api/test/pclf:media_configuration",
"../../../api/test/pclf:media_quality_test_params", "../../../api/test/pclf:media_quality_test_params",
"../../../api/test/pclf:peer_configurer",
"../../../api/units:time_delta", "../../../api/units:time_delta",
] ]
} }

View File

@ -20,6 +20,7 @@
#include "api/test/network_emulation_manager.h" #include "api/test/network_emulation_manager.h"
#include "api/test/pclf/media_configuration.h" #include "api/test/pclf/media_configuration.h"
#include "api/test/pclf/media_quality_test_params.h" #include "api/test/pclf/media_quality_test_params.h"
#include "api/test/pclf/peer_configurer.h"
#include "api/test/peerconnection_quality_test_fixture.h" #include "api/test/peerconnection_quality_test_fixture.h"
#include "call/simulated_network.h" #include "call/simulated_network.h"
#include "system_wrappers/include/field_trial.h" #include "system_wrappers/include/field_trial.h"
@ -41,8 +42,6 @@ namespace {
class PeerConnectionE2EQualityTestSmokeTest : public ::testing::Test { class PeerConnectionE2EQualityTestSmokeTest : public ::testing::Test {
public: public:
using PeerConfigurer = PeerConnectionE2EQualityTestFixture::PeerConfigurer;
void SetUp() override { void SetUp() override {
network_emulation_ = CreateNetworkEmulationManager(); network_emulation_ = CreateNetworkEmulationManager();
auto video_quality_analyzer = std::make_unique<DefaultVideoQualityAnalyzer>( auto video_quality_analyzer = std::make_unique<DefaultVideoQualityAnalyzer>(
@ -81,8 +80,11 @@ class PeerConnectionE2EQualityTestSmokeTest : public ::testing::Test {
} }
void AddPeer(EmulatedNetworkManagerInterface* network, void AddPeer(EmulatedNetworkManagerInterface* network,
rtc::FunctionView<void(PeerConfigurer*)> configurer) { rtc::FunctionView<void(PeerConfigurer*)> update_configurer) {
fixture_->AddPeer(network->network_dependencies(), configurer); auto configurer =
std::make_unique<PeerConfigurer>(network->network_dependencies());
update_configurer(configurer.get());
fixture_->AddPeer(std::move(configurer));
} }
void RunAndCheckEachVideoStreamReceivedFrames(const RunParams& run_params) { void RunAndCheckEachVideoStreamReceivedFrames(const RunParams& run_params) {

View File

@ -205,6 +205,13 @@ PeerConnectionE2EQualityTest::PeerHandle* PeerConnectionE2EQualityTest::AddPeer(
return &peer_handles_.back(); return &peer_handles_.back();
} }
PeerConnectionE2EQualityTest::PeerHandle* PeerConnectionE2EQualityTest::AddPeer(
std::unique_ptr<PeerConfigurer> configurer) {
peer_configurations_.push_back(std::move(configurer));
peer_handles_.push_back(PeerHandleImpl());
return &peer_handles_.back();
}
void PeerConnectionE2EQualityTest::Run(RunParams run_params) { void PeerConnectionE2EQualityTest::Run(RunParams run_params) {
webrtc::webrtc_pc_e2e::PeerParamsPreprocessor params_preprocessor; webrtc::webrtc_pc_e2e::PeerParamsPreprocessor params_preprocessor;
for (auto& peer_configuration : peer_configurations_) { for (auto& peer_configuration : peer_configurations_) {

View File

@ -74,6 +74,7 @@ class PeerConnectionE2EQualityTest
PeerHandle* AddPeer( PeerHandle* AddPeer(
const PeerNetworkDependencies& network_dependencies, const PeerNetworkDependencies& network_dependencies,
rtc::FunctionView<void(PeerConfigurer*)> configurer) override; rtc::FunctionView<void(PeerConfigurer*)> configurer) override;
PeerHandle* AddPeer(std::unique_ptr<PeerConfigurer> configurer) override;
void Run(RunParams run_params) override; void Run(RunParams run_params) override;
TimeDelta GetRealTestDuration() const override { TimeDelta GetRealTestDuration() const override {

View File

@ -19,6 +19,7 @@
#include "api/test/network_emulation_manager.h" #include "api/test/network_emulation_manager.h"
#include "api/test/pclf/media_configuration.h" #include "api/test/pclf/media_configuration.h"
#include "api/test/pclf/media_quality_test_params.h" #include "api/test/pclf/media_quality_test_params.h"
#include "api/test/pclf/peer_configurer.h"
#include "api/test/peerconnection_quality_test_fixture.h" #include "api/test/peerconnection_quality_test_fixture.h"
#include "api/units/time_delta.h" #include "api/units/time_delta.h"
#include "test/gmock.h" #include "test/gmock.h"
@ -39,8 +40,7 @@ using ::webrtc::test::Metric;
using ::webrtc::test::MetricsExporter; using ::webrtc::test::MetricsExporter;
using ::webrtc::test::StdoutMetricsExporter; using ::webrtc::test::StdoutMetricsExporter;
using ::webrtc::test::Unit; using ::webrtc::test::Unit;
using PeerConfigurer = ::webrtc::webrtc_pc_e2e:: using ::webrtc::webrtc_pc_e2e::PeerConfigurer;
PeerConnectionE2EQualityTestFixture::PeerConfigurer;
// Adds a peer with some audio and video (the client should not care about // Adds a peer with some audio and video (the client should not care about
// details about audio and video configs). // details about audio and video configs).
@ -50,16 +50,16 @@ void AddDefaultAudioVideoPeer(
absl::string_view video_stream_label, absl::string_view video_stream_label,
const PeerNetworkDependencies& network_dependencies, const PeerNetworkDependencies& network_dependencies,
PeerConnectionE2EQualityTestFixture& fixture) { PeerConnectionE2EQualityTestFixture& fixture) {
fixture.AddPeer(network_dependencies, [&](PeerConfigurer* peer) { AudioConfig audio{std::string(audio_stream_label)};
peer->SetName(peer_name); audio.sync_group = std::string(peer_name);
AudioConfig audio{std::string(audio_stream_label)}; VideoConfig video(std::string(video_stream_label), 320, 180, 15);
audio.sync_group = std::string(peer_name); video.sync_group = std::string(peer_name);
peer->SetAudioConfig(std::move(audio)); auto peer = std::make_unique<PeerConfigurer>(network_dependencies);
VideoConfig video(std::string(video_stream_label), 320, 180, 15); peer->SetName(peer_name);
video.sync_group = std::string(peer_name); peer->SetAudioConfig(std::move(audio));
peer->AddVideoConfig(std::move(video)); peer->AddVideoConfig(std::move(video));
peer->SetVideoCodecs({VideoCodecConfig(cricket::kVp8CodecName)}); peer->SetVideoCodecs({VideoCodecConfig(cricket::kVp8CodecName)});
}); fixture.AddPeer(std::move(peer));
} }
// Metric fields to assert on // Metric fields to assert on

View File

@ -114,15 +114,16 @@ TEST_F(PeerConnectionE2EQualityTestTest, OutputVideoIsDumpedWhenRequested) {
EmulatedNetworkManagerInterface* bob_network = EmulatedNetworkManagerInterface* bob_network =
network_emulation->CreateEmulatedNetworkManagerInterface({bob_endpoint}); network_emulation->CreateEmulatedNetworkManagerInterface({bob_endpoint});
fixture.AddPeer( VideoConfig alice_video("alice_video", 320, 180, 15);
alice_network->network_dependencies(), [&](PeerConfigurer* peer) { alice_video.output_dump_options = VideoDumpOptions(test_directory_);
peer->SetName("alice"); PeerConfigurer alice(alice_network->network_dependencies());
VideoConfig video("alice_video", 320, 180, 15); alice.SetName("alice");
video.output_dump_options = VideoDumpOptions(test_directory_); alice.AddVideoConfig(std::move(alice_video));
peer->AddVideoConfig(std::move(video)); fixture.AddPeer(std::make_unique<PeerConfigurer>(std::move(alice)));
});
fixture.AddPeer(bob_network->network_dependencies(), PeerConfigurer bob(bob_network->network_dependencies());
[&](PeerConfigurer* peer) { peer->SetName("bob"); }); bob.SetName("bob");
fixture.AddPeer(std::make_unique<PeerConfigurer>(std::move(bob)));
fixture.Run(RunParams(TimeDelta::Seconds(2))); fixture.Run(RunParams(TimeDelta::Seconds(2)));

View File

@ -625,6 +625,9 @@ if (rtc_include_tests) {
"../api:simulated_network_api", "../api:simulated_network_api",
"../api:time_controller", "../api:time_controller",
"../api/test/metrics:global_metrics_logger_and_exporter", "../api/test/metrics:global_metrics_logger_and_exporter",
"../api/test/pclf:media_configuration",
"../api/test/pclf:media_quality_test_params",
"../api/test/pclf:peer_configurer",
"../api/video_codecs:video_codecs_api", "../api/video_codecs:video_codecs_api",
"../call:simulated_network", "../call:simulated_network",
"../modules/video_coding:webrtc_vp9", "../modules/video_coding:webrtc_vp9",

View File

@ -19,6 +19,9 @@
#include "api/test/frame_generator_interface.h" #include "api/test/frame_generator_interface.h"
#include "api/test/metrics/global_metrics_logger_and_exporter.h" #include "api/test/metrics/global_metrics_logger_and_exporter.h"
#include "api/test/network_emulation_manager.h" #include "api/test/network_emulation_manager.h"
#include "api/test/pclf/media_configuration.h"
#include "api/test/pclf/media_quality_test_params.h"
#include "api/test/pclf/peer_configurer.h"
#include "api/test/peerconnection_quality_test_fixture.h" #include "api/test/peerconnection_quality_test_fixture.h"
#include "api/test/simulated_network.h" #include "api/test/simulated_network.h"
#include "api/test/time_controller.h" #include "api/test/time_controller.h"
@ -33,21 +36,14 @@
namespace webrtc { namespace webrtc {
using EmulatedSFUConfig = using ::webrtc::webrtc_pc_e2e::AudioConfig;
webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::EmulatedSFUConfig; using ::webrtc::webrtc_pc_e2e::EmulatedSFUConfig;
using PeerConfigurer = using ::webrtc::webrtc_pc_e2e::PeerConfigurer;
webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::PeerConfigurer; using ::webrtc::webrtc_pc_e2e::RunParams;
using RunParams = webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::RunParams; using ::webrtc::webrtc_pc_e2e::ScreenShareConfig;
using VideoConfig = using ::webrtc::webrtc_pc_e2e::VideoCodecConfig;
webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoConfig; using ::webrtc::webrtc_pc_e2e::VideoConfig;
using AudioConfig = using ::webrtc::webrtc_pc_e2e::VideoSimulcastConfig;
webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::AudioConfig;
using ScreenShareConfig =
webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::ScreenShareConfig;
using VideoSimulcastConfig =
webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoSimulcastConfig;
using VideoCodecConfig =
webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoCodecConfig;
namespace { namespace {
@ -63,10 +59,14 @@ CreateTestFixture(const std::string& test_case_name,
auto fixture = webrtc_pc_e2e::CreatePeerConnectionE2EQualityTestFixture( auto fixture = webrtc_pc_e2e::CreatePeerConnectionE2EQualityTestFixture(
test_case_name, time_controller, /*audio_quality_analyzer=*/nullptr, test_case_name, time_controller, /*audio_quality_analyzer=*/nullptr,
/*video_quality_analyzer=*/nullptr); /*video_quality_analyzer=*/nullptr);
fixture->AddPeer(network_links.first->network_dependencies(), auto alice = std::make_unique<PeerConfigurer>(
alice_configurer); network_links.first->network_dependencies());
fixture->AddPeer(network_links.second->network_dependencies(), auto bob = std::make_unique<PeerConfigurer>(
bob_configurer); network_links.second->network_dependencies());
alice_configurer(alice.get());
bob_configurer(bob.get());
fixture->AddPeer(std::move(alice));
fixture->AddPeer(std::move(bob));
fixture->AddQualityMetricsReporter( fixture->AddQualityMetricsReporter(
std::make_unique<webrtc_pc_e2e::NetworkQualityMetricsReporter>( std::make_unique<webrtc_pc_e2e::NetworkQualityMetricsReporter>(
network_links.first, network_links.second, network_links.first, network_links.second,