| 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 "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/net/cast_net_defines.h" | |
| 9 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h" | 8 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h" |
| 10 #include "media/cast/rtcp/mock_rtcp_sender_feedback.h" | 9 #include "media/cast/rtcp/mock_rtcp_sender_feedback.h" |
| 11 #include "media/cast/rtcp/rtcp_receiver.h" | 10 #include "media/cast/rtcp/rtcp_receiver.h" |
| 12 #include "media/cast/rtcp/rtcp_utility.h" | 11 #include "media/cast/rtcp/rtcp_utility.h" |
| 13 #include "media/cast/rtcp/test_rtcp_packet_builder.h" | 12 #include "media/cast/rtcp/test_rtcp_packet_builder.h" |
| 14 #include "media/cast/test/fake_task_runner.h" | 13 #include "media/cast/test/fake_task_runner.h" |
| 14 #include "media/cast/transport/cast_transport_defines.h" |
| 15 #include "testing/gmock/include/gmock/gmock.h" | 15 #include "testing/gmock/include/gmock/gmock.h" |
| 16 | 16 |
| 17 namespace media { | 17 namespace media { |
| 18 namespace cast { | 18 namespace cast { |
| 19 | 19 |
| 20 using testing::_; | 20 using testing::_; |
| 21 | 21 |
| 22 static const uint32 kSenderSsrc = 0x10203; | 22 static const uint32 kSenderSsrc = 0x10203; |
| 23 static const uint32 kSourceSsrc = 0x40506; | 23 static const uint32 kSourceSsrc = 0x40506; |
| 24 static const uint32 kUnknownSsrc = 0xDEAD; | 24 static const uint32 kUnknownSsrc = 0xDEAD; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 bool called_; | 61 bool called_; |
| 62 }; | 62 }; |
| 63 | 63 |
| 64 class RtcpReceiverCastLogVerification : public RtcpReceiverFeedback { | 64 class RtcpReceiverCastLogVerification : public RtcpReceiverFeedback { |
| 65 public: | 65 public: |
| 66 RtcpReceiverCastLogVerification() | 66 RtcpReceiverCastLogVerification() |
| 67 : called_on_received_sender_log_(false), | 67 : called_on_received_sender_log_(false), |
| 68 called_on_received_receiver_log_(false) {} | 68 called_on_received_receiver_log_(false) {} |
| 69 | 69 |
| 70 virtual void OnReceivedSenderReport( | 70 virtual void OnReceivedSenderReport( |
| 71 const RtcpSenderInfo& remote_sender_info) OVERRIDE {}; | 71 const transport::RtcpSenderInfo& remote_sender_info) OVERRIDE {}; |
| 72 | 72 |
| 73 virtual void OnReceiverReferenceTimeReport( | 73 virtual void OnReceiverReferenceTimeReport( |
| 74 const RtcpReceiverReferenceTimeReport& remote_time_report) OVERRIDE {}; | 74 const RtcpReceiverReferenceTimeReport& remote_time_report) OVERRIDE {}; |
| 75 | 75 |
| 76 virtual void OnReceivedSendReportRequest() OVERRIDE {}; | 76 virtual void OnReceivedSendReportRequest() OVERRIDE {}; |
| 77 | 77 |
| 78 virtual void OnReceivedReceiverLog( | 78 virtual void OnReceivedReceiverLog( |
| 79 const RtcpReceiverLogMessage& receiver_log) OVERRIDE { | 79 const RtcpReceiverLogMessage& receiver_log) OVERRIDE { |
| 80 EXPECT_EQ(expected_receiver_log_.size(), receiver_log.size()); | 80 EXPECT_EQ(expected_receiver_log_.size(), receiver_log.size()); |
| 81 RtcpReceiverLogMessage::const_iterator expected_it = | 81 RtcpReceiverLogMessage::const_iterator expected_it = |
| (...skipping 20 matching lines...) Expand all Loading... |
| 102 event_incoming_it->delay_delta); | 102 event_incoming_it->delay_delta); |
| 103 } | 103 } |
| 104 } | 104 } |
| 105 expected_receiver_log_.pop_front(); | 105 expected_receiver_log_.pop_front(); |
| 106 expected_it = expected_receiver_log_.begin(); | 106 expected_it = expected_receiver_log_.begin(); |
| 107 } | 107 } |
| 108 called_on_received_receiver_log_ = true; | 108 called_on_received_receiver_log_ = true; |
| 109 } | 109 } |
| 110 | 110 |
| 111 virtual void OnReceivedSenderLog( | 111 virtual void OnReceivedSenderLog( |
| 112 const RtcpSenderLogMessage& sender_log) OVERRIDE { | 112 const transport::RtcpSenderLogMessage& sender_log) OVERRIDE { |
| 113 EXPECT_EQ(expected_sender_log_.size(), sender_log.size()); | 113 EXPECT_EQ(expected_sender_log_.size(), sender_log.size()); |
| 114 | 114 |
| 115 RtcpSenderLogMessage::const_iterator expected_it = | 115 transport::RtcpSenderLogMessage::const_iterator expected_it = |
| 116 expected_sender_log_.begin(); | 116 expected_sender_log_.begin(); |
| 117 RtcpSenderLogMessage::const_iterator incoming_it = sender_log.begin(); | 117 transport::RtcpSenderLogMessage::const_iterator incoming_it = |
| 118 sender_log.begin(); |
| 118 for (; expected_it != expected_sender_log_.end(); | 119 for (; expected_it != expected_sender_log_.end(); |
| 119 ++expected_it, ++incoming_it) { | 120 ++expected_it, ++incoming_it) { |
| 120 EXPECT_EQ(expected_it->frame_status, incoming_it->frame_status); | 121 EXPECT_EQ(expected_it->frame_status, incoming_it->frame_status); |
| 121 EXPECT_EQ(0xffffff & expected_it->rtp_timestamp, | 122 EXPECT_EQ(0xffffff & expected_it->rtp_timestamp, |
| 122 incoming_it->rtp_timestamp); | 123 incoming_it->rtp_timestamp); |
| 123 } | 124 } |
| 124 called_on_received_sender_log_ = true; | 125 called_on_received_sender_log_ = true; |
| 125 } | 126 } |
| 126 | 127 |
| 127 bool OnReceivedSenderLogCalled() { | 128 bool OnReceivedSenderLogCalled() { |
| 128 return called_on_received_sender_log_; | 129 return called_on_received_sender_log_; |
| 129 } | 130 } |
| 130 | 131 |
| 131 bool OnReceivedReceiverLogCalled() { | 132 bool OnReceivedReceiverLogCalled() { |
| 132 return called_on_received_receiver_log_ && expected_receiver_log_.empty(); | 133 return called_on_received_receiver_log_ && expected_receiver_log_.empty(); |
| 133 } | 134 } |
| 134 | 135 |
| 135 void SetExpectedReceiverLog(const RtcpReceiverLogMessage& receiver_log) { | 136 void SetExpectedReceiverLog(const RtcpReceiverLogMessage& receiver_log) { |
| 136 expected_receiver_log_ = receiver_log; | 137 expected_receiver_log_ = receiver_log; |
| 137 } | 138 } |
| 138 | 139 |
| 139 void SetExpectedSenderLog(const RtcpSenderLogMessage& sender_log) { | 140 void SetExpectedSenderLog(const transport::RtcpSenderLogMessage& sender_log) { |
| 140 expected_sender_log_ = sender_log; | 141 expected_sender_log_ = sender_log; |
| 141 } | 142 } |
| 142 | 143 |
| 143 private: | 144 private: |
| 144 RtcpReceiverLogMessage expected_receiver_log_; | 145 RtcpReceiverLogMessage expected_receiver_log_; |
| 145 RtcpSenderLogMessage expected_sender_log_; | 146 transport::RtcpSenderLogMessage expected_sender_log_; |
| 146 bool called_on_received_sender_log_; | 147 bool called_on_received_sender_log_; |
| 147 bool called_on_received_receiver_log_; | 148 bool called_on_received_receiver_log_; |
| 148 }; | 149 }; |
| 149 | 150 |
| 150 } // namespace | 151 } // namespace |
| 151 | 152 |
| 152 class RtcpReceiverTest : public ::testing::Test { | 153 class RtcpReceiverTest : public ::testing::Test { |
| 153 protected: | 154 protected: |
| 154 RtcpReceiverTest() | 155 RtcpReceiverTest() |
| 155 : task_runner_(new test::FakeTaskRunner(&testing_clock_)), | 156 : task_runner_(new test::FakeTaskRunner(&testing_clock_)), |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 rtcp_receiver_->IncomingRtcpPacket(&rtcp_parser); | 201 rtcp_receiver_->IncomingRtcpPacket(&rtcp_parser); |
| 201 } | 202 } |
| 202 | 203 |
| 203 base::SimpleTestTickClock testing_clock_; | 204 base::SimpleTestTickClock testing_clock_; |
| 204 scoped_refptr<test::FakeTaskRunner> task_runner_; | 205 scoped_refptr<test::FakeTaskRunner> task_runner_; |
| 205 scoped_refptr<CastEnvironment> cast_environment_; | 206 scoped_refptr<CastEnvironment> cast_environment_; |
| 206 MockRtcpReceiverFeedback mock_receiver_feedback_; | 207 MockRtcpReceiverFeedback mock_receiver_feedback_; |
| 207 MockRtcpRttFeedback mock_rtt_feedback_; | 208 MockRtcpRttFeedback mock_rtt_feedback_; |
| 208 MockRtcpSenderFeedback mock_sender_feedback_; | 209 MockRtcpSenderFeedback mock_sender_feedback_; |
| 209 scoped_ptr<RtcpReceiver> rtcp_receiver_; | 210 scoped_ptr<RtcpReceiver> rtcp_receiver_; |
| 210 RtcpSenderInfo expected_sender_info_; | 211 transport::RtcpSenderInfo expected_sender_info_; |
| 211 RtcpReportBlock expected_report_block_; | 212 transport::RtcpReportBlock expected_report_block_; |
| 212 RtcpReceiverReferenceTimeReport expected_receiver_reference_report_; | 213 RtcpReceiverReferenceTimeReport expected_receiver_reference_report_; |
| 213 }; | 214 }; |
| 214 | 215 |
| 215 TEST_F(RtcpReceiverTest, BrokenPacketIsIgnored) { | 216 TEST_F(RtcpReceiverTest, BrokenPacketIsIgnored) { |
| 216 const uint8 bad_packet[] = {0, 0, 0, 0}; | 217 const uint8 bad_packet[] = {0, 0, 0, 0}; |
| 217 InjectRtcpPacket(bad_packet, sizeof(bad_packet)); | 218 InjectRtcpPacket(bad_packet, sizeof(bad_packet)); |
| 218 } | 219 } |
| 219 | 220 |
| 220 TEST_F(RtcpReceiverTest, InjectSenderReportPacket) { | 221 TEST_F(RtcpReceiverTest, InjectSenderReportPacket) { |
| 221 TestRtcpPacketBuilder p; | 222 TestRtcpPacketBuilder p; |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 450 | 451 |
| 451 TEST_F(RtcpReceiverTest, InjectSenderReportWithCastSenderLogVerification) { | 452 TEST_F(RtcpReceiverTest, InjectSenderReportWithCastSenderLogVerification) { |
| 452 RtcpReceiverCastLogVerification cast_log_verification; | 453 RtcpReceiverCastLogVerification cast_log_verification; |
| 453 RtcpReceiver rtcp_receiver(cast_environment_, | 454 RtcpReceiver rtcp_receiver(cast_environment_, |
| 454 &mock_sender_feedback_, | 455 &mock_sender_feedback_, |
| 455 &cast_log_verification, | 456 &cast_log_verification, |
| 456 &mock_rtt_feedback_, | 457 &mock_rtt_feedback_, |
| 457 kSourceSsrc); | 458 kSourceSsrc); |
| 458 rtcp_receiver.SetRemoteSSRC(kSenderSsrc); | 459 rtcp_receiver.SetRemoteSSRC(kSenderSsrc); |
| 459 | 460 |
| 460 RtcpSenderLogMessage sender_log; | 461 transport::RtcpSenderLogMessage sender_log; |
| 461 for (int j = 0; j < 359; ++j) { | 462 for (int j = 0; j < 359; ++j) { |
| 462 RtcpSenderFrameLogMessage sender_frame_log; | 463 transport::RtcpSenderFrameLogMessage sender_frame_log; |
| 463 sender_frame_log.frame_status = kRtcpSenderFrameStatusSentToNetwork; | 464 sender_frame_log.frame_status = |
| 465 transport::kRtcpSenderFrameStatusSentToNetwork; |
| 464 sender_frame_log.rtp_timestamp = kRtpTimestamp + j * 90; | 466 sender_frame_log.rtp_timestamp = kRtpTimestamp + j * 90; |
| 465 sender_log.push_back(sender_frame_log); | 467 sender_log.push_back(sender_frame_log); |
| 466 } | 468 } |
| 467 cast_log_verification.SetExpectedSenderLog(sender_log); | 469 cast_log_verification.SetExpectedSenderLog(sender_log); |
| 468 | 470 |
| 469 TestRtcpPacketBuilder p; | 471 TestRtcpPacketBuilder p; |
| 470 p.AddSr(kSenderSsrc, 0); | 472 p.AddSr(kSenderSsrc, 0); |
| 471 p.AddSdesCname(kSenderSsrc, kCName); | 473 p.AddSdesCname(kSenderSsrc, kCName); |
| 472 p.AddSenderLog(kSenderSsrc); | 474 p.AddSenderLog(kSenderSsrc); |
| 473 | 475 |
| 474 for (int i = 0; i < 359; ++i) { | 476 for (int i = 0; i < 359; ++i) { |
| 475 p.AddSenderFrameLog(kRtcpSenderFrameStatusSentToNetwork, | 477 p.AddSenderFrameLog(transport::kRtcpSenderFrameStatusSentToNetwork, |
| 476 kRtpTimestamp + i * 90); | 478 kRtpTimestamp + i * 90); |
| 477 } | 479 } |
| 478 RtcpParser rtcp_parser(p.Packet(), p.Length()); | 480 RtcpParser rtcp_parser(p.Packet(), p.Length()); |
| 479 rtcp_receiver.IncomingRtcpPacket(&rtcp_parser); | 481 rtcp_receiver.IncomingRtcpPacket(&rtcp_parser); |
| 480 | 482 |
| 481 EXPECT_TRUE(cast_log_verification.OnReceivedSenderLogCalled()); | 483 EXPECT_TRUE(cast_log_verification.OnReceivedSenderLogCalled()); |
| 482 } | 484 } |
| 483 | 485 |
| 484 TEST_F(RtcpReceiverTest, InjectReceiverReportWithReceiverLogVerificationBase) { | 486 TEST_F(RtcpReceiverTest, InjectReceiverReportWithReceiverLogVerificationBase) { |
| 485 static const uint32 kTimeBaseMs = 12345678; | 487 static const uint32 kTimeBaseMs = 12345678; |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 574 EXPECT_CALL(mock_rtt_feedback_, | 576 EXPECT_CALL(mock_rtt_feedback_, |
| 575 OnReceivedDelaySinceLastReport(kSourceSsrc, kLastSr, kDelayLastSr)). | 577 OnReceivedDelaySinceLastReport(kSourceSsrc, kLastSr, kDelayLastSr)). |
| 576 Times(1); | 578 Times(1); |
| 577 | 579 |
| 578 RtcpParser rtcp_parser(p.Packet(), p.Length()); | 580 RtcpParser rtcp_parser(p.Packet(), p.Length()); |
| 579 rtcp_receiver.IncomingRtcpPacket(&rtcp_parser); | 581 rtcp_receiver.IncomingRtcpPacket(&rtcp_parser); |
| 580 | 582 |
| 581 EXPECT_TRUE(cast_log_verification.OnReceivedReceiverLogCalled()); | 583 EXPECT_TRUE(cast_log_verification.OnReceivedReceiverLogCalled()); |
| 582 } | 584 } |
| 583 | 585 |
| 584 | |
| 585 | |
| 586 } // namespace cast | 586 } // namespace cast |
| 587 } // namespace media | 587 } // namespace media |
| OLD | NEW |