# Copyright 2017 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("//testing/libfuzzer/fuzzer_test.gni")

static_library("cast_channel") {
  sources = [
    "cast_auth_util.cc",
    "cast_auth_util.h",
    "cast_channel_enum.cc",
    "cast_channel_enum.h",
    "cast_framer.cc",
    "cast_framer.h",
    "cast_message_handler.cc",
    "cast_message_handler.h",
    "cast_message_util.cc",
    "cast_message_util.h",
    "cast_socket.cc",
    "cast_socket.h",
    "cast_socket_service.cc",
    "cast_socket_service.h",
    "cast_transport.cc",
    "cast_transport.h",
    "enum_table.cc",
    "enum_table.h",
    "keep_alive_delegate.cc",
    "keep_alive_delegate.h",
    "logger.cc",
    "logger.h",
    "mojo_data_pump.cc",
    "mojo_data_pump.h",
  ]
  deps = [
    "//base",
    "//components/cast_certificate",
    "//components/cast_channel/proto:cast_channel_proto",
    "//components/keyed_service/content",
    "//components/keyed_service/core",
    "//components/prefs",
    "//components/version_info",
    "//content/public/browser",
    "//content/public/common",
    "//crypto",
    "//net",
    "//services/data_decoder/public/cpp",
  ]
  public_deps = [
    "//services/network/public/mojom",
  ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "cast_test_util.cc",
    "cast_test_util.h",
  ]
  deps = [
    ":cast_channel",
    "//base",
    "//components/cast_channel/proto:cast_channel_proto",
    "//net",
    "//net:test_support",
    "//services/service_manager/public/cpp",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "cast_auth_util_unittest.cc",
    "cast_framer_unittest.cc",
    "cast_message_handler_unittest.cc",
    "cast_message_util_unittest.cc",
    "cast_socket_service_unittest.cc",
    "cast_socket_unittest.cc",
    "cast_transport_unittest.cc",
    "enum_table_unittest.cc",
    "keep_alive_delegate_unittest.cc",
    "logger_unittest.cc",
  ]
  deps = [
    ":cast_channel",
    ":test_support",
    "//base/test:test_support",
    "//components/cast_certificate",
    "//components/cast_certificate:test_support",
    "//components/cast_certificate/proto:unittest_proto",
    "//components/cast_channel/proto:cast_channel_proto",
    "//components/prefs",
    "//components/prefs:test_support",
    "//content/test:test_support",
    "//net:test_support",
    "//services/data_decoder/public/cpp:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

fuzzer_test("cast_message_fuzzer") {
  sources = [
    "cast_message_fuzzer.cc",
  ]
  deps = [
    ":test_support",
    "//base",
    "//components/cast_channel",
    "//components/cast_channel/proto:cast_channel_proto",
    "//net",
  ]
  seed_corpus = "fuzz_corpus"

  # See MessageFramer::MessageHeader::max_message_size()
  libfuzzer_options = [ "max_len=65535" ]
}
