test_api_rtcp.cc revision 00b8f6b3643332cce1ee711715f7fbb824d793ca
18281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org/*
207c68b9c9de03b4110f25cb59d9d7ba8bad624bdleozwang@webrtc.org *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
38281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org *
48281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org *  Use of this source code is governed by a BSD-style license
58281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org *  that can be found in the LICENSE file in the root of the source
68281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org *  tree. An additional intellectual property rights grant can be found
78281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org *  in the file PATENTS.  All contributing project authors may
88281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
98281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org */
108281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
118281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org#include <algorithm>
128281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org#include <vector>
138281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
14a048d7cb0a5bad5ca49bbcc5273cb4cca28c1710pbos@webrtc.org#include "testing/gmock/include/gmock/gmock.h"
15a048d7cb0a5bad5ca49bbcc5273cb4cca28c1710pbos@webrtc.org#include "testing/gtest/include/gtest/gtest.h"
16a048d7cb0a5bad5ca49bbcc5273cb4cca28c1710pbos@webrtc.org#include "webrtc/common_types.h"
17822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org#include "webrtc/modules/rtp_rtcp/interface/receive_statistics.h"
18a048d7cb0a5bad5ca49bbcc5273cb4cca28c1710pbos@webrtc.org#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h"
19a048d7cb0a5bad5ca49bbcc5273cb4cca28c1710pbos@webrtc.org#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
20822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org#include "webrtc/modules/rtp_rtcp/source/rtp_receiver_audio.h"
21a048d7cb0a5bad5ca49bbcc5273cb4cca28c1710pbos@webrtc.org#include "webrtc/modules/rtp_rtcp/test/testAPI/test_api.h"
228281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
238281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.orgusing namespace webrtc;
249663686546d9d19b7b8d3d6d75d550d14fe3d3d0andrew@webrtc.org
2549888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.orgconst uint64_t kTestPictureId = 12345678;
268281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
27ece3890d3a40fe911ae895e28c329491e795b14dpbos@webrtc.orgclass RtcpCallback : public RtcpIntraFrameObserver {
288281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org public:
292853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org  void SetModule(RtpRtcp* module) {
308281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org    _rtpRtcpModule = module;
318281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  };
322f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org  virtual void OnRTCPPacketTimeout(const int32_t id) {
338281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  }
342f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org  virtual void OnLipSyncUpdate(const int32_t id,
352f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org                               const int32_t audioVideoOffset) {
368281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  };
379663686546d9d19b7b8d3d6d75d550d14fe3d3d0andrew@webrtc.org  virtual void OnReceivedIntraFrameRequest(uint32_t ssrc) {
3849888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org  };
399663686546d9d19b7b8d3d6d75d550d14fe3d3d0andrew@webrtc.org  virtual void OnReceivedSLI(uint32_t ssrc,
409663686546d9d19b7b8d3d6d75d550d14fe3d3d0andrew@webrtc.org                             uint8_t pictureId) {
4149888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org    EXPECT_EQ(28, pictureId);
4249888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org  };
439663686546d9d19b7b8d3d6d75d550d14fe3d3d0andrew@webrtc.org  virtual void OnReceivedRPSI(uint32_t ssrc,
449663686546d9d19b7b8d3d6d75d550d14fe3d3d0andrew@webrtc.org                              uint64_t pictureId) {
4549888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org    EXPECT_EQ(kTestPictureId, pictureId);
4649888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org  };
47aca26292aeb35c91e70dd22d5923bf74ce68fa30mflodman@webrtc.org  virtual void OnLocalSsrcChanged(uint32_t old_ssrc, uint32_t new_ssrc) {};
488281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org private:
498281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  RtpRtcp* _rtpRtcpModule;
508281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org};
518281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
52822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.orgclass TestRtpFeedback : public NullRtpFeedback {
53822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org public:
54822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org  TestRtpFeedback(RtpRtcp* rtp_rtcp) : rtp_rtcp_(rtp_rtcp) {}
55822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org  virtual ~TestRtpFeedback() {}
56822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org
57822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org  virtual void OnIncomingSSRCChanged(const int32_t id,
58286fe0b04d97205ac84688bbe613d5749192b2d1stefan@webrtc.org                                     const uint32_t ssrc) {
59286fe0b04d97205ac84688bbe613d5749192b2d1stefan@webrtc.org    rtp_rtcp_->SetRemoteSSRC(ssrc);
60822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org  }
61822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org
62822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org private:
63822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org  RtpRtcp* rtp_rtcp_;
64822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org};
65822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org
668281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.orgclass RtpRtcpRtcpTest : public ::testing::Test {
678281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org protected:
68a678a3baee2e680bd521f3a6caf97707fffd6093stefan@webrtc.org  RtpRtcpRtcpTest() : fake_clock(123456) {
699334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org    test_csrcs.push_back(1234);
709334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org    test_csrcs.push_back(2345);
718281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org    test_id = 123;
728281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org    test_ssrc = 3456;
738281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org    test_timestamp = 4567;
748281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org    test_sequence_number = 2345;
758281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  }
768281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  ~RtpRtcpRtcpTest() {}
778281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
788281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  virtual void SetUp() {
79822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    receiver = new TestRtpReceiver();
802853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    transport1 = new LoopBackTransport();
812853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    transport2 = new LoopBackTransport();
822853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    myRTCPFeedback1 = new RtcpCallback();
832853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    myRTCPFeedback2 = new RtcpCallback();
842853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org
85822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    receive_statistics1_.reset(ReceiveStatistics::Create(&fake_clock));
86822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    receive_statistics2_.reset(ReceiveStatistics::Create(&fake_clock));
87822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org
882853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    RtpRtcp::Configuration configuration;
892853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    configuration.id = test_id;
908d0cd07d0c5e30eacaac4c118f9fd624b11e67abstefan@webrtc.org    configuration.audio = true;
912853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    configuration.clock = &fake_clock;
92822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    configuration.receive_statistics = receive_statistics1_.get();
932853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    configuration.outgoing_transport = transport1;
942853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    configuration.intra_frame_callback = myRTCPFeedback1;
95822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org
96822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    rtp_payload_registry1_.reset(new RTPPayloadRegistry(
97dc80bae2a62a1bdbe0d342b3260a7e5b2cb958dfandresp@webrtc.org            RTPPayloadStrategy::CreateStrategy(true)));
98822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    rtp_payload_registry2_.reset(new RTPPayloadRegistry(
99dc80bae2a62a1bdbe0d342b3260a7e5b2cb958dfandresp@webrtc.org            RTPPayloadStrategy::CreateStrategy(true)));
1002853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org
1012853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    module1 = RtpRtcp::CreateRtpRtcp(configuration);
1022853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org
103822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    rtp_feedback1_.reset(new TestRtpFeedback(module1));
104822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org
105822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    rtp_receiver1_.reset(RtpReceiver::CreateAudioReceiver(
106822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org        test_id, &fake_clock, NULL, receiver, rtp_feedback1_.get(),
107822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org        rtp_payload_registry1_.get()));
108822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org
109822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    configuration.receive_statistics = receive_statistics2_.get();
1102853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    configuration.id = test_id + 1;
1112853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    configuration.outgoing_transport = transport2;
1122853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    configuration.intra_frame_callback = myRTCPFeedback2;
113822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org
1142853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    module2 = RtpRtcp::CreateRtpRtcp(configuration);
1152853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org
116822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    rtp_feedback2_.reset(new TestRtpFeedback(module2));
117822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org
118822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    rtp_receiver2_.reset(RtpReceiver::CreateAudioReceiver(
119822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org        test_id + 1, &fake_clock, NULL, receiver, rtp_feedback2_.get(),
120822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org        rtp_payload_registry2_.get()));
121822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org
122822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    transport1->SetSendModule(module2, rtp_payload_registry2_.get(),
123822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org                              rtp_receiver2_.get(), receive_statistics2_.get());
124822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    transport2->SetSendModule(module1, rtp_payload_registry1_.get(),
125822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org                              rtp_receiver1_.get(), receive_statistics1_.get());
1262853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    myRTCPFeedback1->SetModule(module1);
1272853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    myRTCPFeedback2->SetModule(module2);
128ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org
129d16e839c6d29831e79312180085b6a19149df43fpbos@webrtc.org    module1->SetRTCPStatus(kRtcpCompound);
130d16e839c6d29831e79312180085b6a19149df43fpbos@webrtc.org    module2->SetRTCPStatus(kRtcpCompound);
131ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org
132ef92755780253c6a7940c89598a206e58e05b810stefan@webrtc.org    module2->SetSSRC(test_ssrc + 1);
133ef92755780253c6a7940c89598a206e58e05b810stefan@webrtc.org    module1->SetSSRC(test_ssrc);
134d16e839c6d29831e79312180085b6a19149df43fpbos@webrtc.org    module1->SetSequenceNumber(test_sequence_number);
135d16e839c6d29831e79312180085b6a19149df43fpbos@webrtc.org    module1->SetStartTimestamp(test_timestamp);
1369334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org
1379334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org    module1->SetCsrcs(test_csrcs);
138ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org    EXPECT_EQ(0, module1->SetCNAME("john.doe@test.test"));
139ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org
140ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org    EXPECT_EQ(0, module1->SetSendingStatus(true));
141ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org
142822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    CodecInst voice_codec;
143822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    voice_codec.pltype = 96;
144822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    voice_codec.plfreq = 8000;
145822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    voice_codec.rate = 64000;
146822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    memcpy(voice_codec.plname, "PCMU", 5);
147822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org
148822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    EXPECT_EQ(0, module1->RegisterSendPayload(voice_codec));
149822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    EXPECT_EQ(0, rtp_receiver1_->RegisterReceivePayload(
150822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org        voice_codec.plname,
151822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org        voice_codec.pltype,
152822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org        voice_codec.plfreq,
153822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org        voice_codec.channels,
154822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org        (voice_codec.rate < 0) ? 0 : voice_codec.rate));
155822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    EXPECT_EQ(0, module2->RegisterSendPayload(voice_codec));
156822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org    EXPECT_EQ(0, rtp_receiver2_->RegisterReceivePayload(
157822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org        voice_codec.plname,
158822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org        voice_codec.pltype,
159822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org        voice_codec.plfreq,
160822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org        voice_codec.channels,
161822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org        (voice_codec.rate < 0) ? 0 : voice_codec.rate));
162ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org
163ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org    // We need to send one RTP packet to get the RTCP packet to be accepted by
164ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org    // the receiving module.
165ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org    // send RTP packet with the data "testtest"
1662f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org    const uint8_t test[9] = "testtest";
167ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org    EXPECT_EQ(0, module1->SendOutgoingData(webrtc::kAudioFrameSpeech, 96,
168ddfdfed3b55de3da5fda9a55d34e46d6e422baafstefan@webrtc.org                                           0, -1, test, 8));
169ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org  }
170ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org
1712853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org  virtual void TearDown() {
1722853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    delete module1;
1732853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    delete module2;
1748d0cd07d0c5e30eacaac4c118f9fd624b11e67abstefan@webrtc.org    delete myRTCPFeedback1;
1758d0cd07d0c5e30eacaac4c118f9fd624b11e67abstefan@webrtc.org    delete myRTCPFeedback2;
1762853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    delete transport1;
1772853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    delete transport2;
1782853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org    delete receiver;
1792853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org  }
1802853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org
1818281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  int test_id;
18200b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org  rtc::scoped_ptr<TestRtpFeedback> rtp_feedback1_;
18300b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org  rtc::scoped_ptr<TestRtpFeedback> rtp_feedback2_;
18400b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org  rtc::scoped_ptr<ReceiveStatistics> receive_statistics1_;
18500b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org  rtc::scoped_ptr<ReceiveStatistics> receive_statistics2_;
18600b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org  rtc::scoped_ptr<RTPPayloadRegistry> rtp_payload_registry1_;
18700b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org  rtc::scoped_ptr<RTPPayloadRegistry> rtp_payload_registry2_;
18800b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org  rtc::scoped_ptr<RtpReceiver> rtp_receiver1_;
18900b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org  rtc::scoped_ptr<RtpReceiver> rtp_receiver2_;
1908281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  RtpRtcp* module1;
1918281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  RtpRtcp* module2;
192822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org  TestRtpReceiver* receiver;
1938281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  LoopBackTransport* transport1;
1948281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  LoopBackTransport* transport2;
1952853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org  RtcpCallback* myRTCPFeedback1;
1962853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org  RtcpCallback* myRTCPFeedback2;
1972853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org
1982f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org  uint32_t test_ssrc;
1992f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org  uint32_t test_timestamp;
2002f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org  uint16_t test_sequence_number;
2019334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org  std::vector<uint32_t> test_csrcs;
202a678a3baee2e680bd521f3a6caf97707fffd6093stefan@webrtc.org  SimulatedClock fake_clock;
2038281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org};
2048281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
20549888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.orgTEST_F(RtpRtcpRtcpTest, RTCP_PLI_RPSI) {
2068281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  EXPECT_EQ(0, module1->SendRTCPReferencePictureSelection(kTestPictureId));
2078281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  EXPECT_EQ(0, module1->SendRTCPSliceLossIndication(156));
20849888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org}
2098281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
21049888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.orgTEST_F(RtpRtcpRtcpTest, RTCP_CNAME) {
2112f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org  uint32_t testOfCSRC[webrtc::kRtpCsrcSize];
212822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org  EXPECT_EQ(2, rtp_receiver2_->CSRCs(testOfCSRC));
2139334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org  EXPECT_EQ(test_csrcs[0], testOfCSRC[0]);
2149334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org  EXPECT_EQ(test_csrcs[1], testOfCSRC[1]);
2158281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
2168281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  // Set cname of mixed.
2179334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org  EXPECT_EQ(0, module1->AddMixedCNAME(test_csrcs[0], "john@192.168.0.1"));
2189334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org  EXPECT_EQ(0, module1->AddMixedCNAME(test_csrcs[1], "jane@192.168.0.2"));
2198281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
2209334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org  EXPECT_EQ(-1, module1->RemoveMixedCNAME(test_csrcs[0] + 1));
2219334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org  EXPECT_EQ(0, module1->RemoveMixedCNAME(test_csrcs[1]));
2229334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org  EXPECT_EQ(0, module1->AddMixedCNAME(test_csrcs[1], "jane@192.168.0.2"));
2238281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
22449888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org  // send RTCP packet, triggered by timer
225a678a3baee2e680bd521f3a6caf97707fffd6093stefan@webrtc.org  fake_clock.AdvanceTimeMilliseconds(7500);
22649888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org  module1->Process();
227a678a3baee2e680bd521f3a6caf97707fffd6093stefan@webrtc.org  fake_clock.AdvanceTimeMilliseconds(100);
22849888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org  module2->Process();
22949888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org
23049888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org  char cName[RTCP_CNAME_SIZE];
231822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org  EXPECT_EQ(-1, module2->RemoteCNAME(rtp_receiver2_->SSRC() + 1, cName));
23249888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org
23349888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org  // Check multiple CNAME.
234822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org  EXPECT_EQ(0, module2->RemoteCNAME(rtp_receiver2_->SSRC(), cName));
23549888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org  EXPECT_EQ(0, strncmp(cName, "john.doe@test.test", RTCP_CNAME_SIZE));
23649888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org
2379334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org  EXPECT_EQ(0, module2->RemoteCNAME(test_csrcs[0], cName));
23849888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org  EXPECT_EQ(0, strncmp(cName, "john@192.168.0.1", RTCP_CNAME_SIZE));
23949888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org
2409334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org  EXPECT_EQ(0, module2->RemoteCNAME(test_csrcs[1], cName));
24149888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org  EXPECT_EQ(0, strncmp(cName, "jane@192.168.0.2", RTCP_CNAME_SIZE));
24249888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org
24349888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org  EXPECT_EQ(0, module1->SetSendingStatus(false));
24449888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org
24549888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org  // Test that BYE clears the CNAME
246822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org  EXPECT_EQ(-1, module2->RemoteCNAME(rtp_receiver2_->SSRC(), cName));
24749888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org}
24849888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org
24949888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.orgTEST_F(RtpRtcpRtcpTest, RTCP) {
2508281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  RTCPReportBlock reportBlock;
2518d0cd07d0c5e30eacaac4c118f9fd624b11e67abstefan@webrtc.org  reportBlock.remoteSSRC = 1;
2528d0cd07d0c5e30eacaac4c118f9fd624b11e67abstefan@webrtc.org  reportBlock.sourceSSRC = 2;
2538281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  reportBlock.cumulativeLost = 1;
2548281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  reportBlock.delaySinceLastSR = 2;
2558281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  reportBlock.extendedHighSeqNum = 3;
2568281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  reportBlock.fractionLost= 4;
2578281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  reportBlock.jitter = 5;
2588281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  reportBlock.lastSR = 6;
2598281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
2608281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  // Set report blocks.
2619334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org  EXPECT_EQ(0, module1->AddRTCPReportBlock(test_csrcs[0], &reportBlock));
2628281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
2638281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  reportBlock.lastSR= 7;
2649334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org  EXPECT_EQ(0, module1->AddRTCPReportBlock(test_csrcs[1], &reportBlock));
2658281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
2662f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org  uint32_t name = 't' << 24;
2678281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  name += 'e' << 16;
2688281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  name += 's' << 8;
2698281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  name += 't';
2708281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  EXPECT_EQ(0, module1->SetRTCPApplicationSpecificData(
2718281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org      3,
2728281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org      name,
2732f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org      (const uint8_t *)"test test test test test test test test test"\
2748281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org          " test test test test test test test test test test test test test"\
2758281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org          " test test test test test test test test test test test test test"\
2768281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org          " test test test test test test test test test test test test test"\
2778281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org          " test test test test test test test test test test test test ",
2788281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org          300));
2798281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
2808281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  // send RTCP packet, triggered by timer
281a678a3baee2e680bd521f3a6caf97707fffd6093stefan@webrtc.org  fake_clock.AdvanceTimeMilliseconds(7500);
2828281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  module1->Process();
283a678a3baee2e680bd521f3a6caf97707fffd6093stefan@webrtc.org  fake_clock.AdvanceTimeMilliseconds(100);
2848281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  module2->Process();
2858281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
2862f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org  uint32_t receivedNTPsecs = 0;
2872f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org  uint32_t receivedNTPfrac = 0;
2882f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org  uint32_t RTCPArrivalTimeSecs = 0;
2892f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org  uint32_t RTCPArrivalTimeFrac = 0;
2907c3523c1a4c828ecb2773c685145fcfbd7c3ceadstefan@webrtc.org  EXPECT_EQ(0, module2->RemoteNTP(&receivedNTPsecs,
2917c3523c1a4c828ecb2773c685145fcfbd7c3ceadstefan@webrtc.org                                  &receivedNTPfrac,
2927c3523c1a4c828ecb2773c685145fcfbd7c3ceadstefan@webrtc.org                                  &RTCPArrivalTimeSecs,
2937c3523c1a4c828ecb2773c685145fcfbd7c3ceadstefan@webrtc.org                                  &RTCPArrivalTimeFrac,
2947c3523c1a4c828ecb2773c685145fcfbd7c3ceadstefan@webrtc.org                                  NULL));
2958281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
2968281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
2978281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  // get all report blocks
298ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org  std::vector<RTCPReportBlock> report_blocks;
299ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org  EXPECT_EQ(0, module1->RemoteRTCPStat(&report_blocks));
300b5865079868c4dec49571e7aef0aa52124b50c64stefan@webrtc.org  ASSERT_EQ(1u, report_blocks.size());
301ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org  const RTCPReportBlock& reportBlockReceived = report_blocks[0];
302ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org
3038281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  float secSinceLastReport =
3048281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org      static_cast<float>(reportBlockReceived.delaySinceLastSR) / 65536.0f;
3058281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  EXPECT_GE(0.101f, secSinceLastReport);
3068281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  EXPECT_LE(0.100f, secSinceLastReport);
3078281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  EXPECT_EQ(test_sequence_number, reportBlockReceived.extendedHighSeqNum);
3088281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  EXPECT_EQ(0, reportBlockReceived.fractionLost);
3098281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
3102f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org  EXPECT_EQ(static_cast<uint32_t>(0),
3118281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org            reportBlockReceived.cumulativeLost);
3128281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
313286fe0b04d97205ac84688bbe613d5749192b2d1stefan@webrtc.org  StreamStatistician *statistician =
314286fe0b04d97205ac84688bbe613d5749192b2d1stefan@webrtc.org      receive_statistics2_->GetStatistician(reportBlockReceived.sourceSSRC);
31554ae4ffb9e235a9742e2b11298327e02d870571csprang@webrtc.org  RtcpStatistics stats;
316286fe0b04d97205ac84688bbe613d5749192b2d1stefan@webrtc.org  EXPECT_TRUE(statistician->GetStatistics(&stats, true));
317822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org  EXPECT_EQ(0, stats.fraction_lost);
318822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org  EXPECT_EQ((uint32_t)0, stats.cumulative_lost);
319822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org  EXPECT_EQ(test_sequence_number, stats.extended_max_sequence_number);
320822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org  EXPECT_EQ(reportBlockReceived.jitter, stats.jitter);
3218281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
32216825b1a828bb4ff40f7682040e43a239b7b8ca3pkasting@chromium.org  int64_t RTT;
32316825b1a828bb4ff40f7682040e43a239b7b8ca3pkasting@chromium.org  int64_t avgRTT;
32416825b1a828bb4ff40f7682040e43a239b7b8ca3pkasting@chromium.org  int64_t minRTT;
32516825b1a828bb4ff40f7682040e43a239b7b8ca3pkasting@chromium.org  int64_t maxRTT;
3268281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
3278281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  // Get RoundTripTime.
3288281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  EXPECT_EQ(0, module1->RTT(test_ssrc + 1, &RTT, &avgRTT, &minRTT, &maxRTT));
3298281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  EXPECT_GE(10, RTT);
3308281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  EXPECT_GE(10, avgRTT);
3318281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  EXPECT_GE(10, minRTT);
3328281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  EXPECT_GE(10, maxRTT);
3338281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
3348281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  // Set report blocks.
3359334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org  EXPECT_EQ(0, module1->AddRTCPReportBlock(test_csrcs[0], &reportBlock));
3368281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
3378281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  // Test receive report.
3388281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  EXPECT_EQ(0, module1->SetSendingStatus(false));
3398281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org
3408281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  // Send RTCP packet, triggered by timer.
341a678a3baee2e680bd521f3a6caf97707fffd6093stefan@webrtc.org  fake_clock.AdvanceTimeMilliseconds(5000);
3428281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  module1->Process();
3438281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org  module2->Process();
3448281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org}
345ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org
346ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.orgTEST_F(RtpRtcpRtcpTest, RemoteRTCPStatRemote) {
347ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org  std::vector<RTCPReportBlock> report_blocks;
348ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org
349ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org  EXPECT_EQ(0, module1->RemoteRTCPStat(&report_blocks));
350ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org  EXPECT_EQ(0u, report_blocks.size());
351ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org
352ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org  // send RTCP packet, triggered by timer
353a678a3baee2e680bd521f3a6caf97707fffd6093stefan@webrtc.org  fake_clock.AdvanceTimeMilliseconds(7500);
354ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org  module1->Process();
355a678a3baee2e680bd521f3a6caf97707fffd6093stefan@webrtc.org  fake_clock.AdvanceTimeMilliseconds(100);
356ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org  module2->Process();
357ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org
358ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org  EXPECT_EQ(0, module1->RemoteRTCPStat(&report_blocks));
359ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org  ASSERT_EQ(1u, report_blocks.size());
360ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org
361ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org  // |test_ssrc+1| is the SSRC of module2 that send the report.
362ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org  EXPECT_EQ(test_ssrc+1, report_blocks[0].remoteSSRC);
363ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org  EXPECT_EQ(test_ssrc, report_blocks[0].sourceSSRC);
364ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org
365ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org  EXPECT_EQ(0u, report_blocks[0].cumulativeLost);
366ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org  EXPECT_LT(0u, report_blocks[0].delaySinceLastSR);
367ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org  EXPECT_EQ(test_sequence_number, report_blocks[0].extendedHighSeqNum);
368ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org  EXPECT_EQ(0u, report_blocks[0].fractionLost);
369ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org}
370