# 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/package.gni")
import("//build/rust/rustc_binary.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")

rustc_binary("inspect_validator_rust_puppet_bin") {
  name = "inspect_validator_rust_puppet"
  edition = "2018"
  testonly = true

  deps = [
    "//sdk/fidl/fuchsia.inspect:fuchsia.inspect-rustc",
    "//sdk/fidl/fuchsia.io:fuchsia.io-rustc",
    "//src/diagnostics/inspect_validator/fidl:validate-rustc",
    "//src/lib/diagnostics/inspect/rust",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/fuchsia-runtime",
    "//src/lib/fuchsia-runtime",
    "//src/lib/storage/vfs/rust:vfs",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:log",
    "//third_party/rust_crates:thiserror",
  ]

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

test_package("inspect_validator_test_rust") {
  deps = [
    ":inspect_validator_rust_puppet_bin",
    "//src/diagnostics/inspect_validator:validator_bin",
  ]
  meta = [
    {
      path = rebase_path("meta/inspect_validator_rust_puppet.cmx")
      dest = "inspect_validator_rust_puppet.cmx"
    },
  ]

  binaries = [
    {
      name = "inspect_validator_rust_puppet"
    },
  ]

  tests = [
    {
      name = "validator"
      environments = basic_envs
    },
  ]
}

group("tests") {
  testonly = true
  deps = [ ":inspect_validator_test_rust" ]
}
