Index: webrtc/modules/rtp_rtcp/source/rtcp_sender_unittest.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_sender_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtcp_sender_unittest.cc |
index 8817d4d3e83c7c7b1069c959c57f172e6c4c031f..fd153efc410a8d083a8328f002d2239a6c5db834 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtcp_sender_unittest.cc |
+++ b/webrtc/modules/rtp_rtcp/source/rtcp_sender_unittest.cc |
@@ -221,6 +221,8 @@ class TestTransport : public Transport, |
namespace { |
static const uint32_t kSenderSsrc = 0x11111111; |
static const uint32_t kRemoteSsrc = 0x22222222; |
+static const uint32_t kStartRtpTimestamp = 0x34567; |
+static const uint32_t kRtpTimestamp = 0x45678; |
} |
class RtcpSenderTest : public ::testing::Test { |
@@ -238,6 +240,8 @@ class RtcpSenderTest : public ::testing::Test { |
nullptr, nullptr, &test_transport_)); |
rtcp_sender_->SetSSRC(kSenderSsrc); |
rtcp_sender_->SetRemoteSSRC(kRemoteSsrc); |
+ rtcp_sender_->SetStartTimestamp(kStartRtpTimestamp); |
+ rtcp_sender_->SetLastRtpTime(kRtpTimestamp, clock_.TimeInMilliseconds()); |
} |
void InsertIncomingPacket(uint32_t remote_ssrc, uint16_t seq_num) { |
@@ -285,6 +289,7 @@ TEST_F(RtcpSenderTest, SendSr) { |
const uint32_t kOctetCount = 0x23456; |
rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
RTCPSender::FeedbackState feedback_state = rtp_rtcp_impl_->GetFeedbackState(); |
+ rtcp_sender_->SetSendingStatus(feedback_state, true); |
feedback_state.packets_sent = kPacketCount; |
feedback_state.media_bytes_sent = kOctetCount; |
uint32_t ntp_secs; |
@@ -297,9 +302,44 @@ TEST_F(RtcpSenderTest, SendSr) { |
EXPECT_EQ(ntp_frac, parser()->sender_report()->NtpFrac()); |
EXPECT_EQ(kPacketCount, parser()->sender_report()->PacketCount()); |
EXPECT_EQ(kOctetCount, parser()->sender_report()->OctetCount()); |
+ EXPECT_EQ(kStartRtpTimestamp + kRtpTimestamp, |
+ parser()->sender_report()->RtpTimestamp()); |
EXPECT_EQ(0, parser()->report_block()->num_packets()); |
} |
+TEST_F(RtcpSenderTest, DoNotSendSrBeforeRtp) { |
+ rtcp_sender_.reset(new RTCPSender(false, &clock_, receive_statistics_.get(), |
+ nullptr, nullptr, &test_transport_)); |
+ rtcp_sender_->SetSSRC(kSenderSsrc); |
+ rtcp_sender_->SetRemoteSSRC(kRemoteSsrc); |
+ rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
+ rtcp_sender_->SetSendingStatus(feedback_state(), true); |
+ |
+ // Sender Report shouldn't be send not as Sr, nor as Report. |
+ rtcp_sender_->SendRTCP(feedback_state(), kRtcpSr); |
+ EXPECT_EQ(0, parser()->sender_report()->num_packets()); |
+ rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport); |
+ EXPECT_EQ(0, parser()->sender_report()->num_packets()); |
+ // Other packets (e.g. Pli) are allowed, even if useless. |
+ EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpPli)); |
+ EXPECT_EQ(1, parser()->pli()->num_packets()); |
+} |
+ |
+TEST_F(RtcpSenderTest, DoNotSendCompundBeforeRtp) { |
+ rtcp_sender_.reset(new RTCPSender(false, &clock_, receive_statistics_.get(), |
+ nullptr, nullptr, &test_transport_)); |
+ rtcp_sender_->SetSSRC(kSenderSsrc); |
+ rtcp_sender_->SetRemoteSSRC(kRemoteSsrc); |
+ rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); |
+ rtcp_sender_->SetSendingStatus(feedback_state(), true); |
+ |
+ // In compound mode no packets are allowed (e.g. Pli) because compound mode |
+ // should start with Sender Report. |
+ EXPECT_EQ(-1, rtcp_sender_->SendRTCP(feedback_state(), kRtcpPli)); |
+ EXPECT_EQ(0, parser()->pli()->num_packets()); |
+} |
+ |
+ |
TEST_F(RtcpSenderTest, SendRr) { |
rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpRr)); |
@@ -688,6 +728,7 @@ TEST_F(RtcpSenderTest, TmmbrIncludedInCompoundPacketIfEnabled) { |
TEST_F(RtcpSenderTest, SendTmmbn) { |
rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); |
+ rtcp_sender_->SetSendingStatus(feedback_state(), true); |
TMMBRSet bounding_set; |
bounding_set.VerifyAndAllocateSet(1); |
const uint32_t kBitrateKbps = 32768; |
@@ -713,6 +754,7 @@ TEST_F(RtcpSenderTest, SendTmmbn) { |
// situation where this caused confusion. |
TEST_F(RtcpSenderTest, SendsTmmbnIfSetAndEmpty) { |
rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); |
+ rtcp_sender_->SetSendingStatus(feedback_state(), true); |
TMMBRSet bounding_set; |
EXPECT_EQ(0, rtcp_sender_->SetTMMBN(&bounding_set)); |
EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpSr)); |
@@ -767,6 +809,8 @@ TEST_F(RtcpSenderTest, ByeMustBeLast) { |
nullptr, nullptr, &mock_transport)); |
rtcp_sender_->SetSSRC(kSenderSsrc); |
rtcp_sender_->SetRemoteSSRC(kRemoteSsrc); |
+ rtcp_sender_->SetStartTimestamp(kStartRtpTimestamp); |
+ rtcp_sender_->SetLastRtpTime(kRtpTimestamp, clock_.TimeInMilliseconds()); |
// Set up XR VoIP metric to be included with BYE |
rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); |