# Copyright 2019 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")

group("tests") {
  testonly = true
  deps = [ ":memory_metrics_tests" ]
}

source_set("utils") {
  testonly = true
  sources = [
    "test_utils.cc",
    "test_utils.h",
  ]
  deps = [
    "//garnet/public/lib/gtest",
    "//src/developer/memory/metrics",
    "//src/lib/fxl",
    "//zircon/public/lib/zx",
  ]
}

executable("memory_metrics_unittests") {
  testonly = true
  output_name = "memory_metrics_unittests"
  sources = [
    "capture_unittest.cc",
    "digest_unittest.cc",
    "printer_unittest.cc",
    "summary_unittest.cc",
    "watcher_unittest.cc",
  ]

  deps = [
    ":utils",
    "//garnet/public/lib/gtest",
    "//sdk/lib/sys/cpp/testing:unit",
    "//src/developer/memory/metrics",
    "//src/lib/fxl/test:gtest_main",
  ]
  public_configs = [ "//build/config:Wno-reorder-init-list" ]
}

test_package("memory_metrics_tests") {
  deps = [
    ":memory_metrics_systemtests",
    ":memory_metrics_unittests",
  ]

  tests = [
    {
      name = "memory_metrics_unittests"
      environments = basic_envs
    },
    {
      name = "memory_metrics_systemtests"
      environments = basic_envs
    },
  ]
}

executable("memory_metrics_systemtests") {
  testonly = true
  output_name = "memory_metrics_systemtests"
  sources = [ "capture_systemtest.cc" ]

  deps = [
    ":utils",
    "//garnet/public/lib/gtest",
    "//sdk/lib/sys/cpp/testing:unit",
    "//src/developer/memory/metrics",
    "//src/lib/fxl/test:gtest_main",
  ]
}
