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

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