# 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/fuzzing/fuzzer.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")
import("//src/sys/build/components.gni")
import("//third_party/protobuf/proto_library.gni")

group("tests") {
  testonly = true
  deps = [
    ":cobalt-manual-tests",
    ":cobalt_tests",
    "app",
    "system-metrics",
    "testapp",
    "testing",
    "utils",
  ]
}

test_package("cobalt_tests") {
  deps = [
    "app:app",
    "app:cobalt_app_unittests",
    "app:global_metrics_registry",
    "app:testapp_metrics_registry",
    "system-metrics:cobalt_system_metrics_unittests",
    "testapp:testapp",
    "utils:cobalt_utils_unittests",
  ]

  tests = [
    {
      name = "cobalt_app_unittests"
      environments = basic_envs
      log_settings = {
        max_severity = "ERROR"
      }
    },

    {
      log_settings = {
        max_severity = "ERROR"
      }
      name = "cobalt_system_metrics_unittests"
      environments = basic_envs
    },

    {
      name = "cobalt_utils_unittests"
      environments = basic_envs
      log_settings = {
        max_severity = "ERROR"
      }
    },

    {
      name = "cobalt_testapp"
      dest = "cobalt_testapp_no_network"
      environments = basic_envs
    },
  ]

  resources = [
    {
      # Cobalt 1.0 analyzer public key for devel environment.
      path = rebase_path("//third_party/cobalt/keys/analyzer_public.cobalt_key")
      dest = "keys/analyzer_devel_public"
    },
    {
      # Cobalt 1.0 shuffler public key for devel environment.
      path = rebase_path("//third_party/cobalt/keys/shuffler_public.cobalt_key")
      dest = "keys/shuffler_devel_public"
    },
    {
      path = rebase_path(
              get_label_info("app:testapp_metrics_registry", "target_gen_dir") +
              "/testapp_metrics_registry.pb")
      dest = "testapp_metrics_registry.pb"
    },
    {
      path = rebase_path("system-metrics/log_stats_component_allowlist.txt")
      dest = "log_stats_component_allowlist.txt"
    },
    {
      path = rebase_path("system-metrics/granular_error_stats_specs.txt")
      dest = "default_granular_error_stats_specs.txt"
    },
    {
      path = rebase_path(
              "system-metrics/testing/alternate_granular_error_stats_specs_for_testing.txt")
      dest = "alternate_granular_error_stats_specs.txt"
    },
    {
      path = rebase_path(
              "system-metrics/testing/bad_granular_error_stats_specs_for_testing.txt")
      dest = "bad_granular_error_stats_specs.txt"
    },
  ]
}

fuchsia_component("cobalt-testapp") {
  testonly = true
  manifest = "meta/cobalt_testapp.cmx"
  deps = [ "testapp:cobalt_testapp" ]
}

# Tests that should not be run on any bot.
fuchsia_test_package("cobalt-manual-tests") {
  test_components = [ ":cobalt-testapp" ]
  test_specs = {
    environments = []
  }
}

test_package("cobalt_tests_do_not_run_manually") {
  deps = [ "testapp:cobalt_testapp" ]

  binaries = [
    # Referred to by cobalt_testapp_for_prober_do_not_run_manually.cmx
    {
      name = "cobalt_testapp"
    },
  ]

  tests = [
    {
      name =
          rebase_path("meta/cobalt_testapp_for_prober_do_not_run_manually.cmx")
      dest = "cobalt_testapp_for_prober_do_not_run_manually"

      # We don't want to run this version of cobalt_testapp in the Fuchsia
      # CI/CQ  because it uses the real network. We run cobalt_testapp_no_network
      # instead. This version is run in the Cobalt Prober.
      # It should not be run outside of CI, since it populates a test pipeline
      # whose output is inspected.
      environments = [
        {
          dimensions = {
            device_type = "Astro"
          }
          tags = [ "cobalt-prober" ]
        },
        {
          dimensions = {
            device_type = "Intel NUC Kit NUC7i5DNHE"
          }
          tags = [ "cobalt-prober" ]
        },
      ]
    },
  ]
}

package("cobalt-prober-do-not-run-manually") {
  deps = [ "testapp:cobalt_testapp" ]

  binaries = [
    # Referred to by cobalt_testapp_for_prober_do_not_run_manually.cmx
    {
      name = "cobalt_testapp"
    },
  ]
  meta = [
    {
      path =
          rebase_path("meta/cobalt_testapp_for_prober_do_not_run_manually.cmx")
      dest = "cobalt_testapp_for_prober_do_not_run_manually.cmx"
    },
  ]
}

fuzzers_package("cobalt_fuzzers") {
  fuzzers = [
    "app/fuzzer:logger_factory_fuzzer",
    "app/fuzzer:logger_fuzzer",
    "app/fuzzer:system_data_updater_fuzzer",
  ]
}
