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

Unified Diff: media/cast/rtcp/rtcp_sender_unittest.cc

Issue 74613004: Cast: Add capabity to send Receiver and Sender log messages over RTCP. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@rtcp_logging
Patch Set: Fixed nits Created 7 years, 1 month 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: media/cast/rtcp/rtcp_sender_unittest.cc
diff --git a/media/cast/rtcp/rtcp_sender_unittest.cc b/media/cast/rtcp/rtcp_sender_unittest.cc
index 012d5b95da68bb237f15270b39f072e97862b277..78b2c4dd59f08db8e4df9821d3d74262a23387de 100644
--- a/media/cast/rtcp/rtcp_sender_unittest.cc
+++ b/media/cast/rtcp/rtcp_sender_unittest.cc
@@ -3,9 +3,11 @@
// found in the LICENSE file.
#include "base/memory/scoped_ptr.h"
+#include "base/test/simple_test_tick_clock.h"
#include "media/cast/cast_defines.h"
#include "media/cast/pacing/paced_sender.h"
#include "media/cast/rtcp/rtcp_sender.h"
+#include "media/cast/rtcp/rtcp_utility.h"
#include "media/cast/rtcp/test_rtcp_packet_builder.h"
#include "testing/gmock/include/gmock/gmock.h"
@@ -54,10 +56,7 @@ class TestRtcpTransport : public PacedPacketSender {
class RtcpSenderTest : public ::testing::Test {
protected:
RtcpSenderTest()
- : rtcp_sender_(new RtcpSender(&test_transport_,
- kSendingSsrc,
- kCName)) {
- }
+ : rtcp_sender_(new RtcpSender(&test_transport_, kSendingSsrc, kCName)) {}
TestRtcpTransport test_transport_;
scoped_ptr<RtcpSender> rtcp_sender_;
@@ -150,6 +149,90 @@ TEST_F(RtcpSenderTest, RtcpSenderReportWithDlrr) {
EXPECT_EQ(1, test_transport_.packet_count());
}
+TEST_F(RtcpSenderTest, RtcpSenderReportWithDlrrAndLog) {
+ RtcpSenderInfo sender_info;
+ sender_info.ntp_seconds = kNtpHigh;
+ sender_info.ntp_fraction = kNtpLow;
+ sender_info.rtp_timestamp = kRtpTimestamp;
+ sender_info.send_packet_count = kSendPacketCount;
+ sender_info.send_octet_count = kSendOctetCount;
+
+ // Sender report + c_name + dlrr + sender log.
+ TestRtcpPacketBuilder p;
+ p.AddSr(kSendingSsrc, 0);
+ p.AddSdesCname(kSendingSsrc, kCName);
+ p.AddXrHeader(kSendingSsrc);
+ p.AddXrDlrrBlock(kSendingSsrc);
+ p.AddSenderLog(kSendingSsrc);
+ p.AddSenderFrameLog(kRtcpSenderFrameStatusSentToNetwork, kRtpTimestamp);
+
+ test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length());
+
+ RtcpDlrrReportBlock dlrr_rb;
+ dlrr_rb.last_rr = kLastRr;
+ dlrr_rb.delay_since_last_rr = kDelayLastRr;
+
+ RtcpSenderFrameLogMessage sender_frame_log;
+ sender_frame_log.frame_status = kRtcpSenderFrameStatusSentToNetwork;
+ sender_frame_log.rtp_timestamp = kRtpTimestamp;
+
+ RtcpSenderLogMessage sender_log;
+ sender_log.push_back(sender_frame_log);
+
+ rtcp_sender_->SendRtcpFromRtpSender(
+ RtcpSender::kRtcpSr | RtcpSender::kRtcpDlrr | RtcpSender::kRtcpSenderLog,
+ &sender_info,
+ &dlrr_rb,
+ &sender_log);
+
+ EXPECT_EQ(1, test_transport_.packet_count());
+ EXPECT_TRUE(sender_log.empty());
+}
+
+TEST_F(RtcpSenderTest, RtcpSenderReporWithTooManyLogFrames) {
+ RtcpSenderInfo sender_info;
+ sender_info.ntp_seconds = kNtpHigh;
+ sender_info.ntp_fraction = kNtpLow;
+ sender_info.rtp_timestamp = kRtpTimestamp;
+ sender_info.send_packet_count = kSendPacketCount;
+ sender_info.send_octet_count = kSendOctetCount;
+
+ // Sender report + c_name + sender log.
+ TestRtcpPacketBuilder p;
+ p.AddSr(kSendingSsrc, 0);
+ p.AddSdesCname(kSendingSsrc, kCName);
+ p.AddSenderLog(kSendingSsrc);
+
+ for (int i = 0; i < 359; ++i) {
+ p.AddSenderFrameLog(kRtcpSenderFrameStatusSentToNetwork,
+ kRtpTimestamp + i * 90);
+ }
+ test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length());
+
+
+ RtcpSenderLogMessage sender_log;
+ for (int j = 0; j < 400; ++j) {
+ RtcpSenderFrameLogMessage sender_frame_log;
+ sender_frame_log.frame_status = kRtcpSenderFrameStatusSentToNetwork;
+ sender_frame_log.rtp_timestamp = kRtpTimestamp + j * 90;
+ sender_log.push_back(sender_frame_log);
+ }
+
+ rtcp_sender_->SendRtcpFromRtpSender(
+ RtcpSender::kRtcpSr | RtcpSender::kRtcpSenderLog,
+ &sender_info,
+ NULL,
+ &sender_log);
+
+ EXPECT_EQ(1, test_transport_.packet_count());
+ EXPECT_EQ(41u, sender_log.size());
+}
+
+//TODO
mikhal 2013/11/21 16:43:20 what? who?
pwestin 2013/11/22 18:50:47 ops
pwestin 2013/11/22 18:50:47 Done.
+
+
+
+
TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtr) {
// Receiver report with report block + c_name.
TestRtcpPacketBuilder p;
@@ -166,8 +249,7 @@ TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtr) {
report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender.
report_block.fraction_lost = kLoss >> 24;
report_block.cumulative_lost = kLoss; // 24 bits valid.
- report_block.extended_high_sequence_number =
- kExtendedMax;
+ report_block.extended_high_sequence_number = kExtendedMax;
report_block.jitter = kTestJitter;
report_block.last_sr = kLastSr;
report_block.delay_since_last_sr = kDelayLastSr;
@@ -209,8 +291,7 @@ TEST_F(RtcpSenderTest, RtcpReceiverReportWithCast) {
RtcpCastMessage cast_message(kMediaSsrc);
cast_message.ack_frame_id_ = kAckFrameId;
PacketIdSet missing_packets;
- cast_message.missing_frames_and_packets_[
- kLostFrameId] = missing_packets;
+ cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets;
missing_packets.insert(kLostPacketId1);
missing_packets.insert(kLostPacketId2);
@@ -228,5 +309,268 @@ TEST_F(RtcpSenderTest, RtcpReceiverReportWithCast) {
EXPECT_EQ(1, test_transport_.packet_count());
}
+TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtraAndCastMessage) {
+ TestRtcpPacketBuilder p;
+ p.AddRr(kSendingSsrc, 1);
+ p.AddRb(kMediaSsrc);
+ p.AddSdesCname(kSendingSsrc, kCName);
+ p.AddXrHeader(kSendingSsrc);
+ p.AddXrRrtrBlock();
+ p.AddCast(kSendingSsrc, kMediaSsrc);
+ test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length());
+
+ RtcpReportBlock report_block;
+ // Initialize remote_ssrc to a "clearly illegal" value.
+ report_block.remote_ssrc = 0xDEAD;
+ report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender.
+ report_block.fraction_lost = kLoss >> 24;
+ report_block.cumulative_lost = kLoss; // 24 bits valid.
+ report_block.extended_high_sequence_number = kExtendedMax;
+ report_block.jitter = kTestJitter;
+ report_block.last_sr = kLastSr;
+ report_block.delay_since_last_sr = kDelayLastSr;
+
+ RtcpReceiverReferenceTimeReport rrtr;
+ rrtr.ntp_seconds = kNtpHigh;
+ rrtr.ntp_fraction = kNtpLow;
+
+ RtcpCastMessage cast_message(kMediaSsrc);
+ cast_message.ack_frame_id_ = kAckFrameId;
+ PacketIdSet missing_packets;
+ cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets;
+
+ missing_packets.insert(kLostPacketId1);
+ missing_packets.insert(kLostPacketId2);
+ missing_packets.insert(kLostPacketId3);
+ cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] =
+ missing_packets;
+
+ rtcp_sender_->SendRtcpFromRtpReceiver(
+ RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr | RtcpSender::kRtcpCast,
+ &report_block,
+ &rrtr,
+ &cast_message,
+ NULL);
+
+ EXPECT_EQ(1, test_transport_.packet_count());
+}
+
+TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtrCastMessageAndLog) {
+ static const uint32 kTimeBaseMs = 12345678;
+ static const uint32 kTimeDelayMs = 10;
+ static const uint32 kDelayDeltaMs = 123;
+
+ TestRtcpPacketBuilder p;
+ p.AddRr(kSendingSsrc, 1);
+ p.AddRb(kMediaSsrc);
+ p.AddSdesCname(kSendingSsrc, kCName);
+ p.AddXrHeader(kSendingSsrc);
+ p.AddXrRrtrBlock();
+ p.AddCast(kSendingSsrc, kMediaSsrc);
+ test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length());
+
+ RtcpReportBlock report_block;
+ // Initialize remote_ssrc to a "clearly illegal" value.
+ report_block.remote_ssrc = 0xDEAD;
+ report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender.
+ report_block.fraction_lost = kLoss >> 24;
+ report_block.cumulative_lost = kLoss; // 24 bits valid.
+ report_block.extended_high_sequence_number = kExtendedMax;
+ report_block.jitter = kTestJitter;
+ report_block.last_sr = kLastSr;
+ report_block.delay_since_last_sr = kDelayLastSr;
+
+ RtcpReceiverReferenceTimeReport rrtr;
+ rrtr.ntp_seconds = kNtpHigh;
+ rrtr.ntp_fraction = kNtpLow;
+
+ RtcpCastMessage cast_message(kMediaSsrc);
+ cast_message.ack_frame_id_ = kAckFrameId;
+ PacketIdSet missing_packets;
+ cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets;
+
+ missing_packets.insert(kLostPacketId1);
+ missing_packets.insert(kLostPacketId2);
+ missing_packets.insert(kLostPacketId3);
+ cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] =
+ missing_packets;
+
+ // Test empty Log message.
+ RtcpReceiverLogMessage receiver_log;
+
+ rtcp_sender_->SendRtcpFromRtpReceiver(
+ RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr | RtcpSender::kRtcpCast |
+ RtcpSender::kRtcpReceiverLog,
+ &report_block,
+ &rrtr,
+ &cast_message,
+ &receiver_log);
+
+ base::SimpleTestTickClock testing_clock;
+ testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
+
+ p.AddReceiverLog(kSendingSsrc);
+ p.AddReceiverFrameLog(kRtpTimestamp, 2, kTimeBaseMs);
+ p.AddReceiverEventLog(kDelayDeltaMs, 1, 0);
+ p.AddReceiverEventLog(kLostPacketId1, 6, kTimeDelayMs);
+
+ test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length());
+
+ RtcpReceiverFrameLogMessage frame_log(kRtpTimestamp);
+ RtcpReceiverEventLogMessage event_log;
+
+ event_log.type = kAckSent;
+ event_log.event_timestamp = testing_clock.NowTicks();
+ event_log.delay_delta = base::TimeDelta::FromMilliseconds(kDelayDeltaMs);
+ frame_log.event_log_messages.push_back(event_log);
+
+ testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
+ event_log.type = kPacketReceived;
+ event_log.event_timestamp = testing_clock.NowTicks();
+ event_log.packet_id = kLostPacketId1;
+ frame_log.event_log_messages.push_back(event_log);
+
+ receiver_log.push_back(frame_log);
+
+ rtcp_sender_->SendRtcpFromRtpReceiver(
+ RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr | RtcpSender::kRtcpCast |
+ RtcpSender::kRtcpReceiverLog,
+ &report_block,
+ &rrtr,
+ &cast_message,
+ &receiver_log);
+
+ EXPECT_TRUE(receiver_log.empty());
+ EXPECT_EQ(2, test_transport_.packet_count());
+}
+
+TEST_F(RtcpSenderTest, RtcpReceiverReportWithOversizedFrameLog) {
+ static const uint32 kTimeBaseMs = 12345678;
+ static const uint32 kTimeDelayMs = 10;
+ static const uint32 kDelayDeltaMs = 123;
+
+ TestRtcpPacketBuilder p;
+ p.AddRr(kSendingSsrc, 1);
+ p.AddRb(kMediaSsrc);
+ p.AddSdesCname(kSendingSsrc, kCName);
+
+ RtcpReportBlock report_block;
+ // Initialize remote_ssrc to a "clearly illegal" value.
+ report_block.remote_ssrc = 0xDEAD;
+ report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender.
+ report_block.fraction_lost = kLoss >> 24;
+ report_block.cumulative_lost = kLoss; // 24 bits valid.
+ report_block.extended_high_sequence_number = kExtendedMax;
+ report_block.jitter = kTestJitter;
+ report_block.last_sr = kLastSr;
+ report_block.delay_since_last_sr = kDelayLastSr;
+
+ base::SimpleTestTickClock testing_clock;
+ testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
+
+ p.AddReceiverLog(kSendingSsrc);
+
+ p.AddReceiverFrameLog(kRtpTimestamp, 1, kTimeBaseMs);
+ p.AddReceiverEventLog(kDelayDeltaMs, 1, 0);
+ p.AddReceiverFrameLog(kRtpTimestamp + 2345,
+ kRtcpMaxReceiverLogMessages, kTimeBaseMs);
+
+ for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) {
+ p.AddReceiverEventLog(kLostPacketId1, 6, kTimeDelayMs * i);
+ }
+
+ test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length());
+
+ RtcpReceiverFrameLogMessage frame_1_log(kRtpTimestamp);
+ RtcpReceiverEventLogMessage event_log;
+
+ event_log.type = kAckSent;
+ event_log.event_timestamp = testing_clock.NowTicks();
+ event_log.delay_delta = base::TimeDelta::FromMilliseconds(kDelayDeltaMs);
+ frame_1_log.event_log_messages.push_back(event_log);
+
+ RtcpReceiverLogMessage receiver_log;
+ receiver_log.push_back(frame_1_log);
+
+ RtcpReceiverFrameLogMessage frame_2_log(kRtpTimestamp + 2345);
+
+ for (int j = 0; j < 300; ++j) {
+ event_log.type = kPacketReceived;
+ event_log.event_timestamp = testing_clock.NowTicks();
+ event_log.packet_id = kLostPacketId1;
+ frame_2_log.event_log_messages.push_back(event_log);
+ testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
+ }
+ receiver_log.push_back(frame_2_log);
+
+ rtcp_sender_->SendRtcpFromRtpReceiver(
+ RtcpSender::kRtcpRr | RtcpSender::kRtcpReceiverLog,
+ &report_block,
+ NULL,
+ NULL,
+ &receiver_log);
+
+ EXPECT_EQ(1, test_transport_.packet_count());
+ EXPECT_EQ(1u, receiver_log.size());
+ EXPECT_EQ(300u - kRtcpMaxReceiverLogMessages,
+ receiver_log.front().event_log_messages.size());
+}
+
+TEST_F(RtcpSenderTest, RtcpReceiverReportWithTooManyLogFrames) {
+ static const uint32 kTimeBaseMs = 12345678;
+ static const uint32 kTimeDelayMs = 10;
+ static const uint32 kDelayDeltaMs = 123;
+
+ TestRtcpPacketBuilder p;
+ p.AddRr(kSendingSsrc, 1);
+ p.AddRb(kMediaSsrc);
+ p.AddSdesCname(kSendingSsrc, kCName);
+
+ RtcpReportBlock report_block;
+ // Initialize remote_ssrc to a "clearly illegal" value.
+ report_block.remote_ssrc = 0xDEAD;
+ report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender.
+ report_block.fraction_lost = kLoss >> 24;
+ report_block.cumulative_lost = kLoss; // 24 bits valid.
+ report_block.extended_high_sequence_number = kExtendedMax;
+ report_block.jitter = kTestJitter;
+ report_block.last_sr = kLastSr;
+ report_block.delay_since_last_sr = kDelayLastSr;
+
+ base::SimpleTestTickClock testing_clock;
+ testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
+
+ p.AddReceiverLog(kSendingSsrc);
+
+ for (int i = 0; i < 119; ++i) {
+ p.AddReceiverFrameLog(kRtpTimestamp, 1, kTimeBaseMs + i * kTimeDelayMs);
+ p.AddReceiverEventLog(kDelayDeltaMs, 1, 0);
+ }
+ test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length());
+
+ RtcpReceiverLogMessage receiver_log;
+
+ for (int j = 0; j < 200; ++j) {
+ RtcpReceiverFrameLogMessage frame_log(kRtpTimestamp);
+ RtcpReceiverEventLogMessage event_log;
+
+ event_log.type = kAckSent;
+ event_log.event_timestamp = testing_clock.NowTicks();
+ event_log.delay_delta = base::TimeDelta::FromMilliseconds(kDelayDeltaMs);
+ frame_log.event_log_messages.push_back(event_log);
+ receiver_log.push_back(frame_log);
+ testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
+ }
+ rtcp_sender_->SendRtcpFromRtpReceiver(
+ RtcpSender::kRtcpRr | RtcpSender::kRtcpReceiverLog,
+ &report_block,
+ NULL,
+ NULL,
+ &receiver_log);
+
+ EXPECT_EQ(1, test_transport_.packet_count());
+ EXPECT_EQ(81u, receiver_log.size());
+}
+
} // namespace cast
} // namespace media

Powered by Google App Engine
This is Rietveld 408576698