# Copyright 2017 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/package.gni")
import("//peridot/bin/ledger/testing/sync_params.gni")

visibility = [ "//peridot/bin/ledger/*" ]

package("ledger_benchmarks") {
  testonly = true

  deps = [
    "//peridot/bin/ledger/tests/benchmark/backlog",
    "//peridot/bin/ledger/tests/benchmark/convergence",
    "//peridot/bin/ledger/tests/benchmark/delete_entry",
    "//peridot/bin/ledger/tests/benchmark/disk_space",
    "//peridot/bin/ledger/tests/benchmark/fetch",
    "//peridot/bin/ledger/tests/benchmark/get_page",
    "//peridot/bin/ledger/tests/benchmark/put",
    "//peridot/bin/ledger/tests/benchmark/sync",
    "//peridot/bin/ledger/tests/benchmark/update_entry",
  ]

  meta = [
    {
      path = rebase_path("backlog/backlog.cmx")
      dest = "backlog.cmx"
    },
    {
      path = rebase_path("get_page/get_page.cmx")
      dest = "get_page.cmx"
    },
    {
      path = rebase_path("delete_entry/delete_entry.cmx")
      dest = "delete_entry.cmx"
    },
    {
      path = rebase_path("disk_space/disk_space.cmx")
      dest = "disk_space.cmx"
    },
    {
      path = rebase_path("convergence/convergence.cmx")
      dest = "convergence.cmx"
    },
    {
      path = rebase_path("fetch/fetch.cmx")
      dest = "fetch.cmx"
    },
    {
      path = rebase_path("put/put.cmx")
      dest = "put.cmx"
    },
    {
      path = rebase_path("sync/sync.cmx")
      dest = "sync.cmx"
    },
    {
      path = rebase_path("update_entry/update_entry.cmx")
      dest = "update_entry.cmx"
    },
  ]

  binaries = [
    {
      name = "ledger_benchmark_backlog"
    },

    {
      name = "ledger_benchmark_get_page"
    },

    {
      name = "ledger_benchmark_delete_entry"
    },

    {
      name = "ledger_benchmark_disk_space"
    },

    {
      name = "ledger_benchmark_convergence"
    },

    {
      name = "ledger_benchmark_fetch"
    },

    {
      name = "ledger_benchmark_put"
    },

    {
      name = "ledger_benchmark_sync"
    },

    {
      name = "ledger_benchmark_update_entry"
    },
  ]

  resources = [
    {
      path = rebase_path("get_page/add_new_page.tspec")
      dest = "add_new_page.tspec"
    },

    {
      path = rebase_path("get_page/add_new_page_precached.tspec")
      dest = "add_new_page_precached.tspec"
    },

    {
      path = rebase_path("backlog/backlog.tspec")
      dest = "backlog.tspec"
    },

    {
      path = rebase_path("backlog/backlog_big_entry.tspec")
      dest = "backlog_big_entry.tspec"
    },

    {
      path = rebase_path("backlog/backlog_big_entry_updates.tspec")
      dest = "backlog_big_entry_updates.tspec"
    },

    {
      path = rebase_path("backlog/backlog_many_big_entries.tspec")
      dest = "backlog_many_big_entries.tspec"
    },

    {
      path = rebase_path("backlog/backlog_many_small_entries.tspec")
      dest = "backlog_many_small_entries.tspec"
    },

    {
      path = rebase_path("backlog/backlog_small_entry_updates.tspec")
      dest = "DISABLED_backlog_small_entry_updates.tspec"
    },

    {
      path = rebase_path("delete_entry/disk_space_cleared_page.tspec")
      dest = "disk_space_cleared_page.tspec"
    },

    {
      path = rebase_path("disk_space/entries.tspec")
      dest = "disk_space_entries.tspec"
    },

    {
      path = rebase_path("disk_space/empty_ledger.tspec")
      dest = "disk_space_empty_ledger.tspec"
    },

    {
      path = rebase_path("disk_space/empty_pages.tspec")
      dest = "disk_space_empty_pages.tspec"
    },

    {
      path = rebase_path("disk_space/small_keys.tspec")
      dest = "disk_space_small_keys.tspec"
    },

    {
      path = rebase_path("disk_space/one_commit_per_entry.tspec")
      dest = "disk_space_one_commit_per_entry.tspec"
    },

    {
      path = rebase_path("backlog/disk_space_synced_updates.tspec")
      dest = "disk_space_synced_updates.tspec"
    },

    {
      path = rebase_path("backlog/disk_space_synced_entries.tspec")
      dest = "disk_space_synced_entries.tspec"
    },

    {
      path = rebase_path("backlog/disk_space_synced_entries_small_keys.tspec")
      dest = "disk_space_synced_entries_small_keys.tspec"
    },

    {
      path = rebase_path("disk_space/updates.tspec")
      dest = "disk_space_updates.tspec"
    },

    {
      path = rebase_path("get_page/get_same_page.tspec")
      dest = "get_same_page.tspec"
    },

    {
      path = rebase_path("get_page/get_page_id.tspec")
      dest = "get_page_id.tspec"
    },

    {
      path = rebase_path("convergence/convergence.tspec")
      dest = "convergence.tspec"
    },

    {
      path = rebase_path("convergence/multidevice_convergence.tspec")
      dest = "multidevice_convergence.tspec"
    },

    {
      path = rebase_path("put/transaction.tspec")
      dest = "transaction.tspec"
    },

    {
      path = rebase_path("put/put.tspec")
      dest = "put.tspec"
    },

    {
      path = rebase_path("put/put_big_entry.tspec")
      dest = "put_big_entry.tspec"
    },

    {
      path = rebase_path("put/put_as_reference.tspec")
      dest = "put_as_reference.tspec"
    },

    {
      path = rebase_path("sync/sync.tspec")
      dest = "sync.tspec"
    },

    {
      path = rebase_path("sync/sync_big_change.tspec")
      dest = "sync_big_change.tspec"
    },

    {
      path = rebase_path("update_entry/update_entry.tspec")
      dest = "update_entry.tspec"
    },

    {
      path = rebase_path("update_entry/update_big_entry.tspec")
      dest = "update_big_entry.tspec"
    },

    {
      path = rebase_path("update_entry/update_entry_transactions.tspec")
      dest = "update_entry_transactions.tspec"
    },

    {
      path = rebase_path("fetch/fetch.tspec")
      dest = "fetch.tspec"
    },

    {
      path = rebase_path("fetch/fetch_partial_big_entry.tspec")
      dest = "fetch_partial_big_entry.tspec"
    },

    {
      path = rebase_path("delete_entry/delete_entry.tspec")
      dest = "delete_entry.tspec"
    },

    {
      path = rebase_path("delete_entry/delete_entry_transactions.tspec")
      dest = "delete_entry_transactions.tspec"
    },

    {
      path = rebase_path("delete_entry/delete_big_entry.tspec")
      dest = "delete_big_entry.tspec"
    },
  ]

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