blob: 989172a8ee32f47d73fcc46a21987d9b679848f4 [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",
"pipeline_integration_test_base.cc",
"pipeline_integration_test_base.h",
"test_media_source.cc",
"test_media_source.h",
]
configs += [ "//media:media_config" ]
deps = [
"//base",
"//base/test:test_support",
"//media:media_buildflags",
"//media:test_support",
"//testing/gmock",
"//testing/gtest",
"//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" ]
deps = [
":pipeline_integration_test_base",
"//base",
"//media:media_buildflags",
"//media:test_support",
"//media/mojo/clients",
# 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",
]
}
}
# 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",
"MP4_OPUS",
"MP3",
# See below for additional variants depending on build configuration.
]
if (enable_av1_decoder) {
pipeline_integration_fuzzer_variants += [ "MP4_AV1" ]
}
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",
"//base/test:test_support",
"//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",
# TODO(https://crbug.com/1039559): Required for inclusion of
# gtest-internal-inl.h.
"//testing/gtest",
"//ui/gfx:test_support",
]
defines = [ "PIPELINE_FUZZER_VARIANT=${variant}" ]
seed_corpus = "//media/test/data/"
}
}