# 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 = [
    "../../api:network_emulation_manager_api",
    "../../api:simulated_network_api",
    "../../api/units:data_rate",
    "../../api/units:data_size",
    "../../api/units:time_delta",
    "../../api/units:timestamp",
    "../../call:simulated_network",
    "../../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",
    "../scenario:column_printer",
    "../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",
    "../:test_support",
    "../../api:simulated_network_api",
    "../../api/units:time_delta",
    "../../call:simulated_network",
    "../../rtc_base:gunit_helpers",
    "../../rtc_base:logging",
    "../../rtc_base:rtc_event",
    "../../system_wrappers:system_wrappers",
    "//third_party/abseil-cpp/absl/memory",
  ]
}

rtc_source_set("network_emulation_pc_unittest") {
  testonly = true
  sources = [
    "network_emulation_pc_unittest.cc",
  ]
  deps = [
    ":emulated_network",
    "../:test_support",
    "../../api:callfactory_api",
    "../../api:libjingle_peerconnection_api",
    "../../api:scoped_refptr",
    "../../api:simulated_network_api",
    "../../api/rtc_event_log:rtc_event_log_factory",
    "../../api/task_queue:default_task_queue_factory",
    "../../call:simulated_network",
    "../../media:rtc_audio_video",
    "../../media:rtc_media_engine_defaults",
    "../../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",
    "//third_party/abseil-cpp/absl/memory",
  ]
}

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

rtc_source_set("feedback_generator") {
  testonly = true
  sources = [
    "feedback_generator.cc",
    "feedback_generator.h",
  ]
  deps = [
    ":emulated_network",
    "../../api/transport:test_feedback_generator_interface",
    "../../call:simulated_network",
    "../../rtc_base:checks",
    "../time_controller",
    "//third_party/abseil-cpp/absl/memory",
  ]
}

rtc_source_set("feedback_generator_unittest") {
  testonly = true
  sources = [
    "feedback_generator_unittest.cc",
  ]
  deps = [
    "../:test_support",
    "../../api/transport:test_feedback_generator",
  ]
}

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