Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(221)

Side by Side Diff: media/cast/rtcp/rtcp_sender_unittest.cc

Issue 74613004: Cast: Add capabity to send Receiver and Sender log messages over RTCP. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@rtcp_logging
Patch Set: Addressed comments Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
153 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtr) { 231 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtr) {
154 // Receiver report with report block + c_name. 232 // Receiver report with report block + c_name.
155 TestRtcpPacketBuilder p; 233 TestRtcpPacketBuilder p;
156 p.AddRr(kSendingSsrc, 1); 234 p.AddRr(kSendingSsrc, 1);
157 p.AddRb(kMediaSsrc); 235 p.AddRb(kMediaSsrc);
158 p.AddSdesCname(kSendingSsrc, kCName); 236 p.AddSdesCname(kSendingSsrc, kCName);
159 p.AddXrHeader(kSendingSsrc); 237 p.AddXrHeader(kSendingSsrc);
160 p.AddXrRrtrBlock(); 238 p.AddXrRrtrBlock();
161 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); 239 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length());
162 240
163 RtcpReportBlock report_block; 241 RtcpReportBlock report_block;
164 // Initialize remote_ssrc to a "clearly illegal" value. 242 // Initialize remote_ssrc to a "clearly illegal" value.
165 report_block.remote_ssrc = 0xDEAD; 243 report_block.remote_ssrc = 0xDEAD;
166 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. 244 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender.
167 report_block.fraction_lost = kLoss >> 24; 245 report_block.fraction_lost = kLoss >> 24;
168 report_block.cumulative_lost = kLoss; // 24 bits valid. 246 report_block.cumulative_lost = kLoss; // 24 bits valid.
169 report_block.extended_high_sequence_number = 247 report_block.extended_high_sequence_number = kExtendedMax;
170 kExtendedMax;
171 report_block.jitter = kTestJitter; 248 report_block.jitter = kTestJitter;
172 report_block.last_sr = kLastSr; 249 report_block.last_sr = kLastSr;
173 report_block.delay_since_last_sr = kDelayLastSr; 250 report_block.delay_since_last_sr = kDelayLastSr;
174 251
175 RtcpReceiverReferenceTimeReport rrtr; 252 RtcpReceiverReferenceTimeReport rrtr;
176 rrtr.ntp_seconds = kNtpHigh; 253 rrtr.ntp_seconds = kNtpHigh;
177 rrtr.ntp_fraction = kNtpLow; 254 rrtr.ntp_fraction = kNtpLow;
178 255
179 rtcp_sender_->SendRtcpFromRtpReceiver( 256 rtcp_sender_->SendRtcpFromRtpReceiver(
180 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr, 257 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr,
(...skipping 21 matching lines...) Expand all
202 report_block.fraction_lost = kLoss >> 24; 279 report_block.fraction_lost = kLoss >> 24;
203 report_block.cumulative_lost = kLoss; // 24 bits valid. 280 report_block.cumulative_lost = kLoss; // 24 bits valid.
204 report_block.extended_high_sequence_number = kExtendedMax; 281 report_block.extended_high_sequence_number = kExtendedMax;
205 report_block.jitter = kTestJitter; 282 report_block.jitter = kTestJitter;
206 report_block.last_sr = kLastSr; 283 report_block.last_sr = kLastSr;
207 report_block.delay_since_last_sr = kDelayLastSr; 284 report_block.delay_since_last_sr = kDelayLastSr;
208 285
209 RtcpCastMessage cast_message(kMediaSsrc); 286 RtcpCastMessage cast_message(kMediaSsrc);
210 cast_message.ack_frame_id_ = kAckFrameId; 287 cast_message.ack_frame_id_ = kAckFrameId;
211 PacketIdSet missing_packets; 288 PacketIdSet missing_packets;
212 cast_message.missing_frames_and_packets_[ 289 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets;
213 kLostFrameId] = missing_packets;
214 290
215 missing_packets.insert(kLostPacketId1); 291 missing_packets.insert(kLostPacketId1);
216 missing_packets.insert(kLostPacketId2); 292 missing_packets.insert(kLostPacketId2);
217 missing_packets.insert(kLostPacketId3); 293 missing_packets.insert(kLostPacketId3);
218 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = 294 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] =
219 missing_packets; 295 missing_packets;
220 296
221 rtcp_sender_->SendRtcpFromRtpReceiver( 297 rtcp_sender_->SendRtcpFromRtpReceiver(
222 RtcpSender::kRtcpRr | RtcpSender::kRtcpCast, 298 RtcpSender::kRtcpRr | RtcpSender::kRtcpCast,
223 &report_block, 299 &report_block,
224 NULL, 300 NULL,
225 &cast_message, 301 &cast_message,
226 NULL); 302 NULL);
227 303
228 EXPECT_EQ(1, test_transport_.packet_count()); 304 EXPECT_EQ(1, test_transport_.packet_count());
229 } 305 }
230 306
307 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtraAndCastMessage) {
308 TestRtcpPacketBuilder p;
309 p.AddRr(kSendingSsrc, 1);
310 p.AddRb(kMediaSsrc);
311 p.AddSdesCname(kSendingSsrc, kCName);
312 p.AddXrHeader(kSendingSsrc);
313 p.AddXrRrtrBlock();
314 p.AddCast(kSendingSsrc, kMediaSsrc);
315 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length());
316
317 RtcpReportBlock report_block;
318 // Initialize remote_ssrc to a "clearly illegal" value.
319 report_block.remote_ssrc = 0xDEAD;
320 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender.
321 report_block.fraction_lost = kLoss >> 24;
322 report_block.cumulative_lost = kLoss; // 24 bits valid.
323 report_block.extended_high_sequence_number = kExtendedMax;
324 report_block.jitter = kTestJitter;
325 report_block.last_sr = kLastSr;
326 report_block.delay_since_last_sr = kDelayLastSr;
327
328 RtcpReceiverReferenceTimeReport rrtr;
329 rrtr.ntp_seconds = kNtpHigh;
330 rrtr.ntp_fraction = kNtpLow;
331
332 RtcpCastMessage cast_message(kMediaSsrc);
333 cast_message.ack_frame_id_ = kAckFrameId;
334 PacketIdSet missing_packets;
335 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets;
336
337 missing_packets.insert(kLostPacketId1);
338 missing_packets.insert(kLostPacketId2);
339 missing_packets.insert(kLostPacketId3);
340 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] =
341 missing_packets;
342
343 rtcp_sender_->SendRtcpFromRtpReceiver(
344 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr | RtcpSender::kRtcpCast,
345 &report_block,
346 &rrtr,
347 &cast_message,
348 NULL);
349
350 EXPECT_EQ(1, test_transport_.packet_count());
351 }
352
353 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtrCastMessageAndLog) {
354 static const uint32 kTimeBaseMs = 12345678;
355 static const uint32 kTimeDelayMs = 10;
356 static const uint32 kDelayDeltaMs = 123;
357
358 TestRtcpPacketBuilder p;
359 p.AddRr(kSendingSsrc, 1);
360 p.AddRb(kMediaSsrc);
361 p.AddSdesCname(kSendingSsrc, kCName);
362 p.AddXrHeader(kSendingSsrc);
363 p.AddXrRrtrBlock();
364 p.AddCast(kSendingSsrc, kMediaSsrc);
365 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length());
366
367 RtcpReportBlock report_block;
368 // Initialize remote_ssrc to a "clearly illegal" value.
369 report_block.remote_ssrc = 0xDEAD;
370 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender.
371 report_block.fraction_lost = kLoss >> 24;
372 report_block.cumulative_lost = kLoss; // 24 bits valid.
373 report_block.extended_high_sequence_number = kExtendedMax;
374 report_block.jitter = kTestJitter;
375 report_block.last_sr = kLastSr;
376 report_block.delay_since_last_sr = kDelayLastSr;
377
378 RtcpReceiverReferenceTimeReport rrtr;
379 rrtr.ntp_seconds = kNtpHigh;
380 rrtr.ntp_fraction = kNtpLow;
381
382 RtcpCastMessage cast_message(kMediaSsrc);
383 cast_message.ack_frame_id_ = kAckFrameId;
384 PacketIdSet missing_packets;
385 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets;
386
387 missing_packets.insert(kLostPacketId1);
388 missing_packets.insert(kLostPacketId2);
389 missing_packets.insert(kLostPacketId3);
390 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] =
391 missing_packets;
392
393 // Test empty Log message.
394 RtcpReceiverLogMessage receiver_log;
395
396 rtcp_sender_->SendRtcpFromRtpReceiver(
397 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr | RtcpSender::kRtcpCast |
398 RtcpSender::kRtcpReceiverLog,
399 &report_block,
400 &rrtr,
401 &cast_message,
402 &receiver_log);
403
404 base::SimpleTestTickClock testing_clock;
405 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
406
407 p.AddReceiverLog(kSendingSsrc);
408 p.AddReceiverFrameLog(kRtpTimestamp, 2, kTimeBaseMs);
409 p.AddReceiverEventLog(kDelayDeltaMs, 1, 0);
410 p.AddReceiverEventLog(kLostPacketId1, 6, kTimeDelayMs);
411
412 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length());
413
414 RtcpReceiverFrameLogMessage frame_log(kRtpTimestamp);
415 RtcpReceiverEventLogMessage event_log;
416
417 event_log.type = kAckSent;
418 event_log.event_timestamp = testing_clock.NowTicks();
419 event_log.delay_delta = base::TimeDelta::FromMilliseconds(kDelayDeltaMs);
420 frame_log.event_log_messages.push_back(event_log);
421
422 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
423 event_log.type = kPacketReceived;
424 event_log.event_timestamp = testing_clock.NowTicks();
425 event_log.packet_id = kLostPacketId1;
426 frame_log.event_log_messages.push_back(event_log);
427
428 receiver_log.push_back(frame_log);
429
430 rtcp_sender_->SendRtcpFromRtpReceiver(
431 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr | RtcpSender::kRtcpCast |
432 RtcpSender::kRtcpReceiverLog,
433 &report_block,
434 &rrtr,
435 &cast_message,
436 &receiver_log);
437
438 EXPECT_TRUE(receiver_log.empty());
439 EXPECT_EQ(2, test_transport_.packet_count());
440 }
441
442 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOversizedFrameLog) {
443 static const uint32 kTimeBaseMs = 12345678;
444 static const uint32 kTimeDelayMs = 10;
445 static const uint32 kDelayDeltaMs = 123;
446
447 TestRtcpPacketBuilder p;
448 p.AddRr(kSendingSsrc, 1);
449 p.AddRb(kMediaSsrc);
450 p.AddSdesCname(kSendingSsrc, kCName);
451
452 RtcpReportBlock report_block;
453 // Initialize remote_ssrc to a "clearly illegal" value.
454 report_block.remote_ssrc = 0xDEAD;
455 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender.
456 report_block.fraction_lost = kLoss >> 24;
457 report_block.cumulative_lost = kLoss; // 24 bits valid.
458 report_block.extended_high_sequence_number = kExtendedMax;
459 report_block.jitter = kTestJitter;
460 report_block.last_sr = kLastSr;
461 report_block.delay_since_last_sr = kDelayLastSr;
462
463 base::SimpleTestTickClock testing_clock;
464 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
465
466 p.AddReceiverLog(kSendingSsrc);
467
468 p.AddReceiverFrameLog(kRtpTimestamp, 1, kTimeBaseMs);
469 p.AddReceiverEventLog(kDelayDeltaMs, 1, 0);
470 p.AddReceiverFrameLog(kRtpTimestamp + 2345,
471 kRtcpMaxReceiverLogMessages, kTimeBaseMs);
472
473 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) {
474 p.AddReceiverEventLog(kLostPacketId1, 6, kTimeDelayMs * i);
475 }
476
477 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length());
478
479 RtcpReceiverFrameLogMessage frame_1_log(kRtpTimestamp);
480 RtcpReceiverEventLogMessage event_log;
481
482 event_log.type = kAckSent;
483 event_log.event_timestamp = testing_clock.NowTicks();
484 event_log.delay_delta = base::TimeDelta::FromMilliseconds(kDelayDeltaMs);
485 frame_1_log.event_log_messages.push_back(event_log);
486
487 RtcpReceiverLogMessage receiver_log;
488 receiver_log.push_back(frame_1_log);
489
490 RtcpReceiverFrameLogMessage frame_2_log(kRtpTimestamp + 2345);
491
492 for (int j = 0; j < 300; ++j) {
493 event_log.type = kPacketReceived;
494 event_log.event_timestamp = testing_clock.NowTicks();
495 event_log.packet_id = kLostPacketId1;
496 frame_2_log.event_log_messages.push_back(event_log);
497 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
498 }
499 receiver_log.push_back(frame_2_log);
500
501 rtcp_sender_->SendRtcpFromRtpReceiver(
502 RtcpSender::kRtcpRr | RtcpSender::kRtcpReceiverLog,
503 &report_block,
504 NULL,
505 NULL,
506 &receiver_log);
507
508 EXPECT_EQ(1, test_transport_.packet_count());
509 EXPECT_EQ(1u, receiver_log.size());
510 EXPECT_EQ(300u - kRtcpMaxReceiverLogMessages,
511 receiver_log.front().event_log_messages.size());
512 }
513
514 TEST_F(RtcpSenderTest, RtcpReceiverReportWithTooManyLogFrames) {
515 static const uint32 kTimeBaseMs = 12345678;
516 static const uint32 kTimeDelayMs = 10;
517 static const uint32 kDelayDeltaMs = 123;
518
519 TestRtcpPacketBuilder p;
520 p.AddRr(kSendingSsrc, 1);
521 p.AddRb(kMediaSsrc);
522 p.AddSdesCname(kSendingSsrc, kCName);
523
524 RtcpReportBlock report_block;
525 // Initialize remote_ssrc to a "clearly illegal" value.
526 report_block.remote_ssrc = 0xDEAD;
527 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender.
528 report_block.fraction_lost = kLoss >> 24;
529 report_block.cumulative_lost = kLoss; // 24 bits valid.
530 report_block.extended_high_sequence_number = kExtendedMax;
531 report_block.jitter = kTestJitter;
532 report_block.last_sr = kLastSr;
533 report_block.delay_since_last_sr = kDelayLastSr;
534
535 base::SimpleTestTickClock testing_clock;
536 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
537
538 p.AddReceiverLog(kSendingSsrc);
539
540 for (int i = 0; i < 119; ++i) {
541 p.AddReceiverFrameLog(kRtpTimestamp, 1, kTimeBaseMs + i * kTimeDelayMs);
542 p.AddReceiverEventLog(kDelayDeltaMs, 1, 0);
543 }
544 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length());
545
546 RtcpReceiverLogMessage receiver_log;
547
548 for (int j = 0; j < 200; ++j) {
549 RtcpReceiverFrameLogMessage frame_log(kRtpTimestamp);
550 RtcpReceiverEventLogMessage event_log;
551
552 event_log.type = kAckSent;
553 event_log.event_timestamp = testing_clock.NowTicks();
554 event_log.delay_delta = base::TimeDelta::FromMilliseconds(kDelayDeltaMs);
555 frame_log.event_log_messages.push_back(event_log);
556 receiver_log.push_back(frame_log);
557 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
558 }
559 rtcp_sender_->SendRtcpFromRtpReceiver(
560 RtcpSender::kRtcpRr | RtcpSender::kRtcpReceiverLog,
561 &report_block,
562 NULL,
563 NULL,
564 &receiver_log);
565
566 EXPECT_EQ(1, test_transport_.packet_count());
567 EXPECT_EQ(81u, receiver_log.size());
568 }
569
231 } // namespace cast 570 } // namespace cast
232 } // namespace media 571 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698