# Copyright 2019 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/components.gni")
import("//build/fidl/fidl.gni")
import("//build/test.gni")

fuchsia_unittest_package("service-llcpp-unittest-package") {
  deps = [ ":service-llcpp-test" ]
}

group("tests") {
  testonly = true
  deps = [ ":service-llcpp-unittest-package" ]
}

test("service-llcpp-test") {
  sources = [
    "llcpp/client_test.cc",
    "llcpp/server_test.cc",
  ]
  deps = [
    ":fidl.service.test_llcpp",
    "//sdk/lib/fdio",
    "//sdk/lib/sys/component/llcpp",
    "//src/lib/storage/vfs/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/fidl-async",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
    "//zircon/system/ulib/service:service-llcpp",
    "//zircon/system/ulib/zxtest",
  ]

  # TODO(fxbug.dev/69585): This target uses raw zx::channel with LLCPP which is deprecated.
  # Please migrate to typed channel APIs (fidl::ClientEnd<T>, fidl::ServerEnd<T>).
  # See linked bug for details.
  configs += [ "//build/cpp:fidl-llcpp-deprecated-raw-channels" ]
}

# Generate C bindings that the LLCPP bindings depend on.
fidl("fidl.service.test") {
  testonly = true
  visibility = [ ":*" ]
  sources = [ "test.test.fidl" ]
}
