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