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

test_dirs = []

if (host_os == "linux") {
  # Each of these tests runs against a QEMU instance, but on ASAN builds it
  # takes a very long time to bring up QEMU (>1 minute), which means we can
  # easily exceed the global test timeout if we try to run multiple tests in
  # the same test target.
  #
  # Instead, shard each test into its own target so it has enough time to
  # spin up QEMU, run the test, and bring it back down.
  #
  # If this becomes problematic it's possible to put multiple tests in a file,
  # but this makes them more brittle and tricky to write since the QEMU
  # instance is now shared state that carries over between tests.
  test_dirs += [
    "test_advert_frequency",
    "test_init_partition_tables",
    "test_pave_no_bind",
    "test_pave_no_bind_failure",
    "test_write_firmware_no_type",
    "test_write_firmware_with_type",
  ]
}

group("tests") {
  testonly = true

  deps = []
  foreach(test_dir, test_dirs) {
    deps += [ ":bootserver_${test_dir}($host_toolchain)" ]
  }
}

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

    name = "fuchsia.googlesource.com/tests/bootserver"

    deps = [
      "//src/testing/qemu",
      "//tools/net/netutil",
      "//tools/net/tftp",
    ]

    non_go_deps = [
      ":bootserver_user_tools",
      ":main_zbi",
    ]
  }

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

  host_out_dir = get_label_info("//bogus($host_toolchain)", "root_out_dir")

  host_test_data("copy_bootserver") {
    visibility = [ ":*" ]

    sources = [ "$host_out_dir/bootserver" ]

    outputs = [ "$root_out_dir/test_data/bootserver_tools/bootserver" ]

    deps = [ "//tools/bootserver_old:bootserver($host_toolchain)" ]
  }

  host_test_data("copy_netls") {
    visibility = [ ":*" ]

    sources = [ "$host_out_dir/netls" ]

    outputs = [ "$root_out_dir/test_data/bootserver_tools/netls" ]

    deps = [ "//tools/netprotocol:netls($host_toolchain)" ]
  }

  host_test_data("copy_fake_firmware") {
    visibility = [ ":*" ]

    sources = [ "testdata/fake_firmware" ]
    outputs = [ "$root_out_dir/test_data/bootserver_tools/fake_firmware" ]
  }

  group("bootserver_user_tools") {
    testonly = true
    deps = [
      ":copy_bootserver",
      ":copy_fake_firmware",
      ":copy_netls",
    ]
  }

  foreach(test_dir, test_dirs) {
    go_test("bootserver_${test_dir}") {
      gopackages = [ "fuchsia.googlesource.com/tests/bootserver/${test_dir}" ]
      deps = [ ":lib" ]
    }
  }
}
