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

import("//third_party/cobalt/cobalt_config_header.gni")
import("//third_party/protobuf/proto_library.gni")

static_library("encoder") {
  sources = [
    "encoder.cc",
    "encoder.h",
    "envelope_maker.cc",
    "envelope_maker.h",
    "project_context.cc",
    "project_context.h",
    "observation_store.h",
    "observation_store.cc",
    "observation_store_dispatcher.h",
    "observation_store_dispatcher.cc",
    "memory_observation_store.h",
    "memory_observation_store.cc",
    "send_retryer.cc",
    "send_retryer.h",
    "shipping_dispatcher.cc",
    "shipping_dispatcher.h",
    "shipping_manager.cc",
    "shipping_manager.h",
    "shuffler_client.cc",
    "shuffler_client.h",
    "system_data.cc",
    "system_data.h",
  ]
  public_configs = [ "//third_party/cobalt:cobalt_config" ]

  deps = [
    "//third_party/cobalt/algorithms/forculus:forculus_encoder",
    "//third_party/cobalt/algorithms/rappor:rappor_encoder",
  ]

  public_deps = [
    ":client_secret",
    "//garnet/public/lib/fxl",
    "//third_party/cobalt:cobalt_proto",
    "//third_party/cobalt/config:client_config",
    "//third_party/cobalt/config:cobalt_config_proto",
    "//third_party/cobalt/shuffler:shuffler_service",
    "//third_party/cobalt/third_party/clearcut:clearcut",
    "//third_party/cobalt/util:clock",
    "//third_party/cobalt/util:encrypted_message_util",
    "//third_party/grpc:grpc++",
  ]
}

static_library("client_secret") {
  sources = [
    "client_secret.cc",
    "client_secret.h",
  ]
  configs += [ "//third_party/cobalt:cobalt_config" ]

  deps = [
    "//third_party/cobalt/util/crypto_util",
  ]
}

# Generate encoder_test_config.h from encoder_test_config.yaml.
cobalt_config_header("generate_encoder_test_config") {
  input_yaml = "encoder_test_config.yaml"
  output_file = "encoder_test_config.h"
}

# Generate envelope_maker_test_config.h from envelope_maker_test_config.yaml.
cobalt_config_header("generate_envelope_maker_test_config") {
  input_yaml = "envelope_maker_test_config.yaml"
  output_file = "envelope_maker_test_config.h"
}

# Generate shipping_manager_test_config.h from
# shipping_manager_test_config.yaml.
cobalt_config_header("generate_shipping_manager_test_config") {
  input_yaml = "shipping_manager_test_config.yaml"
  output_file = "shipping_manager_test_config.h"
}

# Generate shipping_dispatcher_test_config.h from
# shipping_dispatcher_test_config.yaml.
cobalt_config_header("generate_shipping_dispatcher_test_config") {
  input_yaml = "shipping_dispatcher_test_config.yaml"
  output_file = "shipping_dispatcher_test_config.h"
}


source_set("unittests") {
  testonly = true

  sources = [
    "client_secret_test.cc",
    "encoder_test.cc",
    "encoder_test_config.h",
    "envelope_maker_test.cc",
    "envelope_maker_test_config.h",
    "send_retryer_test.cc",
    "shipping_manager_test.cc",
    "shipping_manager_test_config.h",
    "shipping_dispatcher_test.cc",
    "shipping_dispatcher_test_config.h",
    "shuffler_client_test.cc",
    "system_data_test.cc",
  ]

  deps = [
    ":encoder",
    ":generate_encoder_test_config",
    ":generate_envelope_maker_test_config",
    ":generate_shipping_manager_test_config",
    ":generate_shipping_dispatcher_test_config",
    "//third_party/gflags",
    "//third_party/gtest",

    # Note(rudominer) We need protobuf full here for deserializing ASCII
    # protos as part of the test.
    "//third_party/protobuf:protobuf_full",
  ]

  configs += [ "//third_party/cobalt:cobalt_config" ]
}
