# Copyright 2021 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/dist/generated_resource.gni")
import("//build/json/validate_json.gni")
import("//build/test.gni")
import("//src/storage/testing/isolated_devmgr.gni")

# Generates config that will work with the filesystem test framework.
#
#   data_deps (optional)
#     Additional dependencies to be included with the config
template("fs_test_config") {
  name = target_name
  generated_resource("${name}_fs_test_config") {
    testonly = true
    if (defined(invoker.data_deps)) {
      data_deps = invoker.data_deps
    }
    contents = {
      forward_variables_from(invoker, "*", [ "data_deps" ])
    }
    if (!defined(contents.name)) {
      contents.name = name
    }
    if (!defined(contents.binary_path) && !defined(contents.disk_format) &&
        !defined(contents.library)) {
      contents.binary_path = "/pkg/bin/${name}"
    }
    output_conversion = "json"
    outputs = [ "config/config.json" ]
  }

  config_outputs = get_target_outputs(":${name}_fs_test_config")

  validate_json("${name}_validate_fs_test_config") {
    testonly = true
    data = config_outputs[0]
    schema = "//src/storage/fs_test/fs_test.schema.json"
    deps = [ ":${name}_fs_test_config" ]
  }
}

# Instantiates a filesystem test suite.
#
#   config (optional)
#     Configures the test suite.  See //src/storage/fs_test/fs_test.schema.json for the schema.  The
#     name and binary_path properties will be derived from the target name if not specified.  If not
#     specified, the caller should ensure suitable config is included via deps.
#
#   deps (required)
#     This should include the filesystem binary and the config file if not specified above.
#
#   omit_components (optional)
#     Omit test components from the package.
#
#   extra_components (optional)
#     Additional test components to be included in the package.
template("fs_test_suite") {
  suite_name = target_name

  if (defined(invoker.config)) {
    fs_test_config(suite_name) {
      forward_variables_from(invoker.config, "*")
    }
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-access-tests") {
    deps = [ "//src/storage/fs_test:access_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-append-tests") {
    deps = [ "//src/storage/fs_test:append_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-attr-tests") {
    deps = [ "//src/storage/fs_test:attr_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-basic-tests") {
    deps = [ "//src/storage/fs_test:basic_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component(
      "${suite_name}-case-sensitivity-tests") {
    deps = [ "//src/storage/fs_test:case_sensitivity_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-clone-tests") {
    deps = [ "//src/storage/fs_test:clone_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-corrupt-tests") {
    deps = [ "//src/storage/fs_test:corrupt_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component(
      "${suite_name}-directory-tests") {
    deps = [ "//src/storage/fs_test:directory_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-dot-dot-tests") {
    deps = [ "//src/storage/fs_test:dot_dot_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-fcntl-tests") {
    deps = [ "//src/storage/fs_test:fcntl_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component(
      "${suite_name}-filename-tests") {
    deps = [ "//src/storage/fs_test:filename_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-link-tests") {
    deps = [ "//src/storage/fs_test:link_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-lseek-tests") {
    deps = [ "//src/storage/fs_test:lseek_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-mmap-tests") {
    deps = [ "//src/storage/fs_test:mmap_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-open-tests") {
    deps = [ "//src/storage/fs_test:open_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component(
      "${suite_name}-overflow-tests") {
    deps = [ "//src/storage/fs_test:overflow_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-persist-tests") {
    deps = [ "//src/storage/fs_test:persist_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component(
      "${suite_name}-query-filesystem-tests") {
    deps = [ "//src/storage/fs_test:query_filesystem_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component(
      "${suite_name}-random-op-tests") {
    deps = [ "//src/storage/fs_test:random_op_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component(
      "${suite_name}-realpath-tests") {
    deps = [ "//src/storage/fs_test:realpath_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-rename-tests") {
    deps = [ "//src/storage/fs_test:rename_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-resize-tests") {
    deps = [ "//src/storage/fs_test:resize_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-rw-tests") {
    deps = [ "//src/storage/fs_test:rw_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component(
      "${suite_name}-rw-workers-tests") {
    deps = [ "//src/storage/fs_test:rw_workers_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-sparse-tests") {
    deps = [ "//src/storage/fs_test:sparse_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-sync-tests") {
    deps = [ "//src/storage/fs_test:sync_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component(
      "${suite_name}-threading-tests") {
    deps = [ "//src/storage/fs_test:threading_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component(
      "${suite_name}-truncate-tests") {
    deps = [ "//src/storage/fs_test:truncate_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-unicode-tests") {
    deps = [ "//src/storage/fs_test:unicode_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-unlink-tests") {
    deps = [ "//src/storage/fs_test:unlink_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component("${suite_name}-watcher-tests") {
    deps = [ "//src/storage/fs_test:watcher_tests" ]
  }

  fuchsia_test_package("${suite_name}-fs-tests") {
    deps = []
    if (defined(invoker.deps)) {
      deps += invoker.deps
    }
    if (defined(invoker.config)) {
      deps += [
        ":${suite_name}_fs_test_config",
        ":${suite_name}_validate_fs_test_config",
      ]
    }
    test_specs = {
      log_settings = {
        max_severity = "ERROR"
      }
    }
    test_components = [
      ":${suite_name}-access-tests",
      ":${suite_name}-append-tests",
      ":${suite_name}-attr-tests",
      ":${suite_name}-basic-tests",
      ":${suite_name}-case-sensitivity-tests",
      ":${suite_name}-clone-tests",
      ":${suite_name}-corrupt-tests",
      ":${suite_name}-directory-tests",
      ":${suite_name}-dot-dot-tests",
      ":${suite_name}-fcntl-tests",
      ":${suite_name}-filename-tests",
      ":${suite_name}-link-tests",
      ":${suite_name}-lseek-tests",
      ":${suite_name}-mmap-tests",
      ":${suite_name}-open-tests",
      ":${suite_name}-overflow-tests",
      ":${suite_name}-persist-tests",
      ":${suite_name}-query-filesystem-tests",
      ":${suite_name}-random-op-tests",
      ":${suite_name}-realpath-tests",
      ":${suite_name}-rename-tests",
      ":${suite_name}-resize-tests",
      ":${suite_name}-rw-tests",
      ":${suite_name}-rw-workers-tests",
      ":${suite_name}-sparse-tests",
      ":${suite_name}-sync-tests",
      ":${suite_name}-threading-tests",
      ":${suite_name}-truncate-tests",
      ":${suite_name}-unicode-tests",
      ":${suite_name}-unlink-tests",
      ":${suite_name}-watcher-tests",
    ]

    if (defined(invoker.omit_components)) {
      test_components -= invoker.omit_components
    }

    if (defined(invoker.extra_components)) {
      test_components += invoker.extra_components
    }
  }
}

# Instantiates filesystem tests that take longer to run.  This takes the same arguments as
# fs_test_suite.
template("slow_fs_test_suite") {
  suite_name = target_name

  if (defined(invoker.config)) {
    fs_test_config(suite_name) {
      forward_variables_from(invoker.config, "*")
    }
  }

  storage_isolated_devmgr_unittest_v2_component(
      "${suite_name}-directory-large-tests") {
    deps = [ "//src/storage/fs_test:directory_large_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component(
      "${suite_name}-max-file-tests") {
    deps = [ "//src/storage/fs_test:max_file_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component(
      "${suite_name}-sparse-large-tests") {
    deps = [ "//src/storage/fs_test:sparse_large_tests" ]
  }

  storage_isolated_devmgr_unittest_v2_component(
      "${suite_name}-truncate-large-tests") {
    deps = [ "//src/storage/fs_test:truncate_large_tests" ]
  }

  fuchsia_test_package("${suite_name}-slow-fs-tests") {
    deps = []
    if (defined(invoker.deps)) {
      deps += invoker.deps
    }
    if (defined(invoker.config)) {
      deps += [
        ":${suite_name}_fs_test_config",
        ":${suite_name}_validate_fs_test_config",
      ]
    }
    test_specs = {
      environments = [
        {
          dimensions = emu_env.dimensions
          tags = [ "slow" ]
        },
      ]
      log_settings = {
        max_severity = "ERROR"
      }
    }

    test_components = [
      ":${suite_name}-directory-large-tests",
      ":${suite_name}-max-file-tests",
      ":${suite_name}-sparse-large-tests",
      ":${suite_name}-truncate-large-tests",
    ]

    if (defined(invoker.omit_components)) {
      test_components -= invoker.omit_components
    }

    if (defined(invoker.extra_components)) {
      test_components += invoker.extra_components
    }
  }
}
