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

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

Issue 83903002: Cast: Add capabity to parse receiver and sender log messages over RTCP. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Re-upload 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_receiver_unittest.cc
diff --git a/media/cast/rtcp/rtcp_receiver_unittest.cc b/media/cast/rtcp/rtcp_receiver_unittest.cc
index 538b35d9a3babf42382f5b04aea6aca60424c558..ec2350adf3c5aa33cbc8da5669049011b8fb27b0 100644
--- a/media/cast/rtcp/rtcp_receiver_unittest.cc
+++ b/media/cast/rtcp/rtcp_receiver_unittest.cc
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "base/memory/scoped_ptr.h"
+#include "base/test/simple_test_tick_clock.h"
#include "media/cast/rtcp/mock_rtcp_receiver_feedback.h"
#include "media/cast/rtcp/mock_rtcp_sender_feedback.h"
#include "media/cast/rtcp/rtcp_receiver.h"
@@ -56,6 +57,93 @@ class SenderFeedbackCastVerification : public RtcpSenderFeedback {
private:
bool called_;
};
+
+class RtcpReceiverCastLogVerification : public RtcpReceiverFeedback {
+ public:
+ RtcpReceiverCastLogVerification()
+ : called_on_received_sender_log_(false),
+ called_on_received_receiver_log_(false) {}
+
+ virtual void OnReceivedSenderReport(
+ const RtcpSenderInfo& remote_sender_info) OVERRIDE {};
+
+ virtual void OnReceiverReferenceTimeReport(
+ const RtcpReceiverReferenceTimeReport& remote_time_report) OVERRIDE {};
+
+ virtual void OnReceivedSendReportRequest() OVERRIDE {};
+
+ virtual void OnReceivedReceiverLog(
+ const RtcpReceiverLogMessage& receiver_log) OVERRIDE {
+ EXPECT_EQ(expected_receiver_log_.size(), receiver_log.size());
+ RtcpReceiverLogMessage::const_iterator expected_it =
+ expected_receiver_log_.begin();
+ RtcpReceiverLogMessage::const_iterator incoming_it = receiver_log.begin();
+ for (; incoming_it != receiver_log.end(); ++incoming_it) {
+ EXPECT_EQ(expected_it->rtp_timestamp, incoming_it->rtp_timestamp);
+ EXPECT_EQ(expected_it->event_log_messages.size(),
+ incoming_it->event_log_messages.size());
+
+ RtcpReceiverEventLogMessages::const_iterator event_incoming_it =
+ incoming_it->event_log_messages.begin();
+ RtcpReceiverEventLogMessages::const_iterator event_expected_it =
+ expected_it->event_log_messages.begin();
+ for (; event_incoming_it != incoming_it->event_log_messages.end();
+ ++event_incoming_it, ++event_expected_it) {
+ EXPECT_EQ(event_expected_it->type, event_incoming_it->type);
+ EXPECT_EQ(event_expected_it->event_timestamp,
+ event_incoming_it->event_timestamp);
+ if (event_expected_it->type == kPacketReceived) {
+ EXPECT_EQ(event_expected_it->packet_id, event_incoming_it->packet_id);
+ } else {
+ EXPECT_EQ(event_expected_it->delay_delta,
+ event_incoming_it->delay_delta);
+ }
+ }
+ expected_receiver_log_.pop_front();
+ expected_it = expected_receiver_log_.begin();
+ }
+ called_on_received_receiver_log_ = true;
+ }
+
+ virtual void OnReceivedSenderLog(
+ const RtcpSenderLogMessage& sender_log) OVERRIDE {
+ EXPECT_EQ(expected_sender_log_.size(), sender_log.size());
+
+ RtcpSenderLogMessage::const_iterator expected_it =
+ expected_sender_log_.begin();
+ RtcpSenderLogMessage::const_iterator incoming_it = sender_log.begin();
+ for (; expected_it != expected_sender_log_.end();
+ ++expected_it, ++incoming_it) {
+ EXPECT_EQ(expected_it->frame_status, incoming_it->frame_status);
+ EXPECT_EQ(0xffffff & expected_it->rtp_timestamp,
+ incoming_it->rtp_timestamp);
+ }
+ called_on_received_sender_log_ = true;
+ }
+
+ bool OnReceivedSenderLogCalled() {
+ return called_on_received_sender_log_;
+ }
+
+ bool OnReceivedReceiverLogCalled() {
+ return called_on_received_receiver_log_ && expected_receiver_log_.empty();
+ }
+
+ void SetExpectedReceiverLog(const RtcpReceiverLogMessage& receiver_log) {
+ expected_receiver_log_ = receiver_log;
+ }
+
+ void SetExpectedSenderLog(const RtcpSenderLogMessage& sender_log) {
+ expected_sender_log_ = sender_log;
+ }
+
+ private:
+ RtcpReceiverLogMessage expected_receiver_log_;
+ RtcpSenderLogMessage expected_sender_log_;
+ bool called_on_received_sender_log_;
+ bool called_on_received_receiver_log_;
+};
+
} // namespace
class RtcpReceiverTest : public ::testing::Test {
@@ -348,5 +436,137 @@ TEST_F(RtcpReceiverTest, InjectReceiverReportPacketWithCastVerification) {
EXPECT_TRUE(sender_feedback_cast_verification.called());
}
+TEST_F(RtcpReceiverTest, InjectSenderReportWithCastSenderLogVerification) {
+ RtcpReceiverCastLogVerification cast_log_verification;
+ RtcpReceiver rtcp_receiver(&mock_sender_feedback_,
+ &cast_log_verification,
+ &mock_rtt_feedback_,
+ kSourceSsrc);
+ rtcp_receiver.SetRemoteSSRC(kSenderSsrc);
+
+ RtcpSenderLogMessage sender_log;
+ for (int j = 0; j < 359; ++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);
+ }
+ cast_log_verification.SetExpectedSenderLog(sender_log);
+
+ TestRtcpPacketBuilder p;
+ p.AddSr(kSenderSsrc, 0);
+ p.AddSdesCname(kSenderSsrc, kCName);
+ p.AddSenderLog(kSenderSsrc);
+
+ for (int i = 0; i < 359; ++i) {
+ p.AddSenderFrameLog(kRtcpSenderFrameStatusSentToNetwork,
+ kRtpTimestamp + i * 90);
+ }
+ RtcpParser rtcp_parser(p.Packet(), p.Length());
+ rtcp_receiver.IncomingRtcpPacket(&rtcp_parser);
+
+ EXPECT_TRUE(cast_log_verification.OnReceivedSenderLogCalled());
+}
+
+TEST_F(RtcpReceiverTest, InjectReceiverReportWithReceiverLogVerificationBase) {
+ static const uint32 kTimeBaseMs = 12345678;
+ static const uint32 kTimeDelayMs = 10;
+ static const uint32 kDelayDeltaMs = 123;
+ base::SimpleTestTickClock testing_clock;
+ testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
+
+ RtcpReceiverCastLogVerification cast_log_verification;
+ RtcpReceiver rtcp_receiver(&mock_sender_feedback_,
+ &cast_log_verification,
+ &mock_rtt_feedback_,
+ kSourceSsrc);
+ rtcp_receiver.SetRemoteSSRC(kSenderSsrc);
+
+ RtcpReceiverLogMessage receiver_log;
+ 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);
+
+ cast_log_verification.SetExpectedReceiverLog(receiver_log);
+
+ TestRtcpPacketBuilder p;
+ p.AddRr(kSenderSsrc, 1);
+ p.AddRb(kSourceSsrc);
+ p.AddReceiverLog(kSenderSsrc);
+ p.AddReceiverFrameLog(kRtpTimestamp, 2, kTimeBaseMs);
+ p.AddReceiverEventLog(kDelayDeltaMs, 1, 0);
+ p.AddReceiverEventLog(kLostPacketId1, 6, kTimeDelayMs);
+
+ EXPECT_CALL(mock_rtt_feedback_,
+ OnReceivedDelaySinceLastReport(kSourceSsrc, kLastSr, kDelayLastSr)).
+ Times(1);
+
+ RtcpParser rtcp_parser(p.Packet(), p.Length());
+ rtcp_receiver.IncomingRtcpPacket(&rtcp_parser);
+
+ EXPECT_TRUE(cast_log_verification.OnReceivedReceiverLogCalled());
+}
+
+TEST_F(RtcpReceiverTest, InjectReceiverReportWithReceiverLogVerificationMulti) {
+ static const uint32 kTimeBaseMs = 12345678;
+ static const uint32 kTimeDelayMs = 10;
+ static const uint32 kDelayDeltaMs = 123;
+ base::SimpleTestTickClock testing_clock;
+ testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
+
+ RtcpReceiverCastLogVerification cast_log_verification;
+ RtcpReceiver rtcp_receiver(&mock_sender_feedback_,
+ &cast_log_verification,
+ &mock_rtt_feedback_,
+ kSourceSsrc);
+ rtcp_receiver.SetRemoteSSRC(kSenderSsrc);
+
+ RtcpReceiverLogMessage receiver_log;
+
+ for (int j = 0; j < 100; ++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));
+ }
+
+ cast_log_verification.SetExpectedReceiverLog(receiver_log);
+
+ TestRtcpPacketBuilder p;
+ p.AddRr(kSenderSsrc, 1);
+ p.AddRb(kSourceSsrc);
+ p.AddReceiverLog(kSenderSsrc);
+ for (int i = 0; i < 100; ++i) {
+ p.AddReceiverFrameLog(kRtpTimestamp, 1, kTimeBaseMs + i * kTimeDelayMs);
+ p.AddReceiverEventLog(kDelayDeltaMs, 1, 0);
+ }
+
+ EXPECT_CALL(mock_rtt_feedback_,
+ OnReceivedDelaySinceLastReport(kSourceSsrc, kLastSr, kDelayLastSr)).
+ Times(1);
+
+ RtcpParser rtcp_parser(p.Packet(), p.Length());
+ rtcp_receiver.IncomingRtcpPacket(&rtcp_parser);
+
+ EXPECT_TRUE(cast_log_verification.OnReceivedReceiverLogCalled());
+}
+
+
+
} // namespace cast
} // namespace media

Powered by Google App Engine
This is Rietveld 408576698