# Copyright 2014 The Chromium 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("//testing/test.gni")
import("//third_party/protobuf/proto_library.gni")

component("gcm") {
  sources = [
    "base/gcm_util.cc",
    "base/gcm_util.h",
    "base/mcs_message.cc",
    "base/mcs_message.h",
    "base/mcs_util.cc",
    "base/mcs_util.h",
    "base/socket_stream.cc",
    "base/socket_stream.h",
    "engine/account_mapping.cc",
    "engine/account_mapping.h",
    "engine/checkin_request.cc",
    "engine/checkin_request.h",
    "engine/connection_factory.cc",
    "engine/connection_factory.h",
    "engine/connection_factory_impl.cc",
    "engine/connection_factory_impl.h",
    "engine/connection_handler.cc",
    "engine/connection_handler.h",
    "engine/connection_handler_impl.cc",
    "engine/connection_handler_impl.h",
    "engine/gcm_registration_request_handler.cc",
    "engine/gcm_registration_request_handler.h",
    "engine/gcm_store.cc",
    "engine/gcm_store.h",
    "engine/gcm_store_impl.cc",
    "engine/gcm_store_impl.h",
    "engine/gcm_unregistration_request_handler.cc",
    "engine/gcm_unregistration_request_handler.h",
    "engine/gservices_settings.cc",
    "engine/gservices_settings.h",
    "engine/gservices_switches.cc",
    "engine/gservices_switches.h",
    "engine/heartbeat_manager.cc",
    "engine/heartbeat_manager.h",
    "engine/instance_id_delete_token_request_handler.cc",
    "engine/instance_id_delete_token_request_handler.h",
    "engine/instance_id_get_token_request_handler.cc",
    "engine/instance_id_get_token_request_handler.h",
    "engine/mcs_client.cc",
    "engine/mcs_client.h",
    "engine/registration_request.cc",
    "engine/registration_request.h",
    "engine/unregistration_request.cc",
    "engine/unregistration_request.h",
    "monitoring/gcm_stats_recorder.h",
  ]

  defines = [ "GCM_IMPLEMENTATION" ]

  configs += [ "//build/config/compiler:wexit_time_destructors" ]

  public_deps = [
    ":proto",
  ]
  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
    "//net",
    "//third_party/leveldatabase",
    "//url",
  ]
}

proto_library("proto") {
  # This is part of the gcm component.
  visibility = [ ":gcm" ]
  sources = [
    "protocol/android_checkin.proto",
    "protocol/checkin.proto",
    "protocol/mcs.proto",
  ]

  cc_generator_options = "dllexport_decl=GCM_EXPORT:"
  cc_include = "google_apis/gcm/base/gcm_export.h"
  component_build_force_source_set = true
  defines = [ "GCM_IMPLEMENTATION" ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "base/fake_encryptor.cc",
    "base/fake_encryptor.h",
    "engine/fake_connection_factory.cc",
    "engine/fake_connection_factory.h",
    "engine/fake_connection_handler.cc",
    "engine/fake_connection_handler.h",
    "monitoring/fake_gcm_stats_recorder.cc",
    "monitoring/fake_gcm_stats_recorder.h",
  ]

  public_deps = [
    ":gcm",
  ]
  deps = [
    "//base",
    "//net",
    "//testing/gtest",
  ]
}

# A standalone MCS (mobile connection server) client.
if (!is_ios) {
  executable("mcs_probe") {
    testonly = true
    sources = [
      "tools/mcs_probe.cc",
    ]

    deps = [
      ":gcm",
      ":test_support",
      "//base",
      "//build/config/sanitizers:deps",
      "//build/win:default_exe_manifest",
      "//net",
      "//net:test_support",
      "//third_party/protobuf:protobuf_lite",
    ]
  }
}

test("gcm_unit_tests") {
  sources = [
    "base/mcs_message_unittest.cc",
    "base/mcs_util_unittest.cc",
    "base/socket_stream_unittest.cc",
    "engine/account_mapping_unittest.cc",
    "engine/checkin_request_unittest.cc",
    "engine/connection_factory_impl_unittest.cc",
    "engine/connection_handler_impl_unittest.cc",
    "engine/gcm_request_test_base.cc",
    "engine/gcm_request_test_base.h",
    "engine/gcm_store_impl_unittest.cc",
    "engine/gservices_settings_unittest.cc",
    "engine/heartbeat_manager_unittest.cc",
    "engine/mcs_client_unittest.cc",
    "engine/registration_request_unittest.cc",
    "engine/unregistration_request_unittest.cc",
  ]

  deps = [
    ":gcm",
    ":test_support",
    "//base",
    "//base/test:run_all_unittests",
    "//net",
    "//net:test_support",
    "//testing/gtest",
    "//third_party/protobuf:protobuf_lite",
  ]
}
