# Copyright 2020 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/test.gni")

source_set("options") {
  sources = [ "options.cc" ]
  public = [ "options.h" ]
  public_deps = [ "//sdk/lib/fit-promise" ]
}

source_set("volume-descriptor") {
  sources = [ "volume_descriptor.cc" ]
  public = [ "volume_descriptor.h" ]
  public_deps = [
    ":options",
    "utils:guid",
    "//sdk/lib/fit-promise",
    "//third_party/rapidjson",
  ]
}

source_set("address-descriptor") {
  sources = [ "address_descriptor.cc" ]
  public = [ "address_descriptor.h" ]
  public_deps = [
    "//sdk/lib/fit-promise",
    "//zircon/system/ulib/fbl",
  ]

  deps = [ "//third_party/rapidjson" ]
}

source_set("partition") {
  sources = [ "partition.cc" ]
  public = [ "partition.h" ]
  public_deps = [
    ":address-descriptor",
    "//src/storage/volume_image:volume-descriptor",
    "//src/storage/volume_image/utils:io-interfaces",
  ]

  deps = [ "//third_party/rapidjson" ]
}

source_set("volume-descriptor-test") {
  testonly = true
  sources = [
    "address_descriptor_test.cc",
    "options_test.cc",
    "partition_test.cc",
    "volume_descriptor_test.cc",
  ]
  deps = [
    ":address-descriptor",
    ":partition",
    ":volume-descriptor",
    "serialization:schema",
    "//src/lib/json_parser",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

test("storage-volume-image-test") {
  deps = [
    ":volume-descriptor-test",
    "ftl:tests",
    "fvm:fvm-test",
    "serialization:tests",
    "//src/lib/fxl/test:gtest_main",
    "//src/sys/test_runners:tmp_storage",
  ]

  if (is_fuchsia) {
    deps += [ "//sdk/lib/fdio" ]
  }
}

test("storage-volume-image-adapter-test") {
  deps = [
    "adapter:adapter-tests",
    "//src/lib/fxl/test:gtest_main",
    "//src/sys/test_runners:tmp_storage",
  ]

  if (is_fuchsia) {
    deps += [ "//sdk/lib/fdio" ]
  }
}

test("storage-volume-image-utils-test") {
  deps = [
    "utils:tests",
    "//src/lib/fxl/test:gtest_main",
    "//src/sys/test_runners:tmp_storage",
  ]

  if (is_fuchsia) {
    deps += [ "//sdk/lib/fdio" ]
  }
}

test("storage-volume-image-integration-test") {
  deps = [
    "ftl:integration-tests",
    "//src/lib/fxl/test:gtest_main",
    "//src/sys/test_runners:tmp_storage",
  ]

  if (is_fuchsia) {
    deps += [ "//sdk/lib/fdio" ]
  }
}

resource("serialization-schemas") {
  sources = [
    "serialization/address_descriptor.schema.json",
    "serialization/blob_manifest.schema.json",
    "serialization/volume_descriptor.schema.json",
    "serialization/volume_image.schema.json",
  ]
  outputs = [ "data/schema/{{source_file_part}}" ]
}

fuchsia_unittest_component("storage-volume-image-test-component") {
  deps = [
    ":serialization-schemas",
    ":storage-volume-image-test",
  ]
}

fuchsia_unittest_component("storage-volume-image-integration-test-component") {
  deps = [ ":storage-volume-image-integration-test" ]
}

fuchsia_unittest_component("storage-volume-image-adapter-test-component") {
  deps = [
    ":storage-volume-image-adapter-test",
    "adapter:adapter-test-images",
  ]
}

fuchsia_unittest_component("storage-volume-image-utils-test-component") {
  deps = [ ":storage-volume-image-utils-test" ]
}

fuchsia_test_package("storage-volume-image-tests") {
  test_components = [
    ":storage-volume-image-test-component",
    ":storage-volume-image-adapter-test-component",
    ":storage-volume-image-integration-test-component",
    ":storage-volume-image-utils-test-component",
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":storage-volume-image-integration-test($host_toolchain)",
    ":storage-volume-image-test($host_toolchain)",
    ":storage-volume-image-tests",
    "adapter:tests",
    "fvm:tests",
  ]
}
