pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 1 | /* |
phoglund@webrtc.org | 78088c2 | 2012-02-07 14:56:45 | [diff] [blame] | 2 | * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 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 | |
pbos@webrtc.org | a048d7c | 2013-05-29 14:27:38 | [diff] [blame] | 11 | #include "testing/gtest/include/gtest/gtest.h" |
pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 12 | |
pbos@webrtc.org | a048d7c | 2013-05-29 14:27:38 | [diff] [blame] | 13 | #include "webrtc/common_types.h" |
| 14 | #include "webrtc/modules/remote_bitrate_estimator/include/bwe_defines.h" |
| 15 | #include "webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitrate_observer.h" |
| 16 | #include "webrtc/modules/rtp_rtcp/source/rtcp_receiver.h" |
| 17 | #include "webrtc/modules/rtp_rtcp/source/rtcp_sender.h" |
| 18 | #include "webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.h" |
| 19 | #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" |
| 20 | #include "webrtc/typedefs.h" |
pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 21 | |
| 22 | namespace { |
| 23 | |
| 24 | using namespace webrtc; |
| 25 | |
| 26 | |
| 27 | class TestTransport : public Transport { |
| 28 | public: |
| 29 | TestTransport(RTCPReceiver* rtcp_receiver) : |
| 30 | rtcp_receiver_(rtcp_receiver) { |
| 31 | } |
| 32 | |
| 33 | virtual int SendPacket(int /*channel*/, const void* /*data*/, int /*len*/) { |
| 34 | return -1; |
| 35 | } |
| 36 | virtual int SendRTCPPacket(int /*channel*/, |
| 37 | const void *packet, |
| 38 | int packetLength) { |
pbos@webrtc.org | 2f44673 | 2013-04-08 11:08:41 | [diff] [blame] | 39 | RTCPUtility::RTCPParserV2 rtcpParser((uint8_t*)packet, |
| 40 | (int32_t)packetLength, |
pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 41 | true); // Allow non-compound RTCP |
| 42 | |
phoglund@webrtc.org | 78088c2 | 2012-02-07 14:56:45 | [diff] [blame] | 43 | EXPECT_TRUE(rtcpParser.IsValid()); |
pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 44 | RTCPHelp::RTCPPacketInformation rtcpPacketInformation; |
| 45 | EXPECT_EQ(0, rtcp_receiver_->IncomingRTCPPacket(rtcpPacketInformation, |
| 46 | &rtcpParser)); |
| 47 | |
pbos@webrtc.org | 2f44673 | 2013-04-08 11:08:41 | [diff] [blame] | 48 | EXPECT_EQ((uint32_t)kRtcpRemb, |
pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 49 | rtcpPacketInformation.rtcpPacketTypeFlags & kRtcpRemb); |
pbos@webrtc.org | 2f44673 | 2013-04-08 11:08:41 | [diff] [blame] | 50 | EXPECT_EQ((uint32_t)1234, |
pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 51 | rtcpPacketInformation.receiverEstimatedMaxBitrate); |
| 52 | return packetLength; |
| 53 | } |
| 54 | private: |
| 55 | RTCPReceiver* rtcp_receiver_; |
| 56 | }; |
| 57 | |
| 58 | |
| 59 | class RtcpFormatRembTest : public ::testing::Test { |
| 60 | protected: |
stefan@webrtc.org | 9354cc9 | 2012-06-07 08:10:14 | [diff] [blame] | 61 | RtcpFormatRembTest() |
astor@webrtc.org | bd7aeba | 2012-06-26 10:47:04 | [diff] [blame] | 62 | : over_use_detector_options_(), |
stefan@webrtc.org | b586507 | 2013-02-01 14:33:42 | [diff] [blame] | 63 | system_clock_(Clock::GetRealTimeClock()), |
stefan@webrtc.org | 717d147 | 2013-07-10 13:39:27 | [diff] [blame] | 64 | receive_statistics_(ReceiveStatistics::Create(system_clock_)), |
astor@webrtc.org | bd7aeba | 2012-06-26 10:47:04 | [diff] [blame] | 65 | remote_bitrate_observer_(), |
andresp@webrtc.org | 29b2219 | 2013-05-14 12:10:58 | [diff] [blame] | 66 | remote_bitrate_estimator_( |
| 67 | RemoteBitrateEstimatorFactory().Create( |
| 68 | &remote_bitrate_observer_, |
| 69 | system_clock_)) {} |
pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 70 | virtual void SetUp(); |
| 71 | virtual void TearDown(); |
| 72 | |
astor@webrtc.org | bd7aeba | 2012-06-26 10:47:04 | [diff] [blame] | 73 | OverUseDetectorOptions over_use_detector_options_; |
stefan@webrtc.org | 20ed36d | 2013-01-17 14:01:20 | [diff] [blame] | 74 | Clock* system_clock_; |
pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 75 | ModuleRtpRtcpImpl* dummy_rtp_rtcp_impl_; |
stefan@webrtc.org | 717d147 | 2013-07-10 13:39:27 | [diff] [blame] | 76 | scoped_ptr<ReceiveStatistics> receive_statistics_; |
pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 77 | RTCPSender* rtcp_sender_; |
| 78 | RTCPReceiver* rtcp_receiver_; |
| 79 | TestTransport* test_transport_; |
stefan@webrtc.org | 9354cc9 | 2012-06-07 08:10:14 | [diff] [blame] | 80 | MockRemoteBitrateObserver remote_bitrate_observer_; |
stefan@webrtc.org | 976a7e6 | 2012-09-21 13:20:21 | [diff] [blame] | 81 | scoped_ptr<RemoteBitrateEstimator> remote_bitrate_estimator_; |
pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 82 | }; |
| 83 | |
| 84 | void RtcpFormatRembTest::SetUp() { |
pwestin@webrtc.org | 2853dde | 2012-05-11 11:08:54 | [diff] [blame] | 85 | RtpRtcp::Configuration configuration; |
| 86 | configuration.id = 0; |
| 87 | configuration.audio = false; |
| 88 | configuration.clock = system_clock_; |
stefan@webrtc.org | 976a7e6 | 2012-09-21 13:20:21 | [diff] [blame] | 89 | configuration.remote_bitrate_estimator = remote_bitrate_estimator_.get(); |
pwestin@webrtc.org | 2853dde | 2012-05-11 11:08:54 | [diff] [blame] | 90 | dummy_rtp_rtcp_impl_ = new ModuleRtpRtcpImpl(configuration); |
stefan@webrtc.org | 717d147 | 2013-07-10 13:39:27 | [diff] [blame] | 91 | rtcp_sender_ = new RTCPSender(0, false, system_clock_, dummy_rtp_rtcp_impl_, |
| 92 | receive_statistics_.get()); |
henrike@webrtc.org | d6d014f | 2012-02-16 02:18:09 | [diff] [blame] | 93 | rtcp_receiver_ = new RTCPReceiver(0, system_clock_, dummy_rtp_rtcp_impl_); |
pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 94 | test_transport_ = new TestTransport(rtcp_receiver_); |
| 95 | |
| 96 | EXPECT_EQ(0, rtcp_sender_->Init()); |
| 97 | EXPECT_EQ(0, rtcp_sender_->RegisterSendTransport(test_transport_)); |
| 98 | } |
| 99 | |
| 100 | void RtcpFormatRembTest::TearDown() { |
| 101 | delete rtcp_sender_; |
| 102 | delete rtcp_receiver_; |
| 103 | delete dummy_rtp_rtcp_impl_; |
| 104 | delete test_transport_; |
| 105 | } |
| 106 | |
| 107 | TEST_F(RtcpFormatRembTest, TestBasicAPI) { |
phoglund@webrtc.org | d1a860b | 2012-01-26 14:49:28 | [diff] [blame] | 108 | EXPECT_FALSE(rtcp_sender_->REMB()); |
pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 109 | EXPECT_EQ(0, rtcp_sender_->SetREMBStatus(true)); |
phoglund@webrtc.org | d1a860b | 2012-01-26 14:49:28 | [diff] [blame] | 110 | EXPECT_TRUE(rtcp_sender_->REMB()); |
pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 111 | EXPECT_EQ(0, rtcp_sender_->SetREMBStatus(false)); |
phoglund@webrtc.org | d1a860b | 2012-01-26 14:49:28 | [diff] [blame] | 112 | EXPECT_FALSE(rtcp_sender_->REMB()); |
pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 113 | |
| 114 | EXPECT_EQ(0, rtcp_sender_->SetREMBData(1234, 0, NULL)); |
| 115 | } |
| 116 | |
| 117 | TEST_F(RtcpFormatRembTest, TestNonCompund) { |
pbos@webrtc.org | 2f44673 | 2013-04-08 11:08:41 | [diff] [blame] | 118 | uint32_t SSRC = 456789; |
pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 119 | EXPECT_EQ(0, rtcp_sender_->SetRTCPStatus(kRtcpNonCompound)); |
| 120 | EXPECT_EQ(0, rtcp_sender_->SetREMBData(1234, 1, &SSRC)); |
stefan@webrtc.org | 717d147 | 2013-07-10 13:39:27 | [diff] [blame] | 121 | EXPECT_EQ(0, rtcp_sender_->SendRTCP(kRtcpRemb)); |
pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 122 | } |
| 123 | |
| 124 | TEST_F(RtcpFormatRembTest, TestCompund) { |
pbos@webrtc.org | 2f44673 | 2013-04-08 11:08:41 | [diff] [blame] | 125 | uint32_t SSRCs[2] = {456789, 98765}; |
pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 126 | EXPECT_EQ(0, rtcp_sender_->SetRTCPStatus(kRtcpCompound)); |
| 127 | EXPECT_EQ(0, rtcp_sender_->SetREMBData(1234, 2, SSRCs)); |
stefan@webrtc.org | 717d147 | 2013-07-10 13:39:27 | [diff] [blame] | 128 | EXPECT_EQ(0, rtcp_sender_->SendRTCP(kRtcpRemb)); |
pwestin@webrtc.org | 741da94 | 2011-09-20 13:52:04 | [diff] [blame] | 129 | } |
pbos@webrtc.org | d900e8b | 2013-07-03 15:12:26 | [diff] [blame] | 130 | } // namespace |