# 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/components.gni")
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")

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