Add explicit |forceOnlineSignin| to user pod status
[chromium-blink-merge.git] / media / cast / rtcp / rtcp_unittest.cc
blob29e9a88e4ba833ba62b96e0d57f8d23bbc49f3aa
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
3 // found in the LICENSE file.
5 #include "base/test/simple_test_tick_clock.h"
6 #include "media/cast/cast_defines.h"
7 #include "media/cast/cast_environment.h"
8 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h"
9 #include "media/cast/rtcp/mock_rtcp_sender_feedback.h"
10 #include "media/cast/rtcp/rtcp.h"
11 #include "media/cast/rtcp/test_rtcp_packet_builder.h"
12 #include "media/cast/test/fake_task_runner.h"
13 #include "media/cast/transport/pacing/paced_sender.h"
14 #include "testing/gmock/include/gmock/gmock.h"
16 namespace media {
17 namespace cast {
19 using testing::_;
21 static const uint32 kSenderSsrc = 0x10203;
22 static const uint32 kReceiverSsrc = 0x40506;
23 static const std::string kCName("test@10.1.1.1");
24 static const uint32 kRtcpIntervalMs = 500;
25 static const int64 kStartMillisecond = GG_INT64_C(12345678900000);
26 static const int64 kAddedDelay = 123;
27 static const int64 kAddedShortDelay= 100;
29 class LocalRtcpTransport : public transport::PacedPacketSender {
30 public:
31 explicit LocalRtcpTransport(scoped_refptr<CastEnvironment> cast_environment,
32 base::SimpleTestTickClock* testing_clock)
33 : drop_packets_(false),
34 short_delay_(false),
35 testing_clock_(testing_clock) {}
37 void SetRtcpReceiver(Rtcp* rtcp) { rtcp_ = rtcp; }
39 void SetShortDelay() { short_delay_ = true; }
41 void SetDropPackets(bool drop_packets) { drop_packets_ = drop_packets; }
44 virtual bool SendRtcpPacket(const std::vector<uint8>& packet) OVERRIDE {
45 if (short_delay_) {
46 testing_clock_->Advance(
47 base::TimeDelta::FromMilliseconds(kAddedShortDelay));
48 } else {
49 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(kAddedDelay));
51 if (drop_packets_) return true;
53 rtcp_->IncomingRtcpPacket(&(packet[0]), packet.size());
54 return true;
57 virtual bool SendPackets(const PacketList& packets) OVERRIDE {
58 return false;
61 virtual bool ResendPackets(const PacketList& packets) OVERRIDE {
62 return false;
65 private:
66 bool drop_packets_;
67 bool short_delay_;
68 Rtcp* rtcp_;
69 base::SimpleTestTickClock* testing_clock_;
70 scoped_refptr<CastEnvironment> cast_environment_;
73 class RtcpPeer : public Rtcp {
74 public:
75 RtcpPeer(scoped_refptr<CastEnvironment> cast_environment,
76 RtcpSenderFeedback* sender_feedback,
77 transport::PacedPacketSender* const paced_packet_sender,
78 RtpSenderStatistics* rtp_sender_statistics,
79 RtpReceiverStatistics* rtp_receiver_statistics,
80 RtcpMode rtcp_mode,
81 const base::TimeDelta& rtcp_interval,
82 uint32 local_ssrc,
83 uint32 remote_ssrc,
84 const std::string& c_name)
85 : Rtcp(cast_environment,
86 sender_feedback,
87 paced_packet_sender,
88 rtp_sender_statistics,
89 rtp_receiver_statistics,
90 rtcp_mode,
91 rtcp_interval,
92 local_ssrc,
93 remote_ssrc,
94 c_name) {
97 using Rtcp::CheckForWrapAround;
98 using Rtcp::OnReceivedLipSyncInfo;
101 class RtcpTest : public ::testing::Test {
102 protected:
103 RtcpTest()
104 : task_runner_(new test::FakeTaskRunner(&testing_clock_)),
105 cast_environment_(new CastEnvironment(&testing_clock_, task_runner_,
106 task_runner_, task_runner_, task_runner_, task_runner_,
107 task_runner_, GetDefaultCastLoggingConfig())),
108 transport_(cast_environment_, &testing_clock_) {
109 testing_clock_.Advance(
110 base::TimeDelta::FromMilliseconds(kStartMillisecond));
113 virtual ~RtcpTest() {}
115 virtual void SetUp() {
116 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(0);
119 base::SimpleTestTickClock testing_clock_;
120 scoped_refptr<test::FakeTaskRunner> task_runner_;
121 scoped_refptr<CastEnvironment> cast_environment_;
122 LocalRtcpTransport transport_;
123 MockRtcpSenderFeedback mock_sender_feedback_;
126 TEST_F(RtcpTest, TimeToSend) {
127 base::TimeTicks start_time;
128 start_time += base::TimeDelta::FromMilliseconds(kStartMillisecond);
129 Rtcp rtcp(cast_environment_,
130 &mock_sender_feedback_,
131 &transport_,
132 NULL,
133 NULL,
134 kRtcpCompound,
135 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
136 kSenderSsrc,
137 kReceiverSsrc,
138 kCName);
139 transport_.SetRtcpReceiver(&rtcp);
140 EXPECT_LE(start_time, rtcp.TimeToSendNextRtcpReport());
141 EXPECT_GE(start_time + base::TimeDelta::FromMilliseconds(
142 kRtcpIntervalMs * 3 / 2),
143 rtcp.TimeToSendNextRtcpReport());
144 base::TimeDelta delta = rtcp.TimeToSendNextRtcpReport() - start_time;
145 testing_clock_.Advance(delta);
146 EXPECT_EQ(testing_clock_.NowTicks(), rtcp.TimeToSendNextRtcpReport());
149 TEST_F(RtcpTest, BasicSenderReport) {
150 Rtcp rtcp(cast_environment_,
151 &mock_sender_feedback_,
152 &transport_,
153 NULL,
154 NULL,
155 kRtcpCompound,
156 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
157 kSenderSsrc,
158 kReceiverSsrc,
159 kCName);
160 transport_.SetRtcpReceiver(&rtcp);
161 rtcp.SendRtcpFromRtpSender(NULL);
164 TEST_F(RtcpTest, BasicReceiverReport) {
165 Rtcp rtcp(cast_environment_,
166 &mock_sender_feedback_,
167 &transport_,
168 NULL,
169 NULL,
170 kRtcpCompound,
171 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
172 kSenderSsrc,
173 kReceiverSsrc,
174 kCName);
175 transport_.SetRtcpReceiver(&rtcp);
176 rtcp.SendRtcpFromRtpReceiver(NULL, NULL);
179 TEST_F(RtcpTest, BasicCast) {
180 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(1);
182 // Media receiver.
183 Rtcp rtcp(cast_environment_,
184 &mock_sender_feedback_,
185 &transport_,
186 NULL,
187 NULL,
188 kRtcpReducedSize,
189 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
190 kSenderSsrc,
191 kSenderSsrc,
192 kCName);
193 transport_.SetRtcpReceiver(&rtcp);
194 RtcpCastMessage cast_message(kSenderSsrc);
195 cast_message.ack_frame_id_ = kAckFrameId;
196 PacketIdSet missing_packets;
197 cast_message.missing_frames_and_packets_[
198 kLostFrameId] = missing_packets;
200 missing_packets.insert(kLostPacketId1);
201 missing_packets.insert(kLostPacketId2);
202 missing_packets.insert(kLostPacketId3);
203 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] =
204 missing_packets;
205 rtcp.SendRtcpFromRtpReceiver(&cast_message, NULL);
208 TEST_F(RtcpTest, RttReducedSizeRtcp) {
209 // Media receiver.
210 LocalRtcpTransport receiver_transport(cast_environment_, &testing_clock_);
211 Rtcp rtcp_receiver(cast_environment_,
212 &mock_sender_feedback_,
213 &receiver_transport,
214 NULL,
215 NULL,
216 kRtcpReducedSize,
217 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
218 kReceiverSsrc,
219 kSenderSsrc,
220 kCName);
222 // Media sender.
223 LocalRtcpTransport sender_transport(cast_environment_, &testing_clock_);
224 Rtcp rtcp_sender(cast_environment_,
225 &mock_sender_feedback_,
226 &sender_transport,
227 NULL,
228 NULL,
229 kRtcpReducedSize,
230 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
231 kSenderSsrc,
232 kReceiverSsrc,
233 kCName);
235 receiver_transport.SetRtcpReceiver(&rtcp_sender);
236 sender_transport.SetRtcpReceiver(&rtcp_receiver);
238 base::TimeDelta rtt;
239 base::TimeDelta avg_rtt;
240 base::TimeDelta min_rtt;
241 base::TimeDelta max_rtt;
242 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
243 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
245 rtcp_sender.SendRtcpFromRtpSender(NULL);
246 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
247 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
248 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
249 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1);
250 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1);
251 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1);
252 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1);
253 rtcp_sender.SendRtcpFromRtpSender(NULL);
254 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
256 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1);
257 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1);
258 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1);
259 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1);
262 TEST_F(RtcpTest, Rtt) {
263 // Media receiver.
264 LocalRtcpTransport receiver_transport(cast_environment_, &testing_clock_);
265 Rtcp rtcp_receiver(cast_environment_,
266 &mock_sender_feedback_,
267 &receiver_transport,
268 NULL,
269 NULL,
270 kRtcpCompound,
271 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
272 kReceiverSsrc,
273 kSenderSsrc,
274 kCName);
276 // Media sender.
277 LocalRtcpTransport sender_transport(cast_environment_, &testing_clock_);
278 Rtcp rtcp_sender(cast_environment_,
279 &mock_sender_feedback_,
280 &sender_transport,
281 NULL,
282 NULL,
283 kRtcpCompound,
284 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
285 kSenderSsrc,
286 kReceiverSsrc,
287 kCName);
289 receiver_transport.SetRtcpReceiver(&rtcp_sender);
290 sender_transport.SetRtcpReceiver(&rtcp_receiver);
292 base::TimeDelta rtt;
293 base::TimeDelta avg_rtt;
294 base::TimeDelta min_rtt;
295 base::TimeDelta max_rtt;
296 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
297 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
299 rtcp_sender.SendRtcpFromRtpSender(NULL);
300 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
301 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
302 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
303 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1);
304 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1);
305 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1);
306 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1);
308 rtcp_sender.SendRtcpFromRtpSender(NULL);
309 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
310 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1);
311 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1);
312 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1);
313 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1);
315 receiver_transport.SetShortDelay();
316 sender_transport.SetShortDelay();
317 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
318 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
319 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 1);
320 EXPECT_NEAR((kAddedShortDelay + 3 * kAddedDelay) / 2,
321 avg_rtt.InMilliseconds(),
323 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, min_rtt.InMilliseconds(), 1);
324 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1);
326 rtcp_sender.SendRtcpFromRtpSender(NULL);
327 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
328 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1);
329 EXPECT_NEAR((2 * kAddedShortDelay + 2 * kAddedDelay) / 2,
330 avg_rtt.InMilliseconds(),
332 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 1);
333 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1);
335 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
336 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
337 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1);
338 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 1);
339 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1);
341 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
342 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
343 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1);
344 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 1);
345 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1);
348 TEST_F(RtcpTest, RttWithPacketLoss) {
349 // Media receiver.
350 LocalRtcpTransport receiver_transport(cast_environment_, &testing_clock_);
351 Rtcp rtcp_receiver(cast_environment_,
352 &mock_sender_feedback_,
353 &receiver_transport,
354 NULL,
355 NULL,
356 kRtcpReducedSize,
357 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
358 kSenderSsrc,
359 kReceiverSsrc,
360 kCName);
362 // Media sender.
363 LocalRtcpTransport sender_transport(cast_environment_, &testing_clock_);
364 Rtcp rtcp_sender(cast_environment_,
365 &mock_sender_feedback_,
366 &sender_transport,
367 NULL,
368 NULL,
369 kRtcpReducedSize,
370 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
371 kReceiverSsrc,
372 kSenderSsrc,
373 kCName);
375 receiver_transport.SetRtcpReceiver(&rtcp_sender);
376 sender_transport.SetRtcpReceiver(&rtcp_receiver);
378 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
379 rtcp_sender.SendRtcpFromRtpSender(NULL);
381 base::TimeDelta rtt;
382 base::TimeDelta avg_rtt;
383 base::TimeDelta min_rtt;
384 base::TimeDelta max_rtt;
385 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
386 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
387 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1);
388 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1);
389 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1);
390 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1);
392 receiver_transport.SetShortDelay();
393 sender_transport.SetShortDelay();
394 receiver_transport.SetDropPackets(true);
396 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
397 rtcp_sender.SendRtcpFromRtpSender(NULL);
399 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
400 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 1);
403 TEST_F(RtcpTest, NtpAndTime) {
404 const int64 kSecondsbetweenYear1900and2010 = GG_INT64_C(40176 * 24 * 60 * 60);
405 const int64 kSecondsbetweenYear1900and2030 = GG_INT64_C(47481 * 24 * 60 * 60);
407 uint32 ntp_seconds_1 = 0;
408 uint32 ntp_fractions_1 = 0;
409 base::TimeTicks input_time = base::TimeTicks::Now();
410 ConvertTimeTicksToNtp(input_time, &ntp_seconds_1, &ntp_fractions_1);
412 // Verify absolute value.
413 EXPECT_GT(ntp_seconds_1, kSecondsbetweenYear1900and2010);
414 EXPECT_LT(ntp_seconds_1, kSecondsbetweenYear1900and2030);
416 base::TimeTicks out_1 = ConvertNtpToTimeTicks(ntp_seconds_1, ntp_fractions_1);
417 EXPECT_EQ(input_time, out_1); // Verify inverse.
419 base::TimeDelta time_delta = base::TimeDelta::FromMilliseconds(1000);
420 input_time += time_delta;
422 uint32 ntp_seconds_2 = 0;
423 uint32 ntp_fractions_2 = 0;
425 ConvertTimeTicksToNtp(input_time, &ntp_seconds_2, &ntp_fractions_2);
426 base::TimeTicks out_2 = ConvertNtpToTimeTicks(ntp_seconds_2, ntp_fractions_2);
427 EXPECT_EQ(input_time, out_2); // Verify inverse.
429 // Verify delta.
430 EXPECT_EQ((out_2 - out_1), time_delta);
431 EXPECT_EQ((ntp_seconds_2 - ntp_seconds_1), GG_UINT32_C(1));
432 EXPECT_NEAR(ntp_fractions_2, ntp_fractions_1, 1);
434 time_delta = base::TimeDelta::FromMilliseconds(500);
435 input_time += time_delta;
437 uint32 ntp_seconds_3 = 0;
438 uint32 ntp_fractions_3 = 0;
440 ConvertTimeTicksToNtp(input_time, &ntp_seconds_3, &ntp_fractions_3);
441 base::TimeTicks out_3 = ConvertNtpToTimeTicks(ntp_seconds_3, ntp_fractions_3);
442 EXPECT_EQ(input_time, out_3); // Verify inverse.
444 // Verify delta.
445 EXPECT_EQ((out_3 - out_2), time_delta);
446 EXPECT_NEAR((ntp_fractions_3 - ntp_fractions_2), 0xffffffff / 2, 1);
449 TEST_F(RtcpTest, WrapAround) {
450 RtcpPeer rtcp_peer(cast_environment_,
451 &mock_sender_feedback_,
452 NULL,
453 NULL,
454 NULL,
455 kRtcpReducedSize,
456 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
457 kReceiverSsrc,
458 kSenderSsrc,
459 kCName);
460 uint32 new_timestamp = 0;
461 uint32 old_timestamp = 0;
462 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp));
463 new_timestamp = 1234567890;
464 old_timestamp = 1234567000;
465 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp));
466 new_timestamp = 1234567000;
467 old_timestamp = 1234567890;
468 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp));
469 new_timestamp = 123;
470 old_timestamp = 4234567890u;
471 EXPECT_EQ(1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp));
472 new_timestamp = 4234567890u;
473 old_timestamp = 123;
474 EXPECT_EQ(-1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp));
477 TEST_F(RtcpTest, RtpTimestampInSenderTime) {
478 RtcpPeer rtcp_peer(cast_environment_,
479 &mock_sender_feedback_,
480 NULL,
481 NULL,
482 NULL,
483 kRtcpReducedSize,
484 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
485 kReceiverSsrc,
486 kSenderSsrc,
487 kCName);
488 int frequency = 32000;
489 uint32 rtp_timestamp = 64000;
490 base::TimeTicks rtp_timestamp_in_ticks;
492 // Test fail before we get a OnReceivedLipSyncInfo.
493 EXPECT_FALSE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp,
494 &rtp_timestamp_in_ticks));
496 uint32 ntp_seconds = 0;
497 uint32 ntp_fractions = 0;
498 uint64 input_time_us = 12345678901000LL;
499 base::TimeTicks input_time;
500 input_time += base::TimeDelta::FromMicroseconds(input_time_us);
502 // Test exact match.
503 ConvertTimeTicksToNtp(input_time, &ntp_seconds, &ntp_fractions);
504 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions);
505 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp,
506 &rtp_timestamp_in_ticks));
507 EXPECT_EQ(input_time, rtp_timestamp_in_ticks);
509 // Test older rtp_timestamp.
510 rtp_timestamp = 32000;
511 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp,
512 &rtp_timestamp_in_ticks));
513 EXPECT_EQ(input_time - base::TimeDelta::FromMilliseconds(1000),
514 rtp_timestamp_in_ticks);
516 // Test older rtp_timestamp with wrap.
517 rtp_timestamp = 4294903296u;
518 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp,
519 &rtp_timestamp_in_ticks));
520 EXPECT_EQ(input_time - base::TimeDelta::FromMilliseconds(4000),
521 rtp_timestamp_in_ticks);
523 // Test newer rtp_timestamp.
524 rtp_timestamp = 128000;
525 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp,
526 &rtp_timestamp_in_ticks));
527 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(2000),
528 rtp_timestamp_in_ticks);
530 // Test newer rtp_timestamp with wrap.
531 rtp_timestamp = 4294903296u;
532 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions);
533 rtp_timestamp = 64000;
534 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp,
535 &rtp_timestamp_in_ticks));
536 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(4000),
537 rtp_timestamp_in_ticks);
540 } // namespace cast
541 } // namespace media