OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 public NullRtpData { | 201 public NullRtpData { |
202 public: | 202 public: |
203 TestTransport() {} | 203 TestTransport() {} |
204 | 204 |
205 bool SendRtp(const uint8_t* /*data*/, | 205 bool SendRtp(const uint8_t* /*data*/, |
206 size_t /*len*/, | 206 size_t /*len*/, |
207 const PacketOptions& options) override { | 207 const PacketOptions& options) override { |
208 return false; | 208 return false; |
209 } | 209 } |
210 bool SendRtcp(const uint8_t* data, size_t len) override { | 210 bool SendRtcp(const uint8_t* data, size_t len) override { |
211 parser_.Parse(static_cast<const uint8_t*>(data), len); | 211 parser_.Parse(data, len); |
212 return true; | 212 return true; |
213 } | 213 } |
214 int OnReceivedPayloadData(const uint8_t* payload_data, | 214 int OnReceivedPayloadData(const uint8_t* payload_data, |
215 const size_t payload_size, | 215 const size_t payload_size, |
216 const WebRtcRTPHeader* rtp_header) override { | 216 const WebRtcRTPHeader* rtp_header) override { |
217 return 0; | 217 return 0; |
218 } | 218 } |
219 test::RtcpPacketParser parser_; | 219 test::RtcpPacketParser parser_; |
220 }; | 220 }; |
221 | 221 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); | 294 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
295 RTCPSender::FeedbackState feedback_state = rtp_rtcp_impl_->GetFeedbackState(); | 295 RTCPSender::FeedbackState feedback_state = rtp_rtcp_impl_->GetFeedbackState(); |
296 rtcp_sender_->SetSendingStatus(feedback_state, true); | 296 rtcp_sender_->SetSendingStatus(feedback_state, true); |
297 feedback_state.packets_sent = kPacketCount; | 297 feedback_state.packets_sent = kPacketCount; |
298 feedback_state.media_bytes_sent = kOctetCount; | 298 feedback_state.media_bytes_sent = kOctetCount; |
299 uint32_t ntp_secs; | 299 uint32_t ntp_secs; |
300 uint32_t ntp_frac; | 300 uint32_t ntp_frac; |
301 clock_.CurrentNtp(ntp_secs, ntp_frac); | 301 clock_.CurrentNtp(ntp_secs, ntp_frac); |
302 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state, kRtcpSr)); | 302 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state, kRtcpSr)); |
303 EXPECT_EQ(1, parser()->sender_report()->num_packets()); | 303 EXPECT_EQ(1, parser()->sender_report()->num_packets()); |
304 EXPECT_EQ(kSenderSsrc, parser()->sender_report()->Ssrc()); | 304 EXPECT_EQ(kSenderSsrc, parser()->sender_report()->sender_ssrc()); |
305 EXPECT_EQ(ntp_secs, parser()->sender_report()->NtpSec()); | 305 EXPECT_EQ(ntp_secs, parser()->sender_report()->ntp().seconds()); |
306 EXPECT_EQ(ntp_frac, parser()->sender_report()->NtpFrac()); | 306 EXPECT_EQ(ntp_frac, parser()->sender_report()->ntp().fractions()); |
307 EXPECT_EQ(kPacketCount, parser()->sender_report()->PacketCount()); | 307 EXPECT_EQ(kPacketCount, parser()->sender_report()->sender_packet_count()); |
308 EXPECT_EQ(kOctetCount, parser()->sender_report()->OctetCount()); | 308 EXPECT_EQ(kOctetCount, parser()->sender_report()->sender_octet_count()); |
309 EXPECT_EQ(kStartRtpTimestamp + kRtpTimestamp, | 309 EXPECT_EQ(kStartRtpTimestamp + kRtpTimestamp, |
310 parser()->sender_report()->RtpTimestamp()); | 310 parser()->sender_report()->rtp_timestamp()); |
311 EXPECT_EQ(0, parser()->report_block()->num_packets()); | 311 EXPECT_EQ(0U, parser()->sender_report()->report_blocks().size()); |
312 } | 312 } |
313 | 313 |
314 TEST_F(RtcpSenderTest, DoNotSendSrBeforeRtp) { | 314 TEST_F(RtcpSenderTest, DoNotSendSrBeforeRtp) { |
315 rtcp_sender_.reset(new RTCPSender(false, &clock_, receive_statistics_.get(), | 315 rtcp_sender_.reset(new RTCPSender(false, &clock_, receive_statistics_.get(), |
316 nullptr, nullptr, &test_transport_)); | 316 nullptr, nullptr, &test_transport_)); |
317 rtcp_sender_->SetSSRC(kSenderSsrc); | 317 rtcp_sender_->SetSSRC(kSenderSsrc); |
318 rtcp_sender_->SetRemoteSSRC(kRemoteSsrc); | 318 rtcp_sender_->SetRemoteSSRC(kRemoteSsrc); |
319 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); | 319 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
320 rtcp_sender_->SetSendingStatus(feedback_state(), true); | 320 rtcp_sender_->SetSendingStatus(feedback_state(), true); |
321 | 321 |
(...skipping 18 matching lines...) Expand all Loading... |
340 // In compound mode no packets are allowed (e.g. Pli) because compound mode | 340 // In compound mode no packets are allowed (e.g. Pli) because compound mode |
341 // should start with Sender Report. | 341 // should start with Sender Report. |
342 EXPECT_EQ(-1, rtcp_sender_->SendRTCP(feedback_state(), kRtcpPli)); | 342 EXPECT_EQ(-1, rtcp_sender_->SendRTCP(feedback_state(), kRtcpPli)); |
343 EXPECT_EQ(0, parser()->pli()->num_packets()); | 343 EXPECT_EQ(0, parser()->pli()->num_packets()); |
344 } | 344 } |
345 | 345 |
346 TEST_F(RtcpSenderTest, SendRr) { | 346 TEST_F(RtcpSenderTest, SendRr) { |
347 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); | 347 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
348 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpRr)); | 348 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpRr)); |
349 EXPECT_EQ(1, parser()->receiver_report()->num_packets()); | 349 EXPECT_EQ(1, parser()->receiver_report()->num_packets()); |
350 EXPECT_EQ(kSenderSsrc, parser()->receiver_report()->Ssrc()); | 350 EXPECT_EQ(kSenderSsrc, parser()->receiver_report()->sender_ssrc()); |
351 EXPECT_EQ(0, parser()->report_block()->num_packets()); | 351 EXPECT_EQ(0U, parser()->receiver_report()->report_blocks().size()); |
352 } | 352 } |
353 | 353 |
354 TEST_F(RtcpSenderTest, SendRrWithOneReportBlock) { | 354 TEST_F(RtcpSenderTest, SendRrWithOneReportBlock) { |
355 const uint16_t kSeqNum = 11111; | 355 const uint16_t kSeqNum = 11111; |
356 InsertIncomingPacket(kRemoteSsrc, kSeqNum); | 356 InsertIncomingPacket(kRemoteSsrc, kSeqNum); |
357 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); | 357 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); |
358 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpRr)); | 358 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpRr)); |
359 EXPECT_EQ(1, parser()->receiver_report()->num_packets()); | 359 EXPECT_EQ(1, parser()->receiver_report()->num_packets()); |
360 EXPECT_EQ(kSenderSsrc, parser()->receiver_report()->Ssrc()); | 360 EXPECT_EQ(kSenderSsrc, parser()->receiver_report()->sender_ssrc()); |
361 EXPECT_EQ(1, parser()->report_block()->num_packets()); | 361 ASSERT_EQ(1U, parser()->receiver_report()->report_blocks().size()); |
362 EXPECT_EQ(kRemoteSsrc, parser()->report_block()->Ssrc()); | 362 const rtcp::ReportBlock& rb = parser()->receiver_report()->report_blocks()[0]; |
363 EXPECT_EQ(0U, parser()->report_block()->FractionLost()); | 363 EXPECT_EQ(kRemoteSsrc, rb.source_ssrc()); |
364 EXPECT_EQ(0U, parser()->report_block()->CumPacketLost()); | 364 EXPECT_EQ(0U, rb.fraction_lost()); |
365 EXPECT_EQ(kSeqNum, parser()->report_block()->ExtHighestSeqNum()); | 365 EXPECT_EQ(0U, rb.cumulative_lost()); |
| 366 EXPECT_EQ(kSeqNum, rb.extended_high_seq_num()); |
366 } | 367 } |
367 | 368 |
368 TEST_F(RtcpSenderTest, SendRrWithTwoReportBlocks) { | 369 TEST_F(RtcpSenderTest, SendRrWithTwoReportBlocks) { |
369 const uint16_t kSeqNum = 11111; | 370 const uint16_t kSeqNum = 11111; |
370 InsertIncomingPacket(kRemoteSsrc, kSeqNum); | 371 InsertIncomingPacket(kRemoteSsrc, kSeqNum); |
371 InsertIncomingPacket(kRemoteSsrc + 1, kSeqNum + 1); | 372 InsertIncomingPacket(kRemoteSsrc + 1, kSeqNum + 1); |
372 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); | 373 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); |
373 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpRr)); | 374 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpRr)); |
374 EXPECT_EQ(1, parser()->receiver_report()->num_packets()); | 375 EXPECT_EQ(1, parser()->receiver_report()->num_packets()); |
375 EXPECT_EQ(kSenderSsrc, parser()->receiver_report()->Ssrc()); | 376 EXPECT_EQ(kSenderSsrc, parser()->receiver_report()->sender_ssrc()); |
376 EXPECT_EQ(2, parser()->report_block()->num_packets()); | 377 EXPECT_EQ(2U, parser()->receiver_report()->report_blocks().size()); |
377 EXPECT_EQ(1, parser()->report_blocks_per_ssrc(kRemoteSsrc)); | 378 EXPECT_EQ(kRemoteSsrc, |
378 EXPECT_EQ(1, parser()->report_blocks_per_ssrc(kRemoteSsrc + 1)); | 379 parser()->receiver_report()->report_blocks()[0].source_ssrc()); |
| 380 EXPECT_EQ(kRemoteSsrc + 1, |
| 381 parser()->receiver_report()->report_blocks()[1].source_ssrc()); |
379 } | 382 } |
380 | 383 |
381 TEST_F(RtcpSenderTest, SendSdes) { | 384 TEST_F(RtcpSenderTest, SendSdes) { |
382 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); | 385 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
383 EXPECT_EQ(0, rtcp_sender_->SetCNAME("alice@host")); | 386 EXPECT_EQ(0, rtcp_sender_->SetCNAME("alice@host")); |
384 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpSdes)); | 387 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpSdes)); |
385 EXPECT_EQ(1, parser()->sdes()->num_packets()); | 388 EXPECT_EQ(1, parser()->sdes()->num_packets()); |
386 EXPECT_EQ(1, parser()->sdes_chunk()->num_packets()); | 389 EXPECT_EQ(1U, parser()->sdes()->chunks().size()); |
387 EXPECT_EQ(kSenderSsrc, parser()->sdes_chunk()->Ssrc()); | 390 EXPECT_EQ(kSenderSsrc, parser()->sdes()->chunks()[0].ssrc); |
388 EXPECT_EQ("alice@host", parser()->sdes_chunk()->Cname()); | 391 EXPECT_EQ("alice@host", parser()->sdes()->chunks()[0].cname); |
389 } | 392 } |
390 | 393 |
391 TEST_F(RtcpSenderTest, SdesIncludedInCompoundPacket) { | 394 TEST_F(RtcpSenderTest, SdesIncludedInCompoundPacket) { |
392 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); | 395 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); |
393 EXPECT_EQ(0, rtcp_sender_->SetCNAME("alice@host")); | 396 EXPECT_EQ(0, rtcp_sender_->SetCNAME("alice@host")); |
394 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); | 397 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); |
395 EXPECT_EQ(1, parser()->receiver_report()->num_packets()); | 398 EXPECT_EQ(1, parser()->receiver_report()->num_packets()); |
396 EXPECT_EQ(1, parser()->sdes()->num_packets()); | 399 EXPECT_EQ(1, parser()->sdes()->num_packets()); |
397 EXPECT_EQ(1, parser()->sdes_chunk()->num_packets()); | 400 EXPECT_EQ(1U, parser()->sdes()->chunks().size()); |
398 } | 401 } |
399 | 402 |
400 TEST_F(RtcpSenderTest, SendBye) { | 403 TEST_F(RtcpSenderTest, SendBye) { |
401 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); | 404 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
402 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpBye)); | 405 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpBye)); |
403 EXPECT_EQ(1, parser()->bye()->num_packets()); | 406 EXPECT_EQ(1, parser()->bye()->num_packets()); |
404 EXPECT_EQ(kSenderSsrc, parser()->bye()->Ssrc()); | 407 EXPECT_EQ(kSenderSsrc, parser()->bye()->sender_ssrc()); |
405 } | 408 } |
406 | 409 |
407 TEST_F(RtcpSenderTest, StopSendingTriggersBye) { | 410 TEST_F(RtcpSenderTest, StopSendingTriggersBye) { |
408 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); | 411 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
409 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), true)); | 412 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), true)); |
410 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), false)); | 413 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), false)); |
411 EXPECT_EQ(1, parser()->bye()->num_packets()); | 414 EXPECT_EQ(1, parser()->bye()->num_packets()); |
412 EXPECT_EQ(kSenderSsrc, parser()->bye()->Ssrc()); | 415 EXPECT_EQ(kSenderSsrc, parser()->bye()->sender_ssrc()); |
413 } | 416 } |
414 | 417 |
415 TEST_F(RtcpSenderTest, SendApp) { | 418 TEST_F(RtcpSenderTest, SendApp) { |
416 const uint8_t kSubType = 30; | 419 const uint8_t kSubType = 30; |
417 uint32_t name = 'n' << 24; | 420 uint32_t name = 'n' << 24; |
418 name += 'a' << 16; | 421 name += 'a' << 16; |
419 name += 'm' << 8; | 422 name += 'm' << 8; |
420 name += 'e'; | 423 name += 'e'; |
421 const uint8_t kData[] = {'t', 'e', 's', 't', 'd', 'a', 't', 'a'}; | 424 const uint8_t kData[] = {'t', 'e', 's', 't', 'd', 'a', 't', 'a'}; |
422 const uint16_t kDataLength = sizeof(kData) / sizeof(kData[0]); | |
423 EXPECT_EQ(0, rtcp_sender_->SetApplicationSpecificData(kSubType, name, kData, | 425 EXPECT_EQ(0, rtcp_sender_->SetApplicationSpecificData(kSubType, name, kData, |
424 kDataLength)); | 426 sizeof(kData))); |
425 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); | 427 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
426 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpApp)); | 428 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpApp)); |
427 EXPECT_EQ(1, parser()->app()->num_packets()); | 429 EXPECT_EQ(1, parser()->app()->num_packets()); |
428 EXPECT_EQ(kSubType, parser()->app()->SubType()); | 430 EXPECT_EQ(kSubType, parser()->app()->sub_type()); |
429 EXPECT_EQ(name, parser()->app()->Name()); | 431 EXPECT_EQ(name, parser()->app()->name()); |
430 EXPECT_EQ(1, parser()->app_item()->num_packets()); | 432 EXPECT_EQ(sizeof(kData), parser()->app()->data_size()); |
431 EXPECT_EQ(kDataLength, parser()->app_item()->DataLength()); | 433 EXPECT_EQ(0, memcmp(kData, parser()->app()->data(), sizeof(kData))); |
432 EXPECT_EQ(0, strncmp(reinterpret_cast<const char*>(kData), | |
433 reinterpret_cast<const char*>(parser()->app_item()->Data()), | |
434 parser()->app_item()->DataLength())); | |
435 } | 434 } |
436 | 435 |
437 TEST_F(RtcpSenderTest, SendEmptyApp) { | 436 TEST_F(RtcpSenderTest, SendEmptyApp) { |
438 const uint8_t kSubType = 30; | 437 const uint8_t kSubType = 30; |
439 const uint32_t kName = 0x6E616D65; | 438 const uint32_t kName = 0x6E616D65; |
440 | 439 |
441 EXPECT_EQ( | 440 EXPECT_EQ( |
442 0, rtcp_sender_->SetApplicationSpecificData(kSubType, kName, nullptr, 0)); | 441 0, rtcp_sender_->SetApplicationSpecificData(kSubType, kName, nullptr, 0)); |
443 | 442 |
444 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); | 443 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
445 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpApp)); | 444 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpApp)); |
446 EXPECT_EQ(1, parser()->app()->num_packets()); | 445 EXPECT_EQ(1, parser()->app()->num_packets()); |
447 EXPECT_EQ(kSubType, parser()->app()->SubType()); | 446 EXPECT_EQ(kSubType, parser()->app()->sub_type()); |
448 EXPECT_EQ(kName, parser()->app()->Name()); | 447 EXPECT_EQ(kName, parser()->app()->name()); |
449 EXPECT_EQ(0, parser()->app_item()->num_packets()); | 448 EXPECT_EQ(0U, parser()->app()->data_size()); |
450 } | 449 } |
451 | 450 |
452 TEST_F(RtcpSenderTest, SetInvalidApplicationSpecificData) { | 451 TEST_F(RtcpSenderTest, SetInvalidApplicationSpecificData) { |
453 const uint8_t kData[] = {'t', 'e', 's', 't', 'd', 'a', 't'}; | 452 const uint8_t kData[] = {'t', 'e', 's', 't', 'd', 'a', 't'}; |
454 const uint16_t kInvalidDataLength = sizeof(kData) / sizeof(kData[0]); | 453 const uint16_t kInvalidDataLength = sizeof(kData) / sizeof(kData[0]); |
455 EXPECT_EQ(-1, rtcp_sender_->SetApplicationSpecificData( | 454 EXPECT_EQ(-1, rtcp_sender_->SetApplicationSpecificData( |
456 0, 0, kData, kInvalidDataLength)); // Should by multiple of 4. | 455 0, 0, kData, kInvalidDataLength)); // Should by multiple of 4. |
457 } | 456 } |
458 | 457 |
459 TEST_F(RtcpSenderTest, SendFirNonRepeat) { | 458 TEST_F(RtcpSenderTest, SendFirNonRepeat) { |
460 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); | 459 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
461 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpFir)); | 460 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpFir)); |
462 EXPECT_EQ(1, parser()->fir()->num_packets()); | 461 EXPECT_EQ(1, parser()->fir()->num_packets()); |
463 EXPECT_EQ(kSenderSsrc, parser()->fir()->Ssrc()); | 462 EXPECT_EQ(kSenderSsrc, parser()->fir()->sender_ssrc()); |
464 EXPECT_EQ(1, parser()->fir_item()->num_packets()); | 463 EXPECT_EQ(1U, parser()->fir()->requests().size()); |
465 EXPECT_EQ(kRemoteSsrc, parser()->fir_item()->Ssrc()); | 464 EXPECT_EQ(kRemoteSsrc, parser()->fir()->requests()[0].ssrc); |
466 uint8_t seq = parser()->fir_item()->SeqNum(); | 465 uint8_t seq = parser()->fir()->requests()[0].seq_nr; |
467 // Sends non-repeat FIR as default. | 466 // Sends non-repeat FIR as default. |
468 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpFir)); | 467 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpFir)); |
469 EXPECT_EQ(2, parser()->fir()->num_packets()); | 468 EXPECT_EQ(2, parser()->fir()->num_packets()); |
470 EXPECT_EQ(2, parser()->fir_item()->num_packets()); | 469 EXPECT_EQ(seq + 1, parser()->fir()->requests()[0].seq_nr); |
471 EXPECT_EQ(seq + 1, parser()->fir_item()->SeqNum()); | |
472 } | 470 } |
473 | 471 |
474 TEST_F(RtcpSenderTest, SendFirRepeat) { | 472 TEST_F(RtcpSenderTest, SendFirRepeat) { |
475 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); | 473 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
476 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpFir)); | 474 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpFir)); |
477 EXPECT_EQ(1, parser()->fir()->num_packets()); | 475 EXPECT_EQ(1, parser()->fir()->num_packets()); |
478 EXPECT_EQ(1, parser()->fir_item()->num_packets()); | 476 EXPECT_EQ(1U, parser()->fir()->requests().size()); |
479 uint8_t seq = parser()->fir_item()->SeqNum(); | 477 uint8_t seq = parser()->fir()->requests()[0].seq_nr; |
480 const bool kRepeat = true; | 478 const bool kRepeat = true; |
481 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpFir, 0, nullptr, | 479 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpFir, 0, nullptr, |
482 kRepeat)); | 480 kRepeat)); |
483 EXPECT_EQ(2, parser()->fir()->num_packets()); | 481 EXPECT_EQ(2, parser()->fir()->num_packets()); |
484 EXPECT_EQ(2, parser()->fir_item()->num_packets()); | 482 EXPECT_EQ(seq, parser()->fir()->requests()[0].seq_nr); |
485 EXPECT_EQ(seq, parser()->fir_item()->SeqNum()); | |
486 } | 483 } |
487 | 484 |
488 TEST_F(RtcpSenderTest, SendPli) { | 485 TEST_F(RtcpSenderTest, SendPli) { |
489 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); | 486 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
490 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpPli)); | 487 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpPli)); |
491 EXPECT_EQ(1, parser()->pli()->num_packets()); | 488 EXPECT_EQ(1, parser()->pli()->num_packets()); |
492 EXPECT_EQ(kSenderSsrc, parser()->pli()->Ssrc()); | 489 EXPECT_EQ(kSenderSsrc, parser()->pli()->sender_ssrc()); |
493 EXPECT_EQ(kRemoteSsrc, parser()->pli()->MediaSsrc()); | 490 EXPECT_EQ(kRemoteSsrc, parser()->pli()->media_ssrc()); |
494 } | 491 } |
495 | 492 |
496 TEST_F(RtcpSenderTest, SendRpsi) { | 493 TEST_F(RtcpSenderTest, SendRpsi) { |
497 const uint64_t kPictureId = 0x41; | 494 const uint64_t kPictureId = 0x41; |
498 const int8_t kPayloadType = 100; | 495 const int8_t kPayloadType = 100; |
499 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); | 496 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
500 RTCPSender::FeedbackState feedback_state = rtp_rtcp_impl_->GetFeedbackState(); | 497 RTCPSender::FeedbackState feedback_state = rtp_rtcp_impl_->GetFeedbackState(); |
501 feedback_state.send_payload_type = kPayloadType; | 498 feedback_state.send_payload_type = kPayloadType; |
502 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state, kRtcpRpsi, 0, nullptr, | 499 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state, kRtcpRpsi, 0, nullptr, |
503 false, kPictureId)); | 500 false, kPictureId)); |
504 EXPECT_EQ(1, parser()->rpsi()->num_packets()); | 501 EXPECT_EQ(1, parser()->rpsi()->num_packets()); |
505 EXPECT_EQ(kPayloadType, parser()->rpsi()->PayloadType()); | 502 EXPECT_EQ(kPayloadType, parser()->rpsi()->payload_type()); |
506 EXPECT_EQ(kPictureId, parser()->rpsi()->PictureId()); | 503 EXPECT_EQ(kPictureId, parser()->rpsi()->picture_id()); |
507 } | 504 } |
508 | 505 |
509 TEST_F(RtcpSenderTest, SendSli) { | 506 TEST_F(RtcpSenderTest, SendSli) { |
510 const uint16_t kFirstMb = 0; | 507 const uint16_t kFirstMb = 0; |
511 const uint16_t kNumberOfMb = 0x1FFF; | 508 const uint16_t kNumberOfMb = 0x1FFF; |
512 const uint8_t kPictureId = 60; | 509 const uint8_t kPictureId = 60; |
513 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); | 510 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
514 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpSli, 0, nullptr, | 511 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpSli, 0, nullptr, |
515 false, kPictureId)); | 512 false, kPictureId)); |
516 EXPECT_EQ(1, parser()->sli()->num_packets()); | 513 EXPECT_EQ(1, parser()->sli()->num_packets()); |
517 EXPECT_EQ(kSenderSsrc, parser()->sli()->Ssrc()); | 514 EXPECT_EQ(kSenderSsrc, parser()->sli()->sender_ssrc()); |
518 EXPECT_EQ(kRemoteSsrc, parser()->sli()->MediaSsrc()); | 515 EXPECT_EQ(kRemoteSsrc, parser()->sli()->media_ssrc()); |
519 EXPECT_EQ(1, parser()->sli_item()->num_packets()); | 516 EXPECT_EQ(1U, parser()->sli()->macroblocks().size()); |
520 EXPECT_EQ(kFirstMb, parser()->sli_item()->FirstMb()); | 517 EXPECT_EQ(kFirstMb, parser()->sli()->macroblocks()[0].first()); |
521 EXPECT_EQ(kNumberOfMb, parser()->sli_item()->NumberOfMb()); | 518 EXPECT_EQ(kNumberOfMb, parser()->sli()->macroblocks()[0].number()); |
522 EXPECT_EQ(kPictureId, parser()->sli_item()->PictureId()); | 519 EXPECT_EQ(kPictureId, parser()->sli()->macroblocks()[0].picture_id()); |
523 } | 520 } |
524 | 521 |
525 TEST_F(RtcpSenderTest, SendNack) { | 522 TEST_F(RtcpSenderTest, SendNack) { |
526 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); | 523 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
527 const uint16_t kList[] = {0, 1, 16}; | 524 const uint16_t kList[] = {0, 1, 16}; |
528 const int32_t kListLength = sizeof(kList) / sizeof(kList[0]); | 525 const int32_t kListLength = sizeof(kList) / sizeof(kList[0]); |
529 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpNack, kListLength, | 526 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpNack, kListLength, |
530 kList)); | 527 kList)); |
531 EXPECT_EQ(1, parser()->nack()->num_packets()); | 528 EXPECT_EQ(1, parser()->nack()->num_packets()); |
532 EXPECT_EQ(kSenderSsrc, parser()->nack()->Ssrc()); | 529 EXPECT_EQ(kSenderSsrc, parser()->nack()->sender_ssrc()); |
533 EXPECT_EQ(kRemoteSsrc, parser()->nack()->MediaSsrc()); | 530 EXPECT_EQ(kRemoteSsrc, parser()->nack()->media_ssrc()); |
534 EXPECT_EQ(1, parser()->nack_item()->num_packets()); | 531 EXPECT_THAT(parser()->nack()->packet_ids(), ElementsAre(0, 1, 16)); |
535 EXPECT_THAT(parser()->nack_item()->last_nack_list(), ElementsAre(0, 1, 16)); | |
536 } | 532 } |
537 | 533 |
538 TEST_F(RtcpSenderTest, SendRemb) { | 534 TEST_F(RtcpSenderTest, SendRemb) { |
539 const int kBitrate = 261011; | 535 const uint64_t kBitrate = 261011; |
540 std::vector<uint32_t> ssrcs; | 536 std::vector<uint32_t> ssrcs; |
541 ssrcs.push_back(kRemoteSsrc); | 537 ssrcs.push_back(kRemoteSsrc); |
542 ssrcs.push_back(kRemoteSsrc + 1); | 538 ssrcs.push_back(kRemoteSsrc + 1); |
543 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); | 539 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
544 rtcp_sender_->SetREMBData(kBitrate, ssrcs); | 540 rtcp_sender_->SetREMBData(kBitrate, ssrcs); |
545 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpRemb)); | 541 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpRemb)); |
546 EXPECT_EQ(1, parser()->psfb_app()->num_packets()); | 542 EXPECT_EQ(1, parser()->remb()->num_packets()); |
547 EXPECT_EQ(kSenderSsrc, parser()->psfb_app()->Ssrc()); | 543 EXPECT_EQ(kSenderSsrc, parser()->remb()->sender_ssrc()); |
548 EXPECT_EQ(1, parser()->remb_item()->num_packets()); | 544 EXPECT_EQ(kBitrate, parser()->remb()->bitrate_bps()); |
549 EXPECT_EQ(kBitrate, parser()->remb_item()->last_bitrate_bps()); | 545 EXPECT_THAT(parser()->remb()->ssrcs(), |
550 EXPECT_THAT(parser()->remb_item()->last_ssrc_list(), | |
551 ElementsAre(kRemoteSsrc, kRemoteSsrc + 1)); | 546 ElementsAre(kRemoteSsrc, kRemoteSsrc + 1)); |
552 } | 547 } |
553 | 548 |
554 TEST_F(RtcpSenderTest, RembIncludedInCompoundPacketIfEnabled) { | 549 TEST_F(RtcpSenderTest, RembIncludedInCompoundPacketIfEnabled) { |
555 const int kBitrate = 261011; | 550 const int kBitrate = 261011; |
556 std::vector<uint32_t> ssrcs; | 551 std::vector<uint32_t> ssrcs; |
557 ssrcs.push_back(kRemoteSsrc); | 552 ssrcs.push_back(kRemoteSsrc); |
558 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); | 553 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); |
559 rtcp_sender_->SetREMBStatus(true); | 554 rtcp_sender_->SetREMBStatus(true); |
560 EXPECT_TRUE(rtcp_sender_->REMB()); | 555 EXPECT_TRUE(rtcp_sender_->REMB()); |
561 rtcp_sender_->SetREMBData(kBitrate, ssrcs); | 556 rtcp_sender_->SetREMBData(kBitrate, ssrcs); |
562 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); | 557 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); |
563 EXPECT_EQ(1, parser()->psfb_app()->num_packets()); | 558 EXPECT_EQ(1, parser()->remb()->num_packets()); |
564 EXPECT_EQ(1, parser()->remb_item()->num_packets()); | |
565 // REMB should be included in each compound packet. | 559 // REMB should be included in each compound packet. |
566 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); | 560 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); |
567 EXPECT_EQ(2, parser()->psfb_app()->num_packets()); | 561 EXPECT_EQ(2, parser()->remb()->num_packets()); |
568 EXPECT_EQ(2, parser()->remb_item()->num_packets()); | |
569 } | 562 } |
570 | 563 |
571 TEST_F(RtcpSenderTest, RembNotIncludedInCompoundPacketIfNotEnabled) { | 564 TEST_F(RtcpSenderTest, RembNotIncludedInCompoundPacketIfNotEnabled) { |
572 const int kBitrate = 261011; | 565 const int kBitrate = 261011; |
573 std::vector<uint32_t> ssrcs; | 566 std::vector<uint32_t> ssrcs; |
574 ssrcs.push_back(kRemoteSsrc); | 567 ssrcs.push_back(kRemoteSsrc); |
575 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); | 568 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); |
576 rtcp_sender_->SetREMBData(kBitrate, ssrcs); | 569 rtcp_sender_->SetREMBData(kBitrate, ssrcs); |
577 EXPECT_FALSE(rtcp_sender_->REMB()); | 570 EXPECT_FALSE(rtcp_sender_->REMB()); |
578 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); | 571 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); |
579 EXPECT_EQ(0, parser()->psfb_app()->num_packets()); | 572 EXPECT_EQ(0, parser()->remb()->num_packets()); |
580 } | 573 } |
581 | 574 |
582 TEST_F(RtcpSenderTest, SendXrWithVoipMetric) { | 575 TEST_F(RtcpSenderTest, SendXrWithVoipMetric) { |
583 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); | 576 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
584 RTCPVoIPMetric metric; | 577 RTCPVoIPMetric metric; |
585 metric.lossRate = 1; | 578 metric.lossRate = 1; |
586 metric.discardRate = 2; | 579 metric.discardRate = 2; |
587 metric.burstDensity = 3; | 580 metric.burstDensity = 3; |
588 metric.gapDensity = 4; | 581 metric.gapDensity = 4; |
589 metric.burstDuration = 0x1111; | 582 metric.burstDuration = 0x1111; |
590 metric.gapDuration = 0x2222; | 583 metric.gapDuration = 0x2222; |
591 metric.roundTripDelay = 0x3333; | 584 metric.roundTripDelay = 0x3333; |
592 metric.endSystemDelay = 0x4444; | 585 metric.endSystemDelay = 0x4444; |
593 metric.signalLevel = 5; | 586 metric.signalLevel = 5; |
594 metric.noiseLevel = 6; | 587 metric.noiseLevel = 6; |
595 metric.RERL = 7; | 588 metric.RERL = 7; |
596 metric.Gmin = 8; | 589 metric.Gmin = 8; |
597 metric.Rfactor = 9; | 590 metric.Rfactor = 9; |
598 metric.extRfactor = 10; | 591 metric.extRfactor = 10; |
599 metric.MOSLQ = 11; | 592 metric.MOSLQ = 11; |
600 metric.MOSCQ = 12; | 593 metric.MOSCQ = 12; |
601 metric.RXconfig = 13; | 594 metric.RXconfig = 13; |
602 metric.JBnominal = 0x5555; | 595 metric.JBnominal = 0x5555; |
603 metric.JBmax = 0x6666; | 596 metric.JBmax = 0x6666; |
604 metric.JBabsMax = 0x7777; | 597 metric.JBabsMax = 0x7777; |
605 EXPECT_EQ(0, rtcp_sender_->SetRTCPVoIPMetrics(&metric)); | 598 EXPECT_EQ(0, rtcp_sender_->SetRTCPVoIPMetrics(&metric)); |
606 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpXrVoipMetric)); | 599 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpXrVoipMetric)); |
607 EXPECT_EQ(1, parser()->xr_header()->num_packets()); | 600 EXPECT_EQ(1, parser()->xr()->num_packets()); |
608 EXPECT_EQ(kSenderSsrc, parser()->xr_header()->Ssrc()); | 601 EXPECT_EQ(kSenderSsrc, parser()->xr()->sender_ssrc()); |
609 EXPECT_EQ(1, parser()->voip_metric()->num_packets()); | 602 EXPECT_EQ(1U, parser()->xr()->voip_metrics().size()); |
610 EXPECT_EQ(kRemoteSsrc, parser()->voip_metric()->Ssrc()); | 603 EXPECT_EQ(kRemoteSsrc, parser()->xr()->voip_metrics()[0].ssrc()); |
611 EXPECT_EQ(metric.lossRate, parser()->voip_metric()->LossRate()); | 604 EXPECT_EQ(metric.lossRate, parser()->voip_metric()->lossRate); |
612 EXPECT_EQ(metric.discardRate, parser()->voip_metric()->DiscardRate()); | 605 EXPECT_EQ(metric.discardRate, parser()->voip_metric()->discardRate); |
613 EXPECT_EQ(metric.burstDensity, parser()->voip_metric()->BurstDensity()); | 606 EXPECT_EQ(metric.burstDensity, parser()->voip_metric()->burstDensity); |
614 EXPECT_EQ(metric.gapDensity, parser()->voip_metric()->GapDensity()); | 607 EXPECT_EQ(metric.gapDensity, parser()->voip_metric()->gapDensity); |
615 EXPECT_EQ(metric.burstDuration, parser()->voip_metric()->BurstDuration()); | 608 EXPECT_EQ(metric.burstDuration, parser()->voip_metric()->burstDuration); |
616 EXPECT_EQ(metric.gapDuration, parser()->voip_metric()->GapDuration()); | 609 EXPECT_EQ(metric.gapDuration, parser()->voip_metric()->gapDuration); |
617 EXPECT_EQ(metric.roundTripDelay, parser()->voip_metric()->RoundTripDelay()); | 610 EXPECT_EQ(metric.roundTripDelay, parser()->voip_metric()->roundTripDelay); |
618 EXPECT_EQ(metric.endSystemDelay, parser()->voip_metric()->EndSystemDelay()); | 611 EXPECT_EQ(metric.endSystemDelay, parser()->voip_metric()->endSystemDelay); |
619 EXPECT_EQ(metric.signalLevel, parser()->voip_metric()->SignalLevel()); | 612 EXPECT_EQ(metric.signalLevel, parser()->voip_metric()->signalLevel); |
620 EXPECT_EQ(metric.noiseLevel, parser()->voip_metric()->NoiseLevel()); | 613 EXPECT_EQ(metric.noiseLevel, parser()->voip_metric()->noiseLevel); |
621 EXPECT_EQ(metric.RERL, parser()->voip_metric()->Rerl()); | 614 EXPECT_EQ(metric.RERL, parser()->voip_metric()->RERL); |
622 EXPECT_EQ(metric.Gmin, parser()->voip_metric()->Gmin()); | 615 EXPECT_EQ(metric.Gmin, parser()->voip_metric()->Gmin); |
623 EXPECT_EQ(metric.Rfactor, parser()->voip_metric()->Rfactor()); | 616 EXPECT_EQ(metric.Rfactor, parser()->voip_metric()->Rfactor); |
624 EXPECT_EQ(metric.extRfactor, parser()->voip_metric()->ExtRfactor()); | 617 EXPECT_EQ(metric.extRfactor, parser()->voip_metric()->extRfactor); |
625 EXPECT_EQ(metric.MOSLQ, parser()->voip_metric()->MosLq()); | 618 EXPECT_EQ(metric.MOSLQ, parser()->voip_metric()->MOSLQ); |
626 EXPECT_EQ(metric.MOSCQ, parser()->voip_metric()->MosCq()); | 619 EXPECT_EQ(metric.MOSCQ, parser()->voip_metric()->MOSCQ); |
627 EXPECT_EQ(metric.RXconfig, parser()->voip_metric()->RxConfig()); | 620 EXPECT_EQ(metric.RXconfig, parser()->voip_metric()->RXconfig); |
628 EXPECT_EQ(metric.JBnominal, parser()->voip_metric()->JbNominal()); | 621 EXPECT_EQ(metric.JBnominal, parser()->voip_metric()->JBnominal); |
629 EXPECT_EQ(metric.JBmax, parser()->voip_metric()->JbMax()); | 622 EXPECT_EQ(metric.JBmax, parser()->voip_metric()->JBmax); |
630 EXPECT_EQ(metric.JBabsMax, parser()->voip_metric()->JbAbsMax()); | 623 EXPECT_EQ(metric.JBabsMax, parser()->voip_metric()->JBabsMax); |
631 } | 624 } |
632 | 625 |
633 TEST_F(RtcpSenderTest, SendXrWithDlrr) { | 626 TEST_F(RtcpSenderTest, SendXrWithDlrr) { |
634 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); | 627 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); |
635 RTCPSender::FeedbackState feedback_state = rtp_rtcp_impl_->GetFeedbackState(); | 628 RTCPSender::FeedbackState feedback_state = rtp_rtcp_impl_->GetFeedbackState(); |
636 feedback_state.has_last_xr_rr = true; | 629 feedback_state.has_last_xr_rr = true; |
637 RtcpReceiveTimeInfo last_xr_rr; | 630 RtcpReceiveTimeInfo last_xr_rr; |
638 last_xr_rr.sourceSSRC = 0x11111111; | 631 last_xr_rr.sourceSSRC = 0x11111111; |
639 last_xr_rr.lastRR = 0x22222222; | 632 last_xr_rr.lastRR = 0x22222222; |
640 last_xr_rr.delaySinceLastRR = 0x33333333; | 633 last_xr_rr.delaySinceLastRR = 0x33333333; |
641 feedback_state.last_xr_rr = last_xr_rr; | 634 feedback_state.last_xr_rr = last_xr_rr; |
642 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state, kRtcpReport)); | 635 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state, kRtcpReport)); |
643 EXPECT_EQ(1, parser()->xr_header()->num_packets()); | 636 EXPECT_EQ(1, parser()->xr()->num_packets()); |
644 EXPECT_EQ(kSenderSsrc, parser()->xr_header()->Ssrc()); | 637 EXPECT_EQ(kSenderSsrc, parser()->xr()->sender_ssrc()); |
645 EXPECT_EQ(1, parser()->dlrr()->num_packets()); | 638 EXPECT_EQ(1U, parser()->xr()->dlrrs().size()); |
646 EXPECT_EQ(1, parser()->dlrr_items()->num_packets()); | 639 EXPECT_EQ(1U, parser()->xr()->dlrrs()[0].sub_blocks().size()); |
647 EXPECT_EQ(last_xr_rr.sourceSSRC, parser()->dlrr_items()->Ssrc(0)); | 640 EXPECT_EQ(last_xr_rr.sourceSSRC, |
648 EXPECT_EQ(last_xr_rr.lastRR, parser()->dlrr_items()->LastRr(0)); | 641 parser()->xr()->dlrrs()[0].sub_blocks()[0].ssrc); |
| 642 EXPECT_EQ(last_xr_rr.lastRR, |
| 643 parser()->xr()->dlrrs()[0].sub_blocks()[0].last_rr); |
649 EXPECT_EQ(last_xr_rr.delaySinceLastRR, | 644 EXPECT_EQ(last_xr_rr.delaySinceLastRR, |
650 parser()->dlrr_items()->DelayLastRr(0)); | 645 parser()->xr()->dlrrs()[0].sub_blocks()[0].delay_since_last_rr); |
651 } | 646 } |
652 | 647 |
653 TEST_F(RtcpSenderTest, SendXrWithRrtr) { | 648 TEST_F(RtcpSenderTest, SendXrWithRrtr) { |
654 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); | 649 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); |
655 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), false)); | 650 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), false)); |
656 rtcp_sender_->SendRtcpXrReceiverReferenceTime(true); | 651 rtcp_sender_->SendRtcpXrReceiverReferenceTime(true); |
657 uint32_t ntp_secs; | 652 uint32_t ntp_secs; |
658 uint32_t ntp_frac; | 653 uint32_t ntp_frac; |
659 clock_.CurrentNtp(ntp_secs, ntp_frac); | 654 clock_.CurrentNtp(ntp_secs, ntp_frac); |
660 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); | 655 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); |
661 EXPECT_EQ(1, parser()->xr_header()->num_packets()); | 656 EXPECT_EQ(1, parser()->xr()->num_packets()); |
662 EXPECT_EQ(kSenderSsrc, parser()->xr_header()->Ssrc()); | 657 EXPECT_EQ(kSenderSsrc, parser()->xr()->sender_ssrc()); |
663 EXPECT_EQ(0, parser()->dlrr()->num_packets()); | 658 EXPECT_EQ(0U, parser()->xr()->dlrrs().size()); |
664 EXPECT_EQ(1, parser()->rrtr()->num_packets()); | 659 EXPECT_EQ(1U, parser()->xr()->rrtrs().size()); |
665 EXPECT_EQ(ntp_secs, parser()->rrtr()->NtpSec()); | 660 EXPECT_EQ(ntp_secs, parser()->xr()->rrtrs()[0].ntp().seconds()); |
666 EXPECT_EQ(ntp_frac, parser()->rrtr()->NtpFrac()); | 661 EXPECT_EQ(ntp_frac, parser()->xr()->rrtrs()[0].ntp().fractions()); |
667 } | 662 } |
668 | 663 |
669 TEST_F(RtcpSenderTest, TestNoXrRrtrSentIfSending) { | 664 TEST_F(RtcpSenderTest, TestNoXrRrtrSentIfSending) { |
670 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); | 665 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); |
671 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), true)); | 666 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), true)); |
672 rtcp_sender_->SendRtcpXrReceiverReferenceTime(true); | 667 rtcp_sender_->SendRtcpXrReceiverReferenceTime(true); |
673 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); | 668 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); |
674 EXPECT_EQ(0, parser()->xr_header()->num_packets()); | 669 EXPECT_EQ(0, parser()->xr()->num_packets()); |
675 EXPECT_EQ(0, parser()->rrtr()->num_packets()); | |
676 } | 670 } |
677 | 671 |
678 TEST_F(RtcpSenderTest, TestNoXrRrtrSentIfNotEnabled) { | 672 TEST_F(RtcpSenderTest, TestNoXrRrtrSentIfNotEnabled) { |
679 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); | 673 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); |
680 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), false)); | 674 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), false)); |
681 rtcp_sender_->SendRtcpXrReceiverReferenceTime(false); | 675 rtcp_sender_->SendRtcpXrReceiverReferenceTime(false); |
682 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); | 676 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); |
683 EXPECT_EQ(0, parser()->xr_header()->num_packets()); | 677 EXPECT_EQ(0, parser()->xr()->num_packets()); |
684 EXPECT_EQ(0, parser()->rrtr()->num_packets()); | |
685 } | 678 } |
686 | 679 |
687 TEST_F(RtcpSenderTest, TestRegisterRtcpPacketTypeObserver) { | 680 TEST_F(RtcpSenderTest, TestRegisterRtcpPacketTypeObserver) { |
688 RtcpPacketTypeCounterObserverImpl observer; | 681 RtcpPacketTypeCounterObserverImpl observer; |
689 rtcp_sender_.reset(new RTCPSender(false, &clock_, receive_statistics_.get(), | 682 rtcp_sender_.reset(new RTCPSender(false, &clock_, receive_statistics_.get(), |
690 &observer, nullptr, &test_transport_)); | 683 &observer, nullptr, &test_transport_)); |
691 rtcp_sender_->SetRemoteSSRC(kRemoteSsrc); | 684 rtcp_sender_->SetRemoteSSRC(kRemoteSsrc); |
692 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); | 685 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
693 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpPli)); | 686 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpPli)); |
694 EXPECT_EQ(1, parser()->pli()->num_packets()); | 687 EXPECT_EQ(1, parser()->pli()->num_packets()); |
695 EXPECT_EQ(kRemoteSsrc, observer.ssrc_); | 688 EXPECT_EQ(kRemoteSsrc, observer.ssrc_); |
696 EXPECT_EQ(1U, observer.counter_.pli_packets); | 689 EXPECT_EQ(1U, observer.counter_.pli_packets); |
697 EXPECT_EQ(clock_.TimeInMilliseconds(), | 690 EXPECT_EQ(clock_.TimeInMilliseconds(), |
698 observer.counter_.first_packet_time_ms); | 691 observer.counter_.first_packet_time_ms); |
699 } | 692 } |
700 | 693 |
701 TEST_F(RtcpSenderTest, SendTmmbr) { | 694 TEST_F(RtcpSenderTest, SendTmmbr) { |
702 const unsigned int kBitrateBps = 312000; | 695 const unsigned int kBitrateBps = 312000; |
703 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); | 696 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
704 rtcp_sender_->SetTargetBitrate(kBitrateBps); | 697 rtcp_sender_->SetTargetBitrate(kBitrateBps); |
705 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpTmmbr)); | 698 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpTmmbr)); |
706 EXPECT_EQ(1, parser()->tmmbr()->num_packets()); | 699 EXPECT_EQ(1, parser()->tmmbr()->num_packets()); |
707 EXPECT_EQ(kSenderSsrc, parser()->tmmbr()->Ssrc()); | 700 EXPECT_EQ(kSenderSsrc, parser()->tmmbr()->sender_ssrc()); |
708 EXPECT_EQ(1, parser()->tmmbr_item()->num_packets()); | 701 EXPECT_EQ(1U, parser()->tmmbr()->requests().size()); |
709 EXPECT_EQ(kBitrateBps / 1000, parser()->tmmbr_item()->BitrateKbps()); | 702 EXPECT_EQ(kBitrateBps, parser()->tmmbr()->requests()[0].bitrate_bps()); |
710 // TODO(asapersson): tmmbr_item()->Overhead() looks broken, always zero. | 703 // TODO(asapersson): tmmbr_item()->Overhead() looks broken, always zero. |
711 } | 704 } |
712 | 705 |
713 TEST_F(RtcpSenderTest, TmmbrIncludedInCompoundPacketIfEnabled) { | 706 TEST_F(RtcpSenderTest, TmmbrIncludedInCompoundPacketIfEnabled) { |
714 const unsigned int kBitrateBps = 312000; | 707 const unsigned int kBitrateBps = 312000; |
715 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); | 708 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); |
716 EXPECT_FALSE(rtcp_sender_->TMMBR()); | 709 EXPECT_FALSE(rtcp_sender_->TMMBR()); |
717 rtcp_sender_->SetTMMBRStatus(true); | 710 rtcp_sender_->SetTMMBRStatus(true); |
718 EXPECT_TRUE(rtcp_sender_->TMMBR()); | 711 EXPECT_TRUE(rtcp_sender_->TMMBR()); |
719 rtcp_sender_->SetTargetBitrate(kBitrateBps); | 712 rtcp_sender_->SetTargetBitrate(kBitrateBps); |
720 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); | 713 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); |
721 EXPECT_EQ(1, parser()->tmmbr()->num_packets()); | 714 EXPECT_EQ(1, parser()->tmmbr()->num_packets()); |
722 EXPECT_EQ(1, parser()->tmmbr_item()->num_packets()); | 715 EXPECT_EQ(1U, parser()->tmmbr()->requests().size()); |
723 // TMMBR should be included in each compound packet. | 716 // TMMBR should be included in each compound packet. |
724 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); | 717 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); |
725 EXPECT_EQ(2, parser()->tmmbr()->num_packets()); | 718 EXPECT_EQ(2, parser()->tmmbr()->num_packets()); |
726 EXPECT_EQ(2, parser()->tmmbr_item()->num_packets()); | |
727 | 719 |
728 rtcp_sender_->SetTMMBRStatus(false); | 720 rtcp_sender_->SetTMMBRStatus(false); |
729 EXPECT_FALSE(rtcp_sender_->TMMBR()); | 721 EXPECT_FALSE(rtcp_sender_->TMMBR()); |
730 } | 722 } |
731 | 723 |
732 TEST_F(RtcpSenderTest, SendTmmbn) { | 724 TEST_F(RtcpSenderTest, SendTmmbn) { |
733 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); | 725 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); |
734 rtcp_sender_->SetSendingStatus(feedback_state(), true); | 726 rtcp_sender_->SetSendingStatus(feedback_state(), true); |
735 std::vector<rtcp::TmmbItem> bounding_set; | 727 std::vector<rtcp::TmmbItem> bounding_set; |
736 const uint32_t kBitrateKbps = 32768; | 728 const uint32_t kBitrateBps = 32768000; |
737 const uint32_t kPacketOh = 40; | 729 const uint32_t kPacketOh = 40; |
738 const uint32_t kSourceSsrc = 12345; | 730 const uint32_t kSourceSsrc = 12345; |
739 const rtcp::TmmbItem tmmbn(kSourceSsrc, kBitrateKbps * 1000, kPacketOh); | 731 const rtcp::TmmbItem tmmbn(kSourceSsrc, kBitrateBps, kPacketOh); |
740 bounding_set.push_back(tmmbn); | 732 bounding_set.push_back(tmmbn); |
741 rtcp_sender_->SetTmmbn(bounding_set); | 733 rtcp_sender_->SetTmmbn(bounding_set); |
742 | 734 |
743 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpSr)); | 735 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpSr)); |
744 EXPECT_EQ(1, parser()->sender_report()->num_packets()); | 736 EXPECT_EQ(1, parser()->sender_report()->num_packets()); |
745 EXPECT_EQ(1, parser()->tmmbn()->num_packets()); | 737 EXPECT_EQ(1, parser()->tmmbn()->num_packets()); |
746 EXPECT_EQ(kSenderSsrc, parser()->tmmbn()->Ssrc()); | 738 EXPECT_EQ(kSenderSsrc, parser()->tmmbn()->sender_ssrc()); |
747 EXPECT_EQ(1, parser()->tmmbn_items()->num_packets()); | 739 EXPECT_EQ(1U, parser()->tmmbn()->items().size()); |
748 EXPECT_EQ(kBitrateKbps, parser()->tmmbn_items()->BitrateKbps(0)); | 740 EXPECT_EQ(kBitrateBps, parser()->tmmbn()->items()[0].bitrate_bps()); |
749 EXPECT_EQ(kPacketOh, parser()->tmmbn_items()->Overhead(0)); | 741 EXPECT_EQ(kPacketOh, parser()->tmmbn()->items()[0].packet_overhead()); |
750 EXPECT_EQ(kSourceSsrc, parser()->tmmbn_items()->Ssrc(0)); | 742 EXPECT_EQ(kSourceSsrc, parser()->tmmbn()->items()[0].ssrc()); |
751 } | 743 } |
752 | 744 |
753 // This test is written to verify actual behaviour. It does not seem | 745 // This test is written to verify actual behaviour. It does not seem |
754 // to make much sense to send an empty TMMBN, since there is no place | 746 // to make much sense to send an empty TMMBN, since there is no place |
755 // to put an actual limit here. It's just information that no limit | 747 // to put an actual limit here. It's just information that no limit |
756 // is set, which is kind of the starting assumption. | 748 // is set, which is kind of the starting assumption. |
757 // See http://code.google.com/p/webrtc/issues/detail?id=468 for one | 749 // See http://code.google.com/p/webrtc/issues/detail?id=468 for one |
758 // situation where this caused confusion. | 750 // situation where this caused confusion. |
759 TEST_F(RtcpSenderTest, SendsTmmbnIfSetAndEmpty) { | 751 TEST_F(RtcpSenderTest, SendsTmmbnIfSetAndEmpty) { |
760 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); | 752 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); |
761 rtcp_sender_->SetSendingStatus(feedback_state(), true); | 753 rtcp_sender_->SetSendingStatus(feedback_state(), true); |
762 std::vector<rtcp::TmmbItem> bounding_set; | 754 std::vector<rtcp::TmmbItem> bounding_set; |
763 rtcp_sender_->SetTmmbn(bounding_set); | 755 rtcp_sender_->SetTmmbn(bounding_set); |
764 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpSr)); | 756 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpSr)); |
765 EXPECT_EQ(1, parser()->sender_report()->num_packets()); | 757 EXPECT_EQ(1, parser()->sender_report()->num_packets()); |
766 EXPECT_EQ(1, parser()->tmmbn()->num_packets()); | 758 EXPECT_EQ(1, parser()->tmmbn()->num_packets()); |
767 EXPECT_EQ(kSenderSsrc, parser()->tmmbn()->Ssrc()); | 759 EXPECT_EQ(kSenderSsrc, parser()->tmmbn()->sender_ssrc()); |
768 EXPECT_EQ(0, parser()->tmmbn_items()->num_packets()); | 760 EXPECT_EQ(0U, parser()->tmmbn()->items().size()); |
769 } | 761 } |
770 | 762 |
771 TEST_F(RtcpSenderTest, SendCompoundPliRemb) { | 763 TEST_F(RtcpSenderTest, SendCompoundPliRemb) { |
772 const int kBitrate = 261011; | 764 const int kBitrate = 261011; |
773 std::vector<uint32_t> ssrcs; | 765 std::vector<uint32_t> ssrcs; |
774 ssrcs.push_back(kRemoteSsrc); | 766 ssrcs.push_back(kRemoteSsrc); |
775 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); | 767 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); |
776 rtcp_sender_->SetREMBData(kBitrate, ssrcs); | 768 rtcp_sender_->SetREMBData(kBitrate, ssrcs); |
777 std::set<RTCPPacketType> packet_types; | 769 std::set<RTCPPacketType> packet_types; |
778 packet_types.insert(kRtcpRemb); | 770 packet_types.insert(kRtcpRemb); |
779 packet_types.insert(kRtcpPli); | 771 packet_types.insert(kRtcpPli); |
780 EXPECT_EQ(0, rtcp_sender_->SendCompoundRTCP(feedback_state(), packet_types)); | 772 EXPECT_EQ(0, rtcp_sender_->SendCompoundRTCP(feedback_state(), packet_types)); |
781 EXPECT_EQ(1, parser()->remb_item()->num_packets()); | 773 EXPECT_EQ(1, parser()->remb()->num_packets()); |
782 EXPECT_EQ(1, parser()->pli()->num_packets()); | 774 EXPECT_EQ(1, parser()->pli()->num_packets()); |
783 } | 775 } |
784 | 776 |
785 | 777 |
786 // This test is written to verify that BYE is always the last packet | 778 // This test is written to verify that BYE is always the last packet |
787 // type in a RTCP compoud packet. The rtcp_sender_ is recreated with | 779 // type in a RTCP compoud packet. The rtcp_sender_ is recreated with |
788 // mock_transport, which is used to check for whether BYE at the end | 780 // mock_transport, which is used to check for whether BYE at the end |
789 // of a RTCP compound packet. | 781 // of a RTCP compound packet. |
790 TEST_F(RtcpSenderTest, ByeMustBeLast) { | 782 TEST_F(RtcpSenderTest, ByeMustBeLast) { |
791 MockTransport mock_transport; | 783 MockTransport mock_transport; |
(...skipping 25 matching lines...) Expand all Loading... |
817 rtcp_sender_->SetLastRtpTime(kRtpTimestamp, clock_.TimeInMilliseconds()); | 809 rtcp_sender_->SetLastRtpTime(kRtpTimestamp, clock_.TimeInMilliseconds()); |
818 | 810 |
819 // Set up XR VoIP metric to be included with BYE | 811 // Set up XR VoIP metric to be included with BYE |
820 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); | 812 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); |
821 RTCPVoIPMetric metric; | 813 RTCPVoIPMetric metric; |
822 EXPECT_EQ(0, rtcp_sender_->SetRTCPVoIPMetrics(&metric)); | 814 EXPECT_EQ(0, rtcp_sender_->SetRTCPVoIPMetrics(&metric)); |
823 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpBye)); | 815 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpBye)); |
824 } | 816 } |
825 | 817 |
826 } // namespace webrtc | 818 } // namespace webrtc |
OLD | NEW |