# Copyright 2020 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/cipd.gni")
import("//build/config/fuchsia/rules.gni")
import("//build/package.gni")
import("//build/test.gni")
import("//build/test/test_package.gni")

group("tests") {
  testonly = true

  deps = [
    ":usb-hci-test-driver",
    ":usb-hci-test-package",
  ]
}

test_package("usb-hci-test-package") {
  deps = [ ":usb-hci-test" ]

  tests = [
    {
      name = "usb-hci-test"
      environments = [
        {
          dimensions = {
            device_type = "Intel NUC Kit NUC7i5DNHE"
          }
          tags = [ "usb-compliance-tests" ]
        },
      ]
    },
  ]
}

# Each e2e test must run in its own executable.
test("usb-hci-test") {
  sources = [ "main.cc" ]
  output_name = "usb-hci-test"
  defines = [
    "EXPECTED_BITRATE=1",
    "EXPECTED_ISOCH_PACKETS=119000",
  ]
  deps = [
    "//sdk/fidl/fuchsia.hardware.usb.hcitest",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/ui/scenic/cpp",
    "//src/lib/fxl",
    "//src/lib/ui/base_view",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/async-loop-default",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxtest",
  ]
}

driver_module("driver") {
  output_name = "usb-hci-test-driver"

  sources = [ "usb-hci-test-driver.cc" ]

  deps = [
    "//sdk/banjo/ddk.protocol.usb",
    "//sdk/banjo/ddk.protocol.usb.request",
    "//sdk/fidl/fuchsia.hardware.usb.hcitest:fuchsia.hardware.usb.hcitest_llcpp",
    "//src/devices/lib/driver",
    "//src/devices/usb/lib/usb",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/sync",
    "//zircon/public/lib/zx",
  ]

  configs -= [ "//build/config/fuchsia:no_cpp_standard_library" ]
  configs += [
    "//build/config/fuchsia:enable_zircon_asserts",
    "//build/config/fuchsia:static_cpp_standard_library",
  ]
}

package("usb-hci-test-driver") {
  deprecated_system_image = true

  deps = [ ":driver" ]

  drivers = [
    {
      name = "usb-hci-test-driver.so"
    },
  ]
}
