# 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/test.gni")

copy("key_tests_files") {
  sources = [
    "analyzer_prod_public.cobalt_key",
    "analyzer_public.cobalt_key",
    "shuffler_prod_public.cobalt_key",
    "shuffler_public.cobalt_key",
  ]
  outputs = [ "$root_out_dir/tests/cpp/keys/{{source_file_part}}" ]
}

test("keys_tests") {
  testonly = true
  sources = [ "keys_tests.cc" ]
  deps = [
    ":key_tests_files",
    "$cobalt_root/src:logging",
    "$cobalt_root/src/lib/crypto_util",
    "$cobalt_root/src/lib/statusor",
    "$cobalt_root/src/lib/util:encrypted_message_util",
    "$cobalt_root/src/lib/util:file_util",
    "$cobalt_root/src/pb",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/googletest:gtest",
    "//third_party/tink/proto:tink_proto",
  ]
  public_configs = [ "//third_party/tink:tink_config" ]
  configs += [
    "//build/config:no_exceptions",
    "//build/config:no_rtti",
  ]
  configs -= [
    "//build/config:no_exceptions",
    "//build/config:no_rtti",
  ]

  if (is_fuchsia_tree) {
    deps += [ "//sdk/lib/syslog/cpp:backend_legacy" ]
  }
}

group("tests") {
  testonly = true
  deps = [ ":keys_tests" ]
}
