# 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/edk/system", ] 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", "//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", # 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", "//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", # See below for additional variants depending on build configuration. ] if (proprietary_codecs) { pipeline_integration_fuzzer_variants += [ "ADTS", "MP3", "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_FLAC", "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/" } }