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

go_test("go_tuf_repo_test") {
  gopackages = [ "github.com/flynn/go-tuf" ]

  deps = [
    "//third_party/golibs:github.com/flynn/go-tuf",
    "//third_party/golibs:gopkg.in/check.v1",
  ]
}

go_test("go_tuf_data_test") {
  gopackages = [ "github.com/flynn/go-tuf/data" ]

  deps = [
    "//third_party/golibs:github.com/flynn/go-tuf",
    "//third_party/golibs:gopkg.in/check.v1",
  ]
}

go_test("go_tuf_leveldbstore_test") {
  gopackages = [ "github.com/flynn/go-tuf/client/leveldbstore" ]

  deps = [
    "//third_party/golibs:github.com/flynn/go-tuf",
    "//third_party/golibs:gopkg.in/check.v1",
  ]
}

go_test("go_tuf_encrypted_test") {
  gopackages = [ "github.com/flynn/go-tuf/encrypted" ]

  deps = [
    "//third_party/golibs:github.com/flynn/go-tuf",
    "//third_party/golibs:gopkg.in/check.v1",
  ]
}

go_test("go_tuf_util_test") {
  gopackages = [ "github.com/flynn/go-tuf/util" ]

  deps = [
    "//third_party/golibs:github.com/flynn/go-tuf",
    "//third_party/golibs:gopkg.in/check.v1",
  ]
}

go_test("go_tuf_verify_test") {
  gopackages = [ "github.com/flynn/go-tuf/verify" ]

  deps = [
    "//third_party/golibs:github.com/flynn/go-tuf",
    "//third_party/golibs:gopkg.in/check.v1",
  ]
}

test_targets = [
  "go_tuf_data_test",
  "go_tuf_encrypted_test",
  "go_tuf_leveldbstore_test",
  "go_tuf_repo_test",
  "go_tuf_util_test",
  "go_tuf_verify_test",
]

test_package("go_tuf_tests") {
  deps = []
  tests = []
  foreach(test, test_targets) {
    deps += [ ":${test}" ]
    tests += [
      {
        name = test
        environments = basic_envs
      },
    ]
  }
}

group("go_tuf_host_tests") {
  testonly = true
  deps = []
  foreach(test, test_targets) {
    deps += [ ":${test}" ]
  }
}
