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

rustc_binary("hwinfo_bin") {
  name = "hwinfo"
  edition = "2018"

  deps = [
    "//garnet/lib/rust/io_util",
    "//sdk/fidl/fuchsia.factory:fuchsia.factory-rustc",
    "//sdk/fidl/fuchsia.hwinfo:fuchsia.hwinfo-rustc",
    "//sdk/fidl/fuchsia.intl:fuchsia.intl-rustc",
    "//sdk/fidl/fuchsia.io:fuchsia.io-rustc",
    "//src/lib/fdio/rust:fdio",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/fuchsia-runtime",
    "//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:openat",
    "//third_party/rust_crates:serde",
    "//third_party/rust_crates:serde_json",
    "//third_party/rust_crates:structopt",
    "//third_party/rust_crates:thiserror",
  ]
}

hwinfo_config("default_board_config") {
  type = "board"
  config = rebase_path("default_board_config.json")
}

hwinfo_config("default_product_config") {
  type = "product"
  config = rebase_path("default_product_config.json")
}

template("hwinfo_package") {
  package(target_name) {
    deps = [ ":hwinfo_bin" ]

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

    meta = [
      {
        path = rebase_path("meta/hwinfo.cmx")
        dest = "hwinfo.cmx"
      },
    ]
  }

  # Suppress unused variable warnings as the invoker is expected to be empty.
  not_needed(invoker, "*")
}

# The real package.
hwinfo_package("hwinfo") {
}

# The fake package used for integration testing where we want control over config data.
hwinfo_package("fake_hwinfo") {
}

rustc_test("hwinfo_positive_test") {
  edition = "2018"
  source_root = "tests/hwinfo_positive_test.rs"

  deps = [
    "//sdk/fidl/fuchsia.hwinfo:fuchsia.hwinfo-rustc",
    "//sdk/fidl/fuchsia.intl:fuchsia.intl-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:thiserror",
  ]
}

rustc_test("hwinfo_negative_test") {
  edition = "2018"
  source_root = "tests/hwinfo_negative_test.rs"

  deps = [
    "//sdk/fidl/fuchsia.hwinfo:fuchsia.hwinfo-rustc",
    "//sdk/fidl/fuchsia.intl:fuchsia.intl-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:thiserror",
  ]
}

test_package("hwinfo_positive_tests") {
  deps = [
    ":hwinfo_bin",
    ":hwinfo_positive_test",
  ]

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

  meta = [
    {
      path = rebase_path("meta/hwinfo.cmx")
      dest = "hwinfo.cmx"
    },
  ]

  tests = [
    {
      name = "hwinfo_positive_test"
    },
  ]
}

test_package("hwinfo_negative_tests") {
  deps = [
    ":hwinfo_bin",
    ":hwinfo_negative_test",
  ]

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

  meta = [
    {
      path = rebase_path("meta/hwinfo.cmx")
      dest = "hwinfo.cmx"
    },
  ]

  tests = [
    {
      name = "hwinfo_negative_test"
    },
  ]
}

config_data("hwinfo_tests_factory_config") {
  for_pkg = "fake_factory_store_providers"

  sources = [ "testdata/fuchsia.factory.MiscFactoryStoreProvider.config" ]
}

config_data("hwinfo_tests_config") {
  for_pkg = "hwinfo_positive_tests"

  sources = [
    "testdata/board_config.json",
    "testdata/product_config.json",
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":fake_hwinfo",
    ":hwinfo_negative_tests",
    ":hwinfo_positive_tests",
    ":hwinfo_tests_config",
    ":hwinfo_tests_factory_config",
    "//src/factory/fake_factory_store_providers",
  ]
}
