# Copyright 2022 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/drivers.gni")
import("//build/rust/rustc_test.gni")

group("tests") {
  testonly = true
  deps = [
    ":runtime-dispatcher-leaf-bind_test",
    ":runtime-dispatcher-test",
  ]
}

fidl("fuchsia.runtime.test") {
  testonly = true
  sources = [ "runtime.test.fidl" ]
}

driver_bind_rules("root-bind") {
  disable_autobind = true
  bind_output = "root.bindbc"
}

fuchsia_driver("root-driver") {
  testonly = true
  output_name = "runtime-dispatcher-root"
  sources = [ "root-driver.cc" ]
  deps = [
    ":fuchsia.runtime.test_llcpp",
    ":root-bind",
    "//sdk/fidl/fuchsia.component.decl:fuchsia.component.decl_llcpp",
    "//sdk/lib/driver2:llcpp",
    "//sdk/lib/sys/component/cpp",
    "//src/devices/bind/fuchsia.test:fuchsia.test_cpp",
    "//src/devices/lib/driver:driver_runtime",
    "//zircon/system/ulib/service:service-llcpp",
  ]
}

fuchsia_driver_component("root") {
  testonly = true
  manifest = "meta/root.cml"
  deps = [ ":root-driver" ]
  info = "root-info.json"
}

driver_bind_rules("runtime-dispatcher-leaf-bind") {
  rules = "leaf.bind"
  bind_output = "leaf.bindbc"
  tests = "leaf.bind-tests.json"
  deps = [ "//src/devices/bind/fuchsia.test" ]
}

fuchsia_driver("leaf-driver") {
  testonly = true
  output_name = "runtime-dispatcher-leaf"
  sources = [ "leaf-driver.cc" ]
  deps = [
    ":fuchsia.runtime.test_llcpp",
    ":runtime-dispatcher-leaf-bind",
    "//sdk/lib/driver2:llcpp",
    "//src/devices/lib/driver:driver_runtime",
    "//zircon/system/ulib/async:async-cpp",
  ]
}

fuchsia_driver_component("leaf") {
  testonly = true
  manifest = "meta/leaf.cml"
  deps = [ ":leaf-driver" ]
  info = "leaf-info.json"
}

rustc_test("bin") {
  edition = "2021"
  testonly = true
  output_name = "runtime-dispatcher-bin"
  source_root = "test.rs"
  sources = [ "test.rs" ]
  deps = [
    ":fuchsia.runtime.test-rustc",
    "//sdk/fidl/fuchsia.driver.test:fuchsia.driver.test-rustc",
    "//sdk/lib/driver_test_realm/realm_builder/rust",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/fuchsia-component-test",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
  ]
}

cmc_merge("realm.cml") {
  sources = [
    "//sdk/lib/driver_test_realm/meta/driver_test_realm.cml",
    "meta/realm.shard.cml",
  ]
}

fuchsia_test_component("realm") {
  manifest = "${target_out_dir}/realm.cml"
  restricted_features = [ "dynamic_offers" ]
  manifest_deps = [ ":realm.cml" ]
}

fuchsia_unittest_package("runtime-dispatcher-test") {
  deps = [
    ":bin",
    ":leaf",
    ":realm",
    ":root",
    "//src/devices/bin/driver_host2:component",
  ]
}
