# 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",
  ]

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