Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Unified Diff: webrtc/modules/rtp_rtcp/source/rtcp_sender_unittest.cc

Issue 1639253007: Validates sending RTCP before RTP. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: fix tests and receive-only case Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698