# Copyright 2017 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.

visibility = [ "$cobalt_root/*" ]

import("//build/test.gni")
import("//third_party/protobuf/proto_library.gni")

source_set("clock") {
  sources = [ "clock.h" ]
  public_deps = [
    "$cobalt_root/src/public/lib:clock_interfaces",
    "$cobalt_root/src/public/lib/statusor",
  ]
  public_configs = [ "$cobalt_root:cobalt_config" ]
}

source_set("sleeper") {
  sources = [ "sleeper.h" ]
  public_deps = [ ":clock" ]
}

source_set("sleeper_test") {
  testonly = true
  sources = [ "sleeper_test.cc" ]
  configs += [ "$cobalt_root:cobalt_config" ]
  deps = [
    ":sleeper",
    "//third_party/googletest:gtest",
  ]
}

source_set("proto_serialization") {
  sources = [
    # Sources from protobuf that are not included in protobuf lite
    "//third_party/protobuf/src/google/protobuf/io/zero_copy_stream_impl.cc",
    "//third_party/protobuf/src/google/protobuf/io/zero_copy_stream_impl.h",
    "//third_party/protobuf/src/google/protobuf/util/delimited_message_util.cc",
    "//third_party/protobuf/src/google/protobuf/util/delimited_message_util.h",
  ]
  public_deps = [ "//third_party/protobuf:protobuf_lite" ]
  configs += [ "//third_party/protobuf:protobuf_warnings" ]
}

source_set("encrypted_message_util") {
  sources = [
    "encrypted_message_util.cc",
    "encrypted_message_util.h",
    "hybrid_tink_encrypted_message_maker.cc",
    "hybrid_tink_encrypted_message_maker.h",
  ]
  configs += [ "//build/config:no_rtti" ]
  configs -= [ "//build/config:no_rtti" ]

  public_configs = [ "$cobalt_root:cobalt_config" ]

  deps = [
    "$cobalt_root/src/lib/crypto_util",
    "$cobalt_root/src/public/lib:status",
    "$cobalt_root/src/public/lib/statusor",
    "//third_party/abseil-cpp/absl/strings",
  ]

  public_deps = [
    "$cobalt_root/src:logging",
    "$cobalt_root/src:tracing",
    "$cobalt_root/src/pb",
    "//third_party/tink/cc:hybrid_encrypt",
    "//third_party/tink/cc:keyset_handle",
    "//third_party/tink/cc/hybrid:hybrid_config",
    "//third_party/tink/cc/util:status",
  ]
}

source_set("encrypted_message_util_test") {
  testonly = true
  sources = [ "encrypted_message_util_test.cc" ]
  configs += [ "//build/config:no_rtti" ]
  configs -= [ "//build/config:no_rtti" ]
  configs += [ "$cobalt_root:cobalt_config" ]
  deps = [
    ":encrypted_message_util",
    "$cobalt_root/src/lib/crypto_util",
    "//third_party/googletest:gtest",
    "//third_party/tink/cc:cleartext_keyset_handle",
    "//third_party/tink/cc/hybrid:hybrid_key_templates",
    "//third_party/tink/proto:tink_proto",
  ]
}

static_library("datetime_util") {
  sources = [
    "datetime_util.cc",
    "datetime_util.h",
  ]
  configs += [ "$cobalt_root:cobalt_config" ]
  deps = [ "$cobalt_root/src/public/lib/statusor" ]
  public_deps = [
    "$cobalt_root/src:logging",
    "$cobalt_root/src/public/lib:clock_interfaces",
    "$cobalt_root/src/registry:cobalt_registry_proto",
  ]
  visibility += [ "//src/cobalt/bin/testapp:cobalt_testapp" ]
}

source_set("datetime_util_test") {
  testonly = true
  sources = [ "datetime_util_test.cc" ]
  configs += [ "$cobalt_root:cobalt_config" ]
  deps = [
    ":clock",
    ":datetime_util",
    "//third_party/googletest:gtest",
  ]
}

static_library("file_util") {
  sources = [
    "file_util.cc",
    "file_util.h",
  ]
  configs += [ "$cobalt_root:cobalt_config" ]
  public_deps = [ ":status_builder" ]
  deps = [
    ":named_type",
    "$cobalt_root/src:logging",
    "$cobalt_root/src/lib/crypto_util",
    "$cobalt_root/src/public/lib:status",
    "$cobalt_root/src/public/lib/statusor",
    "//third_party/abseil-cpp/absl/strings",
  ]
  visibility += [ "//src/cobalt/bin/app:lib" ]
}

test("file_util_test") {
  testonly = true
  sources = [ "file_util_test.cc" ]
  configs += [ "$cobalt_root:cobalt_config" ]
  deps = [
    ":file_util",
    ":file_util_test_files",
    "$cobalt_root/src:logging",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/googletest:gtest",
  ]

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

copy("file_util_test_files") {
  sources = [
    "test_data/deadbeef",
    "test_data/empty",
    "test_data/hex_too_short",
    "test_data/hex_wrong_char",
  ]
  outputs =
      [ "$root_out_dir/tests/cpp/file_util_test_files/{{source_file_part}}" ]
}

static_library("pem_util") {
  sources = [
    "pem_util.cc",
    "pem_util.h",
  ]
  configs += [ "$cobalt_root:cobalt_config" ]
  deps = [
    ":file_util",
    "$cobalt_root/src:logging",
    "$cobalt_root/src/lib/crypto_util",
  ]
  visibility += [ "//src/cobalt/bin/app:lib" ]
}

source_set("status_builder") {
  sources = [
    "source_location.h",
    "status_builder.cc",
    "status_builder.h",
  ]
  deps = [
    "$cobalt_root/src:logging",
    "$cobalt_root/src/pb",
    "$cobalt_root/src/public/lib:status",
  ]
  configs += [ "$cobalt_root:cobalt_config" ]
  public_deps = [
    "$cobalt_root/src/registry:cobalt_registry_proto",
    "//third_party/protobuf:protobuf_lite",
  ]
}

source_set("status_builder_test") {
  testonly = true
  sources = [ "status_builder_test.cc" ]
  deps = [
    ":status_builder",
    "$cobalt_root/src:logging",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
  configs += [ "$cobalt_root:cobalt_config" ]
}

source_set("file_system") {
  sources = [
    "file_system.cc",
    "file_system.h",
  ]
  configs += [ "$cobalt_root:cobalt_config" ]
  public_deps = [
    ":proto_serialization",
    "$cobalt_root/src/public/lib/statusor",
    "//third_party/abseil-cpp/absl/strings",
  ]
}

static_library("posix_file_system") {
  sources = [
    "posix_file_system.cc",
    "posix_file_system.h",
  ]
  configs += [ "$cobalt_root:cobalt_config" ]
  public_deps = [ ":file_system" ]
  visibility += [ "//src/cobalt/bin/app:lib" ]
}

static_library("consistent_proto_store") {
  sources = [
    "consistent_proto_store.cc",
    "consistent_proto_store.h",
  ]
  configs += [ "$cobalt_root:cobalt_config" ]
  deps = [
    ":proto_serialization",
    "$cobalt_root/src:logging",
    "$cobalt_root/src/lib/util:posix_file_system",
    "$cobalt_root/src/public/lib:status",
    "$cobalt_root/src/public/lib/statusor",
    "//third_party/abseil-cpp/absl/strings",
  ]
  public_deps = [ "//third_party/protobuf:protobuf_lite" ]
}

proto_library("consistent_proto_store_test_proto") {
  sources = [ "consistent_proto_store_test.proto" ]
  cc_generator_options = "lite"
  extra_configs = [
    "$cobalt_root/src/registry:proto_config",
    "$cobalt_root:cobalt_config",
  ]
}

source_set("consistent_proto_store_test") {
  testonly = true
  sources = [ "consistent_proto_store_test.cc" ]
  configs += [ "$cobalt_root:cobalt_config" ]
  deps = [
    ":consistent_proto_store",
    ":consistent_proto_store_test_proto",
    "$cobalt_root/src/lib/util:posix_file_system",
    "//third_party/googletest:gtest",
  ]
}

static_library("proto_util") {
  sources = [
    "proto_util.cc",
    "proto_util.h",
  ]
  configs += [ "$cobalt_root:cobalt_config" ]
  deps = [
    "$cobalt_root/src:logging",
    "//third_party/abseil-cpp",
    "//third_party/protobuf:protobuf_lite",
  ]
}

source_set("protected_fields") {
  sources = [ "protected_fields.h" ]
  configs += [ "$cobalt_root:cobalt_config" ]
}

source_set("protected_fields_test") {
  testonly = true
  sources = [ "protected_fields_test.cc" ]
  configs += [ "$cobalt_root:cobalt_config" ]
  deps = [
    ":protected_fields",
    "//third_party/googletest:gtest",
  ]
}

source_set("hash") {
  sources = [
    "hash.cc",
    "hash.h",
  ]
  configs += [ "$cobalt_root:cobalt_config" ]
  deps = [ "//third_party/github.com/google/farmhash" ]
}

source_set("named_type") {
  sources = [ "named_type.h" ]
}

group("tests") {
  testonly = true
  deps = [
    ":consistent_proto_store_test",
    ":datetime_util_test",
    ":encrypted_message_util_test",
    ":file_util_test",
    ":protected_fields_test",
    ":sleeper_test",
    ":status_builder_test",
  ]
}
