1/*
2 *  Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10#ifndef WEBRTC_TEST_COMMON_CALL_TEST_H_
11#define WEBRTC_TEST_COMMON_CALL_TEST_H_
12
13#include <vector>
14
15#include "webrtc/call.h"
16#include "webrtc/system_wrappers/interface/scoped_vector.h"
17#include "webrtc/test/fake_decoder.h"
18#include "webrtc/test/fake_encoder.h"
19#include "webrtc/test/frame_generator_capturer.h"
20#include "webrtc/test/rtp_rtcp_observer.h"
21
22namespace webrtc {
23namespace test {
24
25class BaseTest;
26
27class CallTest : public ::testing::Test {
28 public:
29  CallTest();
30  ~CallTest();
31
32  static const size_t kNumSsrcs = 3;
33
34  static const unsigned int kDefaultTimeoutMs;
35  static const unsigned int kLongTimeoutMs;
36  static const uint8_t kSendPayloadType;
37  static const uint8_t kSendRtxPayloadType;
38  static const uint8_t kFakeSendPayloadType;
39  static const uint8_t kRedPayloadType;
40  static const uint8_t kUlpfecPayloadType;
41  static const uint32_t kSendRtxSsrcs[kNumSsrcs];
42  static const uint32_t kSendSsrcs[kNumSsrcs];
43  static const uint32_t kReceiverLocalSsrc;
44  static const int kNackRtpHistoryMs;
45
46 protected:
47  void RunBaseTest(BaseTest* test);
48
49  void CreateCalls(const Call::Config& sender_config,
50                   const Call::Config& receiver_config);
51  void CreateSenderCall(const Call::Config& config);
52  void CreateReceiverCall(const Call::Config& config);
53
54  void CreateSendConfig(size_t num_streams);
55  void CreateMatchingReceiveConfigs();
56
57  void CreateFrameGeneratorCapturer();
58
59  void CreateStreams();
60  void Start();
61  void Stop();
62  void DestroyStreams();
63
64  Clock* const clock_;
65
66  scoped_ptr<Call> sender_call_;
67  VideoSendStream::Config send_config_;
68  VideoEncoderConfig encoder_config_;
69  VideoSendStream* send_stream_;
70
71  scoped_ptr<Call> receiver_call_;
72  std::vector<VideoReceiveStream::Config> receive_configs_;
73  std::vector<VideoReceiveStream*> receive_streams_;
74
75  scoped_ptr<test::FrameGeneratorCapturer> frame_generator_capturer_;
76  test::FakeEncoder fake_encoder_;
77  ScopedVector<test::FakeDecoder> fake_decoders_;
78};
79
80class BaseTest : public RtpRtcpObserver {
81 public:
82  explicit BaseTest(unsigned int timeout_ms);
83  BaseTest(unsigned int timeout_ms, const FakeNetworkPipe::Config& config);
84  virtual ~BaseTest();
85
86  virtual void PerformTest() = 0;
87  virtual bool ShouldCreateReceivers() const = 0;
88
89  virtual size_t GetNumStreams() const;
90
91  virtual Call::Config GetSenderCallConfig();
92  virtual Call::Config GetReceiverCallConfig();
93  virtual void OnCallsCreated(Call* sender_call, Call* receiver_call);
94
95  virtual void ModifyConfigs(
96      VideoSendStream::Config* send_config,
97      std::vector<VideoReceiveStream::Config>* receive_configs,
98      VideoEncoderConfig* encoder_config);
99  virtual void OnStreamsCreated(
100      VideoSendStream* send_stream,
101      const std::vector<VideoReceiveStream*>& receive_streams);
102
103  virtual void OnFrameGeneratorCapturerCreated(
104      FrameGeneratorCapturer* frame_generator_capturer);
105};
106
107class SendTest : public BaseTest {
108 public:
109  explicit SendTest(unsigned int timeout_ms);
110  SendTest(unsigned int timeout_ms, const FakeNetworkPipe::Config& config);
111
112  virtual bool ShouldCreateReceivers() const OVERRIDE;
113};
114
115class EndToEndTest : public BaseTest {
116 public:
117  explicit EndToEndTest(unsigned int timeout_ms);
118  EndToEndTest(unsigned int timeout_ms, const FakeNetworkPipe::Config& config);
119
120  virtual bool ShouldCreateReceivers() const OVERRIDE;
121};
122
123}  // namespace test
124}  // namespace webrtc
125
126#endif  // WEBRTC_TEST_COMMON_CALL_TEST_H_
127