Refactor Call-based tests.
Greatly reduces duplication of constants and setup code for tests based
on the new webrtc::Call APIs. It also makes it significantly easier to
convert sender-only to end-to-end tests as they share more code.
BUG=3035
R=kjellander@webrtc.org, stefan@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/17789004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@6551 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/test/call_test.h b/webrtc/test/call_test.h
new file mode 100644
index 0000000..94ac2fa
--- /dev/null
+++ b/webrtc/test/call_test.h
@@ -0,0 +1,119 @@
+/*
+ * 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 <vector>
+
+#include "webrtc/call.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 uint32_t kSendRtxSsrc;
+ static const uint32_t kSendSsrcs[kNumSsrcs];
+ static const uint32_t kReceiverLocalSsrc;
+ static const int kNackRtpHistoryMs;
+
+ protected:
+ void RunBaseTest(BaseTest* test);
+
+ 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 CreateSendConfig(size_t num_streams);
+ void CreateMatchingReceiveConfigs();
+
+ void CreateFrameGeneratorCapturer();
+
+ void CreateStreams();
+ void Start();
+ void Stop();
+ void DestroyStreams();
+
+ scoped_ptr<Call> sender_call_;
+ VideoSendStream::Config send_config_;
+ std::vector<VideoStream> video_streams_;
+ VideoSendStream* send_stream_;
+
+ scoped_ptr<Call> receiver_call_;
+ VideoReceiveStream::Config receive_config_;
+ VideoReceiveStream* receive_stream_;
+
+ scoped_ptr<test::FrameGeneratorCapturer> frame_generator_capturer_;
+ test::FakeEncoder fake_encoder_;
+ test::FakeDecoder fake_decoder_;
+};
+
+class BaseTest : public RtpRtcpObserver {
+ public:
+ explicit BaseTest(unsigned int timeout_ms);
+ BaseTest(unsigned int timeout_ms, const FakeNetworkPipe::Config& config);
+ 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 ModifyConfigs(VideoSendStream::Config* send_config,
+ VideoReceiveStream::Config* receive_config,
+ std::vector<VideoStream>* video_streams);
+ virtual void OnStreamsCreated(VideoSendStream* send_stream,
+ VideoReceiveStream* receive_stream);
+
+ virtual void OnFrameGeneratorCapturerCreated(
+ FrameGeneratorCapturer* frame_generator_capturer);
+};
+
+class SendTest : public BaseTest {
+ public:
+ explicit SendTest(unsigned int timeout_ms);
+ SendTest(unsigned int timeout_ms, const FakeNetworkPipe::Config& config);
+
+ virtual bool ShouldCreateReceivers() const OVERRIDE;
+};
+
+class EndToEndTest : public BaseTest {
+ public:
+ explicit EndToEndTest(unsigned int timeout_ms);
+ EndToEndTest(unsigned int timeout_ms, const FakeNetworkPipe::Config& config);
+
+ virtual bool ShouldCreateReceivers() const OVERRIDE;
+};
+
+} // namespace test
+} // namespace webrtc
+
+#endif // WEBRTC_TEST_COMMON_CALL_TEST_H_