# Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import("../../../webrtc.gni")

rtc_source_set("emulated_network") {
  visibility = [
    "../../../api:create_network_emulation_manager",
    ":*",
  ]
  if (rtc_include_tests) {
    visibility += [ "../:scenario" ]
  }
  testonly = true
  sources = [
    "cross_traffic.cc",
    "cross_traffic.h",
    "emulated_network_manager.cc",
    "emulated_network_manager.h",
    "fake_network_socket.cc",
    "fake_network_socket.h",
    "fake_network_socket_server.cc",
    "fake_network_socket_server.h",
    "network_emulation.cc",
    "network_emulation.h",
    "network_emulation_manager.cc",
    "network_emulation_manager.h",
    "traffic_route.cc",
    "traffic_route.h",
  ]
  deps = [
    "../:column_printer",
    "../../../api:network_emulation_manager_api",
    "../../../api:simulated_network_api",
    "../../../api/units:data_rate",
    "../../../api/units:data_size",
    "../../../api/units:time_delta",
    "../../../api/units:timestamp",
    "../../../rtc_base",
    "../../../rtc_base:rtc_base_tests_utils",
    "../../../rtc_base:rtc_task_queue",
    "../../../rtc_base:safe_minmax",
    "../../../rtc_base:task_queue_for_test",
    "../../../rtc_base/synchronization:sequence_checker",
    "../../../rtc_base/task_utils:repeating_task",
    "../../../rtc_base/third_party/sigslot",
    "../../../system_wrappers",
    "../../time_controller",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_source_set("network_emulation_unittest") {
  testonly = true
  sources = [
    "network_emulation_unittest.cc",
  ]
  deps = [
    ":emulated_network",
    "../../../api:simulated_network_api",
    "../../../call:simulated_network",
    "../../../rtc_base:gunit_helpers",
    "../../../rtc_base:logging",
    "../../../rtc_base:rtc_event",
    "../../../system_wrappers:system_wrappers",
    "../../../test:test_support",
    "//third_party/abseil-cpp/absl/memory",
  ]
}

rtc_source_set("network_emulation_pc_unittest") {
  testonly = true
  sources = [
    "network_emulation_pc_unittest.cc",
  ]
  deps = [
    ":emulated_network",
    "../../../api:callfactory_api",
    "../../../api:libjingle_peerconnection_api",
    "../../../api:scoped_refptr",
    "../../../api:simulated_network_api",
    "../../../api/audio_codecs:builtin_audio_decoder_factory",
    "../../../api/audio_codecs:builtin_audio_encoder_factory",
    "../../../api/video_codecs:builtin_video_decoder_factory",
    "../../../api/video_codecs:builtin_video_encoder_factory",
    "../../../call:simulated_network",
    "../../../logging:rtc_event_log_impl_base",
    "../../../media:rtc_audio_video",
    "../../../modules/audio_device:audio_device_impl",
    "../../../p2p:rtc_p2p",
    "../../../pc:pc_test_utils",
    "../../../pc:peerconnection_wrapper",
    "../../../rtc_base",
    "../../../rtc_base:gunit_helpers",
    "../../../rtc_base:logging",
    "../../../rtc_base:rtc_event",
    "../../../test:test_support",
    "//third_party/abseil-cpp/absl/memory",
  ]
}

rtc_source_set("cross_traffic_unittest") {
  testonly = true
  sources = [
    "cross_traffic_unittest.cc",
  ]
  deps = [
    ":emulated_network",
    "../../../api:simulated_network_api",
    "../../../call:simulated_network",
    "../../../rtc_base:logging",
    "../../../rtc_base:rtc_event",
    "../../../test:test_support",
    "//third_party/abseil-cpp/absl/memory",
  ]
}

rtc_source_set("network_emulation_unittests") {
  testonly = true
  deps = [
    ":cross_traffic_unittest",
    ":network_emulation_pc_unittest",
    ":network_emulation_unittest",
  ]
}
