# Copyright 2021 The Fuchsia 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/fuzzing/fuzzer.gni")
import("//src/connectivity/bluetooth/core/bt-host/build/bt_gtest_package.gni")

static_library("fidl") {
  sources = [
    "gatt2_client_server.cc",
    "gatt2_client_server.h",
    "gatt2_remote_service_server.cc",
    "gatt2_remote_service_server.h",
    "gatt_client_server.cc",
    "gatt_client_server.h",
    "gatt_remote_service_server.cc",
    "gatt_remote_service_server.h",
    "gatt_server_server.cc",
    "gatt_server_server.h",
    "host_server.cc",
    "host_server.h",
    "low_energy_central_server.cc",
    "low_energy_central_server.h",
    "low_energy_connection_server.cc",
    "low_energy_connection_server.h",
    "low_energy_peripheral_server.cc",
    "low_energy_peripheral_server.h",
    "profile_server.cc",
    "profile_server.h",
    "server_base.h",
  ]

  deps = [
    "//sdk/fidl/fuchsia.bluetooth.gatt2:hlcpp_measure_tape_for_read_by_type_result",
    "//sdk/fidl/fuchsia.bluetooth.le:hlcpp_measure_tape_for_peer",
  ]

  public_deps = [
    ":helpers",
    "//sdk/fidl/fuchsia.bluetooth",
    "//sdk/fidl/fuchsia.bluetooth.gatt",
    "//sdk/fidl/fuchsia.bluetooth.gatt2",
    "//sdk/fidl/fuchsia.bluetooth.le",
    "//sdk/lib/fit-promise",
    "//src/connectivity/bluetooth/core/bt-host:stack",
    "//src/connectivity/bluetooth/fidl:host",
    "//src/connectivity/bluetooth/lib/fidl",
    "//src/lib/fxl",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/zx",
  ]
}

# Conversions between host FIDL and internal library types.
source_set("helpers") {
  sources = [
    "helpers.cc",
    "helpers.h",
  ]
  public_deps = [
    "//sdk/fidl/fuchsia.bluetooth",
    "//sdk/fidl/fuchsia.bluetooth.gatt",
    "//sdk/fidl/fuchsia.bluetooth.gatt2",
    "//src/connectivity/bluetooth/core/bt-host/common",
    "//src/connectivity/bluetooth/core/bt-host/gap",
    "//src/connectivity/bluetooth/core/bt-host/gatt",
    "//src/connectivity/bluetooth/core/bt-host/sdp",
    "//src/connectivity/bluetooth/fidl:host",
  ]
}

source_set("adapter_test_fixture") {
  testonly = true

  sources = [
    "adapter_test_fixture.cc",
    "adapter_test_fixture.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.io",
    "//sdk/lib/inspect/testing/cpp:cpp",
    "//src/connectivity/bluetooth/core/bt-host/gap",
    "//src/connectivity/bluetooth/core/bt-host/gatt:testing",
    "//src/connectivity/bluetooth/core/bt-host/testing",
    "//src/connectivity/bluetooth/core/bt-host/testing:fake_controller",
    "//zircon/system/ulib/async:async-cpp",
    "//zircon/system/ulib/fbl",
  ]

  # TODO(fxbug.dev/95833): This target uses the deprecated C bindings.
  # Consider switching to the C++ bindings. See linked bug for details.
  configs += [ "//build/c:fidl-deprecated-c-bindings" ]
}

source_set("tests") {
  testonly = true

  sources = [
    "gatt2_client_server_unittest.cc",
    "gatt2_remote_service_server_unittest.cc",
    "gatt_client_server_unittest.cc",
    "gatt_remote_service_server_unittest.cc",
    "helpers_unittest.cc",
    "host_server_unittest.cc",
    "low_energy_central_server_unittest.cc",
    "low_energy_connection_server_unittest.cc",
    "low_energy_peripheral_server_unittest.cc",
    "profile_server_unittest.cc",
  ]

  deps = [
    ":adapter_test_fixture",
    ":fidl",
    "//sdk/fidl/fuchsia.bluetooth.le:hlcpp_measure_tape_for_peer",
    "//sdk/lib/inspect/testing/cpp:cpp",
    "//src/connectivity/bluetooth/core/bt-host/gap:testing",
    "//src/connectivity/bluetooth/core/bt-host/gatt:testing",
    "//src/connectivity/bluetooth/core/bt-host/testing",
    "//src/connectivity/bluetooth/core/bt-host/testing:fake_controller",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
    "//zircon/system/ulib/async:async-cpp",
    "//zircon/system/ulib/fbl",
  ]

  # TODO(fxbug.dev/95833): This target uses the deprecated C bindings.
  # Consider switching to the C++ bindings. See linked bug for details.
  configs += [ "//build/c:fidl-deprecated-c-bindings" ]
}

bt_gtest_package("bt-host-fidl-tests") {
  deps = [ ":tests" ]
  with_death_tests = true
}

fuzzer("host_server_watch_peers_fuzzer") {
  sources = [ "host_server_watch_peers_fuzztest.cc" ]
  deps = [
    ":adapter_test_fixture",
    "//src/connectivity/bluetooth/core/bt-host:sources",
    "//src/connectivity/bluetooth/core/bt-host/testing:fuzzing",
    "//src/connectivity/bluetooth/core/bt-host/testing:fuzztest_driver",
  ]
}
