# 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")

if (is_host) {
  zbi_tool_target = "//zircon/tools/zbi($host_toolchain)"

  host_test_data("test_tools") {
    sources = [
      get_label_info(zbi_tool_target, "root_out_dir") + "/zbi",
      "//third_party/android/platform/external/avb/avbtool.py",
    ]
    outputs = [ "$root_out_dir/test_data/system-tests/{{source_file_part}}" ]
    deps = [ zbi_tool_target ]
  }
}

go_library("host-target-testing") {
  testonly = true
  name = "go.fuchsia.dev/fuchsia/src/testing/host-target-testing/..."
  deps = [
    "//src/sys/pkg/bin/pm:pm_lib",
    "//src/sys/pkg/lib/far/go:far",
    "//src/sys/pkg/lib/repo",
    "//third_party/golibs:github.com/theupdateframework/go-tuf",
    "//third_party/golibs:golang.org/x/crypto",
    "//tools/lib/retry",
    "//tools/net/sshutil",
  ]
  non_go_deps = [ ":test_tools($host_toolchain)" ]
  sources = [
    "artifacts/archive.go",
    "artifacts/archive_test.go",
    "artifacts/build.go",
    "artifacts/builder.go",
    "avb/avb.go",
    "avb/avb_test.go",
    "cli/archive.go",
    "cli/build.go",
    "cli/device.go",
    "cli/installer.go",
    "device/device.go",
    "device/finder.go",
    "device/monotonic.go",
    "device/node_names.go",
    "device/node_names_test.go",
    "device/resolver.go",
    "errutil/errutil.go",
    "omaha/omaha.go",
    "omaha/omaha_test.go",
    "packages/package.go",
    "packages/package_builder.go",
    "packages/package_builder_test.go",
    "packages/package_test.go",
    "packages/repo.go",
    "packages/server.go",
    "paver/paver.go",
    "paver/paver_test.go",
    "sl4f/client.go",
    "sl4f/file.go",
    "sl4f/paver.go",
    "sl4f/util.go",
    "updater/updater.go",
    "util/util.go",
    "util/util_test.go",
    "zbi/zbi.go",
    "zbi/zbi_test.go",
  ]
}

test_packages = [
  "artifacts",
  "avb",
  "device",
  "packages",
  "paver",
  "omaha",
  "util",
  "zbi",
]
foreach(testpkg, test_packages) {
  go_test("host-target-testing-${testpkg}-test") {
    gopackages =
        [ "go.fuchsia.dev/fuchsia/src/testing/host-target-testing/${testpkg}" ]
    deps = [ ":host-target-testing" ]
  }
}

group("tests") {
  testonly = true

  public_deps = []
  foreach(testpkg, test_packages) {
    public_deps += [ ":host-target-testing-${testpkg}-test($host_toolchain)" ]
  }
}
