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