blob: 0478dd1eee0218669278eee58021e5d703024e6a [file] [log] [blame]
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//media/media_options.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
source_set("run_all_unittests") {
testonly = true
sources = [
"run_all_unittests.cc",
]
configs += [ "//media:media_config" ]
deps = [
"//base",
"//base/test:test_support",
"//media:test_support",
"//mojo/core/embedder",
]
if (is_android) {
deps += [ "//ui/gl" ]
}
}
source_set("pipeline_integration_test_base") {
testonly = true
if (media_use_ffmpeg) {
sources = [
"fake_encrypted_media.cc",
"fake_encrypted_media.h",
"mock_media_source.cc",
"mock_media_source.h",
"pipeline_integration_test_base.cc",
"pipeline_integration_test_base.h",
]
configs += [ "//media:media_config" ]
deps = [
"//base",
"//base/test:test_support",
"//media:test_support",
"//testing/gmock",
"//testing/gtest",
"//third_party/libaom:av1_buildflags",
"//url",
]
}
}
source_set("pipeline_integration_tests") {
testonly = true
# Even if FFmpeg is enabled on Android we don't want these.
# TODO(watk): Refactor tests that could be made to run on Android. See
# http://crbug.com/570762
if (media_use_ffmpeg && !is_android) {
sources = [
"pipeline_integration_test.cc",
]
configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
deps = [
":pipeline_integration_test_base",
"//base",
"//media:test_support",
"//media/mojo/clients",
"//services/service_manager/public/cpp:service_test_support",
"//third_party/libaom:av1_buildflags",
# Needed for the opus_config
"//third_party/opus",
"//url",
# TODO(dalecurtis): Required since the gmock header is included in the
# header for pipeline_integration_test_base.h. This should be moved into
# the .cc file to avoid the extra dependency here.
"//testing/gmock",
]
}
}
source_set("pipeline_integration_perftests") {
testonly = true
if (media_use_ffmpeg) {
sources = [
"pipeline_integration_perftest.cc",
]
deps = [
":pipeline_integration_test_base",
"//media:test_support",
"//testing/gtest",
"//testing/perf",
# TODO(dalecurtis): Required since the gmock header is included in the
# header for pipeline_integration_test_base.h. This should be moved into
# the .cc file to avoid the extra dependency here.
"//testing/gmock",
]
}
}
source_set("mojo_pipeline_integration_tests") {
testonly = true
if (media_use_ffmpeg && !is_android) {
sources = [
"pipeline_integration_test.cc",
]
defines = [ "MOJO_RENDERER" ]
configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
deps = [
":pipeline_integration_test_base",
"//base",
"//base/test:test_support",
"//media:test_support",
"//media/mojo/clients",
"//media/mojo/interfaces",
"//media/mojo/services",
"//services/service_manager/public/cpp:service_test_support",
"//testing/gtest",
"//third_party/libaom:av1_buildflags",
"//ui/gfx:test_support",
"//ui/gfx/geometry",
# TODO(dalecurtis): Required since the gmock header is included in the
# header for pipeline_integration_test_base.h. This should be moved
# into the .cc file to avoid the extra dependency here.
"//testing/gmock",
]
}
}
# Keep these aligned with FuzzerVariant in pipeline_integration_fuzzertest.c
pipeline_integration_fuzzer_variants = [
"SRC", # A SRC= version (not MSE) pipeline fuzzer test
# MSE pipeline fuzzer test variants. Note, while it would be nice to have one
# generic MSE fuzzer, we use distinct fuzzers corresponding 1:1 to a set of
# mimetype+codec strings for now because:
# a) the SourceBuffer implementation must be constructed to expect a
# particular bytestream type and (set of) codec(s); it does not
# auto-detect those from the appended media, and
# b) maintaining the association of a (mutated) corpus item with the same MSE
# SourceBuffer configuration requires associating that item with the same
# mimetype+codec string. The benefits are simpler fuzzers and the ability
# to slice per-fuzzer coverage stats. The costs include more fuzzers, risk
# of new bytestream types or codec fuzzing gaps, and more potential
# duplicate bugs from different fuzzers for common issues exposed across
# mimetype+codec string variants.
"WEBM_OPUS",
"WEBM_VORBIS",
"WEBM_VP8",
"WEBM_VP9",
"WEBM_OPUS_VP9",
"MP4_FLAC",
"MP3",
# See below for additional variants depending on build configuration.
]
if (proprietary_codecs) {
pipeline_integration_fuzzer_variants += [
"ADTS",
"MP4_AACLC",
"MP4_AACSBR",
# Though neither StreamParserFactory, MP4StreamParser, nor
# SourceBufferState::Init differentiate kinds of AVC, we use "AVC1" here to
# retain corpus associated with this fuzzer target name.
"MP4_AVC1",
"MP4_AACLC_AVC",
]
if (enable_mse_mpeg2ts_stream_parser) {
pipeline_integration_fuzzer_variants += [
"MP2T_AACLC",
"MP2T_AACSBR",
"MP2T_AVC",
"MP2T_MP3",
"MP2T_AACLC_AVC",
]
}
}
foreach(variant, pipeline_integration_fuzzer_variants) {
if (variant == "SRC") {
test_name = "media_pipeline_integration_fuzzer"
} else {
test_name = "mediasource_${variant}_pipeline_integration_fuzzer"
}
fuzzer_test(test_name) {
sources = [
"pipeline_integration_fuzzertest.cc",
]
deps = [
":pipeline_integration_test_base",
"//base",
"//media",
# TODO(dalecurtis): Required since the gmock header is included in the
# header for pipeline_integration_test_base.h. This should be
# moved into the .cc file to avoid the extra dependency here.
"//testing/gmock",
"//ui/gfx:test_support",
]
libfuzzer_options = [
# This is done to suppress tons of log messages generated by gmock asserts.
"close_fd_mask=1",
]
defines = [ "PIPELINE_FUZZER_VARIANT=${variant}" ]
seed_corpus = "//media/test/data/"
}
}