summaryrefslogtreecommitdiff
path: root/chromium/media/test/BUILD.gn
blob: caf4b085245b137df0762e576ef632192b8e5f2d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# 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" ]

    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

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