| # 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/" |
| } |
| } |