| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
| 6 #include "base/test/simple_test_tick_clock.h" | 6 #include "base/test/simple_test_tick_clock.h" |
| 7 #include "media/cast/cast_defines.h" | 7 #include "media/cast/cast_defines.h" |
| 8 #include "media/cast/cast_environment.h" | 8 #include "media/cast/cast_environment.h" |
| 9 #include "media/cast/net/pacing/paced_sender.h" | 9 #include "media/cast/net/pacing/paced_sender.h" |
| 10 #include "media/cast/net/rtcp/rtcp_builder.h" | 10 #include "media/cast/net/rtcp/rtcp_builder.h" |
| 11 #include "media/cast/net/rtcp/rtcp_utility.h" | 11 #include "media/cast/net/rtcp/rtcp_utility.h" |
| 12 #include "media/cast/net/rtcp/test_rtcp_packet_builder.h" | 12 #include "media/cast/net/rtcp/test_rtcp_packet_builder.h" |
| 13 #include "media/cast/test/fake_single_thread_task_runner.h" | 13 #include "media/cast/test/fake_single_thread_task_runner.h" |
| 14 #include "testing/gmock/include/gmock/gmock.h" | 14 #include "testing/gmock/include/gmock/gmock.h" |
| 15 | 15 |
| 16 namespace media { | 16 namespace media { |
| 17 namespace cast { | 17 namespace cast { |
| 18 | 18 |
| 19 namespace { | 19 namespace { |
| 20 static const uint32 kSendingSsrc = 0x12345678; | 20 static const uint32 kSendingSsrc = 0x12345678; |
| 21 static const std::string kCName("test@10.1.1.1"); | |
| 22 } // namespace | 21 } // namespace |
| 23 | 22 |
| 24 class TestRtcpTransport : public PacedPacketSender { | 23 class TestRtcpTransport : public PacedPacketSender { |
| 25 public: | 24 public: |
| 26 TestRtcpTransport() | 25 TestRtcpTransport() |
| 27 : expected_packet_length_(0), | 26 : expected_packet_length_(0), |
| 28 packet_count_(0) { | 27 packet_count_(0) { |
| 29 } | 28 } |
| 30 | 29 |
| 31 virtual bool SendRtcpPacket(const Packet& packet) OVERRIDE { | 30 virtual bool SendRtcpPacket(const Packet& packet) OVERRIDE { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 56 int packet_count_; | 55 int packet_count_; |
| 57 }; | 56 }; |
| 58 | 57 |
| 59 class RtcpBuilderTest : public ::testing::Test { | 58 class RtcpBuilderTest : public ::testing::Test { |
| 60 protected: | 59 protected: |
| 61 RtcpBuilderTest() | 60 RtcpBuilderTest() |
| 62 : task_runner_(new test::FakeSingleThreadTaskRunner(&testing_clock_)), | 61 : task_runner_(new test::FakeSingleThreadTaskRunner(&testing_clock_)), |
| 63 cast_environment_(new CastEnvironment(&testing_clock_, task_runner_, | 62 cast_environment_(new CastEnvironment(&testing_clock_, task_runner_, |
| 64 task_runner_, task_runner_, task_runner_, task_runner_, | 63 task_runner_, task_runner_, task_runner_, task_runner_, |
| 65 GetDefaultCastSenderLoggingConfig())), | 64 GetDefaultCastSenderLoggingConfig())), |
| 66 rtcp_builder_(new RtcpBuilder(&test_transport_, kSendingSsrc, kCName)) { | 65 rtcp_builder_(new RtcpBuilder(&test_transport_, kSendingSsrc)) { |
| 67 } | 66 } |
| 68 | 67 |
| 69 base::SimpleTestTickClock testing_clock_; | 68 base::SimpleTestTickClock testing_clock_; |
| 70 TestRtcpTransport test_transport_; | 69 TestRtcpTransport test_transport_; |
| 71 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; | 70 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; |
| 72 scoped_refptr<CastEnvironment> cast_environment_; | 71 scoped_refptr<CastEnvironment> cast_environment_; |
| 73 scoped_ptr<RtcpBuilder> rtcp_builder_; | 72 scoped_ptr<RtcpBuilder> rtcp_builder_; |
| 74 }; | 73 }; |
| 75 | 74 |
| 76 TEST_F(RtcpBuilderTest, RtcpSenderReport) { | 75 TEST_F(RtcpBuilderTest, RtcpSenderReport) { |
| 77 RtcpSenderInfo sender_info; | 76 RtcpSenderInfo sender_info; |
| 78 sender_info.ntp_seconds = kNtpHigh; | 77 sender_info.ntp_seconds = kNtpHigh; |
| 79 sender_info.ntp_fraction = kNtpLow; | 78 sender_info.ntp_fraction = kNtpLow; |
| 80 sender_info.rtp_timestamp = kRtpTimestamp; | 79 sender_info.rtp_timestamp = kRtpTimestamp; |
| 81 sender_info.send_packet_count = kSendPacketCount; | 80 sender_info.send_packet_count = kSendPacketCount; |
| 82 sender_info.send_octet_count = kSendOctetCount; | 81 sender_info.send_octet_count = kSendOctetCount; |
| 83 | 82 |
| 84 // Sender report + c_name. | 83 // Sender report. |
| 85 TestRtcpPacketBuilder p; | 84 TestRtcpPacketBuilder p; |
| 86 p.AddSr(kSendingSsrc, 0); | 85 p.AddSr(kSendingSsrc, 0); |
| 87 p.AddSdesCname(kSendingSsrc, kCName); | |
| 88 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | 86 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); |
| 89 | 87 |
| 90 rtcp_builder_->SendRtcpFromRtpSender(RtcpBuilder::kRtcpSr, | 88 rtcp_builder_->SendRtcpFromRtpSender(RtcpBuilder::kRtcpSr, |
| 91 &sender_info, | 89 &sender_info, |
| 92 NULL, | 90 NULL, |
| 93 NULL, | 91 NULL, |
| 94 kSendingSsrc, | 92 kSendingSsrc); |
| 95 kCName); | |
| 96 | 93 |
| 97 EXPECT_EQ(1, test_transport_.packet_count()); | 94 EXPECT_EQ(1, test_transport_.packet_count()); |
| 98 } | 95 } |
| 99 | 96 |
| 100 TEST_F(RtcpBuilderTest, RtcpSenderReportWithDlrr) { | 97 TEST_F(RtcpBuilderTest, RtcpSenderReportWithDlrr) { |
| 101 RtcpSenderInfo sender_info; | 98 RtcpSenderInfo sender_info; |
| 102 sender_info.ntp_seconds = kNtpHigh; | 99 sender_info.ntp_seconds = kNtpHigh; |
| 103 sender_info.ntp_fraction = kNtpLow; | 100 sender_info.ntp_fraction = kNtpLow; |
| 104 sender_info.rtp_timestamp = kRtpTimestamp; | 101 sender_info.rtp_timestamp = kRtpTimestamp; |
| 105 sender_info.send_packet_count = kSendPacketCount; | 102 sender_info.send_packet_count = kSendPacketCount; |
| 106 sender_info.send_octet_count = kSendOctetCount; | 103 sender_info.send_octet_count = kSendOctetCount; |
| 107 | 104 |
| 108 // Sender report + c_name + dlrr. | 105 // Sender report + dlrr. |
| 109 TestRtcpPacketBuilder p1; | 106 TestRtcpPacketBuilder p1; |
| 110 p1.AddSr(kSendingSsrc, 0); | 107 p1.AddSr(kSendingSsrc, 0); |
| 111 p1.AddSdesCname(kSendingSsrc, kCName); | 108 p1.AddSdesCname(kSendingSsrc); |
| 112 p1.AddXrHeader(kSendingSsrc); | 109 p1.AddXrHeader(kSendingSsrc); |
| 113 p1.AddXrDlrrBlock(kSendingSsrc); | 110 p1.AddXrDlrrBlock(kSendingSsrc); |
| 114 test_transport_.SetExpectedRtcpPacket(p1.Packet(), p1.Length()); | 111 test_transport_.SetExpectedRtcpPacket(p1.Packet(), p1.Length()); |
| 115 | 112 |
| 116 RtcpDlrrReportBlock dlrr_rb; | 113 RtcpDlrrReportBlock dlrr_rb; |
| 117 dlrr_rb.last_rr = kLastRr; | 114 dlrr_rb.last_rr = kLastRr; |
| 118 dlrr_rb.delay_since_last_rr = kDelayLastRr; | 115 dlrr_rb.delay_since_last_rr = kDelayLastRr; |
| 119 | 116 |
| 120 rtcp_builder_->SendRtcpFromRtpSender( | 117 rtcp_builder_->SendRtcpFromRtpSender( |
| 121 RtcpBuilder::kRtcpSr | RtcpBuilder::kRtcpDlrr, | 118 RtcpBuilder::kRtcpSr | RtcpBuilder::kRtcpDlrr, |
| 122 &sender_info, | 119 &sender_info, |
| 123 &dlrr_rb, | 120 &dlrr_rb, |
| 124 NULL, | 121 NULL, |
| 125 kSendingSsrc, | 122 kSendingSsrc); |
| 126 kCName); | |
| 127 | 123 |
| 128 EXPECT_EQ(1, test_transport_.packet_count()); | 124 EXPECT_EQ(1, test_transport_.packet_count()); |
| 129 } | 125 } |
| 130 | 126 |
| 131 TEST_F(RtcpBuilderTest, RtcpSenderReportWithDlrr) { | 127 TEST_F(RtcpBuilderTest, RtcpSenderReportWithDlrr) { |
| 132 RtcpSenderInfo sender_info; | 128 RtcpSenderInfo sender_info; |
| 133 sender_info.ntp_seconds = kNtpHigh; | 129 sender_info.ntp_seconds = kNtpHigh; |
| 134 sender_info.ntp_fraction = kNtpLow; | 130 sender_info.ntp_fraction = kNtpLow; |
| 135 sender_info.rtp_timestamp = kRtpTimestamp; | 131 sender_info.rtp_timestamp = kRtpTimestamp; |
| 136 sender_info.send_packet_count = kSendPacketCount; | 132 sender_info.send_packet_count = kSendPacketCount; |
| 137 sender_info.send_octet_count = kSendOctetCount; | 133 sender_info.send_octet_count = kSendOctetCount; |
| 138 | 134 |
| 139 // Sender report + c_name + dlrr + sender log. | 135 // Sender report + + dlrr + sender log. |
| 140 TestRtcpPacketBuilder p; | 136 TestRtcpPacketBuilder p; |
| 141 p.AddSr(kSendingSsrc, 0); | 137 p.AddSr(kSendingSsrc, 0); |
| 142 p.AddSdesCname(kSendingSsrc, kCName); | 138 p.AddSdesCname(kSendingSsrc); |
| 143 p.AddXrHeader(kSendingSsrc); | 139 p.AddXrHeader(kSendingSsrc); |
| 144 p.AddXrDlrrBlock(kSendingSsrc); | 140 p.AddXrDlrrBlock(kSendingSsrc); |
| 145 | 141 |
| 146 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | 142 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); |
| 147 | 143 |
| 148 RtcpDlrrReportBlock dlrr_rb; | 144 RtcpDlrrReportBlock dlrr_rb; |
| 149 dlrr_rb.last_rr = kLastRr; | 145 dlrr_rb.last_rr = kLastRr; |
| 150 dlrr_rb.delay_since_last_rr = kDelayLastRr; | 146 dlrr_rb.delay_since_last_rr = kDelayLastRr; |
| 151 | 147 |
| 152 rtcp_builder_->SendRtcpFromRtpSender( | 148 rtcp_builder_->SendRtcpFromRtpSender( |
| 153 RtcpBuilder::kRtcpSr | RtcpBuilder::kRtcpDlrr | | 149 RtcpBuilder::kRtcpSr | RtcpBuilder::kRtcpDlrr | |
| 154 RtcpBuilder::kRtcpSenderLog, | 150 RtcpBuilder::kRtcpSenderLog, |
| 155 &sender_info, | 151 &sender_info, |
| 156 &dlrr_rb, | 152 &dlrr_rb, |
| 157 kSendingSsrc, | 153 kSendingSsrc); |
| 158 kCName); | |
| 159 | 154 |
| 160 EXPECT_EQ(1, test_transport_.packet_count()); | 155 EXPECT_EQ(1, test_transport_.packet_count()); |
| 161 } | 156 } |
| 162 | 157 |
| 163 } // namespace cast | 158 } // namespace cast |
| 164 } // namespace media | 159 } // namespace media |
| OLD | NEW |