# 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/rust/rustc_binary.gni")
import("//build/rust/rustc_test.gni")
import("//build/test/test_package.gni")
import("//src/sys/build/components.gni")

rustc_test("destruction_integration_test_bin") {
  name = "destruction_integration_test"
  edition = "2018"
  source_root = "integration_test.rs"
  deps = [
    "//garnet/lib/rust/io_util",
    "//src/lib/fuchsia-async",
    "//src/sys/component_manager/testing:test_utils_lib",
    "//third_party/rust_crates:anyhow",
  ]

  sources = [ "integration_test.rs" ]
}

rustc_binary("destruction_collection_realm_bin") {
  name = "destruction_collection_realm"
  edition = "2018"
  source_root = "collection_realm.rs"
  deps = [
    "//garnet/lib/rust/io_util",
    "//sdk/fidl/fuchsia.io:fuchsia.io-rustc",
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/sys/component_manager/tests/fidl:components-rustc",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:log",
  ]

  sources = [ "collection_realm.rs" ]
}

rustc_binary("destruction_trigger_bin") {
  name = "destruction_trigger"
  edition = "2018"
  source_root = "trigger.rs"
  deps = [
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/sys/component_manager/tests/fidl:components-rustc",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
  ]

  sources = [ "trigger.rs" ]
}

fuchsia_component("trigger") {
  testonly = true
  deps = [ ":destruction_trigger_bin" ]
  manifest = "meta/trigger.cml"
}

fuchsia_component("trigger_realm") {
  testonly = true
  deps = [ ":destruction_trigger_bin" ]
  manifest = "meta/trigger_realm.cml"
}

fuchsia_component("collection_realm") {
  testonly = true
  deps = [ ":destruction_collection_realm_bin" ]
  manifest = "meta/collection_realm.cml"
}

fuchsia_unittest_package("destruction_integration_test") {
  manifest = "meta/destruction_integration_test.cmx"
  deps = [
    ":collection_realm",
    ":destruction_integration_test_bin",
    ":trigger",
    ":trigger_realm",
  ]
}
