# 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/88194): 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}/fconfig",
      "${host_tools_dir}/ffx",
      "${host_tools_dir}/fssh",
    ]
    deps = [
      "//src/developer/ffx:host($host_toolchain)",
      "//tools/sdk-tools/fconfig:fconfig-host($host_toolchain)",
      "//tools/sdk-tools/fssh:fssh-host($host_toolchain)",
    ]
    outputs = [ "${_tools_out}/{{source_file_part}}" ]
  }

  go_test("fstar_integration_test") {
    output_name = "fstar_integration_test"
    gopackages = [ "go.fuchsia.dev/fuchsia/tools/sdk-tools/fstar_integration" ]
    deps = [ ":fstar_integration_lib" ]
    non_go_deps = [ ":copy_host_tools" ]
    environments = []
    if (is_host && target_cpu == "x64") {
      environments = [ emu_env ]
    }
  }
}
