# 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/test.gni")
import("//third_party/protobuf/proto_library.gni")
import("$cobalt_root/metrics_registry.gni")

declare_args() {
  extra_package_labels = []
}

config("cobalt_config") {
  include_dirs = [
    "$cobalt_root",
    "$root_gen_dir/third_party/cobalt",
  ]

  if (is_fuchsia_tree) {
    include_dirs += [
      "//garnet/public/lib/syslog/cpp",
      "//zircon/system/ulib/syslog/include",
    ]
  }
}

metrics_registry("registry") {
  global = true
}

group("tests") {
  testonly = true
  deps = [
    "keys:tests",
    "src:tests",
  ]
}

test("cobalt_core_unittests") {
  testonly = true

  output_name = "cobalt_core_tests"

  deps = [
    ":tests",
    "//third_party/boringssl:crypto",
    "//third_party/googletest:gtest_main",
  ]
}

if (is_fuchsia_tree) {
  import("//build/test/test_package.gni")

  test_package("cobalt_core_tests") {
    deps = [
      ":cobalt_core_unittests",
    ]

    tests = [
      {
        name = "cobalt_core_tests"
      },
    ]
  }
}

testonly = true
group("default") {
  deps = [
    ":cobalt_core_unittests",
    "$cobalt_root/src/bin/config_change_validator/src:bin",
    "$cobalt_root/src/bin/test_app",
  ]

  deps += extra_package_labels
}
