# Copyright 2016 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/test_package.gni")
import("//build/testing/environments.gni")

# Public targets
group("ledger") {
  testonly = true
  deps = [
    ":ledger_tests",
    ":tests",
    "bin",
    "cloud_provider_in_memory",
    "lib",
    "third_party",
  ]
}

group("bin") {
  deps = [ "bin" ]
}

group("tests") {
  testonly = true
  deps = [
    ":ledger_tests",
    "third_party/bup:bup_tests",
    "//src/ledger/bin",
    "//src/ledger/bin:ledger_fuzzers",
    "//src/ledger/bin/testing/ledger_test_instance_provider:ledger_test_instance_provider",
    "//src/ledger/cloud_provider_in_memory/bin",
  ]
}

group("host_tests") {
  testonly = true
  public_deps = [ "//src/ledger/bin:ledger_host_tests($host_toolchain)" ]
}

# Private targets
visibility = [ "//src/ledger/*" ]

config("ledger_config") {
  asmflags = []

  cflags = [
    # Remove when enabled globally by TO-99.
    "-Wunused-lambda-capture",

    # Remove when enabled globally by TO-100.
    "-Wuser-defined-warnings",

    # Warn about unreachable code.
    "-Wunreachable-code",
  ]

  ldflags = [
    # Use a 1M stack.
    "-Wl,-z,stack-size=0x100000",
  ]
}

package("ledger_tests") {
  testonly = true
  rootjob_svc = "//build"

  deps = [
    "//src/ledger/bin:ledger_unittests",
    "//src/ledger/bin/testing:run_all_unittests_test",
    "//src/ledger/bin/tests/cloud_provider",
    "//src/ledger/bin/tests/e2e_local",
    "//src/ledger/bin/tests/integration",
    "//src/ledger/bin/tests/integration:integration_diff_compatibility",
    "//src/ledger/cloud_provider_in_memory:cloud_provider_in_memory_unittests",
    "//src/ledger/cloud_provider_in_memory/bin:tests",
    "//src/ledger/lib:ledger_lib_unittests",
  ]

  meta = [
    {
      path = rebase_path("//src/ledger/bin/tests/ledger_unittests.cmx")
      dest = "ledger_unittests.cmx"
    },
    {
      path = rebase_path(
              "//src/ledger/bin/tests/integration/ledger_integration_tests.cmx")
      dest = "ledger_integration_tests.cmx"
    },
    {
      path = rebase_path(
              "//src/ledger/bin/tests/integration/ledger_integration_tests_diff_compatibility.cmx")
      dest = "ledger_integration_tests_diff_compatibility.cmx"
    },
    {
      path =
          rebase_path("//src/ledger/bin/tests/e2e_local/ledger_e2e_local.cmx")
      dest = "ledger_e2e_local.cmx"
    },
    {
      path = rebase_path("//src/ledger/lib/ledger_lib_unittests.cmx")
      dest = "ledger_lib_unittests.cmx"
    },
    {
      path = rebase_path(
              "//src/ledger/cloud_provider_in_memory/bin/validation/validation_in_memory.cmx")
      dest = "validation_in_memory.cmx"
    },
    {
      path = rebase_path(
              "//src/ledger/cloud_provider_in_memory/cloud_provider_in_memory_unittests.cmx")
      dest = "cloud_provider_in_memory_unittests.cmx"
    },
    {
      # This test must be started by validation_in_memory or
      # validation_in_memory and will fail if started on its own.
      path = rebase_path(
              "//src/ledger/bin/tests/cloud_provider/cloud_provider_validation_tests.cmx")
      dest = "cloud_provider_validation_tests.cmx"
    },
    {
      path = rebase_path("//src/ledger/bin/testing/run_all_unittests_test.cmx")
      dest = "run_all_unittests_test.cmx"
    },
  ]

  # Disable tests in arm64-debug builds until fxb/42434 is resolved.
  integration_envs = [ nuc_env ]
  if (target_cpu != "arm64" || !is_debug) {
    integration_envs += [ qemu_env ]
  }

  tests = [
    {
      name = "ledger_unittests"
      environments = basic_envs
    },
    {
      name = "ledger_integration_tests"
      environments = integration_envs
    },
    {
      name = "ledger_integration_tests_diff_compatibility"
      environments = integration_envs
    },
    {
      name = "ledger_e2e_local"
      environments = basic_envs
    },
    {
      name = "ledger_lib_unittests"
      environments = basic_envs
    },
    {
      name = "validation_in_memory"
      environments = basic_envs
    },
    {
      name = "cloud_provider_in_memory_unittests"
      environments = basic_envs
    },
    {
      name = "run_all_unittests_test"
      environments = basic_envs
    },
    {
      name = "cloud_provider_validation_tests"

      # This test must be started by validation_in_memory and will fail if started on its own.
      # Marking it as disabled puts the binary in `test/disabled/` under the
      # package directory.
      disabled = true
      environments = basic_envs
    },
  ]
}
