mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-19 08:37:54 +01:00
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:
parent
10eb574582
commit
d8f3c17e8d
6 changed files with 125 additions and 1 deletions
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",
|
||||
]
|
||||
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 = [ "*" ]
|
||||
|
|
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 "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"
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue