# Copyright 2015 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("//chromecast/chromecast.gni")
import("//testing/test.gni")

cast_source_set("net") {
  sources = [
    "connectivity_checker.cc",
    "connectivity_checker.h",
    "connectivity_checker_impl.cc",
    "connectivity_checker_impl.h",
    "fake_connectivity_checker.cc",
    "fake_connectivity_checker.h",
    "net_switches.cc",
    "net_switches.h",
    "net_util_cast.cc",
    "net_util_cast.h",
  ]

  if (is_linux) {
    sources += [
      "network_change_notifier_factory_cast.cc",
      "network_change_notifier_factory_cast.h",
    ]
  }

  deps = [
    "//base",
    "//chromecast:chromecast_buildflags",
    "//chromecast/base:cast_sys_info_util",
    "//chromecast/base/metrics",
    "//chromecast/public",
    "//components/proxy_config",
    "//net",
    "//services/network/public/cpp",
    "//services/network/public/mojom",
  ]

  if (is_fuchsia) {
    sources += [
      "network_change_notifier_factory_fuchsia.cc",
      "network_change_notifier_factory_fuchsia.h",
    ]

    deps += [
      "//chromecast/base:chromecast_switches",
      "//third_party/fuchsia-sdk/sdk:fuchsia-hardware-ethernet",
    ]
  }
}

cast_source_set("io_buffer_pool") {
  sources = [
    "io_buffer_pool.cc",
    "io_buffer_pool.h",
  ]

  deps = [
    "//base",
    "//net",
  ]
}

cast_source_set("small_message_socket") {
  sources = [
    "small_message_socket.cc",
    "small_message_socket.h",
  ]
  public_deps = [
    "//net",
  ]

  deps = [
    ":io_buffer_pool",
    "//base",
  ]
}

cast_source_set("test_support") {
  testonly = true

  sources = [
    "fake_stream_socket.cc",
    "fake_stream_socket.h",
    "mock_stream_socket.cc",
    "mock_stream_socket.h",
  ]

  public_deps = [
    "//testing/gmock",
  ]

  deps = [
    "//base",
    "//net",
  ]
}

test("cast_net_unittests") {
  sources = [
    "fake_stream_socket_unittest.cc",
    "io_buffer_pool_unittest.cc",
    "small_message_socket_unittest.cc",
  ]

  deps = [
    ":io_buffer_pool",
    ":small_message_socket",
    ":test_support",
    "//base",
    "//base/test:run_all_unittests",
    "//net",
    "//net:test_support",
    "//testing/gtest",
  ]
}
