Added test dependency factory.

Bug: b/113654555
Change-Id: I6879d0e7dcbfbb04ad7a5179c4f4fbe8d31cf3d4
Reviewed-on: https://webrtc-review.googlesource.com/101601
Commit-Queue: Patrik Höglund <phoglund@webrtc.org>
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24855}
This commit is contained in:
Patrik Höglund 2018-09-26 14:39:17 +02:00 committed by Commit Bot
parent 10eb574582
commit d8f3c17e8d
6 changed files with 125 additions and 1 deletions

View file

@ -139,6 +139,7 @@ rtc_source_set("video_quality_test_fixture_api") {
"test/video_quality_test_fixture.h",
]
deps = [
":fec_controller_api",
":libjingle_peerconnection_api",
":simulated_network_api",
"../call:fake_network",
@ -153,6 +154,23 @@ rtc_source_set("video_quality_test_fixture_api") {
}
}
rtc_source_set("test_dependency_factory") {
visibility = [ "*" ]
testonly = true
sources = [
"test/test_dependency_factory.cc",
"test/test_dependency_factory.h",
]
deps = [
":video_quality_test_fixture_api",
"../rtc_base:thread_checker",
]
if (!build_with_chromium && is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
}
}
if (rtc_include_tests) {
rtc_source_set("create_video_quality_test_fixture_api") {
visibility = [ "*" ]

View file

@ -0,0 +1,50 @@
/*
* Copyright (c) 2018 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.
*/
#include <memory>
#include <utility>
#include "api/test/test_dependency_factory.h"
#include "rtc_base/thread_checker.h"
namespace webrtc {
// This checks everything in this file gets called on the same thread. It's
// static because it needs to look at the static methods too.
rtc::ThreadChecker* GetThreadChecker() {
static rtc::ThreadChecker checker;
return &checker;
}
std::unique_ptr<TestDependencyFactory> TestDependencyFactory::instance_ =
nullptr;
const TestDependencyFactory& TestDependencyFactory::GetInstance() {
RTC_DCHECK(GetThreadChecker()->CalledOnValidThread());
if (instance_ == nullptr) {
instance_ = absl::make_unique<TestDependencyFactory>();
}
return *instance_;
}
void TestDependencyFactory::SetInstance(
std::unique_ptr<TestDependencyFactory> instance) {
RTC_DCHECK(GetThreadChecker()->CalledOnValidThread());
RTC_CHECK(instance_ == nullptr);
instance_ = std::move(instance);
}
std::unique_ptr<VideoQualityTestFixtureInterface::InjectionComponents>
TestDependencyFactory::CreateComponents() const {
RTC_DCHECK(GetThreadChecker()->CalledOnValidThread());
return nullptr;
}
} // namespace webrtc

View file

@ -0,0 +1,49 @@
/*
* Copyright (c) 2018 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_TEST_DEPENDENCY_FACTORY_H_
#define API_TEST_TEST_DEPENDENCY_FACTORY_H_
#include <memory>
#include "api/test/video_quality_test_fixture.h"
#include "rtc_base/thread_checker.h"
namespace webrtc {
// Override this class if to inject custom components into WebRTC tests.
// Not all WebRTC tests get their components from here, so you need to make
// sure the tests you want actually use this class.
//
// This class is not thread safe and you need to make call calls from the same
// (test main) thread.
class TestDependencyFactory {
public:
virtual ~TestDependencyFactory() = default;
// The singleton MUST be stateless since tests execute in any order. It must
// be set before tests start executing.
static const TestDependencyFactory& GetInstance();
static void SetInstance(std::unique_ptr<TestDependencyFactory> instance);
// Returns the component a test should use. Returning nullptr means that the
// test is free to use whatever defaults it wants. The injection components
// themselves can be mutable, but we need to make new ones for every test that
// executes so state doesn't spread between tests.
virtual std::unique_ptr<VideoQualityTestFixtureInterface::InjectionComponents>
CreateComponents() const;
private:
static std::unique_ptr<TestDependencyFactory> instance_;
};
} // namespace webrtc
#endif // API_TEST_TEST_DEPENDENCY_FACTORY_H_

View file

@ -17,6 +17,7 @@
#include <vector>
#include "api/bitrate_constraints.h"
#include "api/fec_controller.h"
#include "api/mediatypes.h"
#include "api/test/simulated_network.h"
#include "api/video_codecs/video_encoder_config.h"

View file

@ -207,6 +207,7 @@ if (rtc_include_tests) {
]
deps = [
"../api:fec_controller_api",
"../api:test_dependency_factory",
"../api:video_quality_test_fixture_api",
"../call:fake_network",
"../call:simulated_network",
@ -252,6 +253,7 @@ if (rtc_include_tests) {
]
deps = [
":video_quality_test",
"../api:test_dependency_factory",
"../media:rtc_vp9_profile",
"../modules/pacing:pacing",
"../modules/video_coding:webrtc_vp9",

View file

@ -9,6 +9,7 @@
*/
#include <stdio.h>
#include "api/test/test_dependency_factory.h"
#include "media/base/vp9_profile.h"
#include "modules/video_coding/codecs/vp9/include/vp9.h"
#include "rtc_base/experiments/alr_experiment.h"
@ -63,7 +64,10 @@ struct ParamsWithLogging : public VideoQualityTest::Params {
std::unique_ptr<VideoQualityTestFixtureInterface>
CreateVideoQualityTestFixture() {
return absl::make_unique<VideoQualityTest>(nullptr);
// The components will normally be nullptr (= use defaults), but it's possible
// for external test runners to override the list of injected components.
auto components = TestDependencyFactory::GetInstance().CreateComponents();
return absl::make_unique<VideoQualityTest>(std::move(components));
}
// Takes the current active field trials set, and appends some new trials.