# 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.

assert(is_fuchsia, "These targets are only compiled in the fuchsia toolchain.")

import("//build/components.gni")
import("//build/rust/rustc_test.gni")

group("hermetic_tests") {
  testonly = true
  deps = [ ":subpackage-examples" ]
}

rustc_test("bin") {
  name = "parent_realm"
  edition = "2021"

  deps = [
    "//src/lib/fuchsia",
    "//src/lib/fuchsia-component-test:lib",
    "//src/sys/lib/component-events",
    "//third_party/rust_crates:tracing",
  ]

  sources = [ "src/lib.rs" ]
}

fuchsia_package_with_single_component("echo_client_with_subpackaged_server") {
  component_name = "default"
  testonly = true
  manifest = "meta/echo_client_with_subpackaged_server.cml"
  deps = [ "//examples/components/routing/rust/echo_client:bin" ]
  subpackages = [ "//examples/components/routing/rust/echo_server" ]
}

fuchsia_test_component("subpackage-examples-component") {
  component_name = "default"
  manifest = "meta/parent_realm.cml"
  deps = [ ":bin" ]
}

# Run with `fx test subpackage-examples` or
# `ffx test run fuchsia-pkg://fuchsia.com/subpackage-examples#meta/default.cm`
# [START declare_subpackages]
fuchsia_test_package("subpackage-examples") {
  test_components = [ ":subpackage-examples-component" ]
  subpackages = [
    "//examples/components/routing/rust/echo_client",
    ":echo_client_with_subpackaged_server",
    "//src/lib/fuchsia-component-test/realm_builder_server:pkg",
  ]
  renameable_subpackages = [
    {
      name = "my-echo-server"
      package = "//examples/components/routing/rust/echo_server"
    },
  ]
}
# [END declare_subpackages]
