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

rustc_test("fuchsia_component_test_tests_bin") {
  name = "fuchsia_component_test_tests_bin"
  edition = "2021"

  sources = [ "src/lib.rs" ]

  deps = [
    "..:fuchsia-component-test",
    "//examples/components/routing/fidl:echo-rustc",
    "//examples/components/services:fuchsia.examples.services-rustc",
    "//sdk/fidl/fuchsia.component:fuchsia.component-rustc",
    "//sdk/fidl/fuchsia.component.decl:fuchsia.component.decl-rustc",
    "//sdk/fidl/fuchsia.component.test:fuchsia.component.test-rustc",
    "//sdk/fidl/fuchsia.data:fuchsia.data-rustc",
    "//sdk/fidl/fuchsia.io:fuchsia.io-rustc",
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/fuchsia-fs",
    "//src/lib/syslog/rust:syslog",
    "//src/sys/lib/cm_rust",
    "//src/sys/lib/cm_types",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:assert_matches",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:tracing",
  ]
}

fuchsia_test_component("fuchsia_component_test_tests_component") {
  manifest = "meta/fuchsia-component-test-tests.cml"
  component_name = "fuchsia-component-test-tests"
  deps = [ ":fuchsia_component_test_tests_bin" ]
}

fuchsia_component("echo_client_empty_component") {
  testonly = true
  manifest = "meta/echo_client_empty.cml"
  component_name = "echo_client_empty"
  deps = [ "//src/sys/component_manager/testing/echo_client" ]
}

fuchsia_component("echo_server_empty_component") {
  testonly = true
  manifest = "meta/echo_server_empty.cml"
  component_name = "echo_server_empty"
  deps = [ "//src/sys/component_manager/testing/echo_server" ]
}

fuchsia_component("echo_client_component") {
  testonly = true
  manifest = "meta/echo_client.cmx"
  component_name = "echo_client"
  deps = [ "//src/sys/component_manager/testing/echo_client" ]
}

fuchsia_component("echo_server_component") {
  testonly = true
  manifest = "meta/echo_server.cmx"
  component_name = "echo_server"
  deps = [ "//src/sys/component_manager/testing/echo_server" ]
}

rustc_test("scoped-instance-test") {
  edition = "2021"
  source_root = "scoped_instance/lib.rs"
  deps = [
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2-rustc",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component-test",
    "//src/lib/syslog/rust:syslog",
    "//src/sys/lib/component-events",
    "//third_party/rust_crates:test-case",
  ]

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

rustc_binary("realm") {
  edition = "2021"
  source_root = "scoped_instance/realm.rs"
  testonly = true
  deps = [
    ":fuchsia.component.client.test-rustc",
    "//examples/components/routing/fidl:echo-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/fuchsia-component-test",
    "//src/lib/syslog/rust:syslog",
    "//src/sys/component_manager/testing:test_utils_lib",
    "//src/sys/lib/component-events",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:log",
  ]

  sources = [ "scoped_instance/realm.rs" ]
}

fidl("fuchsia.component.client.test") {
  sources = [ "client.test.fidl" ]
}

fuchsia_test_component("scoped_instance_test_component") {
  component_name = "scoped_instance_test"
  manifest = "meta/scoped_instance_test.cml"
  deps = [ ":scoped-instance-test" ]
}

fuchsia_test_component("realm_component") {
  component_name = "realm"
  manifest = "meta/realm.cml"
  deps = [ ":realm" ]
}

fuchsia_test_component("realm_with_wait_component") {
  component_name = "realm_with_wait"
  manifest = "meta/realm_with_wait.cml"
  deps = [ ":realm" ]
}

fuchsia_test_component("echo_realm_component") {
  component_name = "echo_realm"
  manifest = "meta/echo_realm.cml"
}

fuchsia_test_package("fuchsia-component-test-tests") {
  deps = [
    ":echo_client_component",
    ":echo_client_empty_component",
    ":echo_realm_component",
    ":echo_server_component",
    ":echo_server_empty_component",
    ":fuchsia_component_test_tests_component",
    "echo_client_sc",
    "//src/sys/component_manager:component-manager-realm-builder-cmp",
    "//src/sys/component_manager/testing/echo_client",
    "//src/sys/component_manager/testing/echo_server",
  ]
  test_components = [ ":fuchsia_component_test_tests_component" ]
}

fuchsia_test_package("scoped-instance-tests") {
  test_components = [ ":scoped_instance_test_component" ]
  deps = [
    ":echo_server_component",
    ":realm_component",
    ":realm_with_wait_component",
    "//src/sys/component_manager:component-manager-realm-builder-debug-cmp",
    "//src/sys/component_manager/testing/echo_server",
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":fuchsia-component-test-tests",
    ":scoped-instance-tests",
  ]
}
