Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "media/cast/cast_defines.h" | 7 #include "media/cast/cast_defines.h" |
| 7 #include "media/cast/pacing/paced_sender.h" | 8 #include "media/cast/pacing/paced_sender.h" |
| 8 #include "media/cast/rtcp/rtcp_sender.h" | 9 #include "media/cast/rtcp/rtcp_sender.h" |
| 10 #include "media/cast/rtcp/rtcp_utility.h" | |
| 9 #include "media/cast/rtcp/test_rtcp_packet_builder.h" | 11 #include "media/cast/rtcp/test_rtcp_packet_builder.h" |
| 10 #include "testing/gmock/include/gmock/gmock.h" | 12 #include "testing/gmock/include/gmock/gmock.h" |
| 11 | 13 |
| 12 namespace media { | 14 namespace media { |
| 13 namespace cast { | 15 namespace cast { |
| 14 | 16 |
| 15 static const uint32 kSendingSsrc = 0x12345678; | 17 static const uint32 kSendingSsrc = 0x12345678; |
| 16 static const uint32 kMediaSsrc = 0x87654321; | 18 static const uint32 kMediaSsrc = 0x87654321; |
| 17 static const std::string kCName("test@10.1.1.1"); | 19 static const std::string kCName("test@10.1.1.1"); |
| 18 | 20 |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 47 | 49 |
| 48 private: | 50 private: |
| 49 uint8 expected_packet_[kIpPacketSize]; | 51 uint8 expected_packet_[kIpPacketSize]; |
| 50 size_t expected_packet_length_; | 52 size_t expected_packet_length_; |
| 51 int packet_count_; | 53 int packet_count_; |
| 52 }; | 54 }; |
| 53 | 55 |
| 54 class RtcpSenderTest : public ::testing::Test { | 56 class RtcpSenderTest : public ::testing::Test { |
| 55 protected: | 57 protected: |
| 56 RtcpSenderTest() | 58 RtcpSenderTest() |
| 57 : rtcp_sender_(new RtcpSender(&test_transport_, | 59 : rtcp_sender_(new RtcpSender(&test_transport_, kSendingSsrc, kCName)) {} |
| 58 kSendingSsrc, | |
| 59 kCName)) { | |
| 60 } | |
| 61 | 60 |
| 62 TestRtcpTransport test_transport_; | 61 TestRtcpTransport test_transport_; |
| 63 scoped_ptr<RtcpSender> rtcp_sender_; | 62 scoped_ptr<RtcpSender> rtcp_sender_; |
| 64 }; | 63 }; |
| 65 | 64 |
| 66 TEST_F(RtcpSenderTest, RtcpSenderReport) { | 65 TEST_F(RtcpSenderTest, RtcpSenderReport) { |
| 67 RtcpSenderInfo sender_info; | 66 RtcpSenderInfo sender_info; |
| 68 sender_info.ntp_seconds = kNtpHigh; | 67 sender_info.ntp_seconds = kNtpHigh; |
| 69 sender_info.ntp_fraction = kNtpLow; | 68 sender_info.ntp_fraction = kNtpLow; |
| 70 sender_info.rtp_timestamp = kRtpTimestamp; | 69 sender_info.rtp_timestamp = kRtpTimestamp; |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 143 | 142 |
| 144 rtcp_sender_->SendRtcpFromRtpSender( | 143 rtcp_sender_->SendRtcpFromRtpSender( |
| 145 RtcpSender::kRtcpSr | RtcpSender::kRtcpDlrr, | 144 RtcpSender::kRtcpSr | RtcpSender::kRtcpDlrr, |
| 146 &sender_info, | 145 &sender_info, |
| 147 &dlrr_rb, | 146 &dlrr_rb, |
| 148 NULL); | 147 NULL); |
| 149 | 148 |
| 150 EXPECT_EQ(1, test_transport_.packet_count()); | 149 EXPECT_EQ(1, test_transport_.packet_count()); |
| 151 } | 150 } |
| 152 | 151 |
| 152 TEST_F(RtcpSenderTest, RtcpSenderReportWithDlrrAndLog) { | |
| 153 RtcpSenderInfo sender_info; | |
| 154 sender_info.ntp_seconds = kNtpHigh; | |
| 155 sender_info.ntp_fraction = kNtpLow; | |
| 156 sender_info.rtp_timestamp = kRtpTimestamp; | |
| 157 sender_info.send_packet_count = kSendPacketCount; | |
| 158 sender_info.send_octet_count = kSendOctetCount; | |
| 159 | |
| 160 // Sender report + c_name + dlrr + sender log. | |
| 161 TestRtcpPacketBuilder p; | |
| 162 p.AddSr(kSendingSsrc, 0); | |
| 163 p.AddSdesCname(kSendingSsrc, kCName); | |
| 164 p.AddXrHeader(kSendingSsrc); | |
| 165 p.AddXrDlrrBlock(kSendingSsrc); | |
| 166 p.AddSenderLog(kSendingSsrc); | |
| 167 p.AddSenderFrameLog(kRtcpSenderFrameStatusSentToNetwork, kRtpTimestamp); | |
| 168 | |
| 169 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | |
| 170 | |
| 171 RtcpDlrrReportBlock dlrr_rb; | |
| 172 dlrr_rb.last_rr = kLastRr; | |
| 173 dlrr_rb.delay_since_last_rr = kDelayLastRr; | |
| 174 | |
| 175 RtcpSenderFrameLogMessage sender_frame_log; | |
| 176 sender_frame_log.frame_status = kRtcpSenderFrameStatusSentToNetwork; | |
| 177 sender_frame_log.rtp_timestamp = kRtpTimestamp; | |
| 178 | |
| 179 RtcpSenderLogMessage sender_log; | |
| 180 sender_log.push_back(sender_frame_log); | |
| 181 | |
| 182 rtcp_sender_->SendRtcpFromRtpSender( | |
| 183 RtcpSender::kRtcpSr | RtcpSender::kRtcpDlrr | RtcpSender::kRtcpSenderLog, | |
| 184 &sender_info, | |
| 185 &dlrr_rb, | |
| 186 &sender_log); | |
| 187 | |
| 188 EXPECT_EQ(1, test_transport_.packet_count()); | |
| 189 EXPECT_TRUE(sender_log.empty()); | |
| 190 } | |
| 191 | |
| 192 TEST_F(RtcpSenderTest, RtcpSenderReporWithTooManyLogFrames) { | |
| 193 RtcpSenderInfo sender_info; | |
| 194 sender_info.ntp_seconds = kNtpHigh; | |
| 195 sender_info.ntp_fraction = kNtpLow; | |
| 196 sender_info.rtp_timestamp = kRtpTimestamp; | |
| 197 sender_info.send_packet_count = kSendPacketCount; | |
| 198 sender_info.send_octet_count = kSendOctetCount; | |
| 199 | |
| 200 // Sender report + c_name + sender log. | |
| 201 TestRtcpPacketBuilder p; | |
| 202 p.AddSr(kSendingSsrc, 0); | |
| 203 p.AddSdesCname(kSendingSsrc, kCName); | |
| 204 p.AddSenderLog(kSendingSsrc); | |
| 205 | |
| 206 for (int i = 0; i < 359; ++i) { | |
| 207 p.AddSenderFrameLog(kRtcpSenderFrameStatusSentToNetwork, | |
| 208 kRtpTimestamp + i * 90); | |
| 209 } | |
| 210 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | |
| 211 | |
| 212 | |
| 213 RtcpSenderLogMessage sender_log; | |
| 214 for (int j = 0; j < 400; ++j) { | |
| 215 RtcpSenderFrameLogMessage sender_frame_log; | |
| 216 sender_frame_log.frame_status = kRtcpSenderFrameStatusSentToNetwork; | |
| 217 sender_frame_log.rtp_timestamp = kRtpTimestamp + j * 90; | |
| 218 sender_log.push_back(sender_frame_log); | |
| 219 } | |
| 220 | |
| 221 rtcp_sender_->SendRtcpFromRtpSender( | |
| 222 RtcpSender::kRtcpSr | RtcpSender::kRtcpSenderLog, | |
| 223 &sender_info, | |
| 224 NULL, | |
| 225 &sender_log); | |
| 226 | |
| 227 EXPECT_EQ(1, test_transport_.packet_count()); | |
| 228 EXPECT_EQ(41u, sender_log.size()); | |
| 229 } | |
| 230 | |
| 231 //TODO | |
|
mikhal
2013/11/21 16:43:20
what? who?
pwestin
2013/11/22 18:50:47
ops
pwestin
2013/11/22 18:50:47
Done.
| |
| 232 | |
| 233 | |
| 234 | |
| 235 | |
| 153 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtr) { | 236 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtr) { |
| 154 // Receiver report with report block + c_name. | 237 // Receiver report with report block + c_name. |
| 155 TestRtcpPacketBuilder p; | 238 TestRtcpPacketBuilder p; |
| 156 p.AddRr(kSendingSsrc, 1); | 239 p.AddRr(kSendingSsrc, 1); |
| 157 p.AddRb(kMediaSsrc); | 240 p.AddRb(kMediaSsrc); |
| 158 p.AddSdesCname(kSendingSsrc, kCName); | 241 p.AddSdesCname(kSendingSsrc, kCName); |
| 159 p.AddXrHeader(kSendingSsrc); | 242 p.AddXrHeader(kSendingSsrc); |
| 160 p.AddXrRrtrBlock(); | 243 p.AddXrRrtrBlock(); |
| 161 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | 244 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); |
| 162 | 245 |
| 163 RtcpReportBlock report_block; | 246 RtcpReportBlock report_block; |
| 164 // Initialize remote_ssrc to a "clearly illegal" value. | 247 // Initialize remote_ssrc to a "clearly illegal" value. |
| 165 report_block.remote_ssrc = 0xDEAD; | 248 report_block.remote_ssrc = 0xDEAD; |
| 166 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | 249 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. |
| 167 report_block.fraction_lost = kLoss >> 24; | 250 report_block.fraction_lost = kLoss >> 24; |
| 168 report_block.cumulative_lost = kLoss; // 24 bits valid. | 251 report_block.cumulative_lost = kLoss; // 24 bits valid. |
| 169 report_block.extended_high_sequence_number = | 252 report_block.extended_high_sequence_number = kExtendedMax; |
| 170 kExtendedMax; | |
| 171 report_block.jitter = kTestJitter; | 253 report_block.jitter = kTestJitter; |
| 172 report_block.last_sr = kLastSr; | 254 report_block.last_sr = kLastSr; |
| 173 report_block.delay_since_last_sr = kDelayLastSr; | 255 report_block.delay_since_last_sr = kDelayLastSr; |
| 174 | 256 |
| 175 RtcpReceiverReferenceTimeReport rrtr; | 257 RtcpReceiverReferenceTimeReport rrtr; |
| 176 rrtr.ntp_seconds = kNtpHigh; | 258 rrtr.ntp_seconds = kNtpHigh; |
| 177 rrtr.ntp_fraction = kNtpLow; | 259 rrtr.ntp_fraction = kNtpLow; |
| 178 | 260 |
| 179 rtcp_sender_->SendRtcpFromRtpReceiver( | 261 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 180 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr, | 262 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr, |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 202 report_block.fraction_lost = kLoss >> 24; | 284 report_block.fraction_lost = kLoss >> 24; |
| 203 report_block.cumulative_lost = kLoss; // 24 bits valid. | 285 report_block.cumulative_lost = kLoss; // 24 bits valid. |
| 204 report_block.extended_high_sequence_number = kExtendedMax; | 286 report_block.extended_high_sequence_number = kExtendedMax; |
| 205 report_block.jitter = kTestJitter; | 287 report_block.jitter = kTestJitter; |
| 206 report_block.last_sr = kLastSr; | 288 report_block.last_sr = kLastSr; |
| 207 report_block.delay_since_last_sr = kDelayLastSr; | 289 report_block.delay_since_last_sr = kDelayLastSr; |
| 208 | 290 |
| 209 RtcpCastMessage cast_message(kMediaSsrc); | 291 RtcpCastMessage cast_message(kMediaSsrc); |
| 210 cast_message.ack_frame_id_ = kAckFrameId; | 292 cast_message.ack_frame_id_ = kAckFrameId; |
| 211 PacketIdSet missing_packets; | 293 PacketIdSet missing_packets; |
| 212 cast_message.missing_frames_and_packets_[ | 294 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; |
| 213 kLostFrameId] = missing_packets; | |
| 214 | 295 |
| 215 missing_packets.insert(kLostPacketId1); | 296 missing_packets.insert(kLostPacketId1); |
| 216 missing_packets.insert(kLostPacketId2); | 297 missing_packets.insert(kLostPacketId2); |
| 217 missing_packets.insert(kLostPacketId3); | 298 missing_packets.insert(kLostPacketId3); |
| 218 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = | 299 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = |
| 219 missing_packets; | 300 missing_packets; |
| 220 | 301 |
| 221 rtcp_sender_->SendRtcpFromRtpReceiver( | 302 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 222 RtcpSender::kRtcpRr | RtcpSender::kRtcpCast, | 303 RtcpSender::kRtcpRr | RtcpSender::kRtcpCast, |
| 223 &report_block, | 304 &report_block, |
| 224 NULL, | 305 NULL, |
| 225 &cast_message, | 306 &cast_message, |
| 226 NULL); | 307 NULL); |
| 227 | 308 |
| 228 EXPECT_EQ(1, test_transport_.packet_count()); | 309 EXPECT_EQ(1, test_transport_.packet_count()); |
| 229 } | 310 } |
| 230 | 311 |
| 312 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtraAndCastMessage) { | |
| 313 TestRtcpPacketBuilder p; | |
| 314 p.AddRr(kSendingSsrc, 1); | |
| 315 p.AddRb(kMediaSsrc); | |
| 316 p.AddSdesCname(kSendingSsrc, kCName); | |
| 317 p.AddXrHeader(kSendingSsrc); | |
| 318 p.AddXrRrtrBlock(); | |
| 319 p.AddCast(kSendingSsrc, kMediaSsrc); | |
| 320 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | |
| 321 | |
| 322 RtcpReportBlock report_block; | |
| 323 // Initialize remote_ssrc to a "clearly illegal" value. | |
| 324 report_block.remote_ssrc = 0xDEAD; | |
| 325 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | |
| 326 report_block.fraction_lost = kLoss >> 24; | |
| 327 report_block.cumulative_lost = kLoss; // 24 bits valid. | |
| 328 report_block.extended_high_sequence_number = kExtendedMax; | |
| 329 report_block.jitter = kTestJitter; | |
| 330 report_block.last_sr = kLastSr; | |
| 331 report_block.delay_since_last_sr = kDelayLastSr; | |
| 332 | |
| 333 RtcpReceiverReferenceTimeReport rrtr; | |
| 334 rrtr.ntp_seconds = kNtpHigh; | |
| 335 rrtr.ntp_fraction = kNtpLow; | |
| 336 | |
| 337 RtcpCastMessage cast_message(kMediaSsrc); | |
| 338 cast_message.ack_frame_id_ = kAckFrameId; | |
| 339 PacketIdSet missing_packets; | |
| 340 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; | |
| 341 | |
| 342 missing_packets.insert(kLostPacketId1); | |
| 343 missing_packets.insert(kLostPacketId2); | |
| 344 missing_packets.insert(kLostPacketId3); | |
| 345 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = | |
| 346 missing_packets; | |
| 347 | |
| 348 rtcp_sender_->SendRtcpFromRtpReceiver( | |
| 349 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr | RtcpSender::kRtcpCast, | |
| 350 &report_block, | |
| 351 &rrtr, | |
| 352 &cast_message, | |
| 353 NULL); | |
| 354 | |
| 355 EXPECT_EQ(1, test_transport_.packet_count()); | |
| 356 } | |
| 357 | |
| 358 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtrCastMessageAndLog) { | |
| 359 static const uint32 kTimeBaseMs = 12345678; | |
| 360 static const uint32 kTimeDelayMs = 10; | |
| 361 static const uint32 kDelayDeltaMs = 123; | |
| 362 | |
| 363 TestRtcpPacketBuilder p; | |
| 364 p.AddRr(kSendingSsrc, 1); | |
| 365 p.AddRb(kMediaSsrc); | |
| 366 p.AddSdesCname(kSendingSsrc, kCName); | |
| 367 p.AddXrHeader(kSendingSsrc); | |
| 368 p.AddXrRrtrBlock(); | |
| 369 p.AddCast(kSendingSsrc, kMediaSsrc); | |
| 370 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | |
| 371 | |
| 372 RtcpReportBlock report_block; | |
| 373 // Initialize remote_ssrc to a "clearly illegal" value. | |
| 374 report_block.remote_ssrc = 0xDEAD; | |
| 375 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | |
| 376 report_block.fraction_lost = kLoss >> 24; | |
| 377 report_block.cumulative_lost = kLoss; // 24 bits valid. | |
| 378 report_block.extended_high_sequence_number = kExtendedMax; | |
| 379 report_block.jitter = kTestJitter; | |
| 380 report_block.last_sr = kLastSr; | |
| 381 report_block.delay_since_last_sr = kDelayLastSr; | |
| 382 | |
| 383 RtcpReceiverReferenceTimeReport rrtr; | |
| 384 rrtr.ntp_seconds = kNtpHigh; | |
| 385 rrtr.ntp_fraction = kNtpLow; | |
| 386 | |
| 387 RtcpCastMessage cast_message(kMediaSsrc); | |
| 388 cast_message.ack_frame_id_ = kAckFrameId; | |
| 389 PacketIdSet missing_packets; | |
| 390 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; | |
| 391 | |
| 392 missing_packets.insert(kLostPacketId1); | |
| 393 missing_packets.insert(kLostPacketId2); | |
| 394 missing_packets.insert(kLostPacketId3); | |
| 395 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = | |
| 396 missing_packets; | |
| 397 | |
| 398 // Test empty Log message. | |
| 399 RtcpReceiverLogMessage receiver_log; | |
| 400 | |
| 401 rtcp_sender_->SendRtcpFromRtpReceiver( | |
| 402 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr | RtcpSender::kRtcpCast | | |
| 403 RtcpSender::kRtcpReceiverLog, | |
| 404 &report_block, | |
| 405 &rrtr, | |
| 406 &cast_message, | |
| 407 &receiver_log); | |
| 408 | |
| 409 base::SimpleTestTickClock testing_clock; | |
| 410 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); | |
| 411 | |
| 412 p.AddReceiverLog(kSendingSsrc); | |
| 413 p.AddReceiverFrameLog(kRtpTimestamp, 2, kTimeBaseMs); | |
| 414 p.AddReceiverEventLog(kDelayDeltaMs, 1, 0); | |
| 415 p.AddReceiverEventLog(kLostPacketId1, 6, kTimeDelayMs); | |
| 416 | |
| 417 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | |
| 418 | |
| 419 RtcpReceiverFrameLogMessage frame_log(kRtpTimestamp); | |
| 420 RtcpReceiverEventLogMessage event_log; | |
| 421 | |
| 422 event_log.type = kAckSent; | |
| 423 event_log.event_timestamp = testing_clock.NowTicks(); | |
| 424 event_log.delay_delta = base::TimeDelta::FromMilliseconds(kDelayDeltaMs); | |
| 425 frame_log.event_log_messages.push_back(event_log); | |
| 426 | |
| 427 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); | |
| 428 event_log.type = kPacketReceived; | |
| 429 event_log.event_timestamp = testing_clock.NowTicks(); | |
| 430 event_log.packet_id = kLostPacketId1; | |
| 431 frame_log.event_log_messages.push_back(event_log); | |
| 432 | |
| 433 receiver_log.push_back(frame_log); | |
| 434 | |
| 435 rtcp_sender_->SendRtcpFromRtpReceiver( | |
| 436 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr | RtcpSender::kRtcpCast | | |
| 437 RtcpSender::kRtcpReceiverLog, | |
| 438 &report_block, | |
| 439 &rrtr, | |
| 440 &cast_message, | |
| 441 &receiver_log); | |
| 442 | |
| 443 EXPECT_TRUE(receiver_log.empty()); | |
| 444 EXPECT_EQ(2, test_transport_.packet_count()); | |
| 445 } | |
| 446 | |
| 447 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOversizedFrameLog) { | |
| 448 static const uint32 kTimeBaseMs = 12345678; | |
| 449 static const uint32 kTimeDelayMs = 10; | |
| 450 static const uint32 kDelayDeltaMs = 123; | |
| 451 | |
| 452 TestRtcpPacketBuilder p; | |
| 453 p.AddRr(kSendingSsrc, 1); | |
| 454 p.AddRb(kMediaSsrc); | |
| 455 p.AddSdesCname(kSendingSsrc, kCName); | |
| 456 | |
| 457 RtcpReportBlock report_block; | |
| 458 // Initialize remote_ssrc to a "clearly illegal" value. | |
| 459 report_block.remote_ssrc = 0xDEAD; | |
| 460 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | |
| 461 report_block.fraction_lost = kLoss >> 24; | |
| 462 report_block.cumulative_lost = kLoss; // 24 bits valid. | |
| 463 report_block.extended_high_sequence_number = kExtendedMax; | |
| 464 report_block.jitter = kTestJitter; | |
| 465 report_block.last_sr = kLastSr; | |
| 466 report_block.delay_since_last_sr = kDelayLastSr; | |
| 467 | |
| 468 base::SimpleTestTickClock testing_clock; | |
| 469 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); | |
| 470 | |
| 471 p.AddReceiverLog(kSendingSsrc); | |
| 472 | |
| 473 p.AddReceiverFrameLog(kRtpTimestamp, 1, kTimeBaseMs); | |
| 474 p.AddReceiverEventLog(kDelayDeltaMs, 1, 0); | |
| 475 p.AddReceiverFrameLog(kRtpTimestamp + 2345, | |
| 476 kRtcpMaxReceiverLogMessages, kTimeBaseMs); | |
| 477 | |
| 478 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { | |
| 479 p.AddReceiverEventLog(kLostPacketId1, 6, kTimeDelayMs * i); | |
| 480 } | |
| 481 | |
| 482 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | |
| 483 | |
| 484 RtcpReceiverFrameLogMessage frame_1_log(kRtpTimestamp); | |
| 485 RtcpReceiverEventLogMessage event_log; | |
| 486 | |
| 487 event_log.type = kAckSent; | |
| 488 event_log.event_timestamp = testing_clock.NowTicks(); | |
| 489 event_log.delay_delta = base::TimeDelta::FromMilliseconds(kDelayDeltaMs); | |
| 490 frame_1_log.event_log_messages.push_back(event_log); | |
| 491 | |
| 492 RtcpReceiverLogMessage receiver_log; | |
| 493 receiver_log.push_back(frame_1_log); | |
| 494 | |
| 495 RtcpReceiverFrameLogMessage frame_2_log(kRtpTimestamp + 2345); | |
| 496 | |
| 497 for (int j = 0; j < 300; ++j) { | |
| 498 event_log.type = kPacketReceived; | |
| 499 event_log.event_timestamp = testing_clock.NowTicks(); | |
| 500 event_log.packet_id = kLostPacketId1; | |
| 501 frame_2_log.event_log_messages.push_back(event_log); | |
| 502 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); | |
| 503 } | |
| 504 receiver_log.push_back(frame_2_log); | |
| 505 | |
| 506 rtcp_sender_->SendRtcpFromRtpReceiver( | |
| 507 RtcpSender::kRtcpRr | RtcpSender::kRtcpReceiverLog, | |
| 508 &report_block, | |
| 509 NULL, | |
| 510 NULL, | |
| 511 &receiver_log); | |
| 512 | |
| 513 EXPECT_EQ(1, test_transport_.packet_count()); | |
| 514 EXPECT_EQ(1u, receiver_log.size()); | |
| 515 EXPECT_EQ(300u - kRtcpMaxReceiverLogMessages, | |
| 516 receiver_log.front().event_log_messages.size()); | |
| 517 } | |
| 518 | |
| 519 TEST_F(RtcpSenderTest, RtcpReceiverReportWithTooManyLogFrames) { | |
| 520 static const uint32 kTimeBaseMs = 12345678; | |
| 521 static const uint32 kTimeDelayMs = 10; | |
| 522 static const uint32 kDelayDeltaMs = 123; | |
| 523 | |
| 524 TestRtcpPacketBuilder p; | |
| 525 p.AddRr(kSendingSsrc, 1); | |
| 526 p.AddRb(kMediaSsrc); | |
| 527 p.AddSdesCname(kSendingSsrc, kCName); | |
| 528 | |
| 529 RtcpReportBlock report_block; | |
| 530 // Initialize remote_ssrc to a "clearly illegal" value. | |
| 531 report_block.remote_ssrc = 0xDEAD; | |
| 532 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | |
| 533 report_block.fraction_lost = kLoss >> 24; | |
| 534 report_block.cumulative_lost = kLoss; // 24 bits valid. | |
| 535 report_block.extended_high_sequence_number = kExtendedMax; | |
| 536 report_block.jitter = kTestJitter; | |
| 537 report_block.last_sr = kLastSr; | |
| 538 report_block.delay_since_last_sr = kDelayLastSr; | |
| 539 | |
| 540 base::SimpleTestTickClock testing_clock; | |
| 541 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); | |
| 542 | |
| 543 p.AddReceiverLog(kSendingSsrc); | |
| 544 | |
| 545 for (int i = 0; i < 119; ++i) { | |
| 546 p.AddReceiverFrameLog(kRtpTimestamp, 1, kTimeBaseMs + i * kTimeDelayMs); | |
| 547 p.AddReceiverEventLog(kDelayDeltaMs, 1, 0); | |
| 548 } | |
| 549 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | |
| 550 | |
| 551 RtcpReceiverLogMessage receiver_log; | |
| 552 | |
| 553 for (int j = 0; j < 200; ++j) { | |
| 554 RtcpReceiverFrameLogMessage frame_log(kRtpTimestamp); | |
| 555 RtcpReceiverEventLogMessage event_log; | |
| 556 | |
| 557 event_log.type = kAckSent; | |
| 558 event_log.event_timestamp = testing_clock.NowTicks(); | |
| 559 event_log.delay_delta = base::TimeDelta::FromMilliseconds(kDelayDeltaMs); | |
| 560 frame_log.event_log_messages.push_back(event_log); | |
| 561 receiver_log.push_back(frame_log); | |
| 562 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); | |
| 563 } | |
| 564 rtcp_sender_->SendRtcpFromRtpReceiver( | |
| 565 RtcpSender::kRtcpRr | RtcpSender::kRtcpReceiverLog, | |
| 566 &report_block, | |
| 567 NULL, | |
| 568 NULL, | |
| 569 &receiver_log); | |
| 570 | |
| 571 EXPECT_EQ(1, test_transport_.packet_count()); | |
| 572 EXPECT_EQ(81u, receiver_log.size()); | |
| 573 } | |
| 574 | |
| 231 } // namespace cast | 575 } // namespace cast |
| 232 } // namespace media | 576 } // namespace media |
| OLD | NEW |