# 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/package.gni")
import("//build/testing/environments.gni")
import("//src/lib/isolated_devmgr/devmgr_manifest.gni")

source_set("src") {
  sources = [
    "isolated_devmgr.cc",
    "isolated_devmgr.h",
  ]

  public_deps = [ "//zircon/system/ulib/devmgr-integration-test" ]

  deps = [
    "//sdk/fidl/fuchsia.exception",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/async-loop-default",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/fzl",
    "//zircon/public/lib/inspector",
    "//zircon/public/lib/libzbi",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/fdio-caller",
  ]
}

executable("isolated_devmgr") {
  testonly = true
  output_name = "isolated_devmgr"

  sources = [ "main.cc" ]

  deps = [
    ":src",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/async-loop-default",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/fit",
    "//zircon/system/ulib/devmgr-integration-test",
  ]
}

static_library("usb-virtual-bus") {
  testonly = true
  sources = [
    "usb-virtual-bus-helper.cc",
    "usb-virtual-bus-helper.h",
    "usb-virtual-bus.cc",
    "usb-virtual-bus.h",
  ]
  public_deps = [
    "//garnet/public/lib/gtest",
    "//sdk/fidl/fuchsia.hardware.usb.virtual.bus:fuchsia.hardware.usb.virtual.bus_llcpp",
    "//zircon/system/fidl/fuchsia-hardware-usb-peripheral:fuchsia-hardware-usb-peripheral_llcpp",
    "//zircon/system/ulib/devmgr-integration-test",
  ]
  deps = [
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/sys/cpp",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/async-loop-default",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/fidl-async-cpp",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/devmgr-launcher",
  ]
  configs += [ "//build/config/fuchsia:enable_zircon_asserts" ]
  configs += [ "//build/config/fuchsia:static_cpp_standard_library" ]
}

executable("test_bin") {
  testonly = true

  output_name = "isolated_devmgr_tests"

  sources = [ "isolated_devmgr_tests.cc" ]

  deps = [
    ":src",
    "//garnet/public/lib/gtest",
    "//sdk/fidl/fuchsia.hardware.ethertap",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/fidl/fuchsia.virtualaudio",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl/test:gtest_main",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/async-loop-default",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/fit",
    "//zircon/system/fidl/fuchsia-io:fuchsia-io",
    "//zircon/system/ulib/devmgr-integration-test",
  ]
}

devmgr_manifest("devmgr-manifest") {
}

package("isolated_devmgr_tests") {
  testonly = true
  deps = [
    ":devmgr-manifest",
    ":isolated_devmgr",
    ":test_bin",
    "//src/media/audio/drivers/virtual_audio:virtual_audio_driver",
  ]

  extra = [ "$target_gen_dir/devmgr.manifest" ]

  binaries = [
    {
      name = "isolated_devmgr"
    },
  ]

  meta = [
    {
      dest = "isolated_devmgr_tests.cmx"
      path = dest
    },
    {
      dest = "isolated_devmgr.cmx"
      path = dest
    },
    {
      dest = "isolated_devmgr_virtual_audio.cmx"
      path = dest
    },
  ]

  resources = [
    {
      path = rebase_path("${root_build_dir}/virtual_audio_driver.so")
      dest = "virtual_audio_driver.so"
    },
  ]

  tests = [
    {
      name = "isolated_devmgr_tests"
      environments = basic_envs
    },
  ]
}

group("tests") {
  testonly = true
  data_deps = [ ":isolated_devmgr_tests" ]
}
