# 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 = "go.fuchsia.dev/fuchsia/tools/bootserver_old/tests"

    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 =
          [ "go.fuchsia.dev/fuchsia/tools/bootserver_old/tests/${test_dir}" ]
      deps = [ ":lib" ]
    }
  }
}
