# 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/driver_test_realm.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.
#
#   component_deps (optional)
#     Additional dependencies applied to every component
template("fs_test_suite") {
  suite_name = target_name

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

  if (defined(invoker.component_deps)) {
    extra_deps = invoker.component_deps
  } else {
    extra_deps = []
  }

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

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

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

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

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

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

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

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

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

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

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

  storage_driver_test_realm_v2_component("${suite_name}-full-tests") {
    deps = [ "//src/storage/fs_test:full_tests" ] + extra_deps
  }

  storage_driver_test_realm_v2_component("${suite_name}-inspect-tests") {
    deps = [ "//src/storage/fs_test:inspect_tests" ] + extra_deps
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  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}-full-tests",
      ":${suite_name}-inspect-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, "*")
    }
  }

  if (defined(invoker.component_deps)) {
    extra_deps = invoker.component_deps
  } else {
    extra_deps = []
  }

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

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

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

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

  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
    }
  }
}
