# Copyright 2021 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/assembly/config_data_for_assembly.gni")
import("//build/config.gni")

# The list of Sampler configuration files in the current directory that
# are used to configure data to be sent to Cobalt. Files that are not listed
# in this variable will be ignored.
sampler_files = [
  "archivist.json",
  "avrcp.json",
  "driver_manager_all.json",
  "fshost.json",
  "netstack.json",
  "netstack3.json",
  "power_metrics_recorder.json",
  "setui.json",
  "system-update-committer.json",

  # TODO(https://fxbug.dev/): remove driver_manager_all.json and bring back these
  #"audio-drivers.json",
  #"bthost.json",
  #"connectivity-wlan.json",
  #"display.json",
  #"ftl.json",
  #"fvm.json",
  #"radar.json",
  #"sdmmc.json",
  #"sysmem.json",
]

# Install Sampler and FIRE config into the "sampler" package

config_data_for_assembly("sampler_config_internal") {
  for_pkg = "sampler"
  sources = sampler_files

  # The component will see this as /config/metrics/fuchsia/foo.json
  outputs = [ "metrics/fuchsia/{{source_file_part}}" ]
}

# Validate Sampler config

resource("sampler-validation-resources") {
  sources = sampler_files

  # The component will see this as /pkg/config/fuchsia/metrics/foo.json
  outputs = [ "config/metrics/fuchsia/{{source_file_part}}" ]
}

# Test component for config validation.
fuchsia_unittest_component("config-validation-component") {
  deps = [
    ":sampler-validation-resources",
    "//src/diagnostics/sampler/tests:config-validation",
  ]
}

# This target name must be unique in the build tree
fuchsia_test_package("sampler-config-validation-package-src-diagnostics") {
  test_components = [ ":config-validation-component" ]
}

group("tests") {
  testonly = true
  deps = [ ":sampler-config-validation-package-src-diagnostics" ]
}
