# Copyright (c) 2019 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")

if (rtc_include_tests) {
  rtc_library("peer_scenario") {
    testonly = true
    sources = [
      "peer_scenario.cc",
      "peer_scenario.h",
      "peer_scenario_client.cc",
      "peer_scenario_client.h",
      "scenario_connection.cc",
      "scenario_connection.h",
      "signaling_route.cc",
      "signaling_route.h",
    ]
    deps = [
      "..:fake_video_codecs",
      "..:fileutils",
      "..:test_support",
      "../:video_test_common",
      "../../api:candidate",
      "../../api:create_time_controller",
      "../../api:libjingle_peerconnection_api",
      "../../api:network_emulation_manager_api",
      "../../api:rtc_stats_api",
      "../../api:time_controller",
      "../../api/audio_codecs:builtin_audio_decoder_factory",
      "../../api/audio_codecs:builtin_audio_encoder_factory",
      "../../api/rtc_event_log:rtc_event_log_factory",
      "../../api/task_queue:default_task_queue_factory",
      "../../api/transport:field_trial_based_config",
      "../../api/video_codecs:builtin_video_decoder_factory",
      "../../api/video_codecs:builtin_video_encoder_factory",
      "../../media:rtc_audio_video",
      "../../media:rtc_media_base",
      "../../media:rtp_utils",
      "../../modules/audio_device:audio_device_impl",
      "../../modules/rtp_rtcp:rtp_rtcp_format",
      "../../p2p:rtc_p2p",
      "../../pc:channel",
      "../../pc:jsep_transport_controller",
      "../../pc:pc_test_utils",
      "../../pc:rtp_transport_internal",
      "../../pc:session_description",
      "../../rtc_base:null_socket_server",
      "../../rtc_base:stringutils",
      "../../rtc_base:task_queue_for_test",
      "../../test:explicit_key_value_config",
      "../../test:scoped_key_value_config",
      "../logging:log_writer",
      "../network:emulated_network",
      "../scenario",
      "../time_controller",
    ]
    absl_deps = [
      "//third_party/abseil-cpp/absl/flags:flag",
      "//third_party/abseil-cpp/absl/memory",
    ]
  }
}
