/* * Copyright (c) 2014 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 WEBRTC_TEST_COMMON_CALL_TEST_H_ #define WEBRTC_TEST_COMMON_CALL_TEST_H_ #include #include "webrtc/call.h" #include "webrtc/system_wrappers/include/scoped_vector.h" #include "webrtc/test/fake_decoder.h" #include "webrtc/test/fake_encoder.h" #include "webrtc/test/frame_generator_capturer.h" #include "webrtc/test/rtp_rtcp_observer.h" namespace webrtc { namespace test { class BaseTest; class CallTest : public ::testing::Test { public: CallTest(); ~CallTest(); static const size_t kNumSsrcs = 3; static const unsigned int kDefaultTimeoutMs; static const unsigned int kLongTimeoutMs; static const uint8_t kSendPayloadType; static const uint8_t kSendRtxPayloadType; static const uint8_t kFakeSendPayloadType; static const uint8_t kRedPayloadType; static const uint8_t kRtxRedPayloadType; static const uint8_t kUlpfecPayloadType; static const uint32_t kSendRtxSsrcs[kNumSsrcs]; static const uint32_t kSendSsrcs[kNumSsrcs]; static const uint32_t kReceiverLocalSsrc; static const int kNackRtpHistoryMs; protected: void RunBaseTest(BaseTest* test, const FakeNetworkPipe::Config& config); void CreateCalls(const Call::Config& sender_config, const Call::Config& receiver_config); void CreateSenderCall(const Call::Config& config); void CreateReceiverCall(const Call::Config& config); void DestroyCalls(); void CreateSendConfig(size_t num_streams, Transport* send_transport); void CreateMatchingReceiveConfigs(Transport* rtcp_send_transport); void CreateFrameGeneratorCapturer(); void CreateStreams(); void Start(); void Stop(); void DestroyStreams(); Clock* const clock_; rtc::scoped_ptr sender_call_; rtc::scoped_ptr send_transport_; VideoSendStream::Config send_config_; VideoEncoderConfig encoder_config_; VideoSendStream* send_stream_; rtc::scoped_ptr receiver_call_; rtc::scoped_ptr receive_transport_; std::vector receive_configs_; std::vector receive_streams_; rtc::scoped_ptr frame_generator_capturer_; test::FakeEncoder fake_encoder_; ScopedVector allocated_decoders_; }; class BaseTest : public RtpRtcpObserver { public: explicit BaseTest(unsigned int timeout_ms); virtual ~BaseTest(); virtual void PerformTest() = 0; virtual bool ShouldCreateReceivers() const = 0; virtual size_t GetNumStreams() const; virtual Call::Config GetSenderCallConfig(); virtual Call::Config GetReceiverCallConfig(); virtual void OnCallsCreated(Call* sender_call, Call* receiver_call); virtual void OnTransportsCreated(PacketTransport* send_transport, PacketTransport* receive_transport); virtual void ModifyConfigs( VideoSendStream::Config* send_config, std::vector* receive_configs, VideoEncoderConfig* encoder_config); virtual void OnStreamsCreated( VideoSendStream* send_stream, const std::vector& receive_streams); virtual void OnFrameGeneratorCapturerCreated( FrameGeneratorCapturer* frame_generator_capturer); }; class SendTest : public BaseTest { public: explicit SendTest(unsigned int timeout_ms); bool ShouldCreateReceivers() const override; }; class EndToEndTest : public BaseTest { public: explicit EndToEndTest(unsigned int timeout_ms); bool ShouldCreateReceivers() const override; }; } // namespace test } // namespace webrtc #endif // WEBRTC_TEST_COMMON_CALL_TEST_H_