| 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/cast_transport_defines.h" | 9 #include "media/cast/net/cast_transport_defines.h" |
| 10 #include "media/cast/net/pacing/paced_sender.h" | 10 #include "media/cast/net/pacing/paced_sender.h" |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 class RtcpSenderTest : public ::testing::Test { | 85 class RtcpSenderTest : public ::testing::Test { |
| 86 protected: | 86 protected: |
| 87 RtcpSenderTest() | 87 RtcpSenderTest() |
| 88 : testing_clock_(new base::SimpleTestTickClock()), | 88 : testing_clock_(new base::SimpleTestTickClock()), |
| 89 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)), | 89 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)), |
| 90 cast_environment_(new CastEnvironment( | 90 cast_environment_(new CastEnvironment( |
| 91 scoped_ptr<base::TickClock>(testing_clock_).Pass(), | 91 scoped_ptr<base::TickClock>(testing_clock_).Pass(), |
| 92 task_runner_, | 92 task_runner_, |
| 93 task_runner_, | 93 task_runner_, |
| 94 task_runner_)), | 94 task_runner_)), |
| 95 rtcp_sender_(new RtcpSender(cast_environment_, | 95 rtcp_sender_(new RtcpSender(&test_transport_, kSendingSsrc, kCName)) {} |
| 96 &test_transport_, | |
| 97 kSendingSsrc, | |
| 98 kCName)) {} | |
| 99 | 96 |
| 100 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment. | 97 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment. |
| 101 TestRtcpTransport test_transport_; | 98 TestRtcpTransport test_transport_; |
| 102 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; | 99 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; |
| 103 scoped_refptr<CastEnvironment> cast_environment_; | 100 scoped_refptr<CastEnvironment> cast_environment_; |
| 104 scoped_ptr<RtcpSender> rtcp_sender_; | 101 scoped_ptr<RtcpSender> rtcp_sender_; |
| 105 | 102 |
| 106 DISALLOW_COPY_AND_ASSIGN(RtcpSenderTest); | 103 DISALLOW_COPY_AND_ASSIGN(RtcpSenderTest); |
| 107 }; | 104 }; |
| 108 | 105 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 TestRtcpPacketBuilder p; | 162 TestRtcpPacketBuilder p; |
| 166 p.AddRr(kSendingSsrc, 1); | 163 p.AddRr(kSendingSsrc, 1); |
| 167 p.AddRb(kMediaSsrc); | 164 p.AddRb(kMediaSsrc); |
| 168 p.AddSdesCname(kSendingSsrc, kCName); | 165 p.AddSdesCname(kSendingSsrc, kCName); |
| 169 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); | 166 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); |
| 170 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); | 167 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); |
| 171 | 168 |
| 172 RtcpReportBlock report_block = GetReportBlock(); | 169 RtcpReportBlock report_block = GetReportBlock(); |
| 173 | 170 |
| 174 RtcpCastMessage cast_message(kMediaSsrc); | 171 RtcpCastMessage cast_message(kMediaSsrc); |
| 175 cast_message.ack_frame_id_ = kAckFrameId; | 172 cast_message.ack_frame_id = kAckFrameId; |
| 176 PacketIdSet missing_packets; | 173 PacketIdSet missing_packets; |
| 177 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; | 174 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets; |
| 178 | 175 |
| 179 missing_packets.insert(kLostPacketId1); | 176 missing_packets.insert(kLostPacketId1); |
| 180 missing_packets.insert(kLostPacketId2); | 177 missing_packets.insert(kLostPacketId2); |
| 181 missing_packets.insert(kLostPacketId3); | 178 missing_packets.insert(kLostPacketId3); |
| 182 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = | 179 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = |
| 183 missing_packets; | 180 missing_packets; |
| 184 | 181 |
| 185 rtcp_sender_->SendRtcpFromRtpReceiver( | 182 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 186 kRtcpRr | kRtcpCast, | 183 kRtcpRr | kRtcpCast, |
| 187 &report_block, | 184 &report_block, |
| 188 NULL, | 185 NULL, |
| 189 &cast_message, | 186 &cast_message, |
| 190 NULL, | 187 NULL, |
| 191 kDefaultDelay); | 188 kDefaultDelay); |
| 192 | 189 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 203 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); | 200 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); |
| 204 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); | 201 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); |
| 205 | 202 |
| 206 RtcpReportBlock report_block = GetReportBlock(); | 203 RtcpReportBlock report_block = GetReportBlock(); |
| 207 | 204 |
| 208 RtcpReceiverReferenceTimeReport rrtr; | 205 RtcpReceiverReferenceTimeReport rrtr; |
| 209 rrtr.ntp_seconds = kNtpHigh; | 206 rrtr.ntp_seconds = kNtpHigh; |
| 210 rrtr.ntp_fraction = kNtpLow; | 207 rrtr.ntp_fraction = kNtpLow; |
| 211 | 208 |
| 212 RtcpCastMessage cast_message(kMediaSsrc); | 209 RtcpCastMessage cast_message(kMediaSsrc); |
| 213 cast_message.ack_frame_id_ = kAckFrameId; | 210 cast_message.ack_frame_id = kAckFrameId; |
| 214 PacketIdSet missing_packets; | 211 PacketIdSet missing_packets; |
| 215 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; | 212 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets; |
| 216 | 213 |
| 217 missing_packets.insert(kLostPacketId1); | 214 missing_packets.insert(kLostPacketId1); |
| 218 missing_packets.insert(kLostPacketId2); | 215 missing_packets.insert(kLostPacketId2); |
| 219 missing_packets.insert(kLostPacketId3); | 216 missing_packets.insert(kLostPacketId3); |
| 220 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = | 217 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = |
| 221 missing_packets; | 218 missing_packets; |
| 222 | 219 |
| 223 rtcp_sender_->SendRtcpFromRtpReceiver( | 220 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 224 kRtcpRr | kRtcpRrtr | kRtcpCast, | 221 kRtcpRr | kRtcpRrtr | kRtcpCast, |
| 225 &report_block, | 222 &report_block, |
| 226 &rrtr, | 223 &rrtr, |
| 227 &cast_message, | 224 &cast_message, |
| 228 NULL, | 225 NULL, |
| 229 kDefaultDelay); | 226 kDefaultDelay); |
| 230 | 227 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 244 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); | 241 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); |
| 245 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); | 242 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); |
| 246 | 243 |
| 247 RtcpReportBlock report_block = GetReportBlock(); | 244 RtcpReportBlock report_block = GetReportBlock(); |
| 248 | 245 |
| 249 RtcpReceiverReferenceTimeReport rrtr; | 246 RtcpReceiverReferenceTimeReport rrtr; |
| 250 rrtr.ntp_seconds = kNtpHigh; | 247 rrtr.ntp_seconds = kNtpHigh; |
| 251 rrtr.ntp_fraction = kNtpLow; | 248 rrtr.ntp_fraction = kNtpLow; |
| 252 | 249 |
| 253 RtcpCastMessage cast_message(kMediaSsrc); | 250 RtcpCastMessage cast_message(kMediaSsrc); |
| 254 cast_message.ack_frame_id_ = kAckFrameId; | 251 cast_message.ack_frame_id = kAckFrameId; |
| 255 PacketIdSet missing_packets; | 252 PacketIdSet missing_packets; |
| 256 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; | 253 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets; |
| 257 | 254 |
| 258 missing_packets.insert(kLostPacketId1); | 255 missing_packets.insert(kLostPacketId1); |
| 259 missing_packets.insert(kLostPacketId2); | 256 missing_packets.insert(kLostPacketId2); |
| 260 missing_packets.insert(kLostPacketId3); | 257 missing_packets.insert(kLostPacketId3); |
| 261 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = | 258 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = |
| 262 missing_packets; | 259 missing_packets; |
| 263 | 260 |
| 264 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); | 261 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); |
| 265 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; | 262 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; |
| 266 | 263 |
| 267 rtcp_sender_->SendRtcpFromRtpReceiver( | 264 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 268 kRtcpRr | kRtcpRrtr | kRtcpCast | | 265 kRtcpRr | kRtcpRrtr | kRtcpCast | |
| 269 kRtcpReceiverLog, | 266 kRtcpReceiverLog, |
| 270 &report_block, | 267 &report_block, |
| 271 &rrtr, | 268 &rrtr, |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 546 kDefaultDelay); | 543 kDefaultDelay); |
| 547 | 544 |
| 548 testing_clock.Advance( | 545 testing_clock.Advance( |
| 549 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); | 546 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); |
| 550 time_base_ms += kTimeBetweenEventsMs; | 547 time_base_ms += kTimeBetweenEventsMs; |
| 551 } | 548 } |
| 552 | 549 |
| 553 EXPECT_EQ(static_cast<int>(packet_count), test_transport_.packet_count()); | 550 EXPECT_EQ(static_cast<int>(packet_count), test_transport_.packet_count()); |
| 554 } | 551 } |
| 555 | 552 |
| 553 TEST_F(RtcpSenderTest, RtcpSenderReport) { |
| 554 RtcpSenderInfo sender_info; |
| 555 sender_info.ntp_seconds = kNtpHigh; |
| 556 sender_info.ntp_fraction = kNtpLow; |
| 557 sender_info.rtp_timestamp = kRtpTimestamp; |
| 558 sender_info.send_packet_count = kSendPacketCount; |
| 559 sender_info.send_octet_count = kSendOctetCount; |
| 560 |
| 561 RtcpDlrrReportBlock dlrr_rb; |
| 562 dlrr_rb.last_rr = kLastRr; |
| 563 dlrr_rb.delay_since_last_rr = kDelayLastRr; |
| 564 |
| 565 // Sender report + c_name. |
| 566 TestRtcpPacketBuilder p; |
| 567 p.AddSr(kSendingSsrc, 0); |
| 568 p.AddSdesCname(kSendingSsrc, kCName); |
| 569 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); |
| 570 |
| 571 rtcp_sender_->SendRtcpFromRtpSender(kRtcpSr, |
| 572 sender_info, |
| 573 dlrr_rb); |
| 574 |
| 575 EXPECT_EQ(1, test_transport_.packet_count()); |
| 576 } |
| 577 |
| 578 TEST_F(RtcpSenderTest, RtcpSenderReportWithDlrr) { |
| 579 RtcpSenderInfo sender_info; |
| 580 sender_info.ntp_seconds = kNtpHigh; |
| 581 sender_info.ntp_fraction = kNtpLow; |
| 582 sender_info.rtp_timestamp = kRtpTimestamp; |
| 583 sender_info.send_packet_count = kSendPacketCount; |
| 584 sender_info.send_octet_count = kSendOctetCount; |
| 585 |
| 586 // Sender report + c_name + dlrr. |
| 587 TestRtcpPacketBuilder p1; |
| 588 p1.AddSr(kSendingSsrc, 0); |
| 589 p1.AddSdesCname(kSendingSsrc, kCName); |
| 590 p1.AddXrHeader(kSendingSsrc); |
| 591 p1.AddXrDlrrBlock(kSendingSsrc); |
| 592 test_transport_.SetExpectedRtcpPacket(p1.GetPacket().Pass()); |
| 593 |
| 594 RtcpDlrrReportBlock dlrr_rb; |
| 595 dlrr_rb.last_rr = kLastRr; |
| 596 dlrr_rb.delay_since_last_rr = kDelayLastRr; |
| 597 |
| 598 rtcp_sender_->SendRtcpFromRtpSender( |
| 599 kRtcpSr | kRtcpDlrr, |
| 600 sender_info, |
| 601 dlrr_rb); |
| 602 |
| 603 EXPECT_EQ(1, test_transport_.packet_count()); |
| 604 } |
| 605 |
| 556 } // namespace cast | 606 } // namespace cast |
| 557 } // namespace media | 607 } // namespace media |
| OLD | NEW |