# 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/bind/bind.gni")
import("//build/config/fuchsia/rules.gni")
import("//build/fidl/fidl.gni")
import("//build/test.gni")
import("//build/test/test_package.gni")
import("//zircon/system/ulib/devmgr-integration-test/isolated_devmgr.gni")

bind_rules("usb-virtual-bus-bind") {
  rules = "usb-virtual-bus.bind"
  output = "usb-virtual-bus-bind.h"
  deps = [ "//src/devices/bind/test.platform" ]
}

source_set("common") {
  configs += [ "//build/config:all_source" ]
  sources = [
    "usb-virtual-bus.cc",
    "usb-virtual-device.cc",
    "usb-virtual-host.cc",
  ]
  public_deps = [
    ":usb-virtual-bus-bind",
    "//sdk/banjo/ddk.protocol.usb.bus",
    "//sdk/banjo/ddk.protocol.usb.dci",
    "//sdk/banjo/ddk.protocol.usb.hci",
    "//sdk/fidl/fuchsia.hardware.usb.virtual.bus:fuchsia.hardware.usb.virtual.bus_llcpp",
    "//src/devices/lib/driver",
    "//src/devices/usb/lib/usb",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/sync",
    "//zircon/public/lib/zx",
  ]
}

driver_module("usb-virtual-bus") {
  deps = [
    ":common",
    "//src/devices/lib/driver",
  ]
}

bind_library("fuchsia.usb.test") {
  source = "fuchsia.usb.test.bind"
}

bind_rules("usb-virtual-bus-tester-bind") {
  rules = "usb-virtual-bus-tester.bind"
  output = "usb-virtual-bus-tester-bind.h"
  deps = [
    ":fuchsia.usb.test",
    "//src/devices/bind/fuchsia.usb",
  ]
}

fidl("fuchsia.hardware.usb.virtualbustest") {
  sources = [ "usb-virtualbustest.test.fidl" ]
}

driver_module("virtual-bus-tester") {
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
    "//build/unification/config:zircon-migrated",
  ]
  sources = [ "host.cc" ]
  deps = [
    ":fuchsia.hardware.usb.virtualbustest_llcpp",
    ":usb-virtual-bus-tester-bind",
    "//sdk/banjo/ddk.protocol.usb",
    "//sdk/banjo/ddk.protocol.usb.composite",
    "//sdk/banjo/ddk.protocol.usb.request",
    "//src/devices/lib/driver",
    "//src/devices/usb/lib/usb",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/sync",
    "//zircon/public/lib/zx",
  ]
}

bind_rules("usb-virtual-bus-tester-function-bind") {
  rules = "usb-virtual-bus-tester-function.bind"
  output = "usb-virtual-bus-tester-function-bind.h"
  deps = [
    ":fuchsia.usb.test",
    "//src/devices/bind/fuchsia.usb",
  ]
}

driver_module("virtual-bus-tester-function") {
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
    "//build/unification/config:zircon-migrated",
  ]
  sources = [ "peripheral.cc" ]
  deps = [
    ":usb-virtual-bus-tester-function-bind",
    "//sdk/banjo/ddk.protocol.usb",
    "//sdk/banjo/ddk.protocol.usb.function",
    "//sdk/banjo/ddk.protocol.usb.request",
    "//src/devices/lib/driver",
    "//src/devices/usb/lib/usb",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/sync",
    "//zircon/public/lib/zircon-internal",
  ]
}

test("usb-virtual-bus-test") {
  sources = [ "usb-virtual-bus-test.cc" ]
  deps = [
    ":fuchsia.hardware.usb.virtualbustest_llcpp",
    "//sdk/fidl/fuchsia.device:fuchsia.device_llcpp",
    "//sdk/fidl/fuchsia.hardware.usb.peripheral:fuchsia.hardware.usb.peripheral_llcpp",
    "//sdk/fidl/fuchsia.hardware.usb.virtual.bus:fuchsia.hardware.usb.virtual.bus_llcpp",
    "//sdk/lib/fdio",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/fdio-caller",
    "//zircon/system/ulib/fzl",
    "//zircon/system/ulib/usb-virtual-bus-launcher",
  ]
}

isolated_devmgr_unittest_package("usb-virtual-bus-test-package") {
  package_name = "usb-virtual-bus-test"
  executable_path = "test/usb-virtual-bus-test"
  deps = [
    ":usb-virtual-bus-test",
    ":virtual-bus-tester",
    ":virtual-bus-tester-function",
    "//src/devices/board/drivers/integration-test",
    "//src/devices/bus/drivers/platform",
    "//src/devices/usb/drivers/usb-bus",
    "//src/devices/usb/drivers/usb-composite",
    "//src/devices/usb/drivers/usb-peripheral",
    "//src/devices/usb/drivers/usb-virtual-bus",
  ]
}

test("usb-virtual-bus-unit-test") {
  sources = [ "usb-virtual-bus-unit-test.cc" ]
  deps = [
    ":common",
    "//sdk/banjo/ddk.protocol.usb.dci",
    "//src/devices/testing/fake_ddk",
    "//zircon/public/lib/zxtest",
  ]
}

unittest_package("usb-virtual-bus-unit-test-package") {
  package_name = "usb-virtual-bus-unit-test"
  deps = [ ":usb-virtual-bus-unit-test" ]

  tests = [
    {
      name = "usb-virtual-bus-unit-test"
      environments = basic_envs
    },
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":usb-virtual-bus-test-package",
    ":usb-virtual-bus-unit-test-package",
  ]
}
