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

Unified Diff: media/cast/net/rtcp/rtcp_builder_unittest.cc

Issue 102413014: Cast:Splitting rtcp sender (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years 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
« no previous file with comments | « media/cast/net/rtcp/rtcp_builder.cc ('k') | media/cast/rtcp/rtcp.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/cast/net/rtcp/rtcp_builder_unittest.cc
diff --git a/media/cast/net/rtcp/rtcp_builder_unittest.cc b/media/cast/net/rtcp/rtcp_builder_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..cab5a0bdad634606fc7eeb9c3e92bb0bc6b56aa8
--- /dev/null
+++ b/media/cast/net/rtcp/rtcp_builder_unittest.cc
@@ -0,0 +1,208 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// 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/cast_environment.h"
+#include "media/cast/net/pacing/paced_sender.h"
+#include "media/cast/net/rtcp/rtcp_builder.h"
+#include "media/cast/rtcp/rtcp_utility.h"
+#include "media/cast/rtcp/test_rtcp_packet_builder.h"
+#include "media/cast/test/fake_task_runner.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+namespace media {
+namespace cast {
+
+namespace {
+static const uint32 kSendingSsrc = 0x12345678;
+static const std::string kCName("test@10.1.1.1");
+} // namespace
+
+class TestRtcpTransport : public PacedPacketSender {
+ public:
+ TestRtcpTransport()
+ : expected_packet_length_(0),
+ packet_count_(0) {
+ }
+
+ virtual bool SendRtcpPacket(const Packet& packet) OVERRIDE {
+ EXPECT_EQ(expected_packet_length_, packet.size());
+ EXPECT_EQ(0, memcmp(expected_packet_, &(packet[0]), packet.size()));
+ packet_count_++;
+ return true;
+ }
+
+ virtual bool SendPackets(const PacketList& packets) OVERRIDE {
+ return false;
+ }
+
+ virtual bool ResendPackets(const PacketList& packets) OVERRIDE {
+ return false;
+ }
+
+ void SetExpectedRtcpPacket(const uint8* rtcp_buffer, size_t length) {
+ expected_packet_length_ = length;
+ memcpy(expected_packet_, rtcp_buffer, length);
+ }
+
+ int packet_count() const { return packet_count_; }
+
+ private:
+ uint8 expected_packet_[kIpPacketSize];
+ size_t expected_packet_length_;
+ int packet_count_;
+};
+
+class RtcpBuilderTest : public ::testing::Test {
+ protected:
+ RtcpBuilderTest()
+ : task_runner_(new test::FakeTaskRunner(&testing_clock_)),
+ cast_environment_(new CastEnvironment(&testing_clock_, task_runner_,
+ task_runner_, task_runner_, task_runner_, task_runner_,
+ GetDefaultCastLoggingConfig())),
+ rtcp_builder_(new RtcpBuilder(&test_transport_, kSendingSsrc, kCName)) {
+ }
+
+ base::SimpleTestTickClock testing_clock_;
+ TestRtcpTransport test_transport_;
+ scoped_refptr<test::FakeTaskRunner> task_runner_;
+ scoped_refptr<CastEnvironment> cast_environment_;
+ scoped_ptr<RtcpBuilder> rtcp_builder_;
+};
+
+TEST_F(RtcpBuilderTest, RtcpSenderReport) {
+ 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.
+ TestRtcpPacketBuilder p;
+ p.AddSr(kSendingSsrc, 0);
+ p.AddSdesCname(kSendingSsrc, kCName);
+ test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length());
+
+ rtcp_builder_->SendRtcpFromRtpSender(RtcpBuilder::kRtcpSr,
+ &sender_info,
+ NULL,
+ NULL);
+
+ EXPECT_EQ(1, test_transport_.packet_count());
+}
+
+TEST_F(RtcpBuilderTest, RtcpSenderReportWithDlrr) {
+ 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.
+ TestRtcpPacketBuilder p1;
+ p1.AddSr(kSendingSsrc, 0);
+ p1.AddSdesCname(kSendingSsrc, kCName);
+ p1.AddXrHeader(kSendingSsrc);
+ p1.AddXrDlrrBlock(kSendingSsrc);
+ test_transport_.SetExpectedRtcpPacket(p1.Packet(), p1.Length());
+
+ RtcpDlrrReportBlock dlrr_rb;
+ dlrr_rb.last_rr = kLastRr;
+ dlrr_rb.delay_since_last_rr = kDelayLastRr;
+
+ rtcp_builder_->SendRtcpFromRtpSender(
+ RtcpBuilder::kRtcpSr | RtcpBuilder::kRtcpDlrr,
+ &sender_info,
+ &dlrr_rb,
+ NULL);
+
+ EXPECT_EQ(1, test_transport_.packet_count());
+}
+
+TEST_F(RtcpBuilderTest, 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_builder_->SendRtcpFromRtpSender(
+ RtcpBuilder::kRtcpSr | RtcpBuilder::kRtcpDlrr |
+ RtcpBuilder::kRtcpSenderLog,
+ &sender_info,
+ &dlrr_rb,
+ &sender_log);
+
+ EXPECT_EQ(1, test_transport_.packet_count());
+ EXPECT_TRUE(sender_log.empty());
+}
+
+TEST_F(RtcpBuilderTest, 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_builder_->SendRtcpFromRtpSender(
+ RtcpBuilder::kRtcpSr | RtcpBuilder::kRtcpSenderLog,
+ &sender_info,
+ NULL,
+ &sender_log);
+
+ EXPECT_EQ(1, test_transport_.packet_count());
+ EXPECT_EQ(41u, sender_log.size());
+}
+
+} // namespace cast
+} // namespace media
« no previous file with comments | « media/cast/net/rtcp/rtcp_builder.cc ('k') | media/cast/rtcp/rtcp.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698