# Copyright 2020 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/components.gni")
import("//build/rust/rustc_library.gni")

group("log-stats") {
  testonly = true
  deps = [
    ":package",
    ":tests",
  ]
}

group("tests") {
  testonly = true
  deps = [ ":log-stats-tests" ]
}

fuchsia_component("component") {
  component_name = "log-stats"
  manifest = "meta/log-stats.cml"
  deps = [ "//src/diagnostics/launcher:bin" ]
}

fuchsia_package("package") {
  package_name = "log-stats"
  deps = [ ":component" ]
}

fuchsia_component("component-v1") {
  component_name = "log-stats"
  manifest = "meta/log-stats.cmx"
  deps = [ "//src/diagnostics/launcher:bin" ]
}

rustc_library("lib") {
  name = "log-stats"
  with_unit_tests = true

  deps = [
    "//sdk/fidl/fuchsia.diagnostics:fuchsia.diagnostics-rustc",
    "//sdk/fidl/fuchsia.metrics:fuchsia.metrics-rustc",
    "//src/diagnostics/archivist:lib",
    "//src/diagnostics/control:controller-rustc",
    "//src/lib/diagnostics/data/rust",
    "//src/lib/diagnostics/inspect/derive",
    "//src/lib/diagnostics/inspect/runtime/rust",
    "//src/lib/diagnostics/inspect/rust",
    "//src/lib/diagnostics/reader/rust",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:regex",
    "//third_party/rust_crates:serde",
    "//third_party/rust_crates:serde_json",
    "//third_party/rust_crates:tracing",
  ]

  test_deps = [ "//third_party/rust_crates:proptest" ]

  sources = [
    "src/lib.rs",
    "src/metric_logger.rs",
    "src/stats.rs",
  ]
}

fuchsia_unittest_component("log-stats-unit-tests") {
  deps = [ ":lib_test" ]
}

fuchsia_component("log-stats-integration-tests") {
  testonly = true
  manifest = "meta/integration-tests.cmx"
  deps = [
    ":component-v1",
    ":test-bin",
  ]
}

fuchsia_test_package("log-stats-tests") {
  test_components = [
    ":log-stats-unit-tests",
    ":log-stats-integration-tests",
  ]
}

rustc_test("test-bin") {
  testonly = true
  name = "log_stats_integration_tests"
  deps = [
    "//src/lib/diagnostics/reader/rust",
    "//src/lib/diagnostics/testing/rust",
    "//src/lib/fuchsia",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/zircon/rust:fuchsia-zircon",
  ]

  source_root = "tests/integration.rs"
  sources = [ "tests/integration.rs" ]
}
