# 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/images/fvm.gni")
import("//build/test.gni")
import("//src/lib/isolated_devmgr/v2_component/isolated_devmgr.gni")
import("//src/sys/build/fuchsia_component.gni")
import("//src/sys/build/fuchsia_test_package.gni")

source_set("options") {
  public = [ "options.h" ]
  public_deps = [ "//src/storage/volume_image:volume-descriptor" ]
}

source_set("fvm-descriptor") {
  sources = [ "fvm_descriptor.cc" ]
  public = [ "fvm_descriptor.h" ]
  public_deps = [
    ":options",
    "//src/storage/volume_image:partition",
    "//zircon/public/lib/fit",
  ]
  deps = [
    "//src/storage/fvm",
    "//src/storage/volume_image/utils:block-utils",
  ]
}

source_set("fvm-sparse-image") {
  sources = [
    "fvm_sparse_image.cc",
    "fvm_sparse_image_reader.cc",
  ]
  public = [ "fvm_sparse_image.h" ]
  public_deps = [
    ":fvm-descriptor",
    "//src/storage/fvm",
    "//src/storage/volume_image/utils:compression-interfaces",
    "//src/storage/volume_image/utils:io-interfaces",
  ]
  deps = [
    "//src/storage/volume_image/utils:block-utils",
    "//src/storage/volume_image/utils:lz4-compression",
  ]
}

# This source set is included in the volume image test package in the directory above.
source_set("fvm-test") {
  testonly = true
  sources = [
    "fvm_descriptor_test.cc",
    "fvm_sparse_image_test.cc",
  ]
  deps = [
    ":fvm-descriptor",
    ":fvm-sparse-image",
    "//sdk/lib/stdcompat",
    "//src/lib/json_parser",
    "//src/storage/fvm",
    "//src/storage/volume_image/serialization:schema",
    "//src/storage/volume_image/utils:guid",
    "//src/storage/volume_image/utils:lz4-compression",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
    "//zircon/public/lib/lz4",
  ]
}

test_data_image_path = "$target_out_dir/test_data.blk"
test_blob_image_path = "$target_out_dir/test_blob.blk"

compiled_action("test_data.blk") {
  testonly = true
  visibility = [ ":*" ]
  tool = "//zircon/tools/minfs"
  outputs = [ test_data_image_path ]
  args = [
    rebase_path(test_data_image_path, root_build_dir),
    "create",
  ]
}

compiled_action("test_blob.blk") {
  testonly = true
  visibility = [ ":*" ]
  tool = "//zircon/tools/blobfs"
  outputs = [ test_blob_image_path ]
  args = [
    rebase_path(test_blob_image_path, root_build_dir),
    "create",
  ]
}

test_fvm_data_partition = {
  type = "data"
  dep = ":test_data.blk"
  minimum_inodes =
      "600000"  # Deliberately chosen so that partition is expanded.
  minimum_data_bytes = "10M"
  maximum_bytes = "218103808"
}

test_fvm_blob_partition = {
  type = "blob"
  dep = ":test_blob.blk"
  minimum_inodes = blobfs_minimum_inodes
  minimum_data_bytes = blobfs_minimum_data_bytes
  maximum_bytes = blobfs_maximum_bytes
}

generate_fvm("test_fvm.sparse.blk") {
  testonly = true
  output_name = "$target_out_dir/test_fvm.sparse.blk"
  deps = [
    ":test_blob.blk",
    ":test_data.blk",
  ]
  args = fvm_sparse_args
  partitions = [
    # Place blobfs first, since it is A/B enabled (thus allocates extra slices for B-copies of some
    # metadata) and bugs are likely to be detected in partitions added after this partition.
    test_fvm_blob_partition,
    test_fvm_data_partition,
  ]
}

resource("test_fvm.sparse.blk-resource") {
  testonly = true
  sources = [ "$target_out_dir/test_fvm.sparse.blk" ]
  outputs = [ "data/{{source_file_part}}" ]
  deps = [ ":test_fvm.sparse.blk" ]
}

test("fvm_sparse_image_reader_test") {
  testonly = true
  sources = [ "fvm_sparse_image_reader_test.cc" ]
  deps = [
    ":fvm-sparse-image",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/isolated_devmgr/v2_component:client",
    "//src/storage/volume_image/ftl:ftl-image",
    "//src/storage/volume_image/utils:fd-io",
    "//third_party/googletest:gtest",
    "//zircon/public/lib/fbl",
    "//zircon/system/ulib/block-client",
    "//zircon/system/ulib/fs-management",
  ]
}

isolated_devmgr_unittest_v2_component(
    "fvm-sparse-image-reader-tests-component") {
  component_name = "fvm-sparse-image-reader-tests"
  executable_path = "test/fvm_sparse_image_reader_test"
  deps = [
    ":fvm_sparse_image_reader_test",
    ":test_fvm.sparse.blk-resource",
  ]
}

fuchsia_test_package("fvm-sparse-image-reader-tests") {
  test_components = [ ":fvm-sparse-image-reader-tests-component" ]
}

group("tests") {
  testonly = true
  deps = [
    ":fvm-sparse-image-reader-tests",
    "//src/lib/isolated_devmgr/v2_component",
  ]
}
