# 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",
    "//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",
    "//zircon/system/fidl/fuchsia-io:fuchsia-io-rustc",
  ]
}

hwinfo_config_validate("hwinfo_default_product_config_validate") {
  type = "product"
  config = "default_product_config.json"
}

hwinfo_config_validate("hwinfo_default_board_config_validate") {
  type = "board"
  config = "default_board_config.json"
}

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

config_data("hwinfo_default_config") {
  for_pkg = "hwinfo"

  sources = [
    "default_board_config.json",
    "default_product_config.json",
  ]

  deps = [
    ":hwinfo_default_board_config_validate",
    ":hwinfo_default_product_config_validate",
  ]
}

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",
  ]
}
