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

group("tests") {
  testonly = true

  deps = []

  # kernel_lockup_detector_tests uses //src/testing/qemu, which only
  # works on linux.
  if (host_os == "linux") {
    deps += [ ":kernel_lockup_detector_tests($host_toolchain)" ]
  }
}

if (is_linux) {
  go_library("lib") {
    testonly = true

    deps = [ "//src/testing/qemu" ]
  }

  host_test_data("main_zbi") {
    sources = [ "$root_build_dir/fuchsia.zbi" ]
  }

  go_test("kernel_lockup_detector_tests") {
    gopackages = [ "go.fuchsia.dev/fuchsia/src/tests/kernel_lockup_detector" ]
    deps = [ ":lib" ]
    non_go_deps = [ ":main_zbi" ]
  }
}
