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_