# 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("//build/components.gni")
import("//build/go/go_library.gni")
import("//build/go/go_test.gni")
import("//build/go/toolchain.gni")
import("//build/testing/environments.gni")

go_library("go") {
  deps = [
    "//sdk/fidl/fuchsia.diagnostics:fuchsia.diagnostics_go($go_toolchain)",
    "//sdk/fidl/fuchsia.logger:fuchsia.logger_go($go_toolchain)",
  ]
  sources = [
    "logger.go",
    "logger_test.go",
  ]
  visibility = [
    "//src/connectivity/network/netstack/*",
    "//src/diagnostics/archivist/tests/logs/go/src:*",
    "//src/lib/syslog/go:*",
    "//src/tests/fidl/dynsuite/server_suite/runners/go:*",
  ]
}

go_test("syslog_test") {
  library = ":go"
  deps = [ "//src/lib/component($go_toolchain)" ]
}

fuchsia_unittest_package("syslog-gotests") {
  manifest = "meta/syslog_test.cml"
  deps = [ ":syslog_test" ]
  test_specs = {
    environments = [ emu_env ]
  }
}

group("tests") {
  testonly = true
  deps = [ ":syslog-gotests" ]
}
