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

group("tests") {
  testonly = true

  deps = []

  # cprng_test uses //tools/emulator, which only works on linux.
  if (host_os == "linux") {
    deps += [ ":kernel_cprng_tests($host_toolchain)" ]
  }
}

zbi_test_executable("cprng-draw") {
  sources = [ "cprng-draw.cc" ]
  deps = [
    "//src/zircon/lib/zircon",
    "//zircon/system/ulib/zx",
  ]
}

zbi_test("cprng-draw-zbi") {
  assert(current_cpu != "")
  deps = [
    ":cprng-draw",
    "//zircon/kernel",
  ]
}

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

    deps = [ "//tools/emulator/emulatortest" ]

    sources = [ "kernel_cprng_test.go" ]
  }

  host_test_data("main_zbi") {
    path =
        get_label_info(":cprng-draw-zbi($default_toolchain)", "target_out_dir")
    sources = [
      "$path/cprng-draw-zbi.zbi",
      "$root_build_dir/fuchsia.zbi",
    ]
    deps = [ ":cprng-draw-zbi($default_toolchain)" ]
  }

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