# 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",
    "//chromecast/base/metrics",
    "//chromecast/public",
    "//components/proxy_config",
    "//net",
  ]

  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:hardware_ethernet",
    ]
  }
}

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

  deps = [
    "//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",
  ]

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