# Copyright 2019 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("//build_overrides/build.gni")
import("//third_party/libprotobuf-mutator/fuzzable_proto_library.gni")
import("//third_party/protobuf/proto_library.gni")
import("../../testing/libfuzzer/fuzzer_test.gni")

fuzzable_proto_library("remoting_proto") {
  sources = [ "remoting.proto" ]
}

source_set("common") {
  sources = [
    "answer_messages.cc",
    "answer_messages.h",
    "capture_configs.h",
    "capture_recommendations.cc",
    "capture_recommendations.h",
    "clock_drift_smoother.cc",
    "clock_drift_smoother.h",
    "constants.h",
    "encoded_frame.cc",
    "encoded_frame.h",
    "environment.cc",
    "environment.h",
    "expanded_value_base.h",
    "frame_crypto.cc",
    "frame_crypto.h",
    "frame_id.cc",
    "frame_id.h",
    "message_fields.cc",
    "message_fields.h",
    "ntp_time.cc",
    "ntp_time.h",
    "offer_messages.cc",
    "offer_messages.h",
    "packet_util.cc",
    "packet_util.h",
    "receiver_message.cc",
    "receiver_message.h",
    "rpc_broker.cc",
    "rpc_broker.h",
    "rtcp_common.cc",
    "rtcp_common.h",
    "rtcp_session.cc",
    "rtcp_session.h",
    "rtp_defines.cc",
    "rtp_defines.h",
    "rtp_time.cc",
    "rtp_time.h",
    "sender_message.cc",
    "sender_message.h",
    "session_config.cc",
    "session_config.h",
    "session_messager.cc",
    "session_messager.h",
    "ssrc.cc",
    "ssrc.h",
  ]

  public_configs = [ "../../build:openscreen_include_dirs" ]

  public_deps = [
    ":remoting_proto",
    "../../third_party/abseil",
    "../../third_party/boringssl",
    "../common:channel",
    "../common:public",
    "../common/certificate/proto:certificate_proto",
  ]

  deps = [
    "../../platform",
    "../../util",
  ]

  if (!build_with_chromium) {
    deps += [ "../protocol:castv2" ]
  }
}

source_set("receiver") {
  sources = [
    "compound_rtcp_builder.cc",
    "compound_rtcp_builder.h",
    "frame_collector.cc",
    "frame_collector.h",
    "packet_receive_stats_tracker.cc",
    "packet_receive_stats_tracker.h",
    "receiver.cc",
    "receiver.h",
    "receiver_packet_router.cc",
    "receiver_packet_router.h",
    "receiver_session.cc",
    "receiver_session.h",
    "rtp_packet_parser.cc",
    "rtp_packet_parser.h",
    "sender_report_parser.cc",
    "sender_report_parser.h",
  ]

  public_deps = [ ":common" ]

  deps = [ "../../util" ]
}

source_set("sender") {
  sources = [
    "bandwidth_estimator.cc",
    "bandwidth_estimator.h",
    "compound_rtcp_parser.cc",
    "compound_rtcp_parser.h",
    "rtp_packetizer.cc",
    "rtp_packetizer.h",
    "sender.cc",
    "sender.h",
    "sender_packet_router.cc",
    "sender_packet_router.h",
    "sender_report_builder.cc",
    "sender_report_builder.h",
    "sender_session.cc",
    "sender_session.h",
  ]

  public_deps = [ ":common" ]

  deps = [ "../../util" ]
}

source_set("test_helpers") {
  testonly = true

  sources = [
    "testing/message_pipe.h",
    "testing/simple_message_port.h",
    "testing/simple_socket_subscriber.h",
  ]

  public_deps = [ ":common" ]

  deps = [
    "../../third_party/googletest:gmock",
    "../../third_party/googletest:gtest",
    "../../util",
    "../common:public",
  ]
}

source_set("unittests") {
  testonly = true

  sources = [
    "answer_messages_unittest.cc",
    "bandwidth_estimator_unittest.cc",
    "capture_recommendations_unittest.cc",
    "compound_rtcp_builder_unittest.cc",
    "compound_rtcp_parser_unittest.cc",
    "expanded_value_base_unittest.cc",
    "frame_collector_unittest.cc",
    "frame_crypto_unittest.cc",
    "message_fields_unittest.cc",
    "mock_compound_rtcp_parser_client.h",
    "mock_environment.cc",
    "mock_environment.h",
    "ntp_time_unittest.cc",
    "offer_messages_unittest.cc",
    "packet_receive_stats_tracker_unittest.cc",
    "packet_util_unittest.cc",
    "receiver_session_unittest.cc",
    "receiver_unittest.cc",
    "rpc_broker_unittest.cc",
    "rtcp_common_unittest.cc",
    "rtp_packet_parser_unittest.cc",
    "rtp_packetizer_unittest.cc",
    "rtp_time_unittest.cc",
    "sender_packet_router_unittest.cc",
    "sender_report_unittest.cc",
    "sender_session_unittest.cc",
    "sender_unittest.cc",
    "session_messager_unittest.cc",
    "ssrc_unittest.cc",
  ]

  deps = [
    ":receiver",
    ":sender",
    ":test_helpers",
    "../../platform:test",
    "../../third_party/googletest:gmock",
    "../../third_party/googletest:gtest",
    "../../util",
  ]
}

openscreen_fuzzer_test("compound_rtcp_parser_fuzzer") {
  sources = [ "compound_rtcp_parser_fuzzer.cc" ]

  deps = [
    ":sender",
    "../../third_party/abseil",
  ]

  seed_corpus = "compound_rtcp_parser_fuzzer_seeds"

  # Note: 1500 is approx. kMaxRtpPacketSize in rtp_defines.h.
  libfuzzer_options = [ "max_len=1500" ]
}

openscreen_fuzzer_test("rtp_packet_parser_fuzzer") {
  sources = [ "rtp_packet_parser_fuzzer.cc" ]

  deps = [
    ":receiver",
    "../../third_party/abseil",
  ]

  seed_corpus = "rtp_packet_parser_fuzzer_seeds"

  # Note: 1500 is approx. kMaxRtpPacketSize in rtp_defines.h.
  libfuzzer_options = [ "max_len=1500" ]
}

openscreen_fuzzer_test("sender_report_parser_fuzzer") {
  sources = [ "sender_report_parser_fuzzer.cc" ]

  deps = [
    ":receiver",
    "../../third_party/abseil",
  ]

  seed_corpus = "sender_report_parser_fuzzer_seeds"

  # Note: 1500 is approx. kMaxRtpPacketSize in rtp_defines.h.
  libfuzzer_options = [ "max_len=1500" ]
}
