blob: 1a1147fe908a9bf619ef7c0b136591879f7be120 [file] [log] [blame]
# Copyright (c) 2014 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.
import("//build/config/ui.gni")
import("../webrtc.gni")
if (is_android) {
import("//build/config/android/rules.gni")
}
group("test") {
testonly = true
deps = [
":copy_to_file_audio_capturer",
":rtp_test_utils",
":test_common",
":test_renderer",
":test_support",
":video_test_common",
"pc/e2e",
]
if (rtc_include_tests) {
deps += [
":test_main",
":test_support_unittests",
"scenario/scenario_tests",
]
}
}
rtc_library("video_test_common") {
visibility = [ "*" ]
testonly = true
sources = [
"fake_texture_frame.cc",
"fake_texture_frame.h",
"frame_generator.cc",
"frame_generator.h",
"frame_generator_capturer.cc",
"frame_generator_capturer.h",
"frame_utils.cc",
"frame_utils.h",
"test_video_capturer.cc",
"test_video_capturer.h",
"video_codec_settings.h",
]
deps = [
":fileutils",
"../api:scoped_refptr",
"../api/task_queue",
"../api/video:video_frame",
"../api/video:video_frame_i010",
"../api/video:video_frame_i420",
"../api/video:video_rtp_headers",
"../api/video_codecs:video_codecs_api",
"../common_video",
"../media:rtc_media_base",
"../rtc_base",
"../rtc_base:checks",
"../rtc_base:criticalsection",
"../rtc_base:logging",
"../rtc_base:refcount",
"../rtc_base:rtc_base_approved",
"../rtc_base:rtc_task_queue",
"../rtc_base:timeutils",
"../rtc_base/task_utils:repeating_task",
"../system_wrappers",
]
}
if (!build_with_chromium) {
if (is_mac || is_ios) {
rtc_library("video_test_mac") {
testonly = true
sources = [
"mac_capturer.h",
"mac_capturer.mm",
]
deps = [
":video_test_common",
"../api:libjingle_peerconnection_api",
"../api:media_stream_interface",
"../api:scoped_refptr",
"../modules/video_capture:video_capture_module",
"../rtc_base",
"../sdk:base_objc",
"../sdk:native_api",
"../sdk:native_video",
"../sdk:videocapture_objc",
]
}
}
rtc_library("platform_video_capturer") {
testonly = true
sources = [
"platform_video_capturer.cc",
"platform_video_capturer.h",
]
deps = [
":video_test_common",
"//third_party/abseil-cpp/absl/memory",
]
if (is_mac || is_ios) {
deps += [ ":video_test_mac" ]
} else {
sources += [
"vcm_capturer.cc",
"vcm_capturer.h",
]
deps += [
"../api:scoped_refptr",
"../modules/video_capture:video_capture_module",
"../rtc_base:checks",
"../rtc_base:logging",
]
}
}
}
rtc_library("rtp_test_utils") {
testonly = true
sources = [
"rtcp_packet_parser.cc",
"rtcp_packet_parser.h",
"rtp_file_reader.cc",
"rtp_file_reader.h",
"rtp_file_writer.cc",
"rtp_file_writer.h",
"rtp_header_parser.cc",
"rtp_header_parser.h",
]
deps = [
"../api:array_view",
"../api:rtp_parameters",
"../modules/rtp_rtcp",
"../modules/rtp_rtcp:rtp_rtcp_format",
"../rtc_base:checks",
"../rtc_base:criticalsection",
"../rtc_base:logging",
"../rtc_base:macromagic",
"../rtc_base/system:arch",
]
}
rtc_library("field_trial") {
visibility = [ "*" ]
testonly = true
sources = [
"field_trial.cc",
"field_trial.h",
]
deps = [
"../system_wrappers:field_trial",
]
}
rtc_library("perf_test") {
visibility = [ "*" ]
sources = [
"testsupport/perf_test.cc",
"testsupport/perf_test.h",
]
deps = [
"../api:array_view",
"../rtc_base:checks",
"../rtc_base:criticalsection",
"../rtc_base:rtc_numerics",
]
}
if (is_ios) {
rtc_library("test_support_objc") {
testonly = true
visibility = [ ":test_support" ]
sources = [
"ios/coverage_util_ios.h",
"ios/coverage_util_ios.mm",
"ios/test_support.h",
"ios/test_support.mm",
]
deps = [
":perf_test",
"../sdk:helpers_objc",
]
configs += [ ":test_support_objc_config" ]
}
config("test_support_objc_config") {
defines = []
if (use_clang_coverage) {
defines += [ "WEBRTC_IOS_ENABLE_COVERAGE" ]
}
}
}
config("suppress_warning_4373") {
if (is_win) {
cflags = [
# MSVC has a bug which generates this warning when using mocks; see the
# section on warning 4373 in he googlemock FAQ. This warning isn't the
# least relevant for us, anyway.
"/wd4373",
]
}
}
config("test_main_direct_config") {
visibility = [ ":*" ]
defines = [ "UNIT_TEST" ]
}
rtc_source_set("test_support") {
visibility = [ "*" ]
testonly = true
all_dependent_configs = [
":suppress_warning_4373",
"//third_party/googletest:gmock_config",
"//third_party/googletest:gtest_config",
]
sources = [
"gmock.h",
"gtest.h",
]
public_deps = [] # no-presubmit-check TODO(webrtc:8603)
if (is_ios) {
public_deps += [ ":test_support_objc" ] # no-presubmit-check TODO(webrtc:8603)
}
public_configs = [ ":test_main_direct_config" ]
deps = [
"../rtc_base:ignore_wundef",
"//testing/gmock",
"//testing/gtest",
]
}
if (rtc_include_tests) {
rtc_library("test_main_lib") {
visibility = [ "*" ]
testonly = true
sources = [
"test_main_lib.cc",
"test_main_lib.h",
]
deps = [
":field_trial",
":perf_test",
":resources_dir_flag",
":test_support",
"../rtc_base",
"../rtc_base:checks",
"../rtc_base:logging",
"../rtc_base:rtc_base_approved",
"../system_wrappers:field_trial",
"../system_wrappers:metrics",
"//third_party/abseil-cpp/absl/flags:flag",
"//third_party/abseil-cpp/absl/flags:parse",
]
}
rtc_library("test_main") {
visibility = [ "*" ]
testonly = true
sources = [
"test_main.cc",
]
deps = [
":test_main_lib",
"//third_party/abseil-cpp/absl/debugging:failure_signal_handler",
"//third_party/abseil-cpp/absl/debugging:symbolize",
]
}
rtc_library("video_test_support") {
testonly = true
sources = [
"testsupport/frame_reader.h",
"testsupport/frame_writer.h",
"testsupport/ivf_video_frame_generator.cc",
"testsupport/ivf_video_frame_generator.h",
"testsupport/mock/mock_frame_reader.h",
"testsupport/video_frame_writer.cc",
"testsupport/video_frame_writer.h",
"testsupport/y4m_frame_reader.cc",
"testsupport/y4m_frame_writer.cc",
"testsupport/yuv_frame_reader.cc",
"testsupport/yuv_frame_writer.cc",
]
deps = [
":fileutils",
":test_support",
":video_test_common",
"../api:scoped_refptr",
"../api/video:encoded_image",
"../api/video:video_frame",
"../api/video:video_frame_i420",
"../api/video_codecs:video_codecs_api",
"../common_video",
"../media:rtc_media_base",
"../modules/video_coding:video_codec_interface",
"../modules/video_coding:video_coding_utility",
"../modules/video_coding:webrtc_h264",
"../modules/video_coding:webrtc_vp8",
"../modules/video_coding:webrtc_vp9",
"../rtc_base:checks",
"../rtc_base:criticalsection",
"../rtc_base:logging",
"../rtc_base:rtc_base_approved",
"../rtc_base:rtc_event",
"../rtc_base/synchronization:sequence_checker",
"../rtc_base/system:file_wrapper",
"//third_party/abseil-cpp/absl/types:optional",
]
if (!is_ios) {
deps += [ "//third_party:jpeg" ]
sources += [ "testsupport/jpeg_frame_writer.cc" ]
} else {
sources += [ "testsupport/jpeg_frame_writer_ios.cc" ]
}
if (is_android) {
deps += [ "//base" ]
}
}
rtc_library("test_support_test_artifacts") {
testonly = true
sources = [
"testsupport/test_artifacts.cc",
"testsupport/test_artifacts.h",
]
deps = [
":fileutils",
"../rtc_base:logging",
"../rtc_base/system:file_wrapper",
"//third_party/abseil-cpp/absl/flags:flag",
"//third_party/abseil-cpp/absl/flags:parse",
]
}
test_support_unittests_resources = [
"../resources/foreman_cif_short.yuv",
"../resources/video_coding/frame-ethernet-ii.pcap",
"../resources/video_coding/frame-loopback.pcap",
"../resources/video_coding/pltype103.rtp",
"../resources/video_coding/pltype103_header_only.rtp",
"../resources/video_coding/ssrcs-2.pcap",
"../resources/video_coding/ssrcs-3.pcap",
]
if (is_ios) {
bundle_data("test_support_unittests_bundle_data") {
testonly = true
sources = test_support_unittests_resources
outputs = [
"{{bundle_resources_dir}}/{{source_file_part}}",
]
}
}
rtc_test("test_support_unittests") {
deps = [
":call_config_utils",
":copy_to_file_audio_capturer_unittest",
":direct_transport",
":fake_video_codecs",
":fileutils",
":fileutils_unittests",
":perf_test",
":rtc_expect_death",
":rtp_test_utils",
":test_main",
":test_support",
":test_support_test_artifacts",
":video_test_common",
":video_test_support",
"../api:create_simulcast_test_fixture_api",
"../api:scoped_refptr",
"../api:simulcast_test_fixture_api",
"../api/task_queue:task_queue_test",
"../api/test/video:function_video_factory",
"../api/video:encoded_image",
"../api/video:video_frame",
"../api/video:video_frame_i420",
"../api/video_codecs:video_codecs_api",
"../call:video_stream_api",
"../common_video",
"../media:rtc_media_base",
"../modules/rtp_rtcp",
"../modules/rtp_rtcp:rtp_rtcp_format",
"../modules/video_coding:simulcast_test_fixture_impl",
"../modules/video_coding:video_codec_interface",
"../modules/video_coding:video_coding_utility",
"../modules/video_coding:webrtc_h264",
"../modules/video_coding:webrtc_vp8",
"../modules/video_coding:webrtc_vp9",
"../rtc_base:criticalsection",
"../rtc_base:rtc_event",
"../rtc_base/system:file_wrapper",
"pc/e2e:e2e_unittests",
"peer_scenario/tests",
"scenario:scenario_unittests",
"time_controller:time_controller",
"time_controller:time_controller_unittests",
"//third_party/abseil-cpp/absl/flags:flag",
"//third_party/abseil-cpp/absl/strings",
"//third_party/abseil-cpp/absl/types:optional",
]
sources = [
"call_config_utils_unittest.cc",
"direct_transport_unittest.cc",
"fake_vp8_encoder_unittest.cc",
"frame_generator_capturer_unittest.cc",
"frame_generator_unittest.cc",
"rtp_file_reader_unittest.cc",
"rtp_file_writer_unittest.cc",
"testsupport/ivf_video_frame_generator_unittest.cc",
"testsupport/perf_test_unittest.cc",
"testsupport/test_artifacts_unittest.cc",
"testsupport/video_frame_writer_unittest.cc",
"testsupport/y4m_frame_reader_unittest.cc",
"testsupport/y4m_frame_writer_unittest.cc",
"testsupport/yuv_frame_reader_unittest.cc",
"testsupport/yuv_frame_writer_unittest.cc",
]
data = test_support_unittests_resources
if (is_android) {
deps += [ "//testing/android/native_test:native_test_support" ]
shard_timeout = 900
}
if (is_ios) {
deps += [ ":test_support_unittests_bundle_data" ]
}
if (!is_android && !build_with_chromium) {
# This is needed in order to avoid:
# undefined symbol: webrtc::videocapturemodule::VideoCaptureImpl::Create
deps += [ "../modules/video_capture:video_capture_internal_impl" ]
}
}
}
if (is_ios) {
rtc_library("fileutils_ios_objc") {
visibility = [
":fileutils",
":fileutils_override_impl",
]
sources = [
"testsupport/ios_file_utils.h",
"testsupport/ios_file_utils.mm",
]
deps = [
"../rtc_base:checks",
"../rtc_base:rtc_base_approved",
"../sdk:helpers_objc",
]
}
}
if (is_mac) {
rtc_library("fileutils_mac_objc") {
visibility = [
":fileutils",
":fileutils_override_impl",
]
sources = [
"testsupport/mac_file_utils.h",
"testsupport/mac_file_utils.mm",
]
deps = [
"../rtc_base:checks",
]
}
}
rtc_library("fileutils") {
testonly = true
visibility = [ "*" ]
sources = [
"testsupport/file_utils.cc",
"testsupport/file_utils.h",
]
deps = [
":fileutils_override_api",
":fileutils_override_impl",
"../rtc_base:checks",
"../rtc_base:stringutils",
"//third_party/abseil-cpp/absl/types:optional",
]
if (is_ios) {
deps += [ ":fileutils_ios_objc" ]
}
if (is_mac) {
deps += [ ":fileutils_mac_objc" ]
}
if (is_win) {
deps += [ "../rtc_base" ]
}
}
rtc_library("resources_dir_flag") {
testonly = true
visibility = [ "*" ]
sources = [
"testsupport/resources_dir_flag.cc",
"testsupport/resources_dir_flag.h",
]
deps = [
"//third_party/abseil-cpp/absl/flags:flag",
]
}
# We separate header into own target to make it possible for downstream
# projects to override implementation.
rtc_source_set("fileutils_override_api") {
testonly = true
sources = [
"testsupport/file_utils_override.h",
]
}
rtc_library("fileutils_override_impl") {
testonly = true
visibility = [ ":fileutils" ]
sources = [
"testsupport/file_utils_override.cc",
]
deps = [
":fileutils_override_api",
"../rtc_base:checks",
"../rtc_base:macromagic",
"../rtc_base:stringutils",
"//third_party/abseil-cpp/absl/types:optional",
]
if (is_ios) {
deps += [ ":fileutils_ios_objc" ]
}
if (is_mac) {
deps += [ ":fileutils_mac_objc" ]
}
if (is_win) {
deps += [ "../rtc_base" ]
}
}
rtc_source_set("run_test") {
testonly = true
if (is_mac) {
public_deps = [ # no-presubmit-check TODO(webrtc:8603)
":run_test_objc",
]
} else {
public_deps = [ # no-presubmit-check TODO(webrtc:8603)
":run_test_generic",
]
}
}
rtc_source_set("run_test_interface") {
sources = [
"run_test.h",
]
}
if (is_mac) {
rtc_library("run_test_objc") {
testonly = true
visibility = [ ":run_test" ]
sources = [
"mac/run_test.mm",
]
deps = [
":run_test_interface",
]
}
}
rtc_library("run_test_generic") {
testonly = true
visibility = [ ":run_test" ]
sources = [
"run_test.cc",
]
deps = [
":run_test_interface",
]
}
rtc_library("fileutils_unittests") {
testonly = true
visibility = [ ":*" ] # Only targets in this file can depend on this.
sources = [
"testsupport/file_utils_unittest.cc",
]
deps = [
":fileutils",
":test_support",
"../rtc_base:checks",
"//third_party/abseil-cpp/absl/types:optional",
]
}
rtc_library("direct_transport") {
visibility = [ "*" ]
testonly = true
sources = [
"direct_transport.cc",
"direct_transport.h",
]
deps = [
":rtp_test_utils",
"../api:simulated_network_api",
"../api:transport_api",
"../api/task_queue",
"../api/units:time_delta",
"../call:call_interfaces",
"../call:simulated_packet_receiver",
"../rtc_base:macromagic",
"../rtc_base:timeutils",
"../rtc_base/synchronization:sequence_checker",
"../rtc_base/task_utils:repeating_task",
"//third_party/abseil-cpp/absl/memory",
]
public_deps = [ # no-presubmit-check TODO(webrtc:8603)
"../call:fake_network",
]
}
rtc_library("fake_video_codecs") {
allow_poison = [ "software_video_codecs" ]
visibility = [ "*" ]
sources = [
"configurable_frame_size_encoder.cc",
"configurable_frame_size_encoder.h",
"fake_decoder.cc",
"fake_decoder.h",
"fake_encoder.cc",
"fake_encoder.h",
"fake_vp8_decoder.cc",
"fake_vp8_decoder.h",
"fake_vp8_encoder.cc",
"fake_vp8_encoder.h",
]
deps = [
"../api:fec_controller_api",
"../api:scoped_refptr",
"../api/task_queue",
"../api/video:encoded_image",
"../api/video:video_bitrate_allocation",
"../api/video:video_frame",
"../api/video:video_frame_i420",
"../api/video:video_rtp_headers",
"../api/video_codecs:video_codecs_api",
"../api/video_codecs:vp8_temporal_layers_factory",
"../modules:module_api",
"../modules/video_coding:codec_globals_headers",
"../modules/video_coding:video_codec_interface",
"../modules/video_coding:video_coding_utility",
"../rtc_base:checks",
"../rtc_base:criticalsection",
"../rtc_base:macromagic",
"../rtc_base:rtc_task_queue",
"../rtc_base:timeutils",
"../rtc_base/synchronization:sequence_checker",
"../system_wrappers",
"//third_party/abseil-cpp/absl/types:optional",
]
}
rtc_library("null_transport") {
testonly = true
sources = [
"null_transport.cc",
"null_transport.h",
]
deps = [
"../api:transport_api",
]
}
rtc_library("encoder_settings") {
testonly = true
sources = [
"encoder_settings.cc",
"encoder_settings.h",
]
deps = [
"../api:scoped_refptr",
"../api/video_codecs:video_codecs_api",
"../call:rtp_interfaces",
"../call:video_stream_api",
"../rtc_base:checks",
"../rtc_base:refcount",
]
}
rtc_library("rtc_expect_death") {
testonly = true
sources = [
"testsupport/rtc_expect_death.h",
]
deps = [
":test_support",
]
}
rtc_library("test_common") {
testonly = true
sources = [
"call_test.cc",
"call_test.h",
"drifting_clock.cc",
"drifting_clock.h",
"fake_videorenderer.h",
"layer_filtering_transport.cc",
"layer_filtering_transport.h",
"mock_transport.cc",
"mock_transport.h",
"rtp_rtcp_observer.h",
"video_decoder_proxy_factory.h",
"video_encoder_proxy_factory.h",
]
if (current_os != "winuwp") {
# The filtering of *_win.cc is not done for WinUWP (intentionally) as
# most _win.cc files are compatible with WinUWP. However, the
# peek/dispatch Win32 runloops are entirely WinUWP incompatible thus
# WinUWP uses the generic runloop as defined for non-Windows targets.
sources += [ "win/run_loop_win.cc" ]
}
if (!is_win || current_os == "winuwp") {
sources += [
"run_loop.cc",
"run_loop.h",
]
}
deps = [
":direct_transport",
":encoder_settings",
":fake_video_codecs",
":fileutils",
":rtp_test_utils",
":test_support",
":video_test_common",
"../api:rtp_headers",
"../api:rtp_parameters",
"../api:simulated_network_api",
"../api:transport_api",
"../api/audio_codecs:builtin_audio_decoder_factory",
"../api/audio_codecs:builtin_audio_encoder_factory",
"../api/rtc_event_log",
"../api/task_queue",
"../api/task_queue:default_task_queue_factory",
"../api/test/video:function_video_factory",
"../api/video:builtin_video_bitrate_allocator_factory",
"../api/video:video_bitrate_allocator_factory",
"../api/video:video_frame",
"../api/video_codecs:video_codecs_api",
"../call:call_interfaces",
"../call:fake_network",
"../call:simulated_network",
"../call:simulated_packet_receiver",
"../call:video_stream_api",
"../modules/audio_device:audio_device_impl",
"../modules/audio_mixer:audio_mixer_impl",
"../modules/rtp_rtcp",
"../modules/rtp_rtcp:rtp_rtcp_format",
"../modules/rtp_rtcp:rtp_video_header",
"../modules/video_coding:codec_globals_headers",
"../rtc_base:checks",
"../rtc_base:criticalsection",
"../rtc_base:rtc_event",
"../rtc_base:task_queue_for_test",
"../system_wrappers",
"../system_wrappers:field_trial",
"//third_party/abseil-cpp/absl/types:optional",
]
if (!is_android && !build_with_chromium) {
deps += [ "../modules/video_capture:video_capture_internal_impl" ]
}
}
rtc_source_set("test_renderer") {
public_deps = [ # no-presubmit-check TODO(webrtc:8603)
":test_renderer_generic",
]
testonly = true
if (is_mac) {
public_deps += [ ":test_renderer_objc" ] # no-presubmit-check TODO(webrtc:8603)
}
}
if (is_mac) {
rtc_library("test_renderer_objc") {
testonly = true
visibility = [ ":test_renderer" ]
sources = [
"mac/video_renderer_mac.h",
"mac/video_renderer_mac.mm",
]
deps = [
":test_renderer_generic",
"../rtc_base:rtc_base_approved",
]
libs = [
"Cocoa.framework",
"OpenGL.framework",
"CoreVideo.framework",
]
}
}
rtc_library("test_renderer_generic") {
testonly = true
visibility = [
":test_renderer",
":test_renderer_objc",
]
libs = []
sources = [
"video_renderer.cc",
"video_renderer.h",
]
deps = [
"../api/video:video_frame",
"../common_video",
"../rtc_base:checks",
]
if (is_win) {
sources += [
"win/d3d_renderer.cc",
"win/d3d_renderer.h",
]
deps += [ "../api:scoped_refptr" ]
}
if (!(is_linux && rtc_use_x11) && !is_mac && !is_win) {
sources += [ "null_platform_renderer.cc" ]
}
if ((is_linux && rtc_use_x11) || is_mac) {
sources += [
"gl/gl_renderer.cc",
"gl/gl_renderer.h",
]
}
if (is_linux && rtc_use_x11) {
sources += [
"linux/glx_renderer.cc",
"linux/glx_renderer.h",
"linux/video_renderer_linux.cc",
]
libs += [
"Xext",
"X11",
"GL",
]
}
if (is_android) {
libs += [
"GLESv2",
"log",
]
}
}
rtc_library("audio_codec_mocks") {
testonly = true
sources = [
# TODO(nisse): Move these factories to their own target, to avoid
# unnecessary dependencies on gmock and gtest.
"audio_decoder_proxy_factory.h",
"function_audio_decoder_factory.h",
"mock_audio_decoder.cc",
"mock_audio_decoder.h",
"mock_audio_decoder_factory.h",
"mock_audio_encoder.cc",
"mock_audio_encoder.h",
"mock_audio_encoder_factory.h",
]
deps = [
":test_support",
"../api:array_view",
"../api:scoped_refptr",
"../api/audio_codecs:audio_codecs_api",
"../api/audio_codecs:builtin_audio_decoder_factory",
"../rtc_base:checks",
"../rtc_base:refcount",
"//third_party/abseil-cpp/absl/memory",
]
}
rtc_library("copy_to_file_audio_capturer") {
testonly = true
sources = [
"testsupport/copy_to_file_audio_capturer.cc",
"testsupport/copy_to_file_audio_capturer.h",
]
deps = [
"../api:array_view",
"../common_audio",
"../modules/audio_device:audio_device_impl",
"../rtc_base:rtc_base_approved",
"//third_party/abseil-cpp/absl/types:optional",
]
}
rtc_library("copy_to_file_audio_capturer_unittest") {
testonly = true
sources = [
"testsupport/copy_to_file_audio_capturer_unittest.cc",
]
deps = [
":copy_to_file_audio_capturer",
":fileutils",
":test_support",
"../modules/audio_device:audio_device_impl",
]
}
if (!build_with_chromium && is_android) {
rtc_android_library("native_test_java") {
testonly = true
java_files = [
"android/org/webrtc/native_test/RTCNativeUnitTest.java",
"android/org/webrtc/native_test/RTCNativeUnitTestActivity.java",
]
deps = [
"../rtc_base:base_java",
"//testing/android/native_test:native_test_java",
]
}
}
rtc_library("call_config_utils") {
# TODO(bugs.webrtc.org/10814): Remove rtc_json_suppressions as soon as it
# gets removed upstream.
public_configs = [ "../rtc_base:rtc_json_suppressions" ]
sources = [
"call_config_utils.cc",
"call_config_utils.h",
]
deps = [
"../call:video_stream_api",
"../rtc_base:rtc_json",
]
}