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

Side by Side Diff: media/cast/net/rtcp/rtcp_utility_unittest.cc

Issue 1709863002: Add Cast PLI support on sender side. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address dcheng's comments. Created 4 years, 9 months 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
« no previous file with comments | « media/cast/net/rtcp/rtcp_utility.cc ('k') | media/cast/net/rtcp/sender_rtcp_session.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/macros.h" 7 #include "base/macros.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/test/simple_test_tick_clock.h" 9 #include "base/test/simple_test_tick_clock.h"
10 #include "media/cast/cast_environment.h" 10 #include "media/cast/cast_environment.h"
11 #include "media/cast/net/cast_transport_defines.h" 11 #include "media/cast/net/cast_transport_defines.h"
12 #include "media/cast/net/rtcp/rtcp_utility.h" 12 #include "media/cast/net/rtcp/rtcp_utility.h"
13 #include "media/cast/net/rtcp/test_rtcp_packet_builder.h" 13 #include "media/cast/net/rtcp/test_rtcp_packet_builder.h"
14 #include "media/cast/test/fake_single_thread_task_runner.h" 14 #include "media/cast/test/fake_single_thread_task_runner.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 16
17 namespace media { 17 namespace media {
18 namespace cast { 18 namespace cast {
19 19
20 static const uint32_t kSenderSsrc = 0x10203; 20 static const uint32_t kRemoteSsrc = 0x10203;
21 static const uint32_t kSourceSsrc = 0x40506; 21 static const uint32_t kLocalSsrc = 0x40506;
22 static const uint32_t kUnknownSsrc = 0xDEAD; 22 static const uint32_t kUnknownSsrc = 0xDEAD;
23 static const base::TimeDelta kTargetDelay = 23 static const base::TimeDelta kTargetDelay =
24 base::TimeDelta::FromMilliseconds(100); 24 base::TimeDelta::FromMilliseconds(100);
25 25
26 class RtcpParserTest : public ::testing::Test { 26 class RtcpParserTest : public ::testing::Test {
27 protected: 27 protected:
28 RtcpParserTest() 28 RtcpParserTest()
29 : testing_clock_(new base::SimpleTestTickClock()), 29 : testing_clock_(new base::SimpleTestTickClock()),
30 task_runner_(new test::FakeSingleThreadTaskRunner( 30 task_runner_(new test::FakeSingleThreadTaskRunner(
31 testing_clock_.get())) { 31 testing_clock_.get())) {
(...skipping 18 matching lines...) Expand all
50 } 50 }
51 51
52 void ExpectLastReport(const RtcpParser& parser) { 52 void ExpectLastReport(const RtcpParser& parser) {
53 EXPECT_TRUE(parser.has_last_report()); 53 EXPECT_TRUE(parser.has_last_report());
54 EXPECT_EQ(kLastSr, parser.last_report()); 54 EXPECT_EQ(kLastSr, parser.last_report());
55 EXPECT_EQ(kDelayLastSr, parser.delay_since_last_report()); 55 EXPECT_EQ(kDelayLastSr, parser.delay_since_last_report());
56 } 56 }
57 57
58 void ExpectReceiverReference(const RtcpParser& parser) { 58 void ExpectReceiverReference(const RtcpParser& parser) {
59 EXPECT_TRUE(parser.has_receiver_reference_time_report()); 59 EXPECT_TRUE(parser.has_receiver_reference_time_report());
60 EXPECT_EQ(kSenderSsrc, parser.receiver_reference_time_report().remote_ssrc); 60 EXPECT_EQ(kRemoteSsrc, parser.receiver_reference_time_report().remote_ssrc);
61 EXPECT_EQ(kNtpHigh, parser.receiver_reference_time_report().ntp_seconds); 61 EXPECT_EQ(kNtpHigh, parser.receiver_reference_time_report().ntp_seconds);
62 EXPECT_EQ(kNtpLow, parser.receiver_reference_time_report().ntp_fraction); 62 EXPECT_EQ(kNtpLow, parser.receiver_reference_time_report().ntp_fraction);
63 } 63 }
64 64
65 void ExpectCastFeedback(const RtcpParser& parser) { 65 void ExpectCastFeedback(const RtcpParser& parser) {
66 EXPECT_TRUE(parser.has_cast_message()); 66 EXPECT_TRUE(parser.has_cast_message());
67 EXPECT_EQ(kSenderSsrc, parser.cast_message().media_ssrc); 67 EXPECT_EQ(kRemoteSsrc, parser.cast_message().remote_ssrc);
68 EXPECT_EQ(kAckFrameId, parser.cast_message().ack_frame_id); 68 EXPECT_EQ(kAckFrameId, parser.cast_message().ack_frame_id);
69 69
70 MissingFramesAndPacketsMap::const_iterator frame_it = 70 MissingFramesAndPacketsMap::const_iterator frame_it =
71 parser.cast_message().missing_frames_and_packets.begin(); 71 parser.cast_message().missing_frames_and_packets.begin();
72 72
73 EXPECT_TRUE( 73 EXPECT_TRUE(
74 frame_it != parser.cast_message().missing_frames_and_packets.end()); 74 frame_it != parser.cast_message().missing_frames_and_packets.end());
75 EXPECT_EQ(kLostFrameId, frame_it->first); 75 EXPECT_EQ(kLostFrameId, frame_it->first);
76 EXPECT_EQ(frame_it->second.size(), 1UL); 76 EXPECT_EQ(frame_it->second.size(), 1UL);
77 EXPECT_EQ(*frame_it->second.begin(), kRtcpCastAllPacketsLost); 77 EXPECT_EQ(*frame_it->second.begin(), kRtcpCastAllPacketsLost);
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 138
139 scoped_ptr<base::SimpleTestTickClock> testing_clock_; 139 scoped_ptr<base::SimpleTestTickClock> testing_clock_;
140 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; 140 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
141 141
142 private: 142 private:
143 DISALLOW_COPY_AND_ASSIGN(RtcpParserTest); 143 DISALLOW_COPY_AND_ASSIGN(RtcpParserTest);
144 }; 144 };
145 145
146 TEST_F(RtcpParserTest, BrokenPacketIsIgnored) { 146 TEST_F(RtcpParserTest, BrokenPacketIsIgnored) {
147 const char bad_packet[] = {0, 0, 0, 0}; 147 const char bad_packet[] = {0, 0, 0, 0};
148 RtcpParser parser(kSourceSsrc, kSenderSsrc); 148 RtcpParser parser(kLocalSsrc, kRemoteSsrc);
149 base::BigEndianReader reader(bad_packet, sizeof(bad_packet)); 149 base::BigEndianReader reader(bad_packet, sizeof(bad_packet));
150 EXPECT_FALSE(parser.Parse(&reader)); 150 EXPECT_FALSE(parser.Parse(&reader));
151 } 151 }
152 152
153 TEST_F(RtcpParserTest, UnknownBlockIgnored) { 153 TEST_F(RtcpParserTest, UnknownBlockIgnored) {
154 // Only unknown data, nothing happens. 154 // Only unknown data, nothing happens.
155 TestRtcpPacketBuilder p; 155 TestRtcpPacketBuilder p;
156 p.AddUnknownBlock(); 156 p.AddUnknownBlock();
157 RtcpParser parser1(kSourceSsrc, 0); 157 RtcpParser parser1(kLocalSsrc, 0);
158 EXPECT_TRUE(parser1.Parse(p.Reader())); 158 EXPECT_TRUE(parser1.Parse(p.Reader()));
159 EXPECT_FALSE(HasAnything(parser1)); 159 EXPECT_FALSE(HasAnything(parser1));
160 160
161 // Add valid sender report *after* unknown data - should work fine. 161 // Add valid sender report *after* unknown data - should work fine.
162 p.AddSr(kSenderSsrc, 0); 162 p.AddSr(kRemoteSsrc, 0);
163 RtcpParser parser2(kSourceSsrc, kSenderSsrc); 163 RtcpParser parser2(kLocalSsrc, kRemoteSsrc);
164 EXPECT_TRUE(parser2.Parse(p.Reader())); 164 EXPECT_TRUE(parser2.Parse(p.Reader()));
165 ExpectSenderInfo(parser2); 165 ExpectSenderInfo(parser2);
166 } 166 }
167 167
168 TEST_F(RtcpParserTest, InjectSenderReportPacket) { 168 TEST_F(RtcpParserTest, InjectSenderReportPacket) {
169 TestRtcpPacketBuilder p; 169 TestRtcpPacketBuilder p;
170 p.AddSr(kSenderSsrc, 0); 170 p.AddSr(kRemoteSsrc, 0);
171 171
172 // Expected to be ignored since the sender ssrc does not match our 172 // Expected to be ignored since the sender ssrc does not match our
173 // remote ssrc. 173 // remote ssrc.
174 RtcpParser parser1(kSourceSsrc, 0); 174 RtcpParser parser1(kLocalSsrc, 0);
175 EXPECT_TRUE(parser1.Parse(p.Reader())); 175 EXPECT_TRUE(parser1.Parse(p.Reader()));
176 EXPECT_FALSE(HasAnything(parser1)); 176 EXPECT_FALSE(HasAnything(parser1));
177 177
178 // Expected to be pass through since the sender ssrc match our remote ssrc. 178 // Expected to be pass through since the sender ssrc match our remote ssrc.
179 RtcpParser parser2(kSourceSsrc, kSenderSsrc); 179 RtcpParser parser2(kLocalSsrc, kRemoteSsrc);
180 EXPECT_TRUE(parser2.Parse(p.Reader())); 180 EXPECT_TRUE(parser2.Parse(p.Reader()));
181 ExpectSenderInfo(parser2); 181 ExpectSenderInfo(parser2);
182 } 182 }
183 183
184 TEST_F(RtcpParserTest, InjectReceiveReportPacket) { 184 TEST_F(RtcpParserTest, InjectReceiveReportPacket) {
185 TestRtcpPacketBuilder p1; 185 TestRtcpPacketBuilder p1;
186 p1.AddRr(kSenderSsrc, 1); 186 p1.AddRr(kRemoteSsrc, 1);
187 p1.AddRb(kUnknownSsrc); 187 p1.AddRb(kUnknownSsrc);
188 188
189 // Expected to be ignored since the source ssrc does not match our 189 // Expected to be ignored since the source ssrc does not match our
190 // local ssrc. 190 // local ssrc.
191 RtcpParser parser1(kSourceSsrc, kSenderSsrc); 191 RtcpParser parser1(kLocalSsrc, kRemoteSsrc);
192 EXPECT_TRUE(parser1.Parse(p1.Reader())); 192 EXPECT_TRUE(parser1.Parse(p1.Reader()));
193 EXPECT_FALSE(HasAnything(parser1)); 193 EXPECT_FALSE(HasAnything(parser1));
194 194
195 TestRtcpPacketBuilder p2; 195 TestRtcpPacketBuilder p2;
196 p2.AddRr(kSenderSsrc, 1); 196 p2.AddRr(kRemoteSsrc, 1);
197 p2.AddRb(kSourceSsrc); 197 p2.AddRb(kLocalSsrc);
198 198
199 // Expected to be pass through since the sender ssrc match our local ssrc. 199 // Expected to be pass through since the sender ssrc match our local ssrc.
200 RtcpParser parser2(kSourceSsrc, kSenderSsrc); 200 RtcpParser parser2(kLocalSsrc, kRemoteSsrc);
201 EXPECT_TRUE(parser2.Parse(p2.Reader())); 201 EXPECT_TRUE(parser2.Parse(p2.Reader()));
202 ExpectLastReport(parser2); 202 ExpectLastReport(parser2);
203 } 203 }
204 204
205 TEST_F(RtcpParserTest, InjectSenderReportWithReportBlockPacket) { 205 TEST_F(RtcpParserTest, InjectSenderReportWithReportBlockPacket) {
206 TestRtcpPacketBuilder p1; 206 TestRtcpPacketBuilder p1;
207 p1.AddSr(kSenderSsrc, 1); 207 p1.AddSr(kRemoteSsrc, 1);
208 p1.AddRb(kUnknownSsrc); 208 p1.AddRb(kUnknownSsrc);
209 209
210 // Sender report expected to be ignored since the sender ssrc does not match 210 // Sender report expected to be ignored since the sender ssrc does not match
211 // our remote ssrc. 211 // our remote ssrc.
212 // Report block expected to be ignored since the source ssrc does not match 212 // Report block expected to be ignored since the source ssrc does not match
213 // our local ssrc. 213 // our local ssrc.
214 RtcpParser parser1(kSourceSsrc, 0); 214 RtcpParser parser1(kLocalSsrc, 0);
215 EXPECT_TRUE(parser1.Parse(p1.Reader())); 215 EXPECT_TRUE(parser1.Parse(p1.Reader()));
216 EXPECT_FALSE(HasAnything(parser1)); 216 EXPECT_FALSE(HasAnything(parser1));
217 217
218 // Sender report expected to be pass through since the sender ssrc match our 218 // Sender report expected to be pass through since the sender ssrc match our
219 // remote ssrc. 219 // remote ssrc.
220 // Report block expected to be ignored since the source ssrc does not match 220 // Report block expected to be ignored since the source ssrc does not match
221 // our local ssrc. 221 // our local ssrc.
222 RtcpParser parser2(kSourceSsrc, kSenderSsrc); 222 RtcpParser parser2(kLocalSsrc, kRemoteSsrc);
223 EXPECT_TRUE(parser2.Parse(p1.Reader())); 223 EXPECT_TRUE(parser2.Parse(p1.Reader()));
224 ExpectSenderInfo(parser2); 224 ExpectSenderInfo(parser2);
225 EXPECT_FALSE(parser2.has_last_report()); 225 EXPECT_FALSE(parser2.has_last_report());
226 226
227 // Sender report expected to be ignored since the sender ssrc does not match 227 // Sender report expected to be ignored since the sender ssrc does not match
228 // our remote ssrc. 228 // our remote ssrc.
229 // Report block expected to be ignored too since it's a part of the 229 // Report block expected to be ignored too since it's a part of the
230 // sender report. 230 // sender report.
231 TestRtcpPacketBuilder p2; 231 TestRtcpPacketBuilder p2;
232 p2.AddSr(kSenderSsrc, 1); 232 p2.AddSr(kRemoteSsrc, 1);
233 p2.AddRb(kSourceSsrc); 233 p2.AddRb(kLocalSsrc);
234 234
235 RtcpParser parser3(kSourceSsrc, 0); 235 RtcpParser parser3(kLocalSsrc, 0);
236 EXPECT_TRUE(parser3.Parse(p2.Reader())); 236 EXPECT_TRUE(parser3.Parse(p2.Reader()));
237 EXPECT_FALSE(parser3.has_last_report()); 237 EXPECT_FALSE(parser3.has_last_report());
238 238
239 // Sender report expected to be pass through since the sender ssrc match our 239 // Sender report expected to be pass through since the sender ssrc match our
240 // remote ssrc. 240 // remote ssrc.
241 // Report block expected to be pass through since the sender ssrc match 241 // Report block expected to be pass through since the sender ssrc match
242 // our local ssrc. 242 // our local ssrc.
243 RtcpParser parser4(kSourceSsrc, kSenderSsrc); 243 RtcpParser parser4(kLocalSsrc, kRemoteSsrc);
244 EXPECT_TRUE(parser4.Parse(p2.Reader())); 244 EXPECT_TRUE(parser4.Parse(p2.Reader()));
245 ExpectSenderInfo(parser4); 245 ExpectSenderInfo(parser4);
246 ExpectLastReport(parser4); 246 ExpectLastReport(parser4);
247 } 247 }
248 248
249 TEST_F(RtcpParserTest, InjectSenderReportPacketWithDlrr) { 249 TEST_F(RtcpParserTest, InjectSenderReportPacketWithDlrr) {
250 TestRtcpPacketBuilder p; 250 TestRtcpPacketBuilder p;
251 p.AddSr(kSenderSsrc, 0); 251 p.AddSr(kRemoteSsrc, 0);
252 p.AddXrHeader(kSenderSsrc); 252 p.AddXrHeader(kRemoteSsrc);
253 p.AddXrUnknownBlock(); 253 p.AddXrUnknownBlock();
254 p.AddXrExtendedDlrrBlock(kSenderSsrc); 254 p.AddXrExtendedDlrrBlock(kRemoteSsrc);
255 p.AddXrUnknownBlock(); 255 p.AddXrUnknownBlock();
256 256
257 // Expected to be ignored since the source ssrc does not match our 257 // Expected to be ignored since the source ssrc does not match our
258 // local ssrc. 258 // local ssrc.
259 RtcpParser parser1(kSourceSsrc, 0); 259 RtcpParser parser1(kLocalSsrc, 0);
260 EXPECT_TRUE(parser1.Parse(p.Reader())); 260 EXPECT_TRUE(parser1.Parse(p.Reader()));
261 EXPECT_FALSE(HasAnything(parser1)); 261 EXPECT_FALSE(HasAnything(parser1));
262 262
263 // Expected to be pass through since the sender ssrc match our local ssrc. 263 // Expected to be pass through since the sender ssrc match our local ssrc.
264 RtcpParser parser2(kSourceSsrc, kSenderSsrc); 264 RtcpParser parser2(kLocalSsrc, kRemoteSsrc);
265 EXPECT_TRUE(parser2.Parse(p.Reader())); 265 EXPECT_TRUE(parser2.Parse(p.Reader()));
266 ExpectSenderInfo(parser2); 266 ExpectSenderInfo(parser2);
267 // DLRRs are ignored. 267 // DLRRs are ignored.
268 EXPECT_FALSE(parser2.has_last_report()); 268 EXPECT_FALSE(parser2.has_last_report());
269 } 269 }
270 270
271 TEST_F(RtcpParserTest, InjectReceiverReportPacketWithRrtr) { 271 TEST_F(RtcpParserTest, InjectReceiverReportPacketWithRrtr) {
272 TestRtcpPacketBuilder p1; 272 TestRtcpPacketBuilder p1;
273 p1.AddRr(kSenderSsrc, 1); 273 p1.AddRr(kRemoteSsrc, 1);
274 p1.AddRb(kUnknownSsrc); 274 p1.AddRb(kUnknownSsrc);
275 p1.AddXrHeader(kSenderSsrc); 275 p1.AddXrHeader(kRemoteSsrc);
276 p1.AddXrRrtrBlock(); 276 p1.AddXrRrtrBlock();
277 277
278 // Expected to be ignored since the source ssrc does not match our 278 // Expected to be ignored since the source ssrc does not match our
279 // local ssrc. 279 // local ssrc.
280 RtcpParser parser1(kSourceSsrc, 0); 280 RtcpParser parser1(kLocalSsrc, 0);
281 EXPECT_TRUE(parser1.Parse(p1.Reader())); 281 EXPECT_TRUE(parser1.Parse(p1.Reader()));
282 EXPECT_FALSE(HasAnything(parser1)); 282 EXPECT_FALSE(HasAnything(parser1));
283 283
284 TestRtcpPacketBuilder p2; 284 TestRtcpPacketBuilder p2;
285 p2.AddRr(kSenderSsrc, 1); 285 p2.AddRr(kRemoteSsrc, 1);
286 p2.AddRb(kSourceSsrc); 286 p2.AddRb(kLocalSsrc);
287 p2.AddXrHeader(kSenderSsrc); 287 p2.AddXrHeader(kRemoteSsrc);
288 p2.AddXrRrtrBlock(); 288 p2.AddXrRrtrBlock();
289 289
290 // Expected to be pass through since the sender ssrc match our local ssrc. 290 // Expected to be pass through since the sender ssrc match our local ssrc.
291 RtcpParser parser2(kSourceSsrc, kSenderSsrc); 291 RtcpParser parser2(kLocalSsrc, kRemoteSsrc);
292 EXPECT_TRUE(parser2.Parse(p2.Reader())); 292 EXPECT_TRUE(parser2.Parse(p2.Reader()));
293 ExpectLastReport(parser2); 293 ExpectLastReport(parser2);
294 ExpectReceiverReference(parser2); 294 ExpectReceiverReference(parser2);
295 } 295 }
296 296
297 TEST_F(RtcpParserTest, InjectReceiverReportPacketWithIntraFrameRequest) { 297 TEST_F(RtcpParserTest, InjectReceiverReportPacketWithIntraFrameRequest) {
298 TestRtcpPacketBuilder p1; 298 TestRtcpPacketBuilder p1;
299 p1.AddRr(kSenderSsrc, 1); 299 p1.AddRr(kRemoteSsrc, 1);
300 p1.AddRb(kUnknownSsrc); 300 p1.AddRb(kUnknownSsrc);
301 301
302 // Expected to be ignored since the source ssrc does not match our 302 // Expected to be ignored since the source ssrc does not match our
303 // local ssrc. 303 // local ssrc.
304 RtcpParser parser1(kSourceSsrc, 0); 304 RtcpParser parser1(kLocalSsrc, 0);
305 EXPECT_TRUE(parser1.Parse(p1.Reader())); 305 EXPECT_TRUE(parser1.Parse(p1.Reader()));
306 EXPECT_FALSE(HasAnything(parser1)); 306 EXPECT_FALSE(HasAnything(parser1));
307 307
308 TestRtcpPacketBuilder p2; 308 TestRtcpPacketBuilder p2;
309 p2.AddRr(kSenderSsrc, 1); 309 p2.AddRr(kRemoteSsrc, 1);
310 p2.AddRb(kSourceSsrc); 310 p2.AddRb(kLocalSsrc);
311 311
312 RtcpParser parser2(kSourceSsrc, kSenderSsrc); 312 RtcpParser parser2(kLocalSsrc, kRemoteSsrc);
313 EXPECT_TRUE(parser2.Parse(p2.Reader())); 313 EXPECT_TRUE(parser2.Parse(p2.Reader()));
314 ExpectLastReport(parser2); 314 ExpectLastReport(parser2);
315 } 315 }
316 316
317 TEST_F(RtcpParserTest, InjectReceiverReportPacketWithCastFeedback) { 317 TEST_F(RtcpParserTest, InjectReceiverReportPacketWithCastFeedback) {
318 TestRtcpPacketBuilder p1; 318 TestRtcpPacketBuilder p1;
319 p1.AddRr(kSenderSsrc, 1); 319 p1.AddRr(kRemoteSsrc, 1);
320 p1.AddRb(kUnknownSsrc); 320 p1.AddRb(kUnknownSsrc);
321 p1.AddCast(kSenderSsrc, kUnknownSsrc, kTargetDelay); 321 p1.AddCast(kRemoteSsrc, kUnknownSsrc, kTargetDelay);
322 322
323 // Expected to be ignored since the source ssrc does not match our 323 // Expected to be ignored since the source ssrc does not match our
324 // local ssrc. 324 // local ssrc.
325 RtcpParser parser1(kSourceSsrc, 0); 325 RtcpParser parser1(kLocalSsrc, 0);
326 EXPECT_TRUE(parser1.Parse(p1.Reader())); 326 EXPECT_TRUE(parser1.Parse(p1.Reader()));
327 EXPECT_FALSE(HasAnything(parser1)); 327 EXPECT_FALSE(HasAnything(parser1));
328 328
329 TestRtcpPacketBuilder p2; 329 TestRtcpPacketBuilder p2;
330 p2.AddRr(kSenderSsrc, 1); 330 p2.AddRr(kRemoteSsrc, 1);
331 p2.AddRb(kSourceSsrc); 331 p2.AddRb(kLocalSsrc);
332 p2.AddCast(kSenderSsrc, kSourceSsrc, kTargetDelay); 332 p2.AddCast(kRemoteSsrc, kLocalSsrc, kTargetDelay);
333 333
334 // Expected to be pass through since the sender ssrc match our local ssrc. 334 // Expected to be pass through since the sender ssrc match our local ssrc.
335 RtcpParser parser2(kSourceSsrc, kSenderSsrc); 335 RtcpParser parser2(kLocalSsrc, kRemoteSsrc);
336 EXPECT_TRUE(parser2.Parse(p2.Reader())); 336 EXPECT_TRUE(parser2.Parse(p2.Reader()));
337 ExpectLastReport(parser2); 337 ExpectLastReport(parser2);
338 ExpectCastFeedback(parser2); 338 ExpectCastFeedback(parser2);
339 } 339 }
340 340
341 TEST_F(RtcpParserTest, ExtendedCastFeedbackParsing) { 341 TEST_F(RtcpParserTest, ExtendedCastFeedbackParsing) {
342 // Empty ACK field. 342 // Empty ACK field.
343 TestRtcpPacketBuilder builder; 343 TestRtcpPacketBuilder builder;
344 builder.AddRr(kSenderSsrc, 1); 344 builder.AddRr(kRemoteSsrc, 1);
345 builder.AddRb(kSourceSsrc); 345 builder.AddRb(kLocalSsrc);
346 builder.AddCast(kSenderSsrc, kSourceSsrc, kTargetDelay); 346 builder.AddCast(kRemoteSsrc, kLocalSsrc, kTargetDelay);
347 std::vector<uint32_t> receiving_frames; 347 std::vector<uint32_t> receiving_frames;
348 builder.AddCst2(receiving_frames); 348 builder.AddCst2(receiving_frames);
349 RtcpParser parser(kSourceSsrc, kSenderSsrc); 349 RtcpParser parser(kLocalSsrc, kRemoteSsrc);
350 EXPECT_TRUE(parser.Parse(builder.Reader())); 350 EXPECT_TRUE(parser.Parse(builder.Reader()));
351 ExpectLastReport(parser); 351 ExpectLastReport(parser);
352 ExpectCastFeedback(parser); 352 ExpectCastFeedback(parser);
353 ExpectExtendedCastFeedback(parser, receiving_frames); 353 ExpectExtendedCastFeedback(parser, receiving_frames);
354 354
355 // One ACK bitmask. 355 // One ACK bitmask.
356 TestRtcpPacketBuilder builder2; 356 TestRtcpPacketBuilder builder2;
357 builder2.AddRr(kSenderSsrc, 1); 357 builder2.AddRr(kRemoteSsrc, 1);
358 builder2.AddRb(kSourceSsrc); 358 builder2.AddRb(kLocalSsrc);
359 builder2.AddCast(kSenderSsrc, kSourceSsrc, kTargetDelay); 359 builder2.AddCast(kRemoteSsrc, kLocalSsrc, kTargetDelay);
360 receiving_frames.push_back(kAckFrameId + 2); 360 receiving_frames.push_back(kAckFrameId + 2);
361 receiving_frames.push_back(kAckFrameId + 3); 361 receiving_frames.push_back(kAckFrameId + 3);
362 builder2.AddCst2(receiving_frames); 362 builder2.AddCst2(receiving_frames);
363 RtcpParser parser2(kSourceSsrc, kSenderSsrc); 363 RtcpParser parser2(kLocalSsrc, kRemoteSsrc);
364 EXPECT_TRUE(parser2.Parse(builder2.Reader())); 364 EXPECT_TRUE(parser2.Parse(builder2.Reader()));
365 ExpectLastReport(parser2); 365 ExpectLastReport(parser2);
366 ExpectCastFeedback(parser2); 366 ExpectCastFeedback(parser2);
367 ExpectExtendedCastFeedback(parser2, receiving_frames); 367 ExpectExtendedCastFeedback(parser2, receiving_frames);
368 368
369 // Mutiple ACK bitmasks. 369 // Mutiple ACK bitmasks.
370 TestRtcpPacketBuilder builder3; 370 TestRtcpPacketBuilder builder3;
371 builder3.AddRr(kSenderSsrc, 1); 371 builder3.AddRr(kRemoteSsrc, 1);
372 builder3.AddRb(kSourceSsrc); 372 builder3.AddRb(kLocalSsrc);
373 builder3.AddCast(kSenderSsrc, kSourceSsrc, kTargetDelay); 373 builder3.AddCast(kRemoteSsrc, kLocalSsrc, kTargetDelay);
374 receiving_frames.clear(); 374 receiving_frames.clear();
375 for (size_t i = 0; i < 15; ++i) 375 for (size_t i = 0; i < 15; ++i)
376 receiving_frames.push_back(kAckFrameId + 2 + i * 10); 376 receiving_frames.push_back(kAckFrameId + 2 + i * 10);
377 builder3.AddCst2(receiving_frames); 377 builder3.AddCst2(receiving_frames);
378 RtcpParser parser3(kSourceSsrc, kSenderSsrc); 378 RtcpParser parser3(kLocalSsrc, kRemoteSsrc);
379 EXPECT_TRUE(parser3.Parse(builder3.Reader())); 379 EXPECT_TRUE(parser3.Parse(builder3.Reader()));
380 ExpectLastReport(parser3); 380 ExpectLastReport(parser3);
381 ExpectCastFeedback(parser3); 381 ExpectCastFeedback(parser3);
382 ExpectExtendedCastFeedback(parser3, receiving_frames); 382 ExpectExtendedCastFeedback(parser3, receiving_frames);
383 383
384 // Expected to be ignored if there is error in the extended ACK message. 384 // Expected to be ignored if there is error in the extended ACK message.
385 TestRtcpPacketBuilder builder4; 385 TestRtcpPacketBuilder builder4;
386 builder4.AddRr(kSenderSsrc, 1); 386 builder4.AddRr(kRemoteSsrc, 1);
387 builder4.AddRb(kSourceSsrc); 387 builder4.AddRb(kLocalSsrc);
388 builder4.AddCast(kSenderSsrc, kSourceSsrc, kTargetDelay); 388 builder4.AddCast(kRemoteSsrc, kLocalSsrc, kTargetDelay);
389 builder4.AddErrorCst2(); 389 builder4.AddErrorCst2();
390 RtcpParser parser4(kSourceSsrc, kSenderSsrc); 390 RtcpParser parser4(kLocalSsrc, kRemoteSsrc);
391 EXPECT_TRUE(parser4.Parse(builder4.Reader())); 391 EXPECT_TRUE(parser4.Parse(builder4.Reader()));
392 ExpectLastReport(parser4); 392 ExpectLastReport(parser4);
393 ExpectCastFeedback(parser4); 393 ExpectCastFeedback(parser4);
394 EXPECT_FALSE(parser4.has_cst2_message()); 394 EXPECT_FALSE(parser4.has_cst2_message());
395 395
396 // Expected to be ignored if there is only "CST2" identifier. 396 // Expected to be ignored if there is only "CST2" identifier.
397 TestRtcpPacketBuilder builder5; 397 TestRtcpPacketBuilder builder5;
398 builder5.AddRr(kSenderSsrc, 1); 398 builder5.AddRr(kRemoteSsrc, 1);
399 builder5.AddRb(kSourceSsrc); 399 builder5.AddRb(kLocalSsrc);
400 receiving_frames.clear(); 400 receiving_frames.clear();
401 builder5.AddCst2(receiving_frames); 401 builder5.AddCst2(receiving_frames);
402 RtcpParser parser5(kSourceSsrc, kSenderSsrc); 402 RtcpParser parser5(kLocalSsrc, kRemoteSsrc);
403 EXPECT_TRUE(parser5.Parse(builder5.Reader())); 403 EXPECT_TRUE(parser5.Parse(builder5.Reader()));
404 ExpectLastReport(parser5); 404 ExpectLastReport(parser5);
405 EXPECT_FALSE(parser5.has_cst2_message()); 405 EXPECT_FALSE(parser5.has_cst2_message());
406 } 406 }
407 407
408 TEST_F(RtcpParserTest, InjectReceiverReportPli) {
409 // Expect to be ignored since the sender ssrc does not match.
410 TestRtcpPacketBuilder builder1;
411 builder1.AddPli(kUnknownSsrc, kLocalSsrc);
412 RtcpParser parser1(kLocalSsrc, kRemoteSsrc);
413 EXPECT_TRUE(parser1.Parse(builder1.Reader()));
414 EXPECT_FALSE(parser1.has_picture_loss_indicator());
415
416 // Expect to be ignored since the receiver ssrc does not match.
417 TestRtcpPacketBuilder builder2;
418 builder2.AddPli(kRemoteSsrc, kUnknownSsrc);
419 RtcpParser parser2(kLocalSsrc, kRemoteSsrc);
420 EXPECT_TRUE(parser2.Parse(builder2.Reader()));
421 EXPECT_FALSE(parser2.has_picture_loss_indicator());
422
423 TestRtcpPacketBuilder builder3;
424 builder3.AddPli(kRemoteSsrc, kLocalSsrc);
425 RtcpParser parser3(kLocalSsrc, kRemoteSsrc);
426 EXPECT_TRUE(parser3.Parse(builder3.Reader()));
427 EXPECT_TRUE(parser3.has_picture_loss_indicator());
428 }
429
408 TEST_F(RtcpParserTest, InjectReceiverReportWithReceiverLogVerificationBase) { 430 TEST_F(RtcpParserTest, InjectReceiverReportWithReceiverLogVerificationBase) {
409 static const uint32_t kTimeBaseMs = 12345678; 431 static const uint32_t kTimeBaseMs = 12345678;
410 static const uint32_t kTimeDelayMs = 10; 432 static const uint32_t kTimeDelayMs = 10;
411 static const uint32_t kDelayDeltaMs = 123; 433 static const uint32_t kDelayDeltaMs = 123;
412 base::SimpleTestTickClock testing_clock; 434 base::SimpleTestTickClock testing_clock;
413 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); 435 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
414 436
415 RtcpReceiverLogMessage receiver_log; 437 RtcpReceiverLogMessage receiver_log;
416 RtcpReceiverFrameLogMessage frame_log(RtpTimeTicks().Expand(kRtpTimestamp)); 438 RtcpReceiverFrameLogMessage frame_log(RtpTimeTicks().Expand(kRtpTimestamp));
417 RtcpReceiverEventLogMessage event_log; 439 RtcpReceiverEventLogMessage event_log;
(...skipping 10 matching lines...) Expand all
428 frame_log.event_log_messages_.push_back(event_log); 450 frame_log.event_log_messages_.push_back(event_log);
429 451
430 event_log.type = PACKET_RECEIVED; 452 event_log.type = PACKET_RECEIVED;
431 event_log.event_timestamp = testing_clock.NowTicks(); 453 event_log.event_timestamp = testing_clock.NowTicks();
432 event_log.packet_id = kLostPacketId2; 454 event_log.packet_id = kLostPacketId2;
433 frame_log.event_log_messages_.push_back(event_log); 455 frame_log.event_log_messages_.push_back(event_log);
434 456
435 receiver_log.push_back(frame_log); 457 receiver_log.push_back(frame_log);
436 458
437 TestRtcpPacketBuilder p; 459 TestRtcpPacketBuilder p;
438 p.AddRr(kSenderSsrc, 1); 460 p.AddRr(kRemoteSsrc, 1);
439 p.AddRb(kSourceSsrc); 461 p.AddRb(kLocalSsrc);
440 p.AddReceiverLog(kSenderSsrc); 462 p.AddReceiverLog(kRemoteSsrc);
441 p.AddReceiverFrameLog(kRtpTimestamp, 3, kTimeBaseMs); 463 p.AddReceiverFrameLog(kRtpTimestamp, 3, kTimeBaseMs);
442 p.AddReceiverEventLog(kDelayDeltaMs, FRAME_ACK_SENT, 0); 464 p.AddReceiverEventLog(kDelayDeltaMs, FRAME_ACK_SENT, 0);
443 p.AddReceiverEventLog(kLostPacketId1, PACKET_RECEIVED, kTimeDelayMs); 465 p.AddReceiverEventLog(kLostPacketId1, PACKET_RECEIVED, kTimeDelayMs);
444 p.AddReceiverEventLog(kLostPacketId2, PACKET_RECEIVED, kTimeDelayMs); 466 p.AddReceiverEventLog(kLostPacketId2, PACKET_RECEIVED, kTimeDelayMs);
445 467
446 RtcpParser parser(kSourceSsrc, kSenderSsrc); 468 RtcpParser parser(kLocalSsrc, kRemoteSsrc);
447 EXPECT_TRUE(parser.Parse(p.Reader())); 469 EXPECT_TRUE(parser.Parse(p.Reader()));
448 ExpectReceiverLog(parser, receiver_log); 470 ExpectReceiverLog(parser, receiver_log);
449 } 471 }
450 472
451 TEST_F(RtcpParserTest, InjectReceiverReportWithReceiverLogVerificationMulti) { 473 TEST_F(RtcpParserTest, InjectReceiverReportWithReceiverLogVerificationMulti) {
452 static const uint32_t kTimeBaseMs = 12345678; 474 static const uint32_t kTimeBaseMs = 12345678;
453 static const uint32_t kTimeDelayMs = 10; 475 static const uint32_t kTimeDelayMs = 10;
454 static const int kDelayDeltaMs = 123; // To be varied for every frame. 476 static const int kDelayDeltaMs = 123; // To be varied for every frame.
455 base::SimpleTestTickClock testing_clock; 477 base::SimpleTestTickClock testing_clock;
456 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); 478 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
457 479
458 RtcpReceiverLogMessage receiver_log; 480 RtcpReceiverLogMessage receiver_log;
459 481
460 for (int j = 0; j < 100; ++j) { 482 for (int j = 0; j < 100; ++j) {
461 RtcpReceiverFrameLogMessage frame_log(RtpTimeTicks().Expand(kRtpTimestamp)); 483 RtcpReceiverFrameLogMessage frame_log(RtpTimeTicks().Expand(kRtpTimestamp));
462 RtcpReceiverEventLogMessage event_log; 484 RtcpReceiverEventLogMessage event_log;
463 event_log.type = FRAME_ACK_SENT; 485 event_log.type = FRAME_ACK_SENT;
464 event_log.event_timestamp = testing_clock.NowTicks(); 486 event_log.event_timestamp = testing_clock.NowTicks();
465 event_log.delay_delta = 487 event_log.delay_delta =
466 base::TimeDelta::FromMilliseconds((j - 50) * kDelayDeltaMs); 488 base::TimeDelta::FromMilliseconds((j - 50) * kDelayDeltaMs);
467 frame_log.event_log_messages_.push_back(event_log); 489 frame_log.event_log_messages_.push_back(event_log);
468 receiver_log.push_back(frame_log); 490 receiver_log.push_back(frame_log);
469 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); 491 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
470 } 492 }
471 493
472 TestRtcpPacketBuilder p; 494 TestRtcpPacketBuilder p;
473 p.AddRr(kSenderSsrc, 1); 495 p.AddRr(kRemoteSsrc, 1);
474 p.AddRb(kSourceSsrc); 496 p.AddRb(kLocalSsrc);
475 p.AddReceiverLog(kSenderSsrc); 497 p.AddReceiverLog(kRemoteSsrc);
476 for (int i = 0; i < 100; ++i) { 498 for (int i = 0; i < 100; ++i) {
477 p.AddReceiverFrameLog(kRtpTimestamp, 1, kTimeBaseMs + i * kTimeDelayMs); 499 p.AddReceiverFrameLog(kRtpTimestamp, 1, kTimeBaseMs + i * kTimeDelayMs);
478 const int delay = (i - 50) * kDelayDeltaMs; 500 const int delay = (i - 50) * kDelayDeltaMs;
479 p.AddReceiverEventLog(static_cast<uint16_t>(delay), FRAME_ACK_SENT, 0); 501 p.AddReceiverEventLog(static_cast<uint16_t>(delay), FRAME_ACK_SENT, 0);
480 } 502 }
481 503
482 RtcpParser parser(kSourceSsrc, kSenderSsrc); 504 RtcpParser parser(kLocalSsrc, kRemoteSsrc);
483 EXPECT_TRUE(parser.Parse(p.Reader())); 505 EXPECT_TRUE(parser.Parse(p.Reader()));
484 ExpectReceiverLog(parser, receiver_log); 506 ExpectReceiverLog(parser, receiver_log);
485 } 507 }
486 508
487 TEST(RtcpUtilityTest, NtpAndTime) { 509 TEST(RtcpUtilityTest, NtpAndTime) {
488 const int64_t kSecondsbetweenYear1900and2010 = INT64_C(40176 * 24 * 60 * 60); 510 const int64_t kSecondsbetweenYear1900and2010 = INT64_C(40176 * 24 * 60 * 60);
489 const int64_t kSecondsbetweenYear1900and2030 = INT64_C(47481 * 24 * 60 * 60); 511 const int64_t kSecondsbetweenYear1900and2030 = INT64_C(47481 * 24 * 60 * 60);
490 512
491 uint32_t ntp_seconds_1 = 0; 513 uint32_t ntp_seconds_1 = 0;
492 uint32_t ntp_fraction_1 = 0; 514 uint32_t ntp_fraction_1 = 0;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 base::TimeTicks out_3 = ConvertNtpToTimeTicks(ntp_seconds_3, ntp_fraction_3); 547 base::TimeTicks out_3 = ConvertNtpToTimeTicks(ntp_seconds_3, ntp_fraction_3);
526 EXPECT_EQ(input_time, out_3); // Verify inverse. 548 EXPECT_EQ(input_time, out_3); // Verify inverse.
527 549
528 // Verify delta. 550 // Verify delta.
529 EXPECT_EQ((out_3 - out_2), time_delta); 551 EXPECT_EQ((out_3 - out_2), time_delta);
530 EXPECT_NEAR((ntp_fraction_3 - ntp_fraction_2), 0xffffffff / 2, 1); 552 EXPECT_NEAR((ntp_fraction_3 - ntp_fraction_2), 0xffffffff / 2, 1);
531 } 553 }
532 554
533 } // namespace cast 555 } // namespace cast
534 } // namespace media 556 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/net/rtcp/rtcp_utility.cc ('k') | media/cast/net/rtcp/sender_rtcp_session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698