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 |