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

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

Issue 69603002: Incorporating logging into Cast (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: clean up 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 | Annotate | Revision Log
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/test/simple_test_tick_clock.h" 5 #include "base/test/simple_test_tick_clock.h"
6 #include "media/cast/cast_defines.h" 6 #include "media/cast/cast_defines.h"
7 #include "media/cast/cast_environment.h"
7 #include "media/cast/pacing/paced_sender.h" 8 #include "media/cast/pacing/paced_sender.h"
8 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h" 9 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h"
9 #include "media/cast/rtcp/mock_rtcp_sender_feedback.h" 10 #include "media/cast/rtcp/mock_rtcp_sender_feedback.h"
10 #include "media/cast/rtcp/rtcp.h" 11 #include "media/cast/rtcp/rtcp.h"
11 #include "media/cast/rtcp/test_rtcp_packet_builder.h" 12 #include "media/cast/rtcp/test_rtcp_packet_builder.h"
13 #include "media/cast/test/fake_task_runner.h"
12 #include "testing/gmock/include/gmock/gmock.h" 14 #include "testing/gmock/include/gmock/gmock.h"
13 15
14 namespace media { 16 namespace media {
15 namespace cast { 17 namespace cast {
16 18
17 using testing::_; 19 using testing::_;
18 20
19 static const uint32 kSenderSsrc = 0x10203; 21 static const uint32 kSenderSsrc = 0x10203;
20 static const uint32 kReceiverSsrc = 0x40506; 22 static const uint32 kReceiverSsrc = 0x40506;
21 static const uint32 kUnknownSsrc = 0xDEAD; 23 static const uint32 kUnknownSsrc = 0xDEAD;
22 static const std::string kCName("test@10.1.1.1"); 24 static const std::string kCName("test@10.1.1.1");
23 static const uint32 kRtcpIntervalMs = 500; 25 static const uint32 kRtcpIntervalMs = 500;
24 static const int64 kStartMillisecond = GG_INT64_C(12345678900000); 26 static const int64 kStartMillisecond = GG_INT64_C(12345678900000);
25 static const int64 kAddedDelay = 123; 27 static const int64 kAddedDelay = 123;
26 static const int64 kAddedShortDelay= 100; 28 static const int64 kAddedShortDelay= 100;
27 29
28 class LocalRtcpTransport : public PacedPacketSender { 30 class LocalRtcpTransport : public PacedPacketSender {
29 public: 31 public:
30 explicit LocalRtcpTransport(base::SimpleTestTickClock* testing_clock) 32 LocalRtcpTransport(scoped_refptr<CastEnvironment> cast_environment,
33 base::SimpleTestTickClock* testing_clock)
31 : short_delay_(false), 34 : short_delay_(false),
32 testing_clock_(testing_clock) {} 35 testing_clock_(testing_clock) {}
33 36
34 void SetRtcpReceiver(Rtcp* rtcp) { rtcp_ = rtcp; } 37 void SetRtcpReceiver(Rtcp* rtcp) { rtcp_ = rtcp; }
35 38
36 void SetShortDelay() { short_delay_ = true; } 39 void SetShortDelay() { short_delay_ = true; }
37 40
38 virtual bool SendRtcpPacket(const std::vector<uint8>& packet) OVERRIDE { 41 virtual bool SendRtcpPacket(const std::vector<uint8>& packet) OVERRIDE {
39 if (short_delay_) { 42 if (short_delay_) {
40 testing_clock_->Advance( 43 testing_clock_->Advance(
(...skipping 10 matching lines...) Expand all
51 } 54 }
52 55
53 virtual bool ResendPackets(const PacketList& packets) OVERRIDE { 56 virtual bool ResendPackets(const PacketList& packets) OVERRIDE {
54 return false; 57 return false;
55 } 58 }
56 59
57 private: 60 private:
58 bool short_delay_; 61 bool short_delay_;
59 Rtcp* rtcp_; 62 Rtcp* rtcp_;
60 base::SimpleTestTickClock* testing_clock_; 63 base::SimpleTestTickClock* testing_clock_;
64 scoped_refptr<CastEnvironment> cast_environment_;
61 }; 65 };
62 66
63 class RtcpPeer : public Rtcp { 67 class RtcpPeer : public Rtcp {
64 public: 68 public:
65 RtcpPeer(base::TickClock* clock, 69 RtcpPeer(scoped_refptr<CastEnvironment> cast_environment,
66 RtcpSenderFeedback* sender_feedback, 70 RtcpSenderFeedback* sender_feedback,
67 PacedPacketSender* const paced_packet_sender, 71 PacedPacketSender* const paced_packet_sender,
68 RtpSenderStatistics* rtp_sender_statistics, 72 RtpSenderStatistics* rtp_sender_statistics,
69 RtpReceiverStatistics* rtp_receiver_statistics, 73 RtpReceiverStatistics* rtp_receiver_statistics,
70 RtcpMode rtcp_mode, 74 RtcpMode rtcp_mode,
71 const base::TimeDelta& rtcp_interval, 75 const base::TimeDelta& rtcp_interval,
72 bool sending_media, 76 bool sending_media,
73 uint32 local_ssrc, 77 uint32 local_ssrc,
74 const std::string& c_name) 78 const std::string& c_name)
75 : Rtcp(clock, 79 : Rtcp(cast_environment,
76 sender_feedback, 80 sender_feedback,
77 paced_packet_sender, 81 paced_packet_sender,
78 rtp_sender_statistics, 82 rtp_sender_statistics,
79 rtp_receiver_statistics, 83 rtp_receiver_statistics,
80 rtcp_mode, 84 rtcp_mode,
81 rtcp_interval, 85 rtcp_interval,
82 sending_media, 86 sending_media,
83 local_ssrc, 87 local_ssrc,
84 c_name) { 88 c_name) {
85 } 89 }
86 90
87 using Rtcp::CheckForWrapAround; 91 using Rtcp::CheckForWrapAround;
88 using Rtcp::OnReceivedLipSyncInfo; 92 using Rtcp::OnReceivedLipSyncInfo;
89 }; 93 };
90 94
91 class RtcpTest : public ::testing::Test { 95 class RtcpTest : public ::testing::Test {
92 protected: 96 protected:
93 RtcpTest() 97 RtcpTest()
94 : transport_(&testing_clock_) { 98 : task_runner_(new test::FakeTaskRunner(&testing_clock_)),
99 cast_environment_(new CastEnvironment(&testing_clock_, task_runner_,
100 task_runner_, task_runner_, task_runner_, task_runner_,
101 false, false, false)),
102 transport_(cast_environment_, &testing_clock_) {
95 testing_clock_.Advance( 103 testing_clock_.Advance(
96 base::TimeDelta::FromMilliseconds(kStartMillisecond)); 104 base::TimeDelta::FromMilliseconds(kStartMillisecond));
97 } 105 }
98 106
99 virtual ~RtcpTest() {} 107 virtual ~RtcpTest() {}
100 108
101 virtual void SetUp() { 109 virtual void SetUp() {
102 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(0); 110 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(0);
103 } 111 }
104 112
105 base::SimpleTestTickClock testing_clock_; 113 base::SimpleTestTickClock testing_clock_;
114 scoped_refptr<test::FakeTaskRunner> task_runner_;
115 scoped_refptr<CastEnvironment> cast_environment_;
106 LocalRtcpTransport transport_; 116 LocalRtcpTransport transport_;
107 MockRtcpSenderFeedback mock_sender_feedback_; 117 MockRtcpSenderFeedback mock_sender_feedback_;
108 }; 118 };
109 119
110 TEST_F(RtcpTest, TimeToSend) { 120 TEST_F(RtcpTest, TimeToSend) {
111 base::TimeTicks start_time; 121 base::TimeTicks start_time;
112 start_time += base::TimeDelta::FromMilliseconds(kStartMillisecond); 122 start_time += base::TimeDelta::FromMilliseconds(kStartMillisecond);
113 Rtcp rtcp(&testing_clock_, 123 Rtcp rtcp(cast_environment_,
114 &mock_sender_feedback_, 124 &mock_sender_feedback_,
115 &transport_, 125 &transport_,
116 NULL, 126 NULL,
117 NULL, 127 NULL,
118 kRtcpCompound, 128 kRtcpCompound,
119 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 129 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
120 true, // Media sender. 130 true, // Media sender.
121 kSenderSsrc, 131 kSenderSsrc,
122 kCName); 132 kCName);
123 transport_.SetRtcpReceiver(&rtcp); 133 transport_.SetRtcpReceiver(&rtcp);
124 EXPECT_LE(start_time, rtcp.TimeToSendNextRtcpReport()); 134 EXPECT_LE(start_time, rtcp.TimeToSendNextRtcpReport());
125 EXPECT_GE(start_time + base::TimeDelta::FromMilliseconds( 135 EXPECT_GE(start_time + base::TimeDelta::FromMilliseconds(
126 kRtcpIntervalMs * 3 / 2), 136 kRtcpIntervalMs * 3 / 2),
127 rtcp.TimeToSendNextRtcpReport()); 137 rtcp.TimeToSendNextRtcpReport());
128 base::TimeDelta delta = rtcp.TimeToSendNextRtcpReport() - start_time; 138 base::TimeDelta delta = rtcp.TimeToSendNextRtcpReport() - start_time;
129 testing_clock_.Advance(delta); 139 testing_clock_.Advance(delta);
130 EXPECT_EQ(testing_clock_.NowTicks(), rtcp.TimeToSendNextRtcpReport()); 140 EXPECT_EQ(testing_clock_.NowTicks(), rtcp.TimeToSendNextRtcpReport());
131 } 141 }
132 142
133 TEST_F(RtcpTest, BasicSenderReport) { 143 TEST_F(RtcpTest, BasicSenderReport) {
134 Rtcp rtcp(&testing_clock_, 144 Rtcp rtcp(cast_environment_,
135 &mock_sender_feedback_, 145 &mock_sender_feedback_,
136 &transport_, 146 &transport_,
137 NULL, 147 NULL,
138 NULL, 148 NULL,
139 kRtcpCompound, 149 kRtcpCompound,
140 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 150 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
141 true, // Media sender. 151 true, // Media sender.
142 kSenderSsrc, 152 kSenderSsrc,
143 kCName); 153 kCName);
144 transport_.SetRtcpReceiver(&rtcp); 154 transport_.SetRtcpReceiver(&rtcp);
145 rtcp.SendRtcpReport(kUnknownSsrc); 155 rtcp.SendRtcpReport(kUnknownSsrc);
146 } 156 }
147 157
148 TEST_F(RtcpTest, BasicReceiverReport) { 158 TEST_F(RtcpTest, BasicReceiverReport) {
149 Rtcp rtcp(&testing_clock_, 159 Rtcp rtcp(cast_environment_,
150 &mock_sender_feedback_, 160 &mock_sender_feedback_,
151 &transport_, 161 &transport_,
152 NULL, 162 NULL,
153 NULL, 163 NULL,
154 kRtcpCompound, 164 kRtcpCompound,
155 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 165 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
156 false, // Media receiver. 166 false, // Media receiver.
157 kSenderSsrc, 167 kSenderSsrc,
158 kCName); 168 kCName);
159 transport_.SetRtcpReceiver(&rtcp); 169 transport_.SetRtcpReceiver(&rtcp);
160 rtcp.SetRemoteSSRC(kSenderSsrc); 170 rtcp.SetRemoteSSRC(kSenderSsrc);
161 rtcp.SendRtcpReport(kSenderSsrc); 171 rtcp.SendRtcpReport(kSenderSsrc);
162 } 172 }
163 173
164 TEST_F(RtcpTest, BasicCast) { 174 TEST_F(RtcpTest, BasicCast) {
165 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(1); 175 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(1);
166 176
167 // Media receiver. 177 // Media receiver.
168 Rtcp rtcp(&testing_clock_, 178 Rtcp rtcp(cast_environment_,
169 &mock_sender_feedback_, 179 &mock_sender_feedback_,
170 &transport_, 180 &transport_,
171 NULL, 181 NULL,
172 NULL, 182 NULL,
173 kRtcpReducedSize, 183 kRtcpReducedSize,
174 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 184 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
175 false, 185 false,
176 kSenderSsrc, 186 kSenderSsrc,
177 kCName); 187 kCName);
178 transport_.SetRtcpReceiver(&rtcp); 188 transport_.SetRtcpReceiver(&rtcp);
179 rtcp.SetRemoteSSRC(kSenderSsrc); 189 rtcp.SetRemoteSSRC(kSenderSsrc);
180 RtcpCastMessage cast_message(kSenderSsrc); 190 RtcpCastMessage cast_message(kSenderSsrc);
181 cast_message.ack_frame_id_ = kAckFrameId; 191 cast_message.ack_frame_id_ = kAckFrameId;
182 PacketIdSet missing_packets; 192 PacketIdSet missing_packets;
183 cast_message.missing_frames_and_packets_[ 193 cast_message.missing_frames_and_packets_[
184 kLostFrameId] = missing_packets; 194 kLostFrameId] = missing_packets;
185 195
186 missing_packets.insert(kLostPacketId1); 196 missing_packets.insert(kLostPacketId1);
187 missing_packets.insert(kLostPacketId2); 197 missing_packets.insert(kLostPacketId2);
188 missing_packets.insert(kLostPacketId3); 198 missing_packets.insert(kLostPacketId3);
189 cast_message.missing_frames_and_packets_[ 199 cast_message.missing_frames_and_packets_[
190 kFrameIdWithLostPackets] = missing_packets; 200 kFrameIdWithLostPackets] = missing_packets;
191 rtcp.SendRtcpCast(cast_message); 201 rtcp.SendRtcpCast(cast_message);
192 } 202 }
193 203
194 TEST_F(RtcpTest, Rtt) { 204 TEST_F(RtcpTest, Rtt) {
195 // Media receiver. 205 // Media receiver.
196 LocalRtcpTransport receiver_transport(&testing_clock_); 206 LocalRtcpTransport receiver_transport(cast_environment_, &testing_clock_);
197 Rtcp rtcp_receiver(&testing_clock_, 207 Rtcp rtcp_receiver(cast_environment_,
198 &mock_sender_feedback_, 208 &mock_sender_feedback_,
199 &receiver_transport, 209 &receiver_transport,
200 NULL, 210 NULL,
201 NULL, 211 NULL,
202 kRtcpReducedSize, 212 kRtcpReducedSize,
203 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 213 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
204 false, 214 false,
205 kReceiverSsrc, 215 kReceiverSsrc,
206 kCName); 216 kCName);
207 217
208 // Media sender. 218 // Media sender.
209 LocalRtcpTransport sender_transport(&testing_clock_); 219 LocalRtcpTransport sender_transport(cast_environment_, &testing_clock_);
210 Rtcp rtcp_sender(&testing_clock_, 220 Rtcp rtcp_sender(cast_environment_,
211 &mock_sender_feedback_, 221 &mock_sender_feedback_,
212 &sender_transport, 222 &sender_transport,
213 NULL, 223 NULL,
214 NULL, 224 NULL,
215 kRtcpReducedSize, 225 kRtcpReducedSize,
216 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 226 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
217 true, 227 true,
218 kSenderSsrc, 228 kSenderSsrc,
219 kCName); 229 kCName);
220 230
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 base::TimeTicks out_2 = ConvertNtpToTimeTicks(ntp_seconds_2, ntp_fractions_2); 305 base::TimeTicks out_2 = ConvertNtpToTimeTicks(ntp_seconds_2, ntp_fractions_2);
296 EXPECT_EQ(input_time, out_2); // Verify inverse. 306 EXPECT_EQ(input_time, out_2); // Verify inverse.
297 307
298 // Verify delta. 308 // Verify delta.
299 EXPECT_EQ((out_2 - out_1), time_delta); 309 EXPECT_EQ((out_2 - out_1), time_delta);
300 EXPECT_EQ((ntp_seconds_2 - ntp_seconds_1), GG_UINT32_C(1)); 310 EXPECT_EQ((ntp_seconds_2 - ntp_seconds_1), GG_UINT32_C(1));
301 EXPECT_NEAR((ntp_fractions_2 - ntp_fractions_1), 0xffffffff / 10, 1); 311 EXPECT_NEAR((ntp_fractions_2 - ntp_fractions_1), 0xffffffff / 10, 1);
302 } 312 }
303 313
304 TEST_F(RtcpTest, WrapAround) { 314 TEST_F(RtcpTest, WrapAround) {
305 RtcpPeer rtcp_peer(&testing_clock_, 315 RtcpPeer rtcp_peer(cast_environment_,
306 &mock_sender_feedback_, 316 &mock_sender_feedback_,
307 NULL, 317 NULL,
308 NULL, 318 NULL,
309 NULL, 319 NULL,
310 kRtcpReducedSize, 320 kRtcpReducedSize,
311 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 321 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
312 false, 322 false,
313 kReceiverSsrc, 323 kReceiverSsrc,
314 kCName); 324 kCName);
315 uint32 new_timestamp = 0; 325 uint32 new_timestamp = 0;
316 uint32 old_timestamp = 0; 326 uint32 old_timestamp = 0;
317 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); 327 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp));
318 new_timestamp = 1234567890; 328 new_timestamp = 1234567890;
319 old_timestamp = 1234567000; 329 old_timestamp = 1234567000;
320 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); 330 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp));
321 new_timestamp = 1234567000; 331 new_timestamp = 1234567000;
322 old_timestamp = 1234567890; 332 old_timestamp = 1234567890;
323 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); 333 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp));
324 new_timestamp = 123; 334 new_timestamp = 123;
325 old_timestamp = 4234567890u; 335 old_timestamp = 4234567890u;
326 EXPECT_EQ(1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); 336 EXPECT_EQ(1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp));
327 new_timestamp = 4234567890u; 337 new_timestamp = 4234567890u;
328 old_timestamp = 123; 338 old_timestamp = 123;
329 EXPECT_EQ(-1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); 339 EXPECT_EQ(-1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp));
330 } 340 }
331 341
332 TEST_F(RtcpTest, RtpTimestampInSenderTime) { 342 TEST_F(RtcpTest, RtpTimestampInSenderTime) {
333 RtcpPeer rtcp_peer(&testing_clock_, 343 RtcpPeer rtcp_peer(cast_environment_,
334 &mock_sender_feedback_, 344 &mock_sender_feedback_,
335 NULL, 345 NULL,
336 NULL, 346 NULL,
337 NULL, 347 NULL,
338 kRtcpReducedSize, 348 kRtcpReducedSize,
339 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 349 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
340 false, 350 false,
341 kReceiverSsrc, 351 kReceiverSsrc,
342 kCName); 352 kCName);
343 int frequency = 32000; 353 int frequency = 32000;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions); 397 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions);
388 rtp_timestamp = 64000; 398 rtp_timestamp = 64000;
389 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, 399 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp,
390 &rtp_timestamp_in_ticks)); 400 &rtp_timestamp_in_ticks));
391 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(4000), 401 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(4000),
392 rtp_timestamp_in_ticks); 402 rtp_timestamp_in_ticks);
393 } 403 }
394 404
395 } // namespace cast 405 } // namespace cast
396 } // namespace media 406 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698