| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
| 6 #include "base/test/simple_test_tick_clock.h" | 6 #include "base/test/simple_test_tick_clock.h" |
| 7 #include "media/cast/cast_defines.h" | 7 #include "media/cast/cast_defines.h" |
| 8 #include "media/cast/cast_environment.h" | 8 #include "media/cast/cast_environment.h" |
| 9 #include "media/cast/net/cast_transport_defines.h" | 9 #include "media/cast/net/cast_transport_defines.h" |
| 10 #include "media/cast/net/pacing/paced_sender.h" | 10 #include "media/cast/net/pacing/paced_sender.h" |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment. | 98 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment. |
| 99 TestRtcpTransport test_transport_; | 99 TestRtcpTransport test_transport_; |
| 100 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; | 100 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; |
| 101 scoped_refptr<CastEnvironment> cast_environment_; | 101 scoped_refptr<CastEnvironment> cast_environment_; |
| 102 scoped_ptr<RtcpSender> rtcp_sender_; | 102 scoped_ptr<RtcpSender> rtcp_sender_; |
| 103 | 103 |
| 104 DISALLOW_COPY_AND_ASSIGN(RtcpSenderTest); | 104 DISALLOW_COPY_AND_ASSIGN(RtcpSenderTest); |
| 105 }; | 105 }; |
| 106 | 106 |
| 107 TEST_F(RtcpSenderTest, RtcpReceiverReport) { | 107 TEST_F(RtcpSenderTest, RtcpReceiverReport) { |
| 108 // Empty receiver report. | |
| 109 TestRtcpPacketBuilder p1; | |
| 110 p1.AddRr(kSendingSsrc, 0); | |
| 111 test_transport_.SetExpectedRtcpPacket(p1.GetPacket()); | |
| 112 | |
| 113 rtcp_sender_->SendRtcpFromRtpReceiver( | |
| 114 kRtcpRr, NULL, NULL, NULL, NULL, kDefaultDelay); | |
| 115 | |
| 116 EXPECT_EQ(1, test_transport_.packet_count()); | |
| 117 | |
| 118 // Receiver report with report block. | 108 // Receiver report with report block. |
| 119 TestRtcpPacketBuilder p2; | 109 TestRtcpPacketBuilder p2; |
| 120 p2.AddRr(kSendingSsrc, 1); | 110 p2.AddRr(kSendingSsrc, 1); |
| 121 p2.AddRb(kMediaSsrc); | 111 p2.AddRb(kMediaSsrc); |
| 122 test_transport_.SetExpectedRtcpPacket(p2.GetPacket().Pass()); | 112 test_transport_.SetExpectedRtcpPacket(p2.GetPacket().Pass()); |
| 123 | 113 |
| 124 RtcpReportBlock report_block = GetReportBlock(); | 114 RtcpReportBlock report_block = GetReportBlock(); |
| 125 | 115 |
| 126 rtcp_sender_->SendRtcpFromRtpReceiver( | 116 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 127 kRtcpRr, &report_block, NULL, NULL, NULL, kDefaultDelay); | 117 &report_block, NULL, NULL, NULL, kDefaultDelay); |
| 128 | 118 |
| 129 EXPECT_EQ(2, test_transport_.packet_count()); | 119 EXPECT_EQ(1, test_transport_.packet_count()); |
| 130 } | 120 } |
| 131 | 121 |
| 132 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtr) { | 122 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtr) { |
| 133 // Receiver report with report block. | 123 // Receiver report with report block. |
| 134 TestRtcpPacketBuilder p; | 124 TestRtcpPacketBuilder p; |
| 135 p.AddRr(kSendingSsrc, 1); | 125 p.AddRr(kSendingSsrc, 1); |
| 136 p.AddRb(kMediaSsrc); | 126 p.AddRb(kMediaSsrc); |
| 137 p.AddXrHeader(kSendingSsrc); | 127 p.AddXrHeader(kSendingSsrc); |
| 138 p.AddXrRrtrBlock(); | 128 p.AddXrRrtrBlock(); |
| 139 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); | 129 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); |
| 140 | 130 |
| 141 RtcpReportBlock report_block = GetReportBlock(); | 131 RtcpReportBlock report_block = GetReportBlock(); |
| 142 | 132 |
| 143 RtcpReceiverReferenceTimeReport rrtr; | 133 RtcpReceiverReferenceTimeReport rrtr; |
| 144 rrtr.ntp_seconds = kNtpHigh; | 134 rrtr.ntp_seconds = kNtpHigh; |
| 145 rrtr.ntp_fraction = kNtpLow; | 135 rrtr.ntp_fraction = kNtpLow; |
| 146 | 136 |
| 147 rtcp_sender_->SendRtcpFromRtpReceiver( | 137 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 148 kRtcpRr | kRtcpRrtr, | |
| 149 &report_block, | 138 &report_block, |
| 150 &rrtr, | 139 &rrtr, |
| 151 NULL, | 140 NULL, |
| 152 NULL, | 141 NULL, |
| 153 kDefaultDelay); | 142 kDefaultDelay); |
| 154 | 143 |
| 155 EXPECT_EQ(1, test_transport_.packet_count()); | 144 EXPECT_EQ(1, test_transport_.packet_count()); |
| 156 } | 145 } |
| 157 | 146 |
| 158 TEST_F(RtcpSenderTest, RtcpReceiverReportWithCast) { | 147 TEST_F(RtcpSenderTest, RtcpReceiverReportWithCast) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 170 PacketIdSet missing_packets; | 159 PacketIdSet missing_packets; |
| 171 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets; | 160 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets; |
| 172 | 161 |
| 173 missing_packets.insert(kLostPacketId1); | 162 missing_packets.insert(kLostPacketId1); |
| 174 missing_packets.insert(kLostPacketId2); | 163 missing_packets.insert(kLostPacketId2); |
| 175 missing_packets.insert(kLostPacketId3); | 164 missing_packets.insert(kLostPacketId3); |
| 176 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = | 165 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = |
| 177 missing_packets; | 166 missing_packets; |
| 178 | 167 |
| 179 rtcp_sender_->SendRtcpFromRtpReceiver( | 168 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 180 kRtcpRr | kRtcpCast, | |
| 181 &report_block, | 169 &report_block, |
| 182 NULL, | 170 NULL, |
| 183 &cast_message, | 171 &cast_message, |
| 184 NULL, | 172 NULL, |
| 185 kDefaultDelay); | 173 kDefaultDelay); |
| 186 | 174 |
| 187 EXPECT_EQ(1, test_transport_.packet_count()); | 175 EXPECT_EQ(1, test_transport_.packet_count()); |
| 188 } | 176 } |
| 189 | 177 |
| 190 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtraAndCastMessage) { | 178 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtraAndCastMessage) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 207 PacketIdSet missing_packets; | 195 PacketIdSet missing_packets; |
| 208 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets; | 196 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets; |
| 209 | 197 |
| 210 missing_packets.insert(kLostPacketId1); | 198 missing_packets.insert(kLostPacketId1); |
| 211 missing_packets.insert(kLostPacketId2); | 199 missing_packets.insert(kLostPacketId2); |
| 212 missing_packets.insert(kLostPacketId3); | 200 missing_packets.insert(kLostPacketId3); |
| 213 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = | 201 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = |
| 214 missing_packets; | 202 missing_packets; |
| 215 | 203 |
| 216 rtcp_sender_->SendRtcpFromRtpReceiver( | 204 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 217 kRtcpRr | kRtcpRrtr | kRtcpCast, | |
| 218 &report_block, | 205 &report_block, |
| 219 &rrtr, | 206 &rrtr, |
| 220 &cast_message, | 207 &cast_message, |
| 221 NULL, | 208 NULL, |
| 222 kDefaultDelay); | 209 kDefaultDelay); |
| 223 | 210 |
| 224 EXPECT_EQ(1, test_transport_.packet_count()); | 211 EXPECT_EQ(1, test_transport_.packet_count()); |
| 225 } | 212 } |
| 226 | 213 |
| 227 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtrCastMessageAndLog) { | 214 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtrCastMessageAndLog) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 250 missing_packets.insert(kLostPacketId1); | 237 missing_packets.insert(kLostPacketId1); |
| 251 missing_packets.insert(kLostPacketId2); | 238 missing_packets.insert(kLostPacketId2); |
| 252 missing_packets.insert(kLostPacketId3); | 239 missing_packets.insert(kLostPacketId3); |
| 253 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = | 240 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = |
| 254 missing_packets; | 241 missing_packets; |
| 255 | 242 |
| 256 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); | 243 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); |
| 257 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; | 244 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; |
| 258 | 245 |
| 259 rtcp_sender_->SendRtcpFromRtpReceiver( | 246 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 260 kRtcpRr | kRtcpRrtr | kRtcpCast | | |
| 261 kRtcpReceiverLog, | |
| 262 &report_block, | 247 &report_block, |
| 263 &rrtr, | 248 &rrtr, |
| 264 &cast_message, | 249 &cast_message, |
| 265 &rtcp_events, | 250 &rtcp_events, |
| 266 kDefaultDelay); | 251 kDefaultDelay); |
| 267 | 252 |
| 268 base::SimpleTestTickClock testing_clock; | 253 base::SimpleTestTickClock testing_clock; |
| 269 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); | 254 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); |
| 270 | 255 |
| 271 p.AddReceiverLog(kSendingSsrc); | 256 p.AddReceiverLog(kSendingSsrc); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 287 packet_event.rtp_timestamp = kRtpTimestamp; | 272 packet_event.rtp_timestamp = kRtpTimestamp; |
| 288 packet_event.type = PACKET_RECEIVED; | 273 packet_event.type = PACKET_RECEIVED; |
| 289 packet_event.media_type = VIDEO_EVENT; | 274 packet_event.media_type = VIDEO_EVENT; |
| 290 packet_event.timestamp = testing_clock.NowTicks(); | 275 packet_event.timestamp = testing_clock.NowTicks(); |
| 291 packet_event.packet_id = kLostPacketId1; | 276 packet_event.packet_id = kLostPacketId1; |
| 292 event_subscriber.OnReceivePacketEvent(packet_event); | 277 event_subscriber.OnReceivePacketEvent(packet_event); |
| 293 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); | 278 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); |
| 294 EXPECT_EQ(2u, rtcp_events.size()); | 279 EXPECT_EQ(2u, rtcp_events.size()); |
| 295 | 280 |
| 296 rtcp_sender_->SendRtcpFromRtpReceiver( | 281 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 297 kRtcpRr | kRtcpRrtr | kRtcpCast | | |
| 298 kRtcpReceiverLog, | |
| 299 &report_block, | 282 &report_block, |
| 300 &rrtr, | 283 &rrtr, |
| 301 &cast_message, | 284 &cast_message, |
| 302 &rtcp_events, | 285 &rtcp_events, |
| 303 kDefaultDelay); | 286 kDefaultDelay); |
| 304 | 287 |
| 305 EXPECT_EQ(2, test_transport_.packet_count()); | 288 EXPECT_EQ(2, test_transport_.packet_count()); |
| 306 } | 289 } |
| 307 | 290 |
| 308 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOversizedFrameLog) { | 291 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOversizedFrameLog) { |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 packet_event.timestamp = testing_clock.NowTicks(); | 338 packet_event.timestamp = testing_clock.NowTicks(); |
| 356 packet_event.packet_id = kLostPacketId1; | 339 packet_event.packet_id = kLostPacketId1; |
| 357 event_subscriber.OnReceivePacketEvent(packet_event); | 340 event_subscriber.OnReceivePacketEvent(packet_event); |
| 358 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); | 341 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); |
| 359 } | 342 } |
| 360 | 343 |
| 361 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; | 344 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; |
| 362 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); | 345 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); |
| 363 | 346 |
| 364 rtcp_sender_->SendRtcpFromRtpReceiver( | 347 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 365 kRtcpRr | kRtcpReceiverLog, | |
| 366 &report_block, | 348 &report_block, |
| 367 NULL, | 349 NULL, |
| 368 NULL, | 350 NULL, |
| 369 &rtcp_events, | 351 &rtcp_events, |
| 370 kDefaultDelay); | 352 kDefaultDelay); |
| 371 | 353 |
| 372 EXPECT_EQ(1, test_transport_.packet_count()); | 354 EXPECT_EQ(1, test_transport_.packet_count()); |
| 373 } | 355 } |
| 374 | 356 |
| 375 TEST_F(RtcpSenderTest, RtcpReceiverReportWithTooManyLogFrames) { | 357 TEST_F(RtcpSenderTest, RtcpReceiverReportWithTooManyLogFrames) { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 frame_event.media_type = VIDEO_EVENT; | 393 frame_event.media_type = VIDEO_EVENT; |
| 412 frame_event.timestamp = testing_clock.NowTicks(); | 394 frame_event.timestamp = testing_clock.NowTicks(); |
| 413 event_subscriber.OnReceiveFrameEvent(frame_event); | 395 event_subscriber.OnReceiveFrameEvent(frame_event); |
| 414 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); | 396 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); |
| 415 } | 397 } |
| 416 | 398 |
| 417 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; | 399 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; |
| 418 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); | 400 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); |
| 419 | 401 |
| 420 rtcp_sender_->SendRtcpFromRtpReceiver( | 402 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 421 kRtcpRr | kRtcpReceiverLog, | |
| 422 &report_block, | 403 &report_block, |
| 423 NULL, | 404 NULL, |
| 424 NULL, | 405 NULL, |
| 425 &rtcp_events, | 406 &rtcp_events, |
| 426 kDefaultDelay); | 407 kDefaultDelay); |
| 427 | 408 |
| 428 EXPECT_EQ(1, test_transport_.packet_count()); | 409 EXPECT_EQ(1, test_transport_.packet_count()); |
| 429 } | 410 } |
| 430 | 411 |
| 431 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOldLogFrames) { | 412 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOldLogFrames) { |
| (...skipping 29 matching lines...) Expand all Loading... |
| 461 frame_event.timestamp = testing_clock.NowTicks(); | 442 frame_event.timestamp = testing_clock.NowTicks(); |
| 462 event_subscriber.OnReceiveFrameEvent(frame_event); | 443 event_subscriber.OnReceiveFrameEvent(frame_event); |
| 463 testing_clock.Advance( | 444 testing_clock.Advance( |
| 464 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); | 445 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); |
| 465 } | 446 } |
| 466 | 447 |
| 467 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; | 448 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; |
| 468 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); | 449 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); |
| 469 | 450 |
| 470 rtcp_sender_->SendRtcpFromRtpReceiver( | 451 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 471 kRtcpRr | kRtcpReceiverLog, | |
| 472 &report_block, | 452 &report_block, |
| 473 NULL, | 453 NULL, |
| 474 NULL, | 454 NULL, |
| 475 &rtcp_events, | 455 &rtcp_events, |
| 476 kDefaultDelay); | 456 kDefaultDelay); |
| 477 | 457 |
| 478 EXPECT_EQ(1, test_transport_.packet_count()); | 458 EXPECT_EQ(1, test_transport_.packet_count()); |
| 479 } | 459 } |
| 480 | 460 |
| 481 TEST_F(RtcpSenderTest, RtcpReceiverReportRedundancy) { | 461 TEST_F(RtcpSenderTest, RtcpReceiverReportRedundancy) { |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 519 frame_event.rtp_timestamp = kRtpTimestamp; | 499 frame_event.rtp_timestamp = kRtpTimestamp; |
| 520 frame_event.type = FRAME_ACK_SENT; | 500 frame_event.type = FRAME_ACK_SENT; |
| 521 frame_event.media_type = VIDEO_EVENT; | 501 frame_event.media_type = VIDEO_EVENT; |
| 522 frame_event.timestamp = testing_clock.NowTicks(); | 502 frame_event.timestamp = testing_clock.NowTicks(); |
| 523 event_subscriber.OnReceiveFrameEvent(frame_event); | 503 event_subscriber.OnReceiveFrameEvent(frame_event); |
| 524 | 504 |
| 525 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; | 505 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; |
| 526 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); | 506 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); |
| 527 | 507 |
| 528 rtcp_sender_->SendRtcpFromRtpReceiver( | 508 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 529 kRtcpRr | kRtcpReceiverLog, | |
| 530 &report_block, | 509 &report_block, |
| 531 NULL, | 510 NULL, |
| 532 NULL, | 511 NULL, |
| 533 &rtcp_events, | 512 &rtcp_events, |
| 534 kDefaultDelay); | 513 kDefaultDelay); |
| 535 | 514 |
| 536 testing_clock.Advance( | 515 testing_clock.Advance( |
| 537 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); | 516 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); |
| 538 time_base_ms += kTimeBetweenEventsMs; | 517 time_base_ms += kTimeBetweenEventsMs; |
| 539 } | 518 } |
| 540 | 519 |
| 541 EXPECT_EQ(static_cast<int>(packet_count), test_transport_.packet_count()); | 520 EXPECT_EQ(static_cast<int>(packet_count), test_transport_.packet_count()); |
| 542 } | 521 } |
| 543 | 522 |
| 544 TEST_F(RtcpSenderTest, RtcpSenderReport) { | 523 TEST_F(RtcpSenderTest, RtcpSenderReport) { |
| 545 RtcpSenderInfo sender_info; | 524 RtcpSenderInfo sender_info; |
| 546 sender_info.ntp_seconds = kNtpHigh; | 525 sender_info.ntp_seconds = kNtpHigh; |
| 547 sender_info.ntp_fraction = kNtpLow; | 526 sender_info.ntp_fraction = kNtpLow; |
| 548 sender_info.rtp_timestamp = kRtpTimestamp; | 527 sender_info.rtp_timestamp = kRtpTimestamp; |
| 549 sender_info.send_packet_count = kSendPacketCount; | 528 sender_info.send_packet_count = kSendPacketCount; |
| 550 sender_info.send_octet_count = kSendOctetCount; | 529 sender_info.send_octet_count = kSendOctetCount; |
| 551 | 530 |
| 552 RtcpDlrrReportBlock dlrr_rb; | |
| 553 dlrr_rb.last_rr = kLastRr; | |
| 554 dlrr_rb.delay_since_last_rr = kDelayLastRr; | |
| 555 | |
| 556 // Sender report. | 531 // Sender report. |
| 557 TestRtcpPacketBuilder p; | 532 TestRtcpPacketBuilder p; |
| 558 p.AddSr(kSendingSsrc, 0); | 533 p.AddSr(kSendingSsrc, 0); |
| 559 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); | 534 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); |
| 560 | 535 |
| 561 rtcp_sender_->SendRtcpFromRtpSender(kRtcpSr, | 536 rtcp_sender_->SendRtcpFromRtpSender(sender_info); |
| 562 sender_info, | |
| 563 dlrr_rb); | |
| 564 | 537 |
| 565 EXPECT_EQ(1, test_transport_.packet_count()); | 538 EXPECT_EQ(1, test_transport_.packet_count()); |
| 566 } | 539 } |
| 567 | |
| 568 TEST_F(RtcpSenderTest, RtcpSenderReportWithDlrr) { | |
| 569 RtcpSenderInfo sender_info; | |
| 570 sender_info.ntp_seconds = kNtpHigh; | |
| 571 sender_info.ntp_fraction = kNtpLow; | |
| 572 sender_info.rtp_timestamp = kRtpTimestamp; | |
| 573 sender_info.send_packet_count = kSendPacketCount; | |
| 574 sender_info.send_octet_count = kSendOctetCount; | |
| 575 | |
| 576 // Sender report + dlrr. | |
| 577 TestRtcpPacketBuilder p1; | |
| 578 p1.AddSr(kSendingSsrc, 0); | |
| 579 p1.AddXrHeader(kSendingSsrc); | |
| 580 p1.AddXrDlrrBlock(kSendingSsrc); | |
| 581 test_transport_.SetExpectedRtcpPacket(p1.GetPacket().Pass()); | |
| 582 | |
| 583 RtcpDlrrReportBlock dlrr_rb; | |
| 584 dlrr_rb.last_rr = kLastRr; | |
| 585 dlrr_rb.delay_since_last_rr = kDelayLastRr; | |
| 586 | |
| 587 rtcp_sender_->SendRtcpFromRtpSender( | |
| 588 kRtcpSr | kRtcpDlrr, | |
| 589 sender_info, | |
| 590 dlrr_rb); | |
| 591 | |
| 592 EXPECT_EQ(1, test_transport_.packet_count()); | |
| 593 } | |
| 594 | 540 |
| 595 } // namespace cast | 541 } // namespace cast |
| 596 } // namespace media | 542 } // namespace media |
| OLD | NEW |