# Copyright 2019 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/fidl_protocol_fuzzer.gni")

source_set("logger_factory_server_provider") {
  testonly = true

  sources = [ "logger_factory_server_provider.cc" ]

  public_deps = [
    "//sdk/fidl/fuchsia.metrics:fuchsia.metrics_hlcpp",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/fidl/cpp/fuzzing",
    "//sdk/lib/sys/cpp",
    "//src/cobalt/bin/app:lib",
    "//src/cobalt/bin/utils:base64",
  ]
}

source_set("logger_server_provider") {
  testonly = true

  sources = [ "logger_server_provider.cc" ]

  public_deps = [
    "//sdk/fidl/fuchsia.metrics:fuchsia.metrics_hlcpp",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/fidl/cpp/fuzzing",
    "//sdk/lib/sys/cpp",
    "//src/cobalt/bin/app:lib",
    "//src/cobalt/bin/utils:base64",
  ]
}

source_set("system_data_updater_server_provider") {
  testonly = true

  sources = [ "system_data_updater_server_provider.cc" ]

  public_deps = [
    "//sdk/fidl/fuchsia.cobalt:fuchsia.cobalt_hlcpp",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/fidl/cpp/fuzzing",
    "//sdk/lib/sys/cpp",
    "//src/cobalt/bin/app:lib",
    "//zircon/system/ulib/inspect",
  ]
}

fidl_protocol_fuzzer("logger_factory_fuzzer") {
  fidl = "//sdk/fidl/fuchsia.metrics:fuchsia.metrics"
  protocol = "fuchsia.metrics.MetricEventLoggerFactory"
  deps = [ ":logger_factory_server_provider" ]
}

fidl_protocol_fuzzer("logger_fuzzer") {
  fidl = "//sdk/fidl/fuchsia.metrics:fuchsia.metrics"
  protocol = "fuchsia.metrics.MetricEventLogger"
  deps = [ ":logger_server_provider" ]
}

fidl_protocol_fuzzer("system_data_updater_fuzzer") {
  fidl = "//sdk/fidl/fuchsia.cobalt:fuchsia.cobalt"
  protocol = "fuchsia.cobalt.SystemDataUpdater"
  deps = [ ":system_data_updater_server_provider" ]
}
