OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <stdint.h> | 5 #include <stdint.h> |
6 | 6 |
7 #include "base/big_endian.h" | 7 #include "base/big_endian.h" |
8 #include "base/test/simple_test_tick_clock.h" | 8 #include "base/test/simple_test_tick_clock.h" |
9 #include "media/cast/net/pacing/paced_sender.h" | 9 #include "media/cast/net/pacing/paced_sender.h" |
10 #include "media/cast/test/fake_single_thread_task_runner.h" | 10 #include "media/cast/test/fake_single_thread_task_runner.h" |
11 #include "testing/gmock/include/gmock/gmock.h" | 11 #include "testing/gmock/include/gmock/gmock.h" |
12 | 12 |
13 using testing::_; | 13 using testing::_; |
14 | 14 |
15 namespace media { | 15 namespace media { |
16 namespace cast { | 16 namespace cast { |
17 namespace { | 17 namespace { |
18 | 18 |
19 static const uint8 kValue = 123; | 19 static const uint8_t kValue = 123; |
20 static const size_t kSize1 = 101; | 20 static const size_t kSize1 = 101; |
21 static const size_t kSize2 = 102; | 21 static const size_t kSize2 = 102; |
22 static const size_t kSize3 = 103; | 22 static const size_t kSize3 = 103; |
23 static const size_t kSize4 = 104; | 23 static const size_t kSize4 = 104; |
24 static const size_t kNackSize = 105; | 24 static const size_t kNackSize = 105; |
25 static const int64 kStartMillisecond = INT64_C(12345678900000); | 25 static const int64_t kStartMillisecond = INT64_C(12345678900000); |
26 static const uint32 kVideoSsrc = 0x1234; | 26 static const uint32_t kVideoSsrc = 0x1234; |
27 static const uint32 kAudioSsrc = 0x5678; | 27 static const uint32_t kAudioSsrc = 0x5678; |
28 static const uint32 kFrameRtpTimestamp = 12345; | 28 static const uint32_t kFrameRtpTimestamp = 12345; |
29 | 29 |
30 class TestPacketSender : public PacketSender { | 30 class TestPacketSender : public PacketSender { |
31 public: | 31 public: |
32 TestPacketSender() : bytes_sent_(0) {} | 32 TestPacketSender() : bytes_sent_(0) {} |
33 | 33 |
34 bool SendPacket(PacketRef packet, const base::Closure& cb) final { | 34 bool SendPacket(PacketRef packet, const base::Closure& cb) final { |
35 EXPECT_FALSE(expected_packet_size_.empty()); | 35 EXPECT_FALSE(expected_packet_size_.empty()); |
36 size_t expected_packet_size = expected_packet_size_.front(); | 36 size_t expected_packet_size = expected_packet_size_.front(); |
37 expected_packet_size_.pop_front(); | 37 expected_packet_size_.pop_front(); |
38 EXPECT_EQ(expected_packet_size, packet->data.size()); | 38 EXPECT_EQ(expected_packet_size, packet->data.size()); |
39 bytes_sent_ += packet->data.size(); | 39 bytes_sent_ += packet->data.size(); |
40 return true; | 40 return true; |
41 } | 41 } |
42 | 42 |
43 int64 GetBytesSent() final { return bytes_sent_; } | 43 int64_t GetBytesSent() final { return bytes_sent_; } |
44 | 44 |
45 void AddExpectedSize(int expected_packet_size, int repeat_count) { | 45 void AddExpectedSize(int expected_packet_size, int repeat_count) { |
46 for (int i = 0; i < repeat_count; ++i) { | 46 for (int i = 0; i < repeat_count; ++i) { |
47 expected_packet_size_.push_back(expected_packet_size); | 47 expected_packet_size_.push_back(expected_packet_size); |
48 } | 48 } |
49 } | 49 } |
50 | 50 |
51 public: | 51 public: |
52 std::list<int> expected_packet_size_; | 52 std::list<int> expected_packet_size_; |
53 int64 bytes_sent_; | 53 int64_t bytes_sent_; |
54 | 54 |
55 DISALLOW_COPY_AND_ASSIGN(TestPacketSender); | 55 DISALLOW_COPY_AND_ASSIGN(TestPacketSender); |
56 }; | 56 }; |
57 | 57 |
58 class PacedSenderTest : public ::testing::Test { | 58 class PacedSenderTest : public ::testing::Test { |
59 protected: | 59 protected: |
60 PacedSenderTest() : frame_id_(0) { | 60 PacedSenderTest() : frame_id_(0) { |
61 testing_clock_.Advance( | 61 testing_clock_.Advance( |
62 base::TimeDelta::FromMilliseconds(kStartMillisecond)); | 62 base::TimeDelta::FromMilliseconds(kStartMillisecond)); |
63 task_runner_ = new test::FakeSingleThreadTaskRunner(&testing_clock_); | 63 task_runner_ = new test::FakeSingleThreadTaskRunner(&testing_clock_); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 } | 116 } |
117 | 117 |
118 return mock_transport_.expected_packet_size_.empty(); | 118 return mock_transport_.expected_packet_size_.empty(); |
119 } | 119 } |
120 | 120 |
121 std::vector<PacketEvent> packet_events_; | 121 std::vector<PacketEvent> packet_events_; |
122 base::SimpleTestTickClock testing_clock_; | 122 base::SimpleTestTickClock testing_clock_; |
123 TestPacketSender mock_transport_; | 123 TestPacketSender mock_transport_; |
124 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; | 124 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; |
125 scoped_ptr<PacedSender> paced_sender_; | 125 scoped_ptr<PacedSender> paced_sender_; |
126 uint32 frame_id_; | 126 uint32_t frame_id_; |
127 | 127 |
128 DISALLOW_COPY_AND_ASSIGN(PacedSenderTest); | 128 DISALLOW_COPY_AND_ASSIGN(PacedSenderTest); |
129 }; | 129 }; |
130 | 130 |
131 } // namespace | 131 } // namespace |
132 | 132 |
133 TEST_F(PacedSenderTest, PassThroughRtcp) { | 133 TEST_F(PacedSenderTest, PassThroughRtcp) { |
134 mock_transport_.AddExpectedSize(kSize1, 2); | 134 mock_transport_.AddExpectedSize(kSize1, 2); |
135 SendPacketVector packets = CreateSendPacketVector(kSize1, 1, true); | 135 SendPacketVector packets = CreateSendPacketVector(kSize1, 1, true); |
136 | 136 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
170 mock_transport_.AddExpectedSize(kSize1, 7); | 170 mock_transport_.AddExpectedSize(kSize1, 7); |
171 testing_clock_.Advance(timeout); | 171 testing_clock_.Advance(timeout); |
172 task_runner_->RunTasks(); | 172 task_runner_->RunTasks(); |
173 | 173 |
174 // Check that we don't get any more packets. | 174 // Check that we don't get any more packets. |
175 EXPECT_TRUE(RunUntilEmpty(3)); | 175 EXPECT_TRUE(RunUntilEmpty(3)); |
176 const base::TimeTicks latest_event_timestamp = testing_clock_.NowTicks(); | 176 const base::TimeTicks latest_event_timestamp = testing_clock_.NowTicks(); |
177 | 177 |
178 // Check that packet logging events match expected values. | 178 // Check that packet logging events match expected values. |
179 EXPECT_EQ(num_of_packets, static_cast<int>(packet_events_.size())); | 179 EXPECT_EQ(num_of_packets, static_cast<int>(packet_events_.size())); |
180 uint16 expected_packet_id = 0; | 180 uint16_t expected_packet_id = 0; |
181 for (const PacketEvent& e : packet_events_) { | 181 for (const PacketEvent& e : packet_events_) { |
182 ASSERT_LE(earliest_event_timestamp, e.timestamp); | 182 ASSERT_LE(earliest_event_timestamp, e.timestamp); |
183 ASSERT_GE(latest_event_timestamp, e.timestamp); | 183 ASSERT_GE(latest_event_timestamp, e.timestamp); |
184 ASSERT_EQ(PACKET_SENT_TO_NETWORK, e.type); | 184 ASSERT_EQ(PACKET_SENT_TO_NETWORK, e.type); |
185 ASSERT_EQ(VIDEO_EVENT, e.media_type); | 185 ASSERT_EQ(VIDEO_EVENT, e.media_type); |
186 ASSERT_EQ(kFrameRtpTimestamp, e.rtp_timestamp); | 186 ASSERT_EQ(kFrameRtpTimestamp, e.rtp_timestamp); |
187 ASSERT_EQ(num_of_packets - 1, e.max_packet_id); | 187 ASSERT_EQ(num_of_packets - 1, e.max_packet_id); |
188 ASSERT_EQ(expected_packet_id++, e.packet_id); | 188 ASSERT_EQ(expected_packet_id++, e.packet_id); |
189 ASSERT_EQ(kSize1, e.size); | 189 ASSERT_EQ(kSize1, e.size); |
190 } | 190 } |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 EXPECT_TRUE(RunUntilEmpty(4)); | 400 EXPECT_TRUE(RunUntilEmpty(4)); |
401 } | 401 } |
402 | 402 |
403 TEST_F(PacedSenderTest, GetLastByteSent) { | 403 TEST_F(PacedSenderTest, GetLastByteSent) { |
404 mock_transport_.AddExpectedSize(kSize1, 4); | 404 mock_transport_.AddExpectedSize(kSize1, 4); |
405 | 405 |
406 SendPacketVector packets1 = CreateSendPacketVector(kSize1, 1, true); | 406 SendPacketVector packets1 = CreateSendPacketVector(kSize1, 1, true); |
407 SendPacketVector packets2 = CreateSendPacketVector(kSize1, 1, false); | 407 SendPacketVector packets2 = CreateSendPacketVector(kSize1, 1, false); |
408 | 408 |
409 EXPECT_TRUE(paced_sender_->SendPackets(packets1)); | 409 EXPECT_TRUE(paced_sender_->SendPackets(packets1)); |
410 EXPECT_EQ(static_cast<int64>(kSize1), | 410 EXPECT_EQ(static_cast<int64_t>(kSize1), |
411 paced_sender_->GetLastByteSentForPacket(packets1[0].first)); | 411 paced_sender_->GetLastByteSentForPacket(packets1[0].first)); |
412 EXPECT_EQ(static_cast<int64>(kSize1), | 412 EXPECT_EQ(static_cast<int64_t>(kSize1), |
413 paced_sender_->GetLastByteSentForSsrc(kAudioSsrc)); | 413 paced_sender_->GetLastByteSentForSsrc(kAudioSsrc)); |
414 EXPECT_EQ(0, paced_sender_->GetLastByteSentForSsrc(kVideoSsrc)); | 414 EXPECT_EQ(0, paced_sender_->GetLastByteSentForSsrc(kVideoSsrc)); |
415 | 415 |
416 EXPECT_TRUE(paced_sender_->SendPackets(packets2)); | 416 EXPECT_TRUE(paced_sender_->SendPackets(packets2)); |
417 EXPECT_EQ(static_cast<int64>(2 * kSize1), | 417 EXPECT_EQ(static_cast<int64_t>(2 * kSize1), |
418 paced_sender_->GetLastByteSentForPacket(packets2[0].first)); | 418 paced_sender_->GetLastByteSentForPacket(packets2[0].first)); |
419 EXPECT_EQ(static_cast<int64>(kSize1), | 419 EXPECT_EQ(static_cast<int64_t>(kSize1), |
420 paced_sender_->GetLastByteSentForSsrc(kAudioSsrc)); | 420 paced_sender_->GetLastByteSentForSsrc(kAudioSsrc)); |
421 EXPECT_EQ(static_cast<int64>(2 * kSize1), | 421 EXPECT_EQ(static_cast<int64_t>(2 * kSize1), |
422 paced_sender_->GetLastByteSentForSsrc(kVideoSsrc)); | 422 paced_sender_->GetLastByteSentForSsrc(kVideoSsrc)); |
423 | 423 |
424 EXPECT_TRUE(paced_sender_->ResendPackets(packets1, DedupInfo())); | 424 EXPECT_TRUE(paced_sender_->ResendPackets(packets1, DedupInfo())); |
425 EXPECT_EQ(static_cast<int64>(3 * kSize1), | 425 EXPECT_EQ(static_cast<int64_t>(3 * kSize1), |
426 paced_sender_->GetLastByteSentForPacket(packets1[0].first)); | 426 paced_sender_->GetLastByteSentForPacket(packets1[0].first)); |
427 EXPECT_EQ(static_cast<int64>(3 * kSize1), | 427 EXPECT_EQ(static_cast<int64_t>(3 * kSize1), |
428 paced_sender_->GetLastByteSentForSsrc(kAudioSsrc)); | 428 paced_sender_->GetLastByteSentForSsrc(kAudioSsrc)); |
429 EXPECT_EQ(static_cast<int64>(2 * kSize1), | 429 EXPECT_EQ(static_cast<int64_t>(2 * kSize1), |
430 paced_sender_->GetLastByteSentForSsrc(kVideoSsrc)); | 430 paced_sender_->GetLastByteSentForSsrc(kVideoSsrc)); |
431 | 431 |
432 EXPECT_TRUE(paced_sender_->ResendPackets(packets2, DedupInfo())); | 432 EXPECT_TRUE(paced_sender_->ResendPackets(packets2, DedupInfo())); |
433 EXPECT_EQ(static_cast<int64>(4 * kSize1), | 433 EXPECT_EQ(static_cast<int64_t>(4 * kSize1), |
434 paced_sender_->GetLastByteSentForPacket(packets2[0].first)); | 434 paced_sender_->GetLastByteSentForPacket(packets2[0].first)); |
435 EXPECT_EQ(static_cast<int64>(3 * kSize1), | 435 EXPECT_EQ(static_cast<int64_t>(3 * kSize1), |
436 paced_sender_->GetLastByteSentForSsrc(kAudioSsrc)); | 436 paced_sender_->GetLastByteSentForSsrc(kAudioSsrc)); |
437 EXPECT_EQ(static_cast<int64>(4 * kSize1), | 437 EXPECT_EQ(static_cast<int64_t>(4 * kSize1), |
438 paced_sender_->GetLastByteSentForSsrc(kVideoSsrc)); | 438 paced_sender_->GetLastByteSentForSsrc(kVideoSsrc)); |
439 } | 439 } |
440 | 440 |
441 TEST_F(PacedSenderTest, DedupWithResendInterval) { | 441 TEST_F(PacedSenderTest, DedupWithResendInterval) { |
442 mock_transport_.AddExpectedSize(kSize1, 2); | 442 mock_transport_.AddExpectedSize(kSize1, 2); |
443 | 443 |
444 SendPacketVector packets = CreateSendPacketVector(kSize1, 1, true); | 444 SendPacketVector packets = CreateSendPacketVector(kSize1, 1, true); |
445 EXPECT_TRUE(paced_sender_->SendPackets(packets)); | 445 EXPECT_TRUE(paced_sender_->SendPackets(packets)); |
446 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(10)); | 446 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(10)); |
447 | 447 |
448 DedupInfo dedup_info; | 448 DedupInfo dedup_info; |
449 dedup_info.resend_interval = base::TimeDelta::FromMilliseconds(20); | 449 dedup_info.resend_interval = base::TimeDelta::FromMilliseconds(20); |
450 | 450 |
451 // This packet will not be sent. | 451 // This packet will not be sent. |
452 EXPECT_TRUE(paced_sender_->ResendPackets(packets, dedup_info)); | 452 EXPECT_TRUE(paced_sender_->ResendPackets(packets, dedup_info)); |
453 EXPECT_EQ(static_cast<int64>(kSize1), mock_transport_.GetBytesSent()); | 453 EXPECT_EQ(static_cast<int64_t>(kSize1), mock_transport_.GetBytesSent()); |
454 | 454 |
455 dedup_info.resend_interval = base::TimeDelta::FromMilliseconds(5); | 455 dedup_info.resend_interval = base::TimeDelta::FromMilliseconds(5); |
456 EXPECT_TRUE(paced_sender_->ResendPackets(packets, dedup_info)); | 456 EXPECT_TRUE(paced_sender_->ResendPackets(packets, dedup_info)); |
457 EXPECT_EQ(static_cast<int64>(2 * kSize1), mock_transport_.GetBytesSent()); | 457 EXPECT_EQ(static_cast<int64_t>(2 * kSize1), mock_transport_.GetBytesSent()); |
458 } | 458 } |
459 | 459 |
460 } // namespace cast | 460 } // namespace cast |
461 } // namespace media | 461 } // namespace media |
OLD | NEW |