# Copyright 2018 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("//third_party/cobalt_config/metrics_registry.gni")

metrics_registry("test_metrics_registry") {
  project_name = "test_app2"
  generate_cc = true
  namespace = "cobalt_test_metrics"
}

source_set("cpp") {
  sources = [
    "observation.h",
    "observations_collector.cc",
    "observations_collector.h",
  ]

  public_configs = [ "//garnet/public:config" ]
}

source_set("cobalt_logger") {
  sources = [
    "cobalt_logger.cc",
    "cobalt_logger.h",
    "cobalt_logger_impl.cc",
    "cobalt_logger_impl.h",
  ]

  public_deps = [
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//zircon/public/fidl/fuchsia-cobalt",
    "//zircon/public/lib/fit",
  ]

  deps = [
    "//garnet/public/lib/backoff",
    "//garnet/public/lib/callback",
  ]
}

source_set("unittests") {
  testonly = true

  sources = [
    "cobalt_event_builder_unittest.cc",
    "cobalt_logger_unittest.cc",
    "observations_collector_test.cc",
    "project_profile_unittest.cc",
  ]

  public_deps = [
    "//garnet/public/lib/gtest",
    "//garnet/public/lib/svc/cpp",
  ]

  deps = [
    ":cobalt_event_builder",
    ":cobalt_logger",
    ":cpp",
    ":project_profile",
    ":test_metrics_registry_cc",
    "//sdk/lib/sys/cpp/testing:unit",
    "//third_party/googletest:gtest",
    "//zircon/public/lib/async-testutils",
  ]
}

source_set("project_profile") {
  sources = [
    "project_profile.cc",
    "project_profile.h",
  ]
  configs += [ "//third_party/cobalt:cobalt_config" ]
  public_deps = [
    "//zircon/public/fidl/fuchsia-cobalt",
  ]
  deps = [
    "//garnet/public/lib/fsl",
    "//third_party/cobalt/util/crypto_util",
  ]
}

source_set("cobalt_event_builder") {
  sources = [
    "cobalt_event_builder.cc",
    "cobalt_event_builder.h",
  ]
  configs += [ "//third_party/cobalt:cobalt_config" ]
  public_deps = [
    "//zircon/public/fidl/fuchsia-cobalt",
  ]
}
