/* * 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. */ #ifndef TEST_PC_E2E_TEST_PEER_H_ #define TEST_PC_E2E_TEST_PEER_H_ #include #include #include "absl/memory/memory.h" #include "api/array_view.h" #include "media/base/media_engine.h" #include "modules/audio_device/include/test_audio_device.h" #include "pc/peer_connection_wrapper.h" #include "pc/test/mock_peer_connection_observers.h" #include "rtc_base/network.h" #include "rtc_base/thread.h" #include "test/pc/e2e/analyzer/video/encoded_image_id_injector.h" #include "test/pc/e2e/analyzer/video/video_quality_analyzer_injection_helper.h" #include "test/pc/e2e/api/peerconnection_quality_test_fixture.h" namespace webrtc { namespace test { // Describes a single participant in the call. class TestPeer final : public PeerConnectionWrapper { public: using PeerConnectionWrapper::PeerConnectionWrapper; using Params = PeerConnectionE2EQualityTestFixture::Params; using VideoConfig = PeerConnectionE2EQualityTestFixture::VideoConfig; using AudioConfig = PeerConnectionE2EQualityTestFixture::AudioConfig; using InjectableComponents = PeerConnectionE2EQualityTestFixture::InjectableComponents; // Setups all components, that should be provided to WebRTC // PeerConnectionFactory and PeerConnection creation methods, // also will setup dependencies, that are required for media analyzers // injection. // // |signaling_thread| will be provided by test fixture implementation. // |params| - describes current peer paramters, like current peer video // streams and audio streams // |audio_outpu_file_name| - the name of output file, where incoming audio // stream should be written. It should be provided from remote peer // |params.audio_config.output_file_name| static std::unique_ptr CreateTestPeer( std::unique_ptr components, std::unique_ptr params, std::unique_ptr observer, VideoQualityAnalyzerInjectionHelper* video_analyzer_helper, rtc::Thread* signaling_thread, absl::optional audio_output_file_name); Params* params() const { return params_.get(); } // Adds provided |candidates| to the owned peer connection. bool AddIceCandidates( rtc::ArrayView candidates); private: TestPeer(rtc::scoped_refptr pc_factory, rtc::scoped_refptr pc, std::unique_ptr observer, std::unique_ptr params, std::unique_ptr network_manager); std::unique_ptr params_; // Test peer will take ownership of network manager and keep it during the // call. Network manager will be deleted before peer connection, but // connection will be closed before destruction, so it should be ok. std::unique_ptr network_manager_; }; } // namespace test } // namespace webrtc #endif // TEST_PC_E2E_TEST_PEER_H_