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_defines.h" | 7 #include "media/cast/cast_defines.h" |
8 #include "media/cast/cast_environment.h" | 8 #include "media/cast/cast_environment.h" |
9 #include "media/cast/net/pacing/paced_sender.h" | |
10 #include "media/cast/rtcp/rtcp_sender.h" | 9 #include "media/cast/rtcp/rtcp_sender.h" |
11 #include "media/cast/rtcp/rtcp_utility.h" | 10 #include "media/cast/rtcp/rtcp_utility.h" |
12 #include "media/cast/rtcp/test_rtcp_packet_builder.h" | 11 #include "media/cast/rtcp/test_rtcp_packet_builder.h" |
13 #include "media/cast/test/fake_task_runner.h" | 12 #include "media/cast/test/fake_task_runner.h" |
| 13 #include "media/cast/transport/cast_transport_defines.h" |
| 14 #include "media/cast/transport/pacing/paced_sender.h" |
14 #include "testing/gmock/include/gmock/gmock.h" | 15 #include "testing/gmock/include/gmock/gmock.h" |
15 | 16 |
16 namespace media { | 17 namespace media { |
17 namespace cast { | 18 namespace cast { |
18 | 19 |
19 namespace { | 20 namespace { |
20 static const uint32 kSendingSsrc = 0x12345678; | 21 static const uint32 kSendingSsrc = 0x12345678; |
21 static const uint32 kMediaSsrc = 0x87654321; | 22 static const uint32 kMediaSsrc = 0x87654321; |
22 static const std::string kCName("test@10.1.1.1"); | 23 static const std::string kCName("test@10.1.1.1"); |
23 } // namespace | 24 } // namespace |
24 | 25 |
25 class TestRtcpTransport : public PacedPacketSender { | 26 class TestRtcpTransport : public transport::PacedPacketSender { |
26 public: | 27 public: |
27 TestRtcpTransport() | 28 TestRtcpTransport() |
28 : expected_packet_length_(0), | 29 : expected_packet_length_(0), |
29 packet_count_(0) { | 30 packet_count_(0) { |
30 } | 31 } |
31 | 32 |
32 virtual bool SendRtcpPacket(const Packet& packet) OVERRIDE { | 33 virtual bool SendRtcpPacket(const Packet& packet) OVERRIDE { |
33 EXPECT_EQ(expected_packet_length_, packet.size()); | 34 EXPECT_EQ(expected_packet_length_, packet.size()); |
34 EXPECT_EQ(0, memcmp(expected_packet_, &(packet[0]), packet.size())); | 35 EXPECT_EQ(0, memcmp(expected_packet_, &(packet[0]), packet.size())); |
35 packet_count_++; | 36 packet_count_++; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 | 90 |
90 EXPECT_EQ(1, test_transport_.packet_count()); | 91 EXPECT_EQ(1, test_transport_.packet_count()); |
91 | 92 |
92 // Receiver report with report block + c_name. | 93 // Receiver report with report block + c_name. |
93 TestRtcpPacketBuilder p2; | 94 TestRtcpPacketBuilder p2; |
94 p2.AddRr(kSendingSsrc, 1); | 95 p2.AddRr(kSendingSsrc, 1); |
95 p2.AddRb(kMediaSsrc); | 96 p2.AddRb(kMediaSsrc); |
96 p2.AddSdesCname(kSendingSsrc, kCName); | 97 p2.AddSdesCname(kSendingSsrc, kCName); |
97 test_transport_.SetExpectedRtcpPacket(p2.Packet(), p2.Length()); | 98 test_transport_.SetExpectedRtcpPacket(p2.Packet(), p2.Length()); |
98 | 99 |
99 RtcpReportBlock report_block; | 100 transport::RtcpReportBlock report_block; |
100 // Initialize remote_ssrc to a "clearly illegal" value. | 101 // Initialize remote_ssrc to a "clearly illegal" value. |
101 report_block.remote_ssrc = 0xDEAD; | 102 report_block.remote_ssrc = 0xDEAD; |
102 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | 103 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. |
103 report_block.fraction_lost = kLoss >> 24; | 104 report_block.fraction_lost = kLoss >> 24; |
104 report_block.cumulative_lost = kLoss; // 24 bits valid. | 105 report_block.cumulative_lost = kLoss; // 24 bits valid. |
105 report_block.extended_high_sequence_number = kExtendedMax; | 106 report_block.extended_high_sequence_number = kExtendedMax; |
106 report_block.jitter = kTestJitter; | 107 report_block.jitter = kTestJitter; |
107 report_block.last_sr = kLastSr; | 108 report_block.last_sr = kLastSr; |
108 report_block.delay_since_last_sr = kDelayLastSr; | 109 report_block.delay_since_last_sr = kDelayLastSr; |
109 | 110 |
110 rtcp_sender_->SendRtcpFromRtpReceiver(RtcpSender::kRtcpRr, &report_block, | 111 rtcp_sender_->SendRtcpFromRtpReceiver(RtcpSender::kRtcpRr, &report_block, |
111 NULL, NULL, NULL); | 112 NULL, NULL, NULL); |
112 | 113 |
113 EXPECT_EQ(2, test_transport_.packet_count()); | 114 EXPECT_EQ(2, test_transport_.packet_count()); |
114 } | 115 } |
115 | 116 |
116 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtr) { | 117 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtr) { |
117 // Receiver report with report block + c_name. | 118 // Receiver report with report block + c_name. |
118 TestRtcpPacketBuilder p; | 119 TestRtcpPacketBuilder p; |
119 p.AddRr(kSendingSsrc, 1); | 120 p.AddRr(kSendingSsrc, 1); |
120 p.AddRb(kMediaSsrc); | 121 p.AddRb(kMediaSsrc); |
121 p.AddSdesCname(kSendingSsrc, kCName); | 122 p.AddSdesCname(kSendingSsrc, kCName); |
122 p.AddXrHeader(kSendingSsrc); | 123 p.AddXrHeader(kSendingSsrc); |
123 p.AddXrRrtrBlock(); | 124 p.AddXrRrtrBlock(); |
124 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | 125 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); |
125 | 126 |
126 RtcpReportBlock report_block; | 127 transport::RtcpReportBlock report_block; |
127 // Initialize remote_ssrc to a "clearly illegal" value. | 128 // Initialize remote_ssrc to a "clearly illegal" value. |
128 report_block.remote_ssrc = 0xDEAD; | 129 report_block.remote_ssrc = 0xDEAD; |
129 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | 130 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. |
130 report_block.fraction_lost = kLoss >> 24; | 131 report_block.fraction_lost = kLoss >> 24; |
131 report_block.cumulative_lost = kLoss; // 24 bits valid. | 132 report_block.cumulative_lost = kLoss; // 24 bits valid. |
132 report_block.extended_high_sequence_number = kExtendedMax; | 133 report_block.extended_high_sequence_number = kExtendedMax; |
133 report_block.jitter = kTestJitter; | 134 report_block.jitter = kTestJitter; |
134 report_block.last_sr = kLastSr; | 135 report_block.last_sr = kLastSr; |
135 report_block.delay_since_last_sr = kDelayLastSr; | 136 report_block.delay_since_last_sr = kDelayLastSr; |
136 | 137 |
(...skipping 13 matching lines...) Expand all Loading... |
150 | 151 |
151 TEST_F(RtcpSenderTest, RtcpReceiverReportWithCast) { | 152 TEST_F(RtcpSenderTest, RtcpReceiverReportWithCast) { |
152 // Receiver report with report block + c_name. | 153 // Receiver report with report block + c_name. |
153 TestRtcpPacketBuilder p; | 154 TestRtcpPacketBuilder p; |
154 p.AddRr(kSendingSsrc, 1); | 155 p.AddRr(kSendingSsrc, 1); |
155 p.AddRb(kMediaSsrc); | 156 p.AddRb(kMediaSsrc); |
156 p.AddSdesCname(kSendingSsrc, kCName); | 157 p.AddSdesCname(kSendingSsrc, kCName); |
157 p.AddCast(kSendingSsrc, kMediaSsrc); | 158 p.AddCast(kSendingSsrc, kMediaSsrc); |
158 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | 159 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); |
159 | 160 |
160 RtcpReportBlock report_block; | 161 transport::RtcpReportBlock report_block; |
161 // Initialize remote_ssrc to a "clearly illegal" value. | 162 // Initialize remote_ssrc to a "clearly illegal" value. |
162 report_block.remote_ssrc = 0xDEAD; | 163 report_block.remote_ssrc = 0xDEAD; |
163 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | 164 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. |
164 report_block.fraction_lost = kLoss >> 24; | 165 report_block.fraction_lost = kLoss >> 24; |
165 report_block.cumulative_lost = kLoss; // 24 bits valid. | 166 report_block.cumulative_lost = kLoss; // 24 bits valid. |
166 report_block.extended_high_sequence_number = kExtendedMax; | 167 report_block.extended_high_sequence_number = kExtendedMax; |
167 report_block.jitter = kTestJitter; | 168 report_block.jitter = kTestJitter; |
168 report_block.last_sr = kLastSr; | 169 report_block.last_sr = kLastSr; |
169 report_block.delay_since_last_sr = kDelayLastSr; | 170 report_block.delay_since_last_sr = kDelayLastSr; |
170 | 171 |
(...skipping 21 matching lines...) Expand all Loading... |
192 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtraAndCastMessage) { | 193 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtraAndCastMessage) { |
193 TestRtcpPacketBuilder p; | 194 TestRtcpPacketBuilder p; |
194 p.AddRr(kSendingSsrc, 1); | 195 p.AddRr(kSendingSsrc, 1); |
195 p.AddRb(kMediaSsrc); | 196 p.AddRb(kMediaSsrc); |
196 p.AddSdesCname(kSendingSsrc, kCName); | 197 p.AddSdesCname(kSendingSsrc, kCName); |
197 p.AddXrHeader(kSendingSsrc); | 198 p.AddXrHeader(kSendingSsrc); |
198 p.AddXrRrtrBlock(); | 199 p.AddXrRrtrBlock(); |
199 p.AddCast(kSendingSsrc, kMediaSsrc); | 200 p.AddCast(kSendingSsrc, kMediaSsrc); |
200 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | 201 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); |
201 | 202 |
202 RtcpReportBlock report_block; | 203 transport::RtcpReportBlock report_block; |
203 // Initialize remote_ssrc to a "clearly illegal" value. | 204 // Initialize remote_ssrc to a "clearly illegal" value. |
204 report_block.remote_ssrc = 0xDEAD; | 205 report_block.remote_ssrc = 0xDEAD; |
205 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | 206 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. |
206 report_block.fraction_lost = kLoss >> 24; | 207 report_block.fraction_lost = kLoss >> 24; |
207 report_block.cumulative_lost = kLoss; // 24 bits valid. | 208 report_block.cumulative_lost = kLoss; // 24 bits valid. |
208 report_block.extended_high_sequence_number = kExtendedMax; | 209 report_block.extended_high_sequence_number = kExtendedMax; |
209 report_block.jitter = kTestJitter; | 210 report_block.jitter = kTestJitter; |
210 report_block.last_sr = kLastSr; | 211 report_block.last_sr = kLastSr; |
211 report_block.delay_since_last_sr = kDelayLastSr; | 212 report_block.delay_since_last_sr = kDelayLastSr; |
212 | 213 |
(...skipping 29 matching lines...) Expand all Loading... |
242 | 243 |
243 TestRtcpPacketBuilder p; | 244 TestRtcpPacketBuilder p; |
244 p.AddRr(kSendingSsrc, 1); | 245 p.AddRr(kSendingSsrc, 1); |
245 p.AddRb(kMediaSsrc); | 246 p.AddRb(kMediaSsrc); |
246 p.AddSdesCname(kSendingSsrc, kCName); | 247 p.AddSdesCname(kSendingSsrc, kCName); |
247 p.AddXrHeader(kSendingSsrc); | 248 p.AddXrHeader(kSendingSsrc); |
248 p.AddXrRrtrBlock(); | 249 p.AddXrRrtrBlock(); |
249 p.AddCast(kSendingSsrc, kMediaSsrc); | 250 p.AddCast(kSendingSsrc, kMediaSsrc); |
250 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | 251 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); |
251 | 252 |
252 RtcpReportBlock report_block; | 253 transport::RtcpReportBlock report_block; |
253 // Initialize remote_ssrc to a "clearly illegal" value. | 254 // Initialize remote_ssrc to a "clearly illegal" value. |
254 report_block.remote_ssrc = 0xDEAD; | 255 report_block.remote_ssrc = 0xDEAD; |
255 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | 256 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. |
256 report_block.fraction_lost = kLoss >> 24; | 257 report_block.fraction_lost = kLoss >> 24; |
257 report_block.cumulative_lost = kLoss; // 24 bits valid. | 258 report_block.cumulative_lost = kLoss; // 24 bits valid. |
258 report_block.extended_high_sequence_number = kExtendedMax; | 259 report_block.extended_high_sequence_number = kExtendedMax; |
259 report_block.jitter = kTestJitter; | 260 report_block.jitter = kTestJitter; |
260 report_block.last_sr = kLastSr; | 261 report_block.last_sr = kLastSr; |
261 report_block.delay_since_last_sr = kDelayLastSr; | 262 report_block.delay_since_last_sr = kDelayLastSr; |
262 | 263 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
330 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOversizedFrameLog) { | 331 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOversizedFrameLog) { |
331 static const uint32 kTimeBaseMs = 12345678; | 332 static const uint32 kTimeBaseMs = 12345678; |
332 static const uint32 kTimeDelayMs = 10; | 333 static const uint32 kTimeDelayMs = 10; |
333 static const uint32 kDelayDeltaMs = 123; | 334 static const uint32 kDelayDeltaMs = 123; |
334 | 335 |
335 TestRtcpPacketBuilder p; | 336 TestRtcpPacketBuilder p; |
336 p.AddRr(kSendingSsrc, 1); | 337 p.AddRr(kSendingSsrc, 1); |
337 p.AddRb(kMediaSsrc); | 338 p.AddRb(kMediaSsrc); |
338 p.AddSdesCname(kSendingSsrc, kCName); | 339 p.AddSdesCname(kSendingSsrc, kCName); |
339 | 340 |
340 RtcpReportBlock report_block; | 341 transport::RtcpReportBlock report_block; |
341 // Initialize remote_ssrc to a "clearly illegal" value. | 342 // Initialize remote_ssrc to a "clearly illegal" value. |
342 report_block.remote_ssrc = 0xDEAD; | 343 report_block.remote_ssrc = 0xDEAD; |
343 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | 344 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. |
344 report_block.fraction_lost = kLoss >> 24; | 345 report_block.fraction_lost = kLoss >> 24; |
345 report_block.cumulative_lost = kLoss; // 24 bits valid. | 346 report_block.cumulative_lost = kLoss; // 24 bits valid. |
346 report_block.extended_high_sequence_number = kExtendedMax; | 347 report_block.extended_high_sequence_number = kExtendedMax; |
347 report_block.jitter = kTestJitter; | 348 report_block.jitter = kTestJitter; |
348 report_block.last_sr = kLastSr; | 349 report_block.last_sr = kLastSr; |
349 report_block.delay_since_last_sr = kDelayLastSr; | 350 report_block.delay_since_last_sr = kDelayLastSr; |
350 | 351 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 TEST_F(RtcpSenderTest, RtcpReceiverReportWithTooManyLogFrames) { | 404 TEST_F(RtcpSenderTest, RtcpReceiverReportWithTooManyLogFrames) { |
404 static const uint32 kTimeBaseMs = 12345678; | 405 static const uint32 kTimeBaseMs = 12345678; |
405 static const uint32 kTimeDelayMs = 10; | 406 static const uint32 kTimeDelayMs = 10; |
406 static const uint32 kDelayDeltaMs = 123; | 407 static const uint32 kDelayDeltaMs = 123; |
407 | 408 |
408 TestRtcpPacketBuilder p; | 409 TestRtcpPacketBuilder p; |
409 p.AddRr(kSendingSsrc, 1); | 410 p.AddRr(kSendingSsrc, 1); |
410 p.AddRb(kMediaSsrc); | 411 p.AddRb(kMediaSsrc); |
411 p.AddSdesCname(kSendingSsrc, kCName); | 412 p.AddSdesCname(kSendingSsrc, kCName); |
412 | 413 |
413 RtcpReportBlock report_block; | 414 transport::RtcpReportBlock report_block; |
414 // Initialize remote_ssrc to a "clearly illegal" value. | 415 // Initialize remote_ssrc to a "clearly illegal" value. |
415 report_block.remote_ssrc = 0xDEAD; | 416 report_block.remote_ssrc = 0xDEAD; |
416 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | 417 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. |
417 report_block.fraction_lost = kLoss >> 24; | 418 report_block.fraction_lost = kLoss >> 24; |
418 report_block.cumulative_lost = kLoss; // 24 bits valid. | 419 report_block.cumulative_lost = kLoss; // 24 bits valid. |
419 report_block.extended_high_sequence_number = kExtendedMax; | 420 report_block.extended_high_sequence_number = kExtendedMax; |
420 report_block.jitter = kTestJitter; | 421 report_block.jitter = kTestJitter; |
421 report_block.last_sr = kLastSr; | 422 report_block.last_sr = kLastSr; |
422 report_block.delay_since_last_sr = kDelayLastSr; | 423 report_block.delay_since_last_sr = kDelayLastSr; |
423 | 424 |
(...skipping 27 matching lines...) Expand all Loading... |
451 NULL, | 452 NULL, |
452 NULL, | 453 NULL, |
453 &receiver_log); | 454 &receiver_log); |
454 | 455 |
455 EXPECT_EQ(1, test_transport_.packet_count()); | 456 EXPECT_EQ(1, test_transport_.packet_count()); |
456 EXPECT_EQ(81u, receiver_log.size()); | 457 EXPECT_EQ(81u, receiver_log.size()); |
457 } | 458 } |
458 | 459 |
459 } // namespace cast | 460 } // namespace cast |
460 } // namespace media | 461 } // namespace media |
OLD | NEW |