# 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("//src/ledger/bin/testing/sync_params.gni")

group("benchmark") {
  testonly = true
  deps = [
    ":ledger_benchmarks",
    "backlog",
    "convergence",
    "delete_entry",
    "disk_space",
    "fetch",
    "get_entry",
    "get_page",
    "put",
    "sync",
    "update_entry",
  ]
}

visibility = [ "//src/ledger/*" ]

package("ledger_benchmarks") {
  testonly = true

  deps = [
    "//src/ledger/bin/tests/benchmark/backlog",
    "//src/ledger/bin/tests/benchmark/convergence",
    "//src/ledger/bin/tests/benchmark/delete_entry",
    "//src/ledger/bin/tests/benchmark/disk_space",
    "//src/ledger/bin/tests/benchmark/fetch",
    "//src/ledger/bin/tests/benchmark/get_entry",
    "//src/ledger/bin/tests/benchmark/get_page",
    "//src/ledger/bin/tests/benchmark/put",
    "//src/ledger/bin/tests/benchmark/sync",
    "//src/ledger/bin/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("get_entry/get_entry.cmx")
      dest = "get_entry.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_get_entry"
    },

    {
      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("get_page/add_new_page_after_clear.tspec")
      dest = "add_new_page_after_clear.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("get_entry/get_small_entry.tspec")
      dest = "get_small_entry.tspec"
    },

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

    {
      path = rebase_path("get_entry/get_big_entry.tspec")
      dest = "get_big_entry.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_memory.tspec")
      dest = "put_memory.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"
      },
    ]
  }
}
