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:

committed by
Commit Bot

parent
10eb574582
commit
d8f3c17e8d
18
api/BUILD.gn
18
api/BUILD.gn
@ -139,6 +139,7 @@ rtc_source_set("video_quality_test_fixture_api") {
|
|||||||
"test/video_quality_test_fixture.h",
|
"test/video_quality_test_fixture.h",
|
||||||
]
|
]
|
||||||
deps = [
|
deps = [
|
||||||
|
":fec_controller_api",
|
||||||
":libjingle_peerconnection_api",
|
":libjingle_peerconnection_api",
|
||||||
":simulated_network_api",
|
":simulated_network_api",
|
||||||
"../call:fake_network",
|
"../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) {
|
if (rtc_include_tests) {
|
||||||
rtc_source_set("create_video_quality_test_fixture_api") {
|
rtc_source_set("create_video_quality_test_fixture_api") {
|
||||||
visibility = [ "*" ]
|
visibility = [ "*" ]
|
||||||
|
50
api/test/test_dependency_factory.cc
Normal file
50
api/test/test_dependency_factory.cc
Normal 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
|
49
api/test/test_dependency_factory.h
Normal file
49
api/test/test_dependency_factory.h
Normal 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_
|
@ -17,6 +17,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "api/bitrate_constraints.h"
|
#include "api/bitrate_constraints.h"
|
||||||
|
#include "api/fec_controller.h"
|
||||||
#include "api/mediatypes.h"
|
#include "api/mediatypes.h"
|
||||||
#include "api/test/simulated_network.h"
|
#include "api/test/simulated_network.h"
|
||||||
#include "api/video_codecs/video_encoder_config.h"
|
#include "api/video_codecs/video_encoder_config.h"
|
||||||
|
@ -207,6 +207,7 @@ if (rtc_include_tests) {
|
|||||||
]
|
]
|
||||||
deps = [
|
deps = [
|
||||||
"../api:fec_controller_api",
|
"../api:fec_controller_api",
|
||||||
|
"../api:test_dependency_factory",
|
||||||
"../api:video_quality_test_fixture_api",
|
"../api:video_quality_test_fixture_api",
|
||||||
"../call:fake_network",
|
"../call:fake_network",
|
||||||
"../call:simulated_network",
|
"../call:simulated_network",
|
||||||
@ -252,6 +253,7 @@ if (rtc_include_tests) {
|
|||||||
]
|
]
|
||||||
deps = [
|
deps = [
|
||||||
":video_quality_test",
|
":video_quality_test",
|
||||||
|
"../api:test_dependency_factory",
|
||||||
"../media:rtc_vp9_profile",
|
"../media:rtc_vp9_profile",
|
||||||
"../modules/pacing:pacing",
|
"../modules/pacing:pacing",
|
||||||
"../modules/video_coding:webrtc_vp9",
|
"../modules/video_coding:webrtc_vp9",
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "api/test/test_dependency_factory.h"
|
||||||
#include "media/base/vp9_profile.h"
|
#include "media/base/vp9_profile.h"
|
||||||
#include "modules/video_coding/codecs/vp9/include/vp9.h"
|
#include "modules/video_coding/codecs/vp9/include/vp9.h"
|
||||||
#include "rtc_base/experiments/alr_experiment.h"
|
#include "rtc_base/experiments/alr_experiment.h"
|
||||||
@ -63,7 +64,10 @@ struct ParamsWithLogging : public VideoQualityTest::Params {
|
|||||||
|
|
||||||
std::unique_ptr<VideoQualityTestFixtureInterface>
|
std::unique_ptr<VideoQualityTestFixtureInterface>
|
||||||
CreateVideoQualityTestFixture() {
|
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.
|
// Takes the current active field trials set, and appends some new trials.
|
||||||
|
Reference in New Issue
Block a user