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

group("tests") {
  testonly = true
  # Disabled due to excessive flakes.
  # TODO(https://fxbug.dev/42169399): Reenable
  # deps = [ ":fstar_integration_test($host_toolchain)" ]
}

go_library("fstar_integration_lib") {
  testonly = true
  sources = [ "fstar_integration_test.go" ]

  deps = [
    "//third_party/golibs:github.com/google/go-cmp",
    "//tools/botanist:constants",
    "//tools/lib/ffxutil",
    "//tools/sdk-tools/sdkcommon",
  ]
}

if (is_host) {
  _tools_out = "${target_gen_dir}/fstar_runtime_deps/host_tools"
  host_test_data("copy_host_tools") {
    sources = [
      "${host_tools_dir}/ffx",
      "${host_tools_dir}/fssh",
    ]
    deps = [
      "//src/developer/ffx:host($host_toolchain)",
      "//tools/sdk-tools/fssh:fssh-host($host_toolchain)",
    ]
    outputs = [ "${_tools_out}/{{source_file_part}}" ]
  }

  go_test("fstar_integration_test") {
    library = ":fstar_integration_lib"
    output_name = "fstar_integration_test"
    non_go_deps = [ ":copy_host_tools" ]
    environments = []
    if (is_host && target_cpu == "x64") {
      environments = [ emu_env ]
    }
  }
}
