# 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/fuzzing/fuzzer.gni")
import("//build/package.gni")
import("//build/testing/secret_spec.gni")
import("//peridot/bin/ledger/testing/sync_params.gni")

visibility = [ "//peridot/*" ]

package("ledger") {
  deprecated_bare_package_url = "//build"

  deps = [
    "app",
    "cobalt:ledger_metrics_registry",
  ]

  binary = "ledger"

  meta = [
    {
      path = rebase_path("meta/ledger.cmx")
      dest = "ledger.cmx"
    },
  ]

  resources = [
    {
      path = rebase_path(
              get_label_info("cobalt:ledger_metrics_registry",
                             "target_gen_dir") + "/ledger_metrics_registry.pb")
      dest = "ledger_cobalt_config.pb"
    },
    {
      path = rebase_path(
              get_label_info("cobalt:ledger_metrics_registry",
                             "target_gen_dir") + "/ledger_metrics_registry.pb")
      dest = "firebase_auth_cobalt_config.pb"
    },
  ]
}

package("ledger_tests") {
  deprecated_bare_package_url = "//build"

  testonly = true

  deps = [
    ":ledger_e2e_sync_credentials",
    ":ledger_unittests",
    "//peridot/bin/cloud_provider_firestore:tests",
    "//peridot/bin/ledger/tests/cloud_provider",
    "//peridot/bin/ledger/tests/e2e_local",
    "//peridot/bin/ledger/tests/e2e_sync",
    "//peridot/bin/ledger/tests/integration",
  ]

  meta = [
    {
      path = rebase_path("tests/ledger_unittests.cmx")
      dest = "ledger_unittests.cmx"
    },
    {
      path = rebase_path("tests/integration/ledger_integration_tests.cmx")
      dest = "ledger_integration_tests.cmx"
    },
    {
      path = rebase_path("tests/e2e_local/ledger_e2e_local.cmx")
      dest = "ledger_e2e_local.cmx"
    },
    {
      path = rebase_path("tests/e2e_sync/ledger_e2e_sync.cmx")
      dest = "ledger_e2e_sync.cmx"
    },
    {
      path = rebase_path(
              "//peridot/bin/cloud_provider_firestore/cloud_provider_firestore_unittests.cmx")
      dest = "cloud_provider_firestore_unittests.cmx"
    },
    {
      path = rebase_path(
              "//peridot/bin/cloud_provider_firestore/validation/validation_firestore.cmx")
      dest = "validation_firestore.cmx"
    },
    {
      # This test must be started by validation_firestore and will fail if started on its own.
      path = rebase_path("tests/cloud_provider/cloud_provider_validation_tests.cmx")
      dest = "cloud_provider_validation_tests.cmx"
    },
  ]

  tests = [
    {
      name = "ledger_unittests"
    },
    {
      name = "ledger_integration_tests"
    },
    {
      name = "ledger_e2e_local"
    },
    {
      name = "cloud_provider_firestore_unittests"
    },

    {
      name = "ledger_e2e_sync"

      # This test needs additional configuration and should not run by default.
      # Marking it as disabled puts the binary in `test/disabled/` under the
      # package directory.
      disabled = true
    },
    {
      name = "launch_validation_tests_firestore"

      # This test needs additional configuration and should not run by default.
      # Marking it as disabled puts the binary in `test/disabled/` under the
      # package directory.
      disabled = true
    },
    {
      name = "cloud_provider_validation_tests"

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

  resources = []
  if (ledger_sync_credentials_file != "") {
    resources += [
      {
        path = ledger_sync_credentials_file
        dest = "sync_credentials.json"
      },
    ]
  }
}

secret_spec("ledger_e2e_sync_credentials") {
  key_name = "ledger-tests-remote"

  ciphertext_file = "ledger_e2e_sync_credentials.ciphertext"
}

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",
  ]
}

executable("ledger_unittests") {
  testonly = true

  deps = [
    "//garnet/public/lib/fxl:fxl_printers",
    "//peridot/bin/ledger/app:unittests",
    "//peridot/bin/ledger/cache:unittests",
    "//peridot/bin/ledger/cloud_sync/impl:unittests",
    "//peridot/bin/ledger/coroutine:unittests",
    "//peridot/bin/ledger/coroutine/context:unittests",
    "//peridot/bin/ledger/encryption/impl:unittests",
    "//peridot/bin/ledger/encryption/primitives:unittests",
    "//peridot/bin/ledger/environment:unittests",
    "//peridot/bin/ledger/fidl/error_notifier:unittests",
    "//peridot/bin/ledger/filesystem:unittests",
    "//peridot/bin/ledger/lock:unittests",
    "//peridot/bin/ledger/p2p_provider/impl:unittests",
    "//peridot/bin/ledger/p2p_sync/impl:unittests",
    "//peridot/bin/ledger/storage/impl:unittests",
    "//peridot/bin/ledger/storage/impl/btree:unittests",
    "//peridot/bin/ledger/storage/public:unittests",
    "//peridot/bin/ledger/storage/testing:unittests",
    "//peridot/bin/ledger/sync_helper:unittests",
    "//peridot/bin/ledger/testing:unittests",
    "//peridot/bin/ledger/testing/netconnector:unittests",
    "//third_party/googletest:gtest_main",
  ]

  configs += [ ":ledger_config" ]
}

fuzz_package("ledger_fuzzers") {
  targets = [ "//peridot/bin/ledger/storage/impl/btree:encoding_fuzzer" ]
  sanitizers = [
    "asan",
    "ubsan",
  ]
}
