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

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: Fixed nits Created 7 years, 1 month 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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698