# 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/test.gni")
import("//build/unification/images/migrated_manifest.gni")

template("blobfs_large_integration_test") {
  test_case_sources = invoker.sources
  test_target_name = "blobfs-large-integration-${target_name}"
  test(test_target_name) {
    # Dependent manifests unfortunately cannot be marked as `testonly`.
    # TODO(44278): Remove when converting this file to proper GN build idioms.
    testonly = false
    configs += [ "//build/unification/config:zircon-migrated" ]
    fdio_config = [ "//build/config/fuchsia:fdio_config" ]
    if (configs + fdio_config - fdio_config != configs) {
      configs -= fdio_config
    }
    test_group = "fs"
    sources = [ "integration/large/main.cc" ]
    sources += test_case_sources
    include_dirs = [ "integration" ]
    deps = [
      ":integration-fixtures",
      ":load-generator",
      ":test-utils",
      "//zircon/public/lib/async-loop",
      "//zircon/public/lib/async-loop-default",
      "//zircon/public/lib/fdio",
      "//zircon/public/lib/fdio-caller",
      "//zircon/public/lib/fvm",
      "//zircon/public/lib/memfs",
      "//zircon/public/lib/zxtest",
      "//zircon/system/fidl/fuchsia-sysinfo:llcpp",
      "//zircon/system/ulib/blobfs",
      "//zircon/system/ulib/fs-test-utils",
      "//zircon/system/ulib/fs/test_support",
    ]
  }

  paged_target_name = "${test_target_name}-paged"
  test(paged_target_name) {
    # Dependent manifests unfortunately cannot be marked as `testonly`.
    # TODO(44278): Remove when converting this file to proper GN build idioms.
    testonly = false
    configs += [ "//build/unification/config:zircon-migrated" ]
    fdio_config = [ "//build/config/fuchsia:fdio_config" ]
    if (configs + fdio_config - fdio_config != configs) {
      configs -= fdio_config
    }
    test_group = "fs"
    sources = [
      "integration/large/paged_main.cc",
      "integration/launch.cc",
    ]
    include_dirs = [ "integration" ]
    deps = [
      "//zircon/public/lib/fdio",
      "//zircon/public/lib/zx",
    ]
    defines = [
      "BLOBFS_LARGE_INTEGRATION_TEST_EXECUTABLE=\"${test_target_name}-test\"",
    ]
  }

  migrated_manifest("${test_target_name}-manifest") {
    deps = [ ":${test_target_name}" ]
  }
  migrated_manifest("${paged_target_name}-manifest") {
    deps = [ ":${paged_target_name}" ]
  }
}
