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

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

Issue 83903002: Cast: Add capabity to parse receiver and sender log messages over RTCP. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Re-upload 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/rtcp/mock_rtcp_receiver_feedback.h" 7 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h"
7 #include "media/cast/rtcp/mock_rtcp_sender_feedback.h" 8 #include "media/cast/rtcp/mock_rtcp_sender_feedback.h"
8 #include "media/cast/rtcp/rtcp_receiver.h" 9 #include "media/cast/rtcp/rtcp_receiver.h"
9 #include "media/cast/rtcp/rtcp_utility.h" 10 #include "media/cast/rtcp/rtcp_utility.h"
10 #include "media/cast/rtcp/test_rtcp_packet_builder.h" 11 #include "media/cast/rtcp/test_rtcp_packet_builder.h"
11 #include "testing/gmock/include/gmock/gmock.h" 12 #include "testing/gmock/include/gmock/gmock.h"
12 13
13 namespace media { 14 namespace media {
14 namespace cast { 15 namespace cast {
15 16
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 ++frame_it; 50 ++frame_it;
50 EXPECT_EQ(frame_it, cast_feedback.missing_frames_and_packets_.end()); 51 EXPECT_EQ(frame_it, cast_feedback.missing_frames_and_packets_.end());
51 called_ = true; 52 called_ = true;
52 } 53 }
53 54
54 bool called() const { return called_; } 55 bool called() const { return called_; }
55 56
56 private: 57 private:
57 bool called_; 58 bool called_;
58 }; 59 };
60
61 class RtcpReceiverCastLogVerification : public RtcpReceiverFeedback {
62 public:
63 RtcpReceiverCastLogVerification()
64 : called_on_received_sender_log_(false),
65 called_on_received_receiver_log_(false) {}
66
67 virtual void OnReceivedSenderReport(
68 const RtcpSenderInfo& remote_sender_info) OVERRIDE {};
69
70 virtual void OnReceiverReferenceTimeReport(
71 const RtcpReceiverReferenceTimeReport& remote_time_report) OVERRIDE {};
72
73 virtual void OnReceivedSendReportRequest() OVERRIDE {};
74
75 virtual void OnReceivedReceiverLog(
76 const RtcpReceiverLogMessage& receiver_log) OVERRIDE {
77 EXPECT_EQ(expected_receiver_log_.size(), receiver_log.size());
78 RtcpReceiverLogMessage::const_iterator expected_it =
79 expected_receiver_log_.begin();
80 RtcpReceiverLogMessage::const_iterator incoming_it = receiver_log.begin();
81 for (; incoming_it != receiver_log.end(); ++incoming_it) {
82 EXPECT_EQ(expected_it->rtp_timestamp, incoming_it->rtp_timestamp);
83 EXPECT_EQ(expected_it->event_log_messages.size(),
84 incoming_it->event_log_messages.size());
85
86 RtcpReceiverEventLogMessages::const_iterator event_incoming_it =
87 incoming_it->event_log_messages.begin();
88 RtcpReceiverEventLogMessages::const_iterator event_expected_it =
89 expected_it->event_log_messages.begin();
90 for (; event_incoming_it != incoming_it->event_log_messages.end();
91 ++event_incoming_it, ++event_expected_it) {
92 EXPECT_EQ(event_expected_it->type, event_incoming_it->type);
93 EXPECT_EQ(event_expected_it->event_timestamp,
94 event_incoming_it->event_timestamp);
95 if (event_expected_it->type == kPacketReceived) {
96 EXPECT_EQ(event_expected_it->packet_id, event_incoming_it->packet_id);
97 } else {
98 EXPECT_EQ(event_expected_it->delay_delta,
99 event_incoming_it->delay_delta);
100 }
101 }
102 expected_receiver_log_.pop_front();
103 expected_it = expected_receiver_log_.begin();
104 }
105 called_on_received_receiver_log_ = true;
106 }
107
108 virtual void OnReceivedSenderLog(
109 const RtcpSenderLogMessage& sender_log) OVERRIDE {
110 EXPECT_EQ(expected_sender_log_.size(), sender_log.size());
111
112 RtcpSenderLogMessage::const_iterator expected_it =
113 expected_sender_log_.begin();
114 RtcpSenderLogMessage::const_iterator incoming_it = sender_log.begin();
115 for (; expected_it != expected_sender_log_.end();
116 ++expected_it, ++incoming_it) {
117 EXPECT_EQ(expected_it->frame_status, incoming_it->frame_status);
118 EXPECT_EQ(0xffffff & expected_it->rtp_timestamp,
119 incoming_it->rtp_timestamp);
120 }
121 called_on_received_sender_log_ = true;
122 }
123
124 bool OnReceivedSenderLogCalled() {
125 return called_on_received_sender_log_;
126 }
127
128 bool OnReceivedReceiverLogCalled() {
129 return called_on_received_receiver_log_ && expected_receiver_log_.empty();
130 }
131
132 void SetExpectedReceiverLog(const RtcpReceiverLogMessage& receiver_log) {
133 expected_receiver_log_ = receiver_log;
134 }
135
136 void SetExpectedSenderLog(const RtcpSenderLogMessage& sender_log) {
137 expected_sender_log_ = sender_log;
138 }
139
140 private:
141 RtcpReceiverLogMessage expected_receiver_log_;
142 RtcpSenderLogMessage expected_sender_log_;
143 bool called_on_received_sender_log_;
144 bool called_on_received_receiver_log_;
145 };
146
59 } // namespace 147 } // namespace
60 148
61 class RtcpReceiverTest : public ::testing::Test { 149 class RtcpReceiverTest : public ::testing::Test {
62 protected: 150 protected:
63 RtcpReceiverTest() 151 RtcpReceiverTest()
64 : rtcp_receiver_(new RtcpReceiver(&mock_sender_feedback_, 152 : rtcp_receiver_(new RtcpReceiver(&mock_sender_feedback_,
65 &mock_receiver_feedback_, 153 &mock_receiver_feedback_,
66 &mock_rtt_feedback_, 154 &mock_rtt_feedback_,
67 kSourceSsrc)) { 155 kSourceSsrc)) {
68 } 156 }
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 p.AddRb(kSourceSsrc); 429 p.AddRb(kSourceSsrc);
342 p.AddCast(kSenderSsrc, kSourceSsrc); 430 p.AddCast(kSenderSsrc, kSourceSsrc);
343 431
344 // Expected to be pass through since the sender ssrc match our local ssrc. 432 // Expected to be pass through since the sender ssrc match our local ssrc.
345 RtcpParser rtcp_parser(p.Packet(), p.Length()); 433 RtcpParser rtcp_parser(p.Packet(), p.Length());
346 rtcp_receiver.IncomingRtcpPacket(&rtcp_parser); 434 rtcp_receiver.IncomingRtcpPacket(&rtcp_parser);
347 435
348 EXPECT_TRUE(sender_feedback_cast_verification.called()); 436 EXPECT_TRUE(sender_feedback_cast_verification.called());
349 } 437 }
350 438
439 TEST_F(RtcpReceiverTest, InjectSenderReportWithCastSenderLogVerification) {
440 RtcpReceiverCastLogVerification cast_log_verification;
441 RtcpReceiver rtcp_receiver(&mock_sender_feedback_,
442 &cast_log_verification,
443 &mock_rtt_feedback_,
444 kSourceSsrc);
445 rtcp_receiver.SetRemoteSSRC(kSenderSsrc);
446
447 RtcpSenderLogMessage sender_log;
448 for (int j = 0; j < 359; ++j) {
449 RtcpSenderFrameLogMessage sender_frame_log;
450 sender_frame_log.frame_status = kRtcpSenderFrameStatusSentToNetwork;
451 sender_frame_log.rtp_timestamp = kRtpTimestamp + j * 90;
452 sender_log.push_back(sender_frame_log);
453 }
454 cast_log_verification.SetExpectedSenderLog(sender_log);
455
456 TestRtcpPacketBuilder p;
457 p.AddSr(kSenderSsrc, 0);
458 p.AddSdesCname(kSenderSsrc, kCName);
459 p.AddSenderLog(kSenderSsrc);
460
461 for (int i = 0; i < 359; ++i) {
462 p.AddSenderFrameLog(kRtcpSenderFrameStatusSentToNetwork,
463 kRtpTimestamp + i * 90);
464 }
465 RtcpParser rtcp_parser(p.Packet(), p.Length());
466 rtcp_receiver.IncomingRtcpPacket(&rtcp_parser);
467
468 EXPECT_TRUE(cast_log_verification.OnReceivedSenderLogCalled());
469 }
470
471 TEST_F(RtcpReceiverTest, InjectReceiverReportWithReceiverLogVerificationBase) {
472 static const uint32 kTimeBaseMs = 12345678;
473 static const uint32 kTimeDelayMs = 10;
474 static const uint32 kDelayDeltaMs = 123;
475 base::SimpleTestTickClock testing_clock;
476 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
477
478 RtcpReceiverCastLogVerification cast_log_verification;
479 RtcpReceiver rtcp_receiver(&mock_sender_feedback_,
480 &cast_log_verification,
481 &mock_rtt_feedback_,
482 kSourceSsrc);
483 rtcp_receiver.SetRemoteSSRC(kSenderSsrc);
484
485 RtcpReceiverLogMessage receiver_log;
486 RtcpReceiverFrameLogMessage frame_log(kRtpTimestamp);
487 RtcpReceiverEventLogMessage event_log;
488
489 event_log.type = kAckSent;
490 event_log.event_timestamp = testing_clock.NowTicks();
491 event_log.delay_delta = base::TimeDelta::FromMilliseconds(kDelayDeltaMs);
492 frame_log.event_log_messages.push_back(event_log);
493
494 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
495 event_log.type = kPacketReceived;
496 event_log.event_timestamp = testing_clock.NowTicks();
497 event_log.packet_id = kLostPacketId1;
498 frame_log.event_log_messages.push_back(event_log);
499 receiver_log.push_back(frame_log);
500
501 cast_log_verification.SetExpectedReceiverLog(receiver_log);
502
503 TestRtcpPacketBuilder p;
504 p.AddRr(kSenderSsrc, 1);
505 p.AddRb(kSourceSsrc);
506 p.AddReceiverLog(kSenderSsrc);
507 p.AddReceiverFrameLog(kRtpTimestamp, 2, kTimeBaseMs);
508 p.AddReceiverEventLog(kDelayDeltaMs, 1, 0);
509 p.AddReceiverEventLog(kLostPacketId1, 6, kTimeDelayMs);
510
511 EXPECT_CALL(mock_rtt_feedback_,
512 OnReceivedDelaySinceLastReport(kSourceSsrc, kLastSr, kDelayLastSr)).
513 Times(1);
514
515 RtcpParser rtcp_parser(p.Packet(), p.Length());
516 rtcp_receiver.IncomingRtcpPacket(&rtcp_parser);
517
518 EXPECT_TRUE(cast_log_verification.OnReceivedReceiverLogCalled());
519 }
520
521 TEST_F(RtcpReceiverTest, InjectReceiverReportWithReceiverLogVerificationMulti) {
522 static const uint32 kTimeBaseMs = 12345678;
523 static const uint32 kTimeDelayMs = 10;
524 static const uint32 kDelayDeltaMs = 123;
525 base::SimpleTestTickClock testing_clock;
526 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
527
528 RtcpReceiverCastLogVerification cast_log_verification;
529 RtcpReceiver rtcp_receiver(&mock_sender_feedback_,
530 &cast_log_verification,
531 &mock_rtt_feedback_,
532 kSourceSsrc);
533 rtcp_receiver.SetRemoteSSRC(kSenderSsrc);
534
535 RtcpReceiverLogMessage receiver_log;
536
537 for (int j = 0; j < 100; ++j) {
538 RtcpReceiverFrameLogMessage frame_log(kRtpTimestamp);
539 RtcpReceiverEventLogMessage event_log;
540 event_log.type = kAckSent;
541 event_log.event_timestamp = testing_clock.NowTicks();
542 event_log.delay_delta = base::TimeDelta::FromMilliseconds(kDelayDeltaMs);
543 frame_log.event_log_messages.push_back(event_log);
544 receiver_log.push_back(frame_log);
545 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
546 }
547
548 cast_log_verification.SetExpectedReceiverLog(receiver_log);
549
550 TestRtcpPacketBuilder p;
551 p.AddRr(kSenderSsrc, 1);
552 p.AddRb(kSourceSsrc);
553 p.AddReceiverLog(kSenderSsrc);
554 for (int i = 0; i < 100; ++i) {
555 p.AddReceiverFrameLog(kRtpTimestamp, 1, kTimeBaseMs + i * kTimeDelayMs);
556 p.AddReceiverEventLog(kDelayDeltaMs, 1, 0);
557 }
558
559 EXPECT_CALL(mock_rtt_feedback_,
560 OnReceivedDelaySinceLastReport(kSourceSsrc, kLastSr, kDelayLastSr)).
561 Times(1);
562
563 RtcpParser rtcp_parser(p.Packet(), p.Length());
564 rtcp_receiver.IncomingRtcpPacket(&rtcp_parser);
565
566 EXPECT_TRUE(cast_log_verification.OnReceivedReceiverLogCalled());
567 }
568
569
570
351 } // namespace cast 571 } // namespace cast
352 } // namespace media 572 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698