# 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/test_package.gni")
import("//third_party/protobuf/proto_library.gni")

config("cobalt_config") {
  include_dirs = [
    "//garnet/public/lib/syslog/cpp",
    "//third_party/cobalt",
    "$root_gen_dir/third_party/cobalt",
    "//zircon/system/ulib/syslog/include",
  ]
}

proto_library("cobalt_proto") {
  sources = [
    "clearcut_extensions.proto",
    "encrypted_message.proto",
    "envelope.proto",
    "event.proto",
    "observation.proto",
    "observation2.proto",
    "observation_batch.proto",
  ]
  import_dirs = [ "//third_party/protobuf/src" ]
  generate_python = false
  cc_generator_options = "lite"
  deps = [
    "//third_party/boringssl",
    "//third_party/cobalt/third_party/clearcut:clearcut_proto",
  ]
}

executable("cobalt_core_unittests") {
  testonly = true

  output_name = "cobalt_core_tests"

  deps = [
    "config:tests",
    "logger:tests",
    "encoder:unittests",
    "//third_party/googletest:gtest_main",
  ]
}

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

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