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 <stdint.h> | 5 #include <stdint.h> |
6 | 6 |
7 #include "base/test/simple_test_tick_clock.h" | 7 #include "base/test/simple_test_tick_clock.h" |
8 #include "media/cast/cast_defines.h" | 8 #include "media/cast/cast_defines.h" |
9 #include "media/cast/net/cast_transport_config.h" | 9 #include "media/cast/net/cast_transport_config.h" |
10 #include "media/cast/net/cast_transport_sender_impl.h" | 10 #include "media/cast/net/cast_transport_sender_impl.h" |
11 #include "media/cast/net/pacing/paced_sender.h" | 11 #include "media/cast/net/pacing/paced_sender.h" |
12 #include "media/cast/net/rtcp/mock_rtcp_receiver_feedback.h" | 12 #include "media/cast/net/rtcp/mock_rtcp_receiver_feedback.h" |
13 #include "media/cast/net/rtcp/rtcp.h" | 13 #include "media/cast/net/rtcp/rtcp.h" |
14 #include "media/cast/net/rtcp/test_rtcp_packet_builder.h" | 14 #include "media/cast/net/rtcp/test_rtcp_packet_builder.h" |
15 #include "media/cast/test/fake_single_thread_task_runner.h" | 15 #include "media/cast/test/fake_single_thread_task_runner.h" |
16 #include "testing/gmock/include/gmock/gmock.h" | 16 #include "testing/gmock/include/gmock/gmock.h" |
17 | 17 |
18 namespace media { | 18 namespace media { |
19 namespace cast { | 19 namespace cast { |
20 | 20 |
21 using testing::_; | 21 using testing::_; |
22 | 22 |
23 static const uint32 kSenderSsrc = 0x10203; | 23 static const uint32 kSenderSsrc = 0x10203; |
24 static const uint32 kReceiverSsrc = 0x40506; | 24 static const uint32 kReceiverSsrc = 0x40506; |
25 static const std::string kCName("test@10.1.1.1"); | |
26 static const int64 kAddedDelay = 123; | 25 static const int64 kAddedDelay = 123; |
27 static const int64 kAddedShortDelay = 100; | 26 static const int64 kAddedShortDelay = 100; |
28 | 27 |
29 class RtcpTestPacketSender : public PacketSender { | 28 class RtcpTestPacketSender : public PacketSender { |
30 public: | 29 public: |
31 explicit RtcpTestPacketSender(base::SimpleTestTickClock* testing_clock) | 30 explicit RtcpTestPacketSender(base::SimpleTestTickClock* testing_clock) |
32 : drop_packets_(false), | 31 : drop_packets_(false), |
33 short_delay_(false), | 32 short_delay_(false), |
34 rtcp_receiver_(NULL), | 33 rtcp_receiver_(NULL), |
35 testing_clock_(testing_clock) {} | 34 testing_clock_(testing_clock) {} |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 | 190 |
192 TEST_F(RtcpTest, BasicSenderReport) { | 191 TEST_F(RtcpTest, BasicSenderReport) { |
193 Rtcp rtcp(base::Bind(&MockFrameSender::OnReceivedCastFeedback, | 192 Rtcp rtcp(base::Bind(&MockFrameSender::OnReceivedCastFeedback, |
194 base::Unretained(&mock_frame_sender_)), | 193 base::Unretained(&mock_frame_sender_)), |
195 base::Bind(&MockFrameSender::OnReceivedRtt, | 194 base::Bind(&MockFrameSender::OnReceivedRtt, |
196 base::Unretained(&mock_frame_sender_)), | 195 base::Unretained(&mock_frame_sender_)), |
197 RtcpLogMessageCallback(), | 196 RtcpLogMessageCallback(), |
198 testing_clock_, | 197 testing_clock_, |
199 &sender_to_receiver_, | 198 &sender_to_receiver_, |
200 kSenderSsrc, | 199 kSenderSsrc, |
201 kReceiverSsrc, | 200 kReceiverSsrc); |
202 kCName); | |
203 sender_to_receiver_.set_rtcp_receiver(&rtcp); | 201 sender_to_receiver_.set_rtcp_receiver(&rtcp); |
204 rtcp.SendRtcpFromRtpSender(base::TimeTicks(), 0, 1, 1); | 202 rtcp.SendRtcpFromRtpSender(base::TimeTicks(), 0, 1, 1); |
205 } | 203 } |
206 | 204 |
207 TEST_F(RtcpTest, BasicReceiverReport) { | 205 TEST_F(RtcpTest, BasicReceiverReport) { |
208 Rtcp rtcp(base::Bind(&MockFrameSender::OnReceivedCastFeedback, | 206 Rtcp rtcp(base::Bind(&MockFrameSender::OnReceivedCastFeedback, |
209 base::Unretained(&mock_frame_sender_)), | 207 base::Unretained(&mock_frame_sender_)), |
210 base::Bind(&MockFrameSender::OnReceivedRtt, | 208 base::Bind(&MockFrameSender::OnReceivedRtt, |
211 base::Unretained(&mock_frame_sender_)), | 209 base::Unretained(&mock_frame_sender_)), |
212 RtcpLogMessageCallback(), | 210 RtcpLogMessageCallback(), |
213 testing_clock_, | 211 testing_clock_, |
214 &receiver_to_sender_, | 212 &receiver_to_sender_, |
215 kSenderSsrc, | 213 kSenderSsrc, |
216 kReceiverSsrc, | 214 kReceiverSsrc); |
217 kCName); | |
218 receiver_to_sender_.set_rtcp_receiver(&rtcp); | 215 receiver_to_sender_.set_rtcp_receiver(&rtcp); |
219 rtcp.SendRtcpFromRtpReceiver(NULL, base::TimeDelta(), NULL, &stats_); | 216 rtcp.SendRtcpFromRtpReceiver(NULL, base::TimeDelta(), NULL, &stats_); |
220 } | 217 } |
221 | 218 |
222 TEST_F(RtcpTest, BasicCast) { | 219 TEST_F(RtcpTest, BasicCast) { |
223 EXPECT_CALL(mock_frame_sender_, OnReceivedCastFeedback(_)).Times(1); | 220 EXPECT_CALL(mock_frame_sender_, OnReceivedCastFeedback(_)).Times(1); |
224 | 221 |
225 // Media sender. | 222 // Media sender. |
226 Rtcp rtcp(base::Bind(&MockFrameSender::OnReceivedCastFeedback, | 223 Rtcp rtcp(base::Bind(&MockFrameSender::OnReceivedCastFeedback, |
227 base::Unretained(&mock_frame_sender_)), | 224 base::Unretained(&mock_frame_sender_)), |
228 base::Bind(&MockFrameSender::OnReceivedRtt, | 225 base::Bind(&MockFrameSender::OnReceivedRtt, |
229 base::Unretained(&mock_frame_sender_)), | 226 base::Unretained(&mock_frame_sender_)), |
230 RtcpLogMessageCallback(), | 227 RtcpLogMessageCallback(), |
231 testing_clock_, | 228 testing_clock_, |
232 &receiver_to_sender_, | 229 &receiver_to_sender_, |
233 kSenderSsrc, | 230 kSenderSsrc, |
234 kSenderSsrc, | 231 kSenderSsrc); |
235 kCName); | |
236 receiver_to_sender_.set_rtcp_receiver(&rtcp); | 232 receiver_to_sender_.set_rtcp_receiver(&rtcp); |
237 RtcpCastMessage cast_message(kSenderSsrc); | 233 RtcpCastMessage cast_message(kSenderSsrc); |
238 cast_message.ack_frame_id = kAckFrameId; | 234 cast_message.ack_frame_id = kAckFrameId; |
239 PacketIdSet missing_packets; | 235 PacketIdSet missing_packets; |
240 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets; | 236 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets; |
241 | 237 |
242 missing_packets.insert(kLostPacketId1); | 238 missing_packets.insert(kLostPacketId1); |
243 missing_packets.insert(kLostPacketId2); | 239 missing_packets.insert(kLostPacketId2); |
244 missing_packets.insert(kLostPacketId3); | 240 missing_packets.insert(kLostPacketId3); |
245 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = | 241 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = |
246 missing_packets; | 242 missing_packets; |
247 rtcp.SendRtcpFromRtpReceiver(&cast_message, base::TimeDelta(), NULL, NULL); | 243 rtcp.SendRtcpFromRtpReceiver(&cast_message, base::TimeDelta(), NULL, NULL); |
248 } | 244 } |
249 | 245 |
250 TEST_F(RtcpTest, RttReducedSizeRtcp) { | 246 TEST_F(RtcpTest, RttReducedSizeRtcp) { |
251 // Media receiver. | 247 // Media receiver. |
252 Rtcp rtcp_receiver(RtcpCastMessageCallback(), | 248 Rtcp rtcp_receiver(RtcpCastMessageCallback(), |
253 RtcpRttCallback(), | 249 RtcpRttCallback(), |
254 RtcpLogMessageCallback(), | 250 RtcpLogMessageCallback(), |
255 testing_clock_, | 251 testing_clock_, |
256 &receiver_to_sender_, | 252 &receiver_to_sender_, |
257 kReceiverSsrc, | 253 kReceiverSsrc, |
258 kSenderSsrc, | 254 kSenderSsrc); |
259 kCName); | |
260 | 255 |
261 // Media sender. | 256 // Media sender. |
262 Rtcp rtcp_sender(base::Bind(&MockFrameSender::OnReceivedCastFeedback, | 257 Rtcp rtcp_sender(base::Bind(&MockFrameSender::OnReceivedCastFeedback, |
263 base::Unretained(&mock_frame_sender_)), | 258 base::Unretained(&mock_frame_sender_)), |
264 base::Bind(&MockFrameSender::OnReceivedRtt, | 259 base::Bind(&MockFrameSender::OnReceivedRtt, |
265 base::Unretained(&mock_frame_sender_)), | 260 base::Unretained(&mock_frame_sender_)), |
266 RtcpLogMessageCallback(), | 261 RtcpLogMessageCallback(), |
267 testing_clock_, | 262 testing_clock_, |
268 &sender_to_receiver_, | 263 &sender_to_receiver_, |
269 kSenderSsrc, | 264 kSenderSsrc, |
270 kReceiverSsrc, | 265 kReceiverSsrc); |
271 kCName); | |
272 | 266 |
273 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); | 267 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); |
274 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); | 268 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); |
275 | 269 |
276 base::TimeDelta rtt; | 270 base::TimeDelta rtt; |
277 base::TimeDelta avg_rtt; | 271 base::TimeDelta avg_rtt; |
278 base::TimeDelta min_rtt; | 272 base::TimeDelta min_rtt; |
279 base::TimeDelta max_rtt; | 273 base::TimeDelta max_rtt; |
280 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 274 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
281 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 275 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
(...skipping 18 matching lines...) Expand all Loading... |
300 } | 294 } |
301 | 295 |
302 TEST_F(RtcpTest, Rtt) { | 296 TEST_F(RtcpTest, Rtt) { |
303 // Media receiver. | 297 // Media receiver. |
304 Rtcp rtcp_receiver(RtcpCastMessageCallback(), | 298 Rtcp rtcp_receiver(RtcpCastMessageCallback(), |
305 RtcpRttCallback(), | 299 RtcpRttCallback(), |
306 RtcpLogMessageCallback(), | 300 RtcpLogMessageCallback(), |
307 testing_clock_, | 301 testing_clock_, |
308 &receiver_to_sender_, | 302 &receiver_to_sender_, |
309 kReceiverSsrc, | 303 kReceiverSsrc, |
310 kSenderSsrc, | 304 kSenderSsrc); |
311 kCName); | |
312 | 305 |
313 // Media sender. | 306 // Media sender. |
314 Rtcp rtcp_sender(base::Bind(&MockFrameSender::OnReceivedCastFeedback, | 307 Rtcp rtcp_sender(base::Bind(&MockFrameSender::OnReceivedCastFeedback, |
315 base::Unretained(&mock_frame_sender_)), | 308 base::Unretained(&mock_frame_sender_)), |
316 base::Bind(&MockFrameSender::OnReceivedRtt, | 309 base::Bind(&MockFrameSender::OnReceivedRtt, |
317 base::Unretained(&mock_frame_sender_)), | 310 base::Unretained(&mock_frame_sender_)), |
318 RtcpLogMessageCallback(), | 311 RtcpLogMessageCallback(), |
319 testing_clock_, | 312 testing_clock_, |
320 &sender_to_receiver_, | 313 &sender_to_receiver_, |
321 kSenderSsrc, | 314 kSenderSsrc, |
322 kReceiverSsrc, | 315 kReceiverSsrc); |
323 kCName); | |
324 | 316 |
325 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); | 317 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); |
326 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); | 318 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); |
327 | 319 |
328 base::TimeDelta rtt; | 320 base::TimeDelta rtt; |
329 base::TimeDelta avg_rtt; | 321 base::TimeDelta avg_rtt; |
330 base::TimeDelta min_rtt; | 322 base::TimeDelta min_rtt; |
331 base::TimeDelta max_rtt; | 323 base::TimeDelta max_rtt; |
332 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 324 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
333 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 325 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
389 } | 381 } |
390 | 382 |
391 TEST_F(RtcpTest, RttWithPacketLoss) { | 383 TEST_F(RtcpTest, RttWithPacketLoss) { |
392 // Media receiver. | 384 // Media receiver. |
393 Rtcp rtcp_receiver(RtcpCastMessageCallback(), | 385 Rtcp rtcp_receiver(RtcpCastMessageCallback(), |
394 RtcpRttCallback(), | 386 RtcpRttCallback(), |
395 RtcpLogMessageCallback(), | 387 RtcpLogMessageCallback(), |
396 testing_clock_, | 388 testing_clock_, |
397 &receiver_to_sender_, | 389 &receiver_to_sender_, |
398 kReceiverSsrc, | 390 kReceiverSsrc, |
399 kSenderSsrc, | 391 kSenderSsrc); |
400 kCName); | |
401 | 392 |
402 // Media sender. | 393 // Media sender. |
403 Rtcp rtcp_sender(base::Bind(&MockFrameSender::OnReceivedCastFeedback, | 394 Rtcp rtcp_sender(base::Bind(&MockFrameSender::OnReceivedCastFeedback, |
404 base::Unretained(&mock_frame_sender_)), | 395 base::Unretained(&mock_frame_sender_)), |
405 base::Bind(&MockFrameSender::OnReceivedRtt, | 396 base::Bind(&MockFrameSender::OnReceivedRtt, |
406 base::Unretained(&mock_frame_sender_)), | 397 base::Unretained(&mock_frame_sender_)), |
407 RtcpLogMessageCallback(), | 398 RtcpLogMessageCallback(), |
408 testing_clock_, | 399 testing_clock_, |
409 &sender_to_receiver_, | 400 &sender_to_receiver_, |
410 kSenderSsrc, | 401 kSenderSsrc, |
411 kReceiverSsrc, | 402 kReceiverSsrc); |
412 kCName); | |
413 | 403 |
414 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); | 404 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); |
415 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); | 405 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); |
416 | 406 |
417 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, base::TimeDelta(), NULL, &stats_); | 407 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, base::TimeDelta(), NULL, &stats_); |
418 rtcp_sender.SendRtcpFromRtpSender(testing_clock_->NowTicks(), 0, 1, 1); | 408 rtcp_sender.SendRtcpFromRtpSender(testing_clock_->NowTicks(), 0, 1, 1); |
419 RunTasks(33); | 409 RunTasks(33); |
420 | 410 |
421 base::TimeDelta rtt; | 411 base::TimeDelta rtt; |
422 base::TimeDelta avg_rtt; | 412 base::TimeDelta avg_rtt; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
482 base::TimeTicks out_3 = ConvertNtpToTimeTicks(ntp_seconds_3, ntp_fraction_3); | 472 base::TimeTicks out_3 = ConvertNtpToTimeTicks(ntp_seconds_3, ntp_fraction_3); |
483 EXPECT_EQ(input_time, out_3); // Verify inverse. | 473 EXPECT_EQ(input_time, out_3); // Verify inverse. |
484 | 474 |
485 // Verify delta. | 475 // Verify delta. |
486 EXPECT_EQ((out_3 - out_2), time_delta); | 476 EXPECT_EQ((out_3 - out_2), time_delta); |
487 EXPECT_NEAR((ntp_fraction_3 - ntp_fraction_2), 0xffffffff / 2, 1); | 477 EXPECT_NEAR((ntp_fraction_3 - ntp_fraction_2), 0xffffffff / 2, 1); |
488 } | 478 } |
489 | 479 |
490 } // namespace cast | 480 } // namespace cast |
491 } // namespace media | 481 } // namespace media |
OLD | NEW |