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

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: Merge TOT 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
« no previous file with comments | « media/cast/rtcp/rtcp_receiver.cc ('k') | media/cast/rtcp/rtcp_sender.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "base/test/simple_test_tick_clock.h"
7 #include "media/cast/cast_environment.h" 7 #include "media/cast/cast_environment.h"
8 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h" 8 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h"
9 #include "media/cast/rtcp/mock_rtcp_sender_feedback.h" 9 #include "media/cast/rtcp/mock_rtcp_sender_feedback.h"
10 #include "media/cast/rtcp/rtcp_receiver.h" 10 #include "media/cast/rtcp/rtcp_receiver.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 ++frame_it; 52 ++frame_it;
53 EXPECT_EQ(frame_it, cast_feedback.missing_frames_and_packets_.end()); 53 EXPECT_EQ(frame_it, cast_feedback.missing_frames_and_packets_.end());
54 called_ = true; 54 called_ = true;
55 } 55 }
56 56
57 bool called() const { return called_; } 57 bool called() const { return called_; }
58 58
59 private: 59 private:
60 bool called_; 60 bool called_;
61 }; 61 };
62
63 class RtcpReceiverCastLogVerification : public RtcpReceiverFeedback {
64 public:
65 RtcpReceiverCastLogVerification()
66 : called_on_received_sender_log_(false),
67 called_on_received_receiver_log_(false) {}
68
69 virtual void OnReceivedSenderReport(
70 const RtcpSenderInfo& remote_sender_info) OVERRIDE {};
71
72 virtual void OnReceiverReferenceTimeReport(
73 const RtcpReceiverReferenceTimeReport& remote_time_report) OVERRIDE {};
74
75 virtual void OnReceivedSendReportRequest() OVERRIDE {};
76
77 virtual void OnReceivedReceiverLog(
78 const RtcpReceiverLogMessage& receiver_log) OVERRIDE {
79 EXPECT_EQ(expected_receiver_log_.size(), receiver_log.size());
80 RtcpReceiverLogMessage::const_iterator expected_it =
81 expected_receiver_log_.begin();
82 RtcpReceiverLogMessage::const_iterator incoming_it = receiver_log.begin();
83 for (; incoming_it != receiver_log.end(); ++incoming_it) {
84 EXPECT_EQ(expected_it->rtp_timestamp_, incoming_it->rtp_timestamp_);
85 EXPECT_EQ(expected_it->event_log_messages_.size(),
86 incoming_it->event_log_messages_.size());
87
88 RtcpReceiverEventLogMessages::const_iterator event_incoming_it =
89 incoming_it->event_log_messages_.begin();
90 RtcpReceiverEventLogMessages::const_iterator event_expected_it =
91 expected_it->event_log_messages_.begin();
92 for (; event_incoming_it != incoming_it->event_log_messages_.end();
93 ++event_incoming_it, ++event_expected_it) {
94 EXPECT_EQ(event_expected_it->type, event_incoming_it->type);
95 EXPECT_EQ(event_expected_it->event_timestamp,
96 event_incoming_it->event_timestamp);
97 if (event_expected_it->type == kPacketReceived) {
98 EXPECT_EQ(event_expected_it->packet_id, event_incoming_it->packet_id);
99 } else {
100 EXPECT_EQ(event_expected_it->delay_delta,
101 event_incoming_it->delay_delta);
102 }
103 }
104 expected_receiver_log_.pop_front();
105 expected_it = expected_receiver_log_.begin();
106 }
107 called_on_received_receiver_log_ = true;
108 }
109
110 virtual void OnReceivedSenderLog(
111 const RtcpSenderLogMessage& sender_log) OVERRIDE {
112 EXPECT_EQ(expected_sender_log_.size(), sender_log.size());
113
114 RtcpSenderLogMessage::const_iterator expected_it =
115 expected_sender_log_.begin();
116 RtcpSenderLogMessage::const_iterator incoming_it = sender_log.begin();
117 for (; expected_it != expected_sender_log_.end();
118 ++expected_it, ++incoming_it) {
119 EXPECT_EQ(expected_it->frame_status, incoming_it->frame_status);
120 EXPECT_EQ(0xffffff & expected_it->rtp_timestamp,
121 incoming_it->rtp_timestamp);
122 }
123 called_on_received_sender_log_ = true;
124 }
125
126 bool OnReceivedSenderLogCalled() {
127 return called_on_received_sender_log_;
128 }
129
130 bool OnReceivedReceiverLogCalled() {
131 return called_on_received_receiver_log_ && expected_receiver_log_.empty();
132 }
133
134 void SetExpectedReceiverLog(const RtcpReceiverLogMessage& receiver_log) {
135 expected_receiver_log_ = receiver_log;
136 }
137
138 void SetExpectedSenderLog(const RtcpSenderLogMessage& sender_log) {
139 expected_sender_log_ = sender_log;
140 }
141
142 private:
143 RtcpReceiverLogMessage expected_receiver_log_;
144 RtcpSenderLogMessage expected_sender_log_;
145 bool called_on_received_sender_log_;
146 bool called_on_received_receiver_log_;
147 };
148
62 } // namespace 149 } // namespace
63 150
64 class RtcpReceiverTest : public ::testing::Test { 151 class RtcpReceiverTest : public ::testing::Test {
65 protected: 152 protected:
66 RtcpReceiverTest() 153 RtcpReceiverTest()
67 : task_runner_(new test::FakeTaskRunner(&testing_clock_)), 154 : task_runner_(new test::FakeTaskRunner(&testing_clock_)),
68 cast_environment_(new CastEnvironment(&testing_clock_, task_runner_, 155 cast_environment_(new CastEnvironment(&testing_clock_, task_runner_,
69 task_runner_, task_runner_, task_runner_, task_runner_, 156 task_runner_, task_runner_, task_runner_, task_runner_,
70 GetDefaultCastLoggingConfig())), 157 GetDefaultCastLoggingConfig())),
71 rtcp_receiver_(new RtcpReceiver(cast_environment_, 158 rtcp_receiver_(new RtcpReceiver(cast_environment_,
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 p.AddRb(kSourceSsrc); 440 p.AddRb(kSourceSsrc);
354 p.AddCast(kSenderSsrc, kSourceSsrc); 441 p.AddCast(kSenderSsrc, kSourceSsrc);
355 442
356 // Expected to be pass through since the sender ssrc match our local ssrc. 443 // Expected to be pass through since the sender ssrc match our local ssrc.
357 RtcpParser rtcp_parser(p.Packet(), p.Length()); 444 RtcpParser rtcp_parser(p.Packet(), p.Length());
358 rtcp_receiver.IncomingRtcpPacket(&rtcp_parser); 445 rtcp_receiver.IncomingRtcpPacket(&rtcp_parser);
359 446
360 EXPECT_TRUE(sender_feedback_cast_verification.called()); 447 EXPECT_TRUE(sender_feedback_cast_verification.called());
361 } 448 }
362 449
450 TEST_F(RtcpReceiverTest, InjectSenderReportWithCastSenderLogVerification) {
451 RtcpReceiverCastLogVerification cast_log_verification;
452 RtcpReceiver rtcp_receiver(cast_environment_,
453 &mock_sender_feedback_,
454 &cast_log_verification,
455 &mock_rtt_feedback_,
456 kSourceSsrc);
457 rtcp_receiver.SetRemoteSSRC(kSenderSsrc);
458
459 RtcpSenderLogMessage sender_log;
460 for (int j = 0; j < 359; ++j) {
461 RtcpSenderFrameLogMessage sender_frame_log;
462 sender_frame_log.frame_status = kRtcpSenderFrameStatusSentToNetwork;
463 sender_frame_log.rtp_timestamp = kRtpTimestamp + j * 90;
464 sender_log.push_back(sender_frame_log);
465 }
466 cast_log_verification.SetExpectedSenderLog(sender_log);
467
468 TestRtcpPacketBuilder p;
469 p.AddSr(kSenderSsrc, 0);
470 p.AddSdesCname(kSenderSsrc, kCName);
471 p.AddSenderLog(kSenderSsrc);
472
473 for (int i = 0; i < 359; ++i) {
474 p.AddSenderFrameLog(kRtcpSenderFrameStatusSentToNetwork,
475 kRtpTimestamp + i * 90);
476 }
477 RtcpParser rtcp_parser(p.Packet(), p.Length());
478 rtcp_receiver.IncomingRtcpPacket(&rtcp_parser);
479
480 EXPECT_TRUE(cast_log_verification.OnReceivedSenderLogCalled());
481 }
482
483 TEST_F(RtcpReceiverTest, InjectReceiverReportWithReceiverLogVerificationBase) {
484 static const uint32 kTimeBaseMs = 12345678;
485 static const uint32 kTimeDelayMs = 10;
486 static const uint32 kDelayDeltaMs = 123;
487 base::SimpleTestTickClock testing_clock;
488 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
489
490 RtcpReceiverCastLogVerification cast_log_verification;
491 RtcpReceiver rtcp_receiver(cast_environment_,
492 &mock_sender_feedback_,
493 &cast_log_verification,
494 &mock_rtt_feedback_,
495 kSourceSsrc);
496 rtcp_receiver.SetRemoteSSRC(kSenderSsrc);
497
498 RtcpReceiverLogMessage receiver_log;
499 RtcpReceiverFrameLogMessage frame_log(kRtpTimestamp);
500 RtcpReceiverEventLogMessage event_log;
501
502 event_log.type = kAckSent;
503 event_log.event_timestamp = testing_clock.NowTicks();
504 event_log.delay_delta = base::TimeDelta::FromMilliseconds(kDelayDeltaMs);
505 frame_log.event_log_messages_.push_back(event_log);
506
507 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
508 event_log.type = kPacketReceived;
509 event_log.event_timestamp = testing_clock.NowTicks();
510 event_log.packet_id = kLostPacketId1;
511 frame_log.event_log_messages_.push_back(event_log);
512 receiver_log.push_back(frame_log);
513
514 cast_log_verification.SetExpectedReceiverLog(receiver_log);
515
516 TestRtcpPacketBuilder p;
517 p.AddRr(kSenderSsrc, 1);
518 p.AddRb(kSourceSsrc);
519 p.AddReceiverLog(kSenderSsrc);
520 p.AddReceiverFrameLog(kRtpTimestamp, 2, kTimeBaseMs);
521 p.AddReceiverEventLog(kDelayDeltaMs, 1, 0);
522 p.AddReceiverEventLog(kLostPacketId1, 6, kTimeDelayMs);
523
524 EXPECT_CALL(mock_rtt_feedback_,
525 OnReceivedDelaySinceLastReport(kSourceSsrc, kLastSr, kDelayLastSr)).
526 Times(1);
527
528 RtcpParser rtcp_parser(p.Packet(), p.Length());
529 rtcp_receiver.IncomingRtcpPacket(&rtcp_parser);
530
531 EXPECT_TRUE(cast_log_verification.OnReceivedReceiverLogCalled());
532 }
533
534 TEST_F(RtcpReceiverTest, InjectReceiverReportWithReceiverLogVerificationMulti) {
535 static const uint32 kTimeBaseMs = 12345678;
536 static const uint32 kTimeDelayMs = 10;
537 static const uint32 kDelayDeltaMs = 123;
538 base::SimpleTestTickClock testing_clock;
539 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
540
541 RtcpReceiverCastLogVerification cast_log_verification;
542 RtcpReceiver rtcp_receiver(cast_environment_,
543 &mock_sender_feedback_,
544 &cast_log_verification,
545 &mock_rtt_feedback_,
546 kSourceSsrc);
547 rtcp_receiver.SetRemoteSSRC(kSenderSsrc);
548
549 RtcpReceiverLogMessage receiver_log;
550
551 for (int j = 0; j < 100; ++j) {
552 RtcpReceiverFrameLogMessage frame_log(kRtpTimestamp);
553 RtcpReceiverEventLogMessage event_log;
554 event_log.type = kAckSent;
555 event_log.event_timestamp = testing_clock.NowTicks();
556 event_log.delay_delta = base::TimeDelta::FromMilliseconds(kDelayDeltaMs);
557 frame_log.event_log_messages_.push_back(event_log);
558 receiver_log.push_back(frame_log);
559 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
560 }
561
562 cast_log_verification.SetExpectedReceiverLog(receiver_log);
563
564 TestRtcpPacketBuilder p;
565 p.AddRr(kSenderSsrc, 1);
566 p.AddRb(kSourceSsrc);
567 p.AddReceiverLog(kSenderSsrc);
568 for (int i = 0; i < 100; ++i) {
569 p.AddReceiverFrameLog(kRtpTimestamp, 1, kTimeBaseMs + i * kTimeDelayMs);
570 p.AddReceiverEventLog(kDelayDeltaMs, 1, 0);
571 }
572
573 EXPECT_CALL(mock_rtt_feedback_,
574 OnReceivedDelaySinceLastReport(kSourceSsrc, kLastSr, kDelayLastSr)).
575 Times(1);
576
577 RtcpParser rtcp_parser(p.Packet(), p.Length());
578 rtcp_receiver.IncomingRtcpPacket(&rtcp_parser);
579
580 EXPECT_TRUE(cast_log_verification.OnReceivedReceiverLogCalled());
581 }
582
583
584
363 } // namespace cast 585 } // namespace cast
364 } // namespace media 586 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/rtcp/rtcp_receiver.cc ('k') | media/cast/rtcp/rtcp_sender.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698