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",
]
absl_deps = [
"//third_party/abseil-cpp/absl/base:core_headers",
"//third_party/abseil-cpp/absl/memory",
"//third_party/abseil-cpp/absl/strings",
"//third_party/abseil-cpp/absl/types:optional",

View File

@ -20,6 +20,7 @@
#include <utility>
#include <vector>
#include "absl/base/macros.h"
#include "absl/memory/memory.h"
#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
@ -132,9 +133,18 @@ class PeerConnectionE2EQualityTestFixture {
// `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(
[[deprecated("bugs.webrtc.org/14627")]] virtual PeerHandle* AddPeer(
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
// 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: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",
"../common_audio",
"../system_wrappers",

View File

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

View File

@ -2714,6 +2714,9 @@ if (rtc_include_tests && !build_with_chromium) {
"../api:simulated_network_api",
"../api:time_controller",
"../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",
"../call:simulated_network",
"../modules/video_coding:webrtc_vp9",

View File

@ -19,6 +19,9 @@
#include "api/test/frame_generator_interface.h"
#include "api/test/metrics/global_metrics_logger_and_exporter.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/simulated_network.h"
#include "api/test/time_controller.h"
@ -38,18 +41,6 @@
namespace webrtc {
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::kH264CodecName;
using ::cricket::kVp8CodecName;
@ -58,6 +49,12 @@ using ::testing::Combine;
using ::testing::UnitTest;
using ::testing::Values;
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>
CreateTestFixture(absl::string_view test_case_name,
@ -71,10 +68,14 @@ CreateTestFixture(absl::string_view test_case_name,
auto fixture = webrtc_pc_e2e::CreatePeerConnectionE2EQualityTestFixture(
std::string(test_case_name), time_controller, nullptr,
std::move(video_quality_analyzer));
fixture->AddPeer(network_links.first->network_dependencies(),
alice_configurer);
fixture->AddPeer(network_links.second->network_dependencies(),
bob_configurer);
auto alice = std::make_unique<PeerConfigurer>(
network_links.first->network_dependencies());
auto bob = std::make_unique<PeerConfigurer>(
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;
}

View File

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

View File

@ -20,6 +20,7 @@
#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 "call/simulated_network.h"
#include "system_wrappers/include/field_trial.h"
@ -41,8 +42,6 @@ namespace {
class PeerConnectionE2EQualityTestSmokeTest : public ::testing::Test {
public:
using PeerConfigurer = PeerConnectionE2EQualityTestFixture::PeerConfigurer;
void SetUp() override {
network_emulation_ = CreateNetworkEmulationManager();
auto video_quality_analyzer = std::make_unique<DefaultVideoQualityAnalyzer>(
@ -81,8 +80,11 @@ class PeerConnectionE2EQualityTestSmokeTest : public ::testing::Test {
}
void AddPeer(EmulatedNetworkManagerInterface* network,
rtc::FunctionView<void(PeerConfigurer*)> configurer) {
fixture_->AddPeer(network->network_dependencies(), configurer);
rtc::FunctionView<void(PeerConfigurer*)> update_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) {

View File

@ -205,6 +205,13 @@ PeerConnectionE2EQualityTest::PeerHandle* PeerConnectionE2EQualityTest::AddPeer(
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) {
webrtc::webrtc_pc_e2e::PeerParamsPreprocessor params_preprocessor;
for (auto& peer_configuration : peer_configurations_) {

View File

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

View File

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

View File

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

View File

@ -625,6 +625,9 @@ if (rtc_include_tests) {
"../api:simulated_network_api",
"../api:time_controller",
"../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",
"../call:simulated_network",
"../modules/video_coding:webrtc_vp9",

View File

@ -19,6 +19,9 @@
#include "api/test/frame_generator_interface.h"
#include "api/test/metrics/global_metrics_logger_and_exporter.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/simulated_network.h"
#include "api/test/time_controller.h"
@ -33,21 +36,14 @@
namespace webrtc {
using EmulatedSFUConfig =
webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::EmulatedSFUConfig;
using PeerConfigurer =
webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::PeerConfigurer;
using RunParams = webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::RunParams;
using VideoConfig =
webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoConfig;
using AudioConfig =
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;
using ::webrtc::webrtc_pc_e2e::AudioConfig;
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;
using ::webrtc::webrtc_pc_e2e::VideoSimulcastConfig;
namespace {
@ -63,10 +59,14 @@ 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_dependencies(),
alice_configurer);
fixture->AddPeer(network_links.second->network_dependencies(),
bob_configurer);
auto alice = std::make_unique<PeerConfigurer>(
network_links.first->network_dependencies());
auto bob = std::make_unique<PeerConfigurer>(
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(
std::make_unique<webrtc_pc_e2e::NetworkQualityMetricsReporter>(
network_links.first, network_links.second,