# 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/dist/resource.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_test.gni")
import("//build/zbi/zbi.gni")
import("//src/sys/build/components.gni")

rustc_binary("bin") {
  name = "factory_store_providers"
  edition = "2018"
  with_unit_tests = true

  deps = [
    "//garnet/lib/rust/io_util",
    "//sdk/fidl/fuchsia.boot:fuchsia.boot-rustc",
    "//sdk/fidl/fuchsia.factory:fuchsia.factory-rustc",
    "//sdk/fidl/fuchsia.io:fuchsia.io-rustc",
    "//sdk/fidl/fuchsia.mem:fuchsia.mem-rustc",
    "//src/lib/fdio/rust:fdio",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/storage/pseudo-fs",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/storage/ext4/server/fidl:ext4_readonly-rustc",
    "//src/sys/lib/fuchsia-bootfs",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:serde",
    "//third_party/rust_crates:serde_json",
    "//third_party/rust_crates:thiserror",
  ]

  test_deps = [ "//src/lib/storage/vfs/rust:vfs" ]

  sources = [
    "src/config.rs",
    "src/main.rs",
    "src/validators/mod.rs",
    "src/validators/pass.rs",
    "src/validators/size.rs",
    "src/validators/text.rs",
  ]
}

fuchsia_component("factory_store_providers_comp") {
  component_name = "factory_store_providers"
  manifest = "meta/factory_store_providers.cmx"
  deps = [ ":bin" ]
}

fuchsia_package("factory_store_providers") {
  deps = [ ":factory_store_providers_comp" ]
}

config_data("config") {
  for_pkg = "sysmgr"

  sources = [ "factory_store_providers.config" ]
}

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

  deps = [
    "//garnet/lib/rust/io_util",
    "//sdk/fidl/fuchsia.factory:fuchsia.factory-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/storage/fuchsia-vfs-watcher",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:thiserror",
  ]

  sources = [ "tests/factory_store_providers_test.rs" ]
}

test_files = [
  "alpha_file",
  "another_cast_file",
  "failed_widevine_file",
  "ignored_misc_file",
  "multi_validated_file",
  "other/misc",
  "passed_misc_file",
  "pr/file1",
  "some_cast_file",
  "weave_file",
  "widevine_file",
]

zbi_deps = []
foreach(file, test_files) {
  name = "zbi_$file"
  zbi_deps += [ ":$name" ]
  resource(name) {
    testonly = true
    sources = [ "testdata/input/$file" ]
    outputs = [ file ]
  }
}

test_file_resources = []
foreach(file, test_files) {
  name = "test_resource_$file"
  test_file_resources += [ ":$name" ]
  resource(name) {
    testonly = true
    sources = [ "testdata/input/$file" ]
    outputs = [ "data/{{source_file_part}}" ]
  }
}

zbi("items") {
  testonly = true
  cpu = ""  # Mark the zbi as incomplete.
  compress = false
  deps = zbi_deps
}

items_zbi_outputs = get_target_outputs(":items")

resource("factory_ext4_image") {
  testonly = true
  sources = [ "testdata/factory_ext4.img" ]
  outputs = [ "data/factory_ext4.img" ]
}

fuchsia_test_component("factory_store_providers_ext4_test_comp") {
  component_name = "factory_store_providers_ext4_test"
  manifest = "meta/factory_store_providers_ext4_test.cmx"
  deps = [ ":factory_store_providers_test" ]
}

fuchsia_test_package("factory_store_providers_ext4_tests") {
  test_components = [ ":factory_store_providers_ext4_test_comp" ]
  deps = [
           "//src/storage/ext4/server:ext4_readonly_comp",
           ":factory_store_providers_comp",

           ":factory_store_providers_ext4_tests_config",

           ":factory_ext4_image",
         ] + test_file_resources
}

resource("items_zbi") {
  testonly = true
  sources = [ items_zbi_outputs[0] ]
  outputs = "data/items.zbi"
  deps = [ ":items" ]
}

resource("fake_factory_items_json") {
  testonly = true
  sources = [ "testdata/fake_factory_items.json" ]
  outputs = "data/fake_factory_items.json"
}

fuchsia_component("fake_factory_items_comp") {
  component_name = "fake_factory_items"
  manifest = "../fake_factory_items/meta/fake_factory_items.cmx"
  deps = [ "../fake_factory_items:bin" ]
}

fuchsia_test_component("factory_store_providers_test_comp") {
  component_name = "factory_store_providers_test"
  manifest = "meta/factory_store_providers_test.cmx"
  deps = [ ":factory_store_providers_test" ]
}

fuchsia_unittest_component("factory_store_providers_bin_test_comp") {
  component_name = "factory_store_providers_bin_test"
  deps = [ ":bin_test" ]
}

fuchsia_test_package("factory_store_providers_tests") {
  test_components = [
    ":factory_store_providers_bin_test_comp",
    ":factory_store_providers_test_comp",
  ]
  deps = [
           ":factory_store_providers_comp",
           ":fake_factory_items_comp",

           ":factory_store_providers_tests_config",

           ":items_zbi",
           ":fake_factory_items_json",
         ] + test_file_resources
}

config_data("factory_store_providers_ext4_tests_config") {
  for_pkg = "factory_store_providers_ext4_tests"

  sources = [
    "testdata/factory.config",
    "testdata/fuchsia.factory.AlphaFactoryStoreProvider.config",
    "testdata/fuchsia.factory.CastCredentialsFactoryStoreProvider.config",
    "testdata/fuchsia.factory.MiscFactoryStoreProvider.config",
    "testdata/fuchsia.factory.PlayReadyFactoryStoreProvider.config",
    "testdata/fuchsia.factory.WeaveFactoryStoreProvider.config",
    "testdata/fuchsia.factory.WidevineFactoryStoreProvider.config",
  ]
}

config_data("factory_store_providers_tests_config") {
  for_pkg = "factory_store_providers_tests"

  sources = [
    "testdata/fuchsia.factory.AlphaFactoryStoreProvider.config",
    "testdata/fuchsia.factory.CastCredentialsFactoryStoreProvider.config",
    "testdata/fuchsia.factory.MiscFactoryStoreProvider.config",
    "testdata/fuchsia.factory.PlayReadyFactoryStoreProvider.config",
    "testdata/fuchsia.factory.WeaveFactoryStoreProvider.config",
    "testdata/fuchsia.factory.WidevineFactoryStoreProvider.config",
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":factory_store_providers_ext4_tests",
    ":factory_store_providers_tests",
  ]
}
