| 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 |