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

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: Addressed 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
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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 126
127 scoped_ptr<base::SimpleTestTickClock> testing_clock_; 127 scoped_ptr<base::SimpleTestTickClock> testing_clock_;
128 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; 128 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
129 129
130 private: 130 private:
131 DISALLOW_COPY_AND_ASSIGN(RtcpParserTest); 131 DISALLOW_COPY_AND_ASSIGN(RtcpParserTest);
132 }; 132 };
133 133
134 TEST_F(RtcpParserTest, BrokenPacketIsIgnored) { 134 TEST_F(RtcpParserTest, BrokenPacketIsIgnored) {
135 const char bad_packet[] = {0, 0, 0, 0}; 135 const char bad_packet[] = {0, 0, 0, 0};
136 RtcpParser parser(kSourceSsrc, kSenderSsrc); 136 RtcpParser parser(kLocalSsrc, kRemoteSsrc);
137 base::BigEndianReader reader(bad_packet, sizeof(bad_packet)); 137 base::BigEndianReader reader(bad_packet, sizeof(bad_packet));
138 EXPECT_FALSE(parser.Parse(&reader)); 138 EXPECT_FALSE(parser.Parse(&reader));
139 } 139 }
140 140
141 TEST_F(RtcpParserTest, UnknownBlockIgnored) { 141 TEST_F(RtcpParserTest, UnknownBlockIgnored) {
142 // Only unknown data, nothing happens. 142 // Only unknown data, nothing happens.
143 TestRtcpPacketBuilder p; 143 TestRtcpPacketBuilder p;
144 p.AddUnknownBlock(); 144 p.AddUnknownBlock();
145 RtcpParser parser1(kSourceSsrc, 0); 145 RtcpParser parser1(kLocalSsrc, 0);
146 EXPECT_TRUE(parser1.Parse(p.Reader())); 146 EXPECT_TRUE(parser1.Parse(p.Reader()));
147 EXPECT_FALSE(HasAnything(parser1)); 147 EXPECT_FALSE(HasAnything(parser1));
148 148
149 // Add valid sender report *after* unknown data - should work fine. 149 // Add valid sender report *after* unknown data - should work fine.
150 p.AddSr(kSenderSsrc, 0); 150 p.AddSr(kRemoteSsrc, 0);
151 RtcpParser parser2(kSourceSsrc, kSenderSsrc); 151 RtcpParser parser2(kLocalSsrc, kRemoteSsrc);
152 EXPECT_TRUE(parser2.Parse(p.Reader())); 152 EXPECT_TRUE(parser2.Parse(p.Reader()));
153 ExpectSenderInfo(parser2); 153 ExpectSenderInfo(parser2);
154 } 154 }
155 155
156 TEST_F(RtcpParserTest, InjectSenderReportPacket) { 156 TEST_F(RtcpParserTest, InjectSenderReportPacket) {
157 TestRtcpPacketBuilder p; 157 TestRtcpPacketBuilder p;
158 p.AddSr(kSenderSsrc, 0); 158 p.AddSr(kRemoteSsrc, 0);
159 159
160 // Expected to be ignored since the sender ssrc does not match our 160 // Expected to be ignored since the sender ssrc does not match our
161 // remote ssrc. 161 // remote ssrc.
162 RtcpParser parser1(kSourceSsrc, 0); 162 RtcpParser parser1(kLocalSsrc, 0);
163 EXPECT_TRUE(parser1.Parse(p.Reader())); 163 EXPECT_TRUE(parser1.Parse(p.Reader()));
164 EXPECT_FALSE(HasAnything(parser1)); 164 EXPECT_FALSE(HasAnything(parser1));
165 165
166 // Expected to be pass through since the sender ssrc match our remote ssrc. 166 // Expected to be pass through since the sender ssrc match our remote ssrc.
167 RtcpParser parser2(kSourceSsrc, kSenderSsrc); 167 RtcpParser parser2(kLocalSsrc, kRemoteSsrc);
168 EXPECT_TRUE(parser2.Parse(p.Reader())); 168 EXPECT_TRUE(parser2.Parse(p.Reader()));
169 ExpectSenderInfo(parser2); 169 ExpectSenderInfo(parser2);
170 } 170 }
171 171
172 TEST_F(RtcpParserTest, InjectReceiveReportPacket) { 172 TEST_F(RtcpParserTest, InjectReceiveReportPacket) {
173 TestRtcpPacketBuilder p1; 173 TestRtcpPacketBuilder p1;
174 p1.AddRr(kSenderSsrc, 1); 174 p1.AddRr(kRemoteSsrc, 1);
175 p1.AddRb(kUnknownSsrc); 175 p1.AddRb(kUnknownSsrc);
176 176
177 // Expected to be ignored since the source ssrc does not match our 177 // Expected to be ignored since the source ssrc does not match our
178 // local ssrc. 178 // local ssrc.
179 RtcpParser parser1(kSourceSsrc, kSenderSsrc); 179 RtcpParser parser1(kLocalSsrc, kRemoteSsrc);
180 EXPECT_TRUE(parser1.Parse(p1.Reader())); 180 EXPECT_TRUE(parser1.Parse(p1.Reader()));
181 EXPECT_FALSE(HasAnything(parser1)); 181 EXPECT_FALSE(HasAnything(parser1));
182 182
183 TestRtcpPacketBuilder p2; 183 TestRtcpPacketBuilder p2;
184 p2.AddRr(kSenderSsrc, 1); 184 p2.AddRr(kRemoteSsrc, 1);
185 p2.AddRb(kSourceSsrc); 185 p2.AddRb(kLocalSsrc);
186 186
187 // Expected to be pass through since the sender ssrc match our local ssrc. 187 // Expected to be pass through since the sender ssrc match our local ssrc.
188 RtcpParser parser2(kSourceSsrc, kSenderSsrc); 188 RtcpParser parser2(kLocalSsrc, kRemoteSsrc);
189 EXPECT_TRUE(parser2.Parse(p2.Reader())); 189 EXPECT_TRUE(parser2.Parse(p2.Reader()));
190 ExpectLastReport(parser2); 190 ExpectLastReport(parser2);
191 } 191 }
192 192
193 TEST_F(RtcpParserTest, InjectSenderReportWithReportBlockPacket) { 193 TEST_F(RtcpParserTest, InjectSenderReportWithReportBlockPacket) {
194 TestRtcpPacketBuilder p1; 194 TestRtcpPacketBuilder p1;
195 p1.AddSr(kSenderSsrc, 1); 195 p1.AddSr(kRemoteSsrc, 1);
196 p1.AddRb(kUnknownSsrc); 196 p1.AddRb(kUnknownSsrc);
197 197
198 // Sender report expected to be ignored since the sender ssrc does not match 198 // Sender report expected to be ignored since the sender ssrc does not match
199 // our remote ssrc. 199 // our remote ssrc.
200 // Report block expected to be ignored since the source ssrc does not match 200 // Report block expected to be ignored since the source ssrc does not match
201 // our local ssrc. 201 // our local ssrc.
202 RtcpParser parser1(kSourceSsrc, 0); 202 RtcpParser parser1(kLocalSsrc, 0);
203 EXPECT_TRUE(parser1.Parse(p1.Reader())); 203 EXPECT_TRUE(parser1.Parse(p1.Reader()));
204 EXPECT_FALSE(HasAnything(parser1)); 204 EXPECT_FALSE(HasAnything(parser1));
205 205
206 // Sender report expected to be pass through since the sender ssrc match our 206 // Sender report expected to be pass through since the sender ssrc match our
207 // remote ssrc. 207 // remote ssrc.
208 // Report block expected to be ignored since the source ssrc does not match 208 // Report block expected to be ignored since the source ssrc does not match
209 // our local ssrc. 209 // our local ssrc.
210 RtcpParser parser2(kSourceSsrc, kSenderSsrc); 210 RtcpParser parser2(kLocalSsrc, kRemoteSsrc);
211 EXPECT_TRUE(parser2.Parse(p1.Reader())); 211 EXPECT_TRUE(parser2.Parse(p1.Reader()));
212 ExpectSenderInfo(parser2); 212 ExpectSenderInfo(parser2);
213 EXPECT_FALSE(parser2.has_last_report()); 213 EXPECT_FALSE(parser2.has_last_report());
214 214
215 // Sender report expected to be ignored since the sender ssrc does not match 215 // Sender report expected to be ignored since the sender ssrc does not match
216 // our remote ssrc. 216 // our remote ssrc.
217 // Report block expected to be ignored too since it's a part of the 217 // Report block expected to be ignored too since it's a part of the
218 // sender report. 218 // sender report.
219 TestRtcpPacketBuilder p2; 219 TestRtcpPacketBuilder p2;
220 p2.AddSr(kSenderSsrc, 1); 220 p2.AddSr(kRemoteSsrc, 1);
221 p2.AddRb(kSourceSsrc); 221 p2.AddRb(kLocalSsrc);
222 222
223 RtcpParser parser3(kSourceSsrc, 0); 223 RtcpParser parser3(kLocalSsrc, 0);
224 EXPECT_TRUE(parser3.Parse(p2.Reader())); 224 EXPECT_TRUE(parser3.Parse(p2.Reader()));
225 EXPECT_FALSE(parser3.has_last_report()); 225 EXPECT_FALSE(parser3.has_last_report());
226 226
227 // Sender report expected to be pass through since the sender ssrc match our 227 // Sender report expected to be pass through since the sender ssrc match our
228 // remote ssrc. 228 // remote ssrc.
229 // Report block expected to be pass through since the sender ssrc match 229 // Report block expected to be pass through since the sender ssrc match
230 // our local ssrc. 230 // our local ssrc.
231 RtcpParser parser4(kSourceSsrc, kSenderSsrc); 231 RtcpParser parser4(kLocalSsrc, kRemoteSsrc);
232 EXPECT_TRUE(parser4.Parse(p2.Reader())); 232 EXPECT_TRUE(parser4.Parse(p2.Reader()));
233 ExpectSenderInfo(parser4); 233 ExpectSenderInfo(parser4);
234 ExpectLastReport(parser4); 234 ExpectLastReport(parser4);
235 } 235 }
236 236
237 TEST_F(RtcpParserTest, InjectSenderReportPacketWithDlrr) { 237 TEST_F(RtcpParserTest, InjectSenderReportPacketWithDlrr) {
238 TestRtcpPacketBuilder p; 238 TestRtcpPacketBuilder p;
239 p.AddSr(kSenderSsrc, 0); 239 p.AddSr(kRemoteSsrc, 0);
240 p.AddXrHeader(kSenderSsrc); 240 p.AddXrHeader(kRemoteSsrc);
241 p.AddXrUnknownBlock(); 241 p.AddXrUnknownBlock();
242 p.AddXrExtendedDlrrBlock(kSenderSsrc); 242 p.AddXrExtendedDlrrBlock(kRemoteSsrc);
243 p.AddXrUnknownBlock(); 243 p.AddXrUnknownBlock();
244 244
245 // Expected to be ignored since the source ssrc does not match our 245 // Expected to be ignored since the source ssrc does not match our
246 // local ssrc. 246 // local ssrc.
247 RtcpParser parser1(kSourceSsrc, 0); 247 RtcpParser parser1(kLocalSsrc, 0);
248 EXPECT_TRUE(parser1.Parse(p.Reader())); 248 EXPECT_TRUE(parser1.Parse(p.Reader()));
249 EXPECT_FALSE(HasAnything(parser1)); 249 EXPECT_FALSE(HasAnything(parser1));
250 250
251 // Expected to be pass through since the sender ssrc match our local ssrc. 251 // Expected to be pass through since the sender ssrc match our local ssrc.
252 RtcpParser parser2(kSourceSsrc, kSenderSsrc); 252 RtcpParser parser2(kLocalSsrc, kRemoteSsrc);
253 EXPECT_TRUE(parser2.Parse(p.Reader())); 253 EXPECT_TRUE(parser2.Parse(p.Reader()));
254 ExpectSenderInfo(parser2); 254 ExpectSenderInfo(parser2);
255 // DLRRs are ignored. 255 // DLRRs are ignored.
256 EXPECT_FALSE(parser2.has_last_report()); 256 EXPECT_FALSE(parser2.has_last_report());
257 } 257 }
258 258
259 TEST_F(RtcpParserTest, InjectReceiverReportPacketWithRrtr) { 259 TEST_F(RtcpParserTest, InjectReceiverReportPacketWithRrtr) {
260 TestRtcpPacketBuilder p1; 260 TestRtcpPacketBuilder p1;
261 p1.AddRr(kSenderSsrc, 1); 261 p1.AddRr(kRemoteSsrc, 1);
262 p1.AddRb(kUnknownSsrc); 262 p1.AddRb(kUnknownSsrc);
263 p1.AddXrHeader(kSenderSsrc); 263 p1.AddXrHeader(kRemoteSsrc);
264 p1.AddXrRrtrBlock(); 264 p1.AddXrRrtrBlock();
265 265
266 // Expected to be ignored since the source ssrc does not match our 266 // Expected to be ignored since the source ssrc does not match our
267 // local ssrc. 267 // local ssrc.
268 RtcpParser parser1(kSourceSsrc, 0); 268 RtcpParser parser1(kLocalSsrc, 0);
269 EXPECT_TRUE(parser1.Parse(p1.Reader())); 269 EXPECT_TRUE(parser1.Parse(p1.Reader()));
270 EXPECT_FALSE(HasAnything(parser1)); 270 EXPECT_FALSE(HasAnything(parser1));
271 271
272 TestRtcpPacketBuilder p2; 272 TestRtcpPacketBuilder p2;
273 p2.AddRr(kSenderSsrc, 1); 273 p2.AddRr(kRemoteSsrc, 1);
274 p2.AddRb(kSourceSsrc); 274 p2.AddRb(kLocalSsrc);
275 p2.AddXrHeader(kSenderSsrc); 275 p2.AddXrHeader(kRemoteSsrc);
276 p2.AddXrRrtrBlock(); 276 p2.AddXrRrtrBlock();
277 277
278 // Expected to be pass through since the sender ssrc match our local ssrc. 278 // Expected to be pass through since the sender ssrc match our local ssrc.
279 RtcpParser parser2(kSourceSsrc, kSenderSsrc); 279 RtcpParser parser2(kLocalSsrc, kRemoteSsrc);
280 EXPECT_TRUE(parser2.Parse(p2.Reader())); 280 EXPECT_TRUE(parser2.Parse(p2.Reader()));
281 ExpectLastReport(parser2); 281 ExpectLastReport(parser2);
282 ExpectReceiverReference(parser2); 282 ExpectReceiverReference(parser2);
283 } 283 }
284 284
285 TEST_F(RtcpParserTest, InjectReceiverReportPacketWithIntraFrameRequest) { 285 TEST_F(RtcpParserTest, InjectReceiverReportPacketWithIntraFrameRequest) {
286 TestRtcpPacketBuilder p1; 286 TestRtcpPacketBuilder p1;
287 p1.AddRr(kSenderSsrc, 1); 287 p1.AddRr(kRemoteSsrc, 1);
288 p1.AddRb(kUnknownSsrc); 288 p1.AddRb(kUnknownSsrc);
289 289
290 // Expected to be ignored since the source ssrc does not match our 290 // Expected to be ignored since the source ssrc does not match our
291 // local ssrc. 291 // local ssrc.
292 RtcpParser parser1(kSourceSsrc, 0); 292 RtcpParser parser1(kLocalSsrc, 0);
293 EXPECT_TRUE(parser1.Parse(p1.Reader())); 293 EXPECT_TRUE(parser1.Parse(p1.Reader()));
294 EXPECT_FALSE(HasAnything(parser1)); 294 EXPECT_FALSE(HasAnything(parser1));
295 295
296 TestRtcpPacketBuilder p2; 296 TestRtcpPacketBuilder p2;
297 p2.AddRr(kSenderSsrc, 1); 297 p2.AddRr(kRemoteSsrc, 1);
298 p2.AddRb(kSourceSsrc); 298 p2.AddRb(kLocalSsrc);
299 299
300 RtcpParser parser2(kSourceSsrc, kSenderSsrc); 300 RtcpParser parser2(kLocalSsrc, kRemoteSsrc);
301 EXPECT_TRUE(parser2.Parse(p2.Reader())); 301 EXPECT_TRUE(parser2.Parse(p2.Reader()));
302 ExpectLastReport(parser2); 302 ExpectLastReport(parser2);
303 } 303 }
304 304
305 TEST_F(RtcpParserTest, InjectReceiverReportPacketWithCastFeedback) { 305 TEST_F(RtcpParserTest, InjectReceiverReportPacketWithCastFeedback) {
306 TestRtcpPacketBuilder p1; 306 TestRtcpPacketBuilder p1;
307 p1.AddRr(kSenderSsrc, 1); 307 p1.AddRr(kRemoteSsrc, 1);
308 p1.AddRb(kUnknownSsrc); 308 p1.AddRb(kUnknownSsrc);
309 p1.AddCast(kSenderSsrc, kUnknownSsrc, kTargetDelay); 309 p1.AddCast(kRemoteSsrc, kUnknownSsrc, kTargetDelay);
310 310
311 // Expected to be ignored since the source ssrc does not match our 311 // Expected to be ignored since the source ssrc does not match our
312 // local ssrc. 312 // local ssrc.
313 RtcpParser parser1(kSourceSsrc, 0); 313 RtcpParser parser1(kLocalSsrc, 0);
314 EXPECT_TRUE(parser1.Parse(p1.Reader())); 314 EXPECT_TRUE(parser1.Parse(p1.Reader()));
315 EXPECT_FALSE(HasAnything(parser1)); 315 EXPECT_FALSE(HasAnything(parser1));
316 316
317 TestRtcpPacketBuilder p2; 317 TestRtcpPacketBuilder p2;
318 p2.AddRr(kSenderSsrc, 1); 318 p2.AddRr(kRemoteSsrc, 1);
319 p2.AddRb(kSourceSsrc); 319 p2.AddRb(kLocalSsrc);
320 p2.AddCast(kSenderSsrc, kSourceSsrc, kTargetDelay); 320 p2.AddCast(kRemoteSsrc, kLocalSsrc, kTargetDelay);
321 321
322 // Expected to be pass through since the sender ssrc match our local ssrc. 322 // Expected to be pass through since the sender ssrc match our local ssrc.
323 RtcpParser parser2(kSourceSsrc, kSenderSsrc); 323 RtcpParser parser2(kLocalSsrc, kRemoteSsrc);
324 EXPECT_TRUE(parser2.Parse(p2.Reader())); 324 EXPECT_TRUE(parser2.Parse(p2.Reader()));
325 ExpectLastReport(parser2); 325 ExpectLastReport(parser2);
326 ExpectCastFeedback(parser2); 326 ExpectCastFeedback(parser2);
327 } 327 }
328 328
329 TEST_F(RtcpParserTest, ExtendedCastFeedbackDoesNotBreakParsing) { 329 TEST_F(RtcpParserTest, ExtendedCastFeedbackDoesNotBreakParsing) {
330 TestRtcpPacketBuilder builder; 330 TestRtcpPacketBuilder builder;
331 builder.AddRr(kSenderSsrc, 1); 331 builder.AddRr(kRemoteSsrc, 1);
332 builder.AddRb(kSourceSsrc); 332 builder.AddRb(kLocalSsrc);
333 builder.AddCast(kSenderSsrc, kSourceSsrc, kTargetDelay); 333 builder.AddCast(kRemoteSsrc, kLocalSsrc, kTargetDelay);
334 builder.AddCst2(std::vector<uint32_t>{kAckFrameId + 2, kAckFrameId + 3}); 334 builder.AddCst2(std::vector<uint32_t>{kAckFrameId + 2, kAckFrameId + 3});
335 335
336 // Parse should succeed with the added CST2 section in the feedback, even 336 // Parse should succeed with the added CST2 section in the feedback, even
337 // though we don't currently parse it directly. 337 // though we don't currently parse it directly.
338 RtcpParser parser(kSourceSsrc, kSenderSsrc); 338 RtcpParser parser(kLocalSsrc, kRemoteSsrc);
339 EXPECT_TRUE(parser.Parse(builder.Reader())); 339 EXPECT_TRUE(parser.Parse(builder.Reader()));
340 ExpectLastReport(parser); 340 ExpectLastReport(parser);
341 ExpectCastFeedback(parser); 341 ExpectCastFeedback(parser);
342 } 342 }
343 343
344 TEST_F(RtcpParserTest, InjectReceiverReportPli) {
345 // Expect to be ignored since the sender ssrc does not match.
346 TestRtcpPacketBuilder builder1;
347 builder1.AddPli(kUnknownSsrc, kLocalSsrc);
348 RtcpParser parser1(kLocalSsrc, kRemoteSsrc);
349 EXPECT_TRUE(parser1.Parse(builder1.Reader()));
350 EXPECT_FALSE(parser1.has_picture_loss_indicator());
351
352 // Expect to be ignored since the receiver ssrc does not match.
353 TestRtcpPacketBuilder builder2;
354 builder2.AddPli(kRemoteSsrc, kUnknownSsrc);
355 RtcpParser parser2(kLocalSsrc, kRemoteSsrc);
356 EXPECT_TRUE(parser2.Parse(builder2.Reader()));
357 EXPECT_FALSE(parser2.has_picture_loss_indicator());
358
359 TestRtcpPacketBuilder builder3;
360 builder3.AddPli(kRemoteSsrc, kLocalSsrc);
361 RtcpParser parser3(kLocalSsrc, kRemoteSsrc);
362 EXPECT_TRUE(parser3.Parse(builder3.Reader()));
363 EXPECT_TRUE(parser3.has_picture_loss_indicator());
364 }
365
344 TEST_F(RtcpParserTest, InjectReceiverReportWithReceiverLogVerificationBase) { 366 TEST_F(RtcpParserTest, InjectReceiverReportWithReceiverLogVerificationBase) {
345 static const uint32_t kTimeBaseMs = 12345678; 367 static const uint32_t kTimeBaseMs = 12345678;
346 static const uint32_t kTimeDelayMs = 10; 368 static const uint32_t kTimeDelayMs = 10;
347 static const uint32_t kDelayDeltaMs = 123; 369 static const uint32_t kDelayDeltaMs = 123;
348 base::SimpleTestTickClock testing_clock; 370 base::SimpleTestTickClock testing_clock;
349 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); 371 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
350 372
351 RtcpReceiverLogMessage receiver_log; 373 RtcpReceiverLogMessage receiver_log;
352 RtcpReceiverFrameLogMessage frame_log(RtpTimeTicks().Expand(kRtpTimestamp)); 374 RtcpReceiverFrameLogMessage frame_log(RtpTimeTicks().Expand(kRtpTimestamp));
353 RtcpReceiverEventLogMessage event_log; 375 RtcpReceiverEventLogMessage event_log;
(...skipping 10 matching lines...) Expand all
364 frame_log.event_log_messages_.push_back(event_log); 386 frame_log.event_log_messages_.push_back(event_log);
365 387
366 event_log.type = PACKET_RECEIVED; 388 event_log.type = PACKET_RECEIVED;
367 event_log.event_timestamp = testing_clock.NowTicks(); 389 event_log.event_timestamp = testing_clock.NowTicks();
368 event_log.packet_id = kLostPacketId2; 390 event_log.packet_id = kLostPacketId2;
369 frame_log.event_log_messages_.push_back(event_log); 391 frame_log.event_log_messages_.push_back(event_log);
370 392
371 receiver_log.push_back(frame_log); 393 receiver_log.push_back(frame_log);
372 394
373 TestRtcpPacketBuilder p; 395 TestRtcpPacketBuilder p;
374 p.AddRr(kSenderSsrc, 1); 396 p.AddRr(kRemoteSsrc, 1);
375 p.AddRb(kSourceSsrc); 397 p.AddRb(kLocalSsrc);
376 p.AddReceiverLog(kSenderSsrc); 398 p.AddReceiverLog(kRemoteSsrc);
377 p.AddReceiverFrameLog(kRtpTimestamp, 3, kTimeBaseMs); 399 p.AddReceiverFrameLog(kRtpTimestamp, 3, kTimeBaseMs);
378 p.AddReceiverEventLog(kDelayDeltaMs, FRAME_ACK_SENT, 0); 400 p.AddReceiverEventLog(kDelayDeltaMs, FRAME_ACK_SENT, 0);
379 p.AddReceiverEventLog(kLostPacketId1, PACKET_RECEIVED, kTimeDelayMs); 401 p.AddReceiverEventLog(kLostPacketId1, PACKET_RECEIVED, kTimeDelayMs);
380 p.AddReceiverEventLog(kLostPacketId2, PACKET_RECEIVED, kTimeDelayMs); 402 p.AddReceiverEventLog(kLostPacketId2, PACKET_RECEIVED, kTimeDelayMs);
381 403
382 RtcpParser parser(kSourceSsrc, kSenderSsrc); 404 RtcpParser parser(kLocalSsrc, kRemoteSsrc);
383 EXPECT_TRUE(parser.Parse(p.Reader())); 405 EXPECT_TRUE(parser.Parse(p.Reader()));
384 ExpectReceiverLog(parser, receiver_log); 406 ExpectReceiverLog(parser, receiver_log);
385 } 407 }
386 408
387 TEST_F(RtcpParserTest, InjectReceiverReportWithReceiverLogVerificationMulti) { 409 TEST_F(RtcpParserTest, InjectReceiverReportWithReceiverLogVerificationMulti) {
388 static const uint32_t kTimeBaseMs = 12345678; 410 static const uint32_t kTimeBaseMs = 12345678;
389 static const uint32_t kTimeDelayMs = 10; 411 static const uint32_t kTimeDelayMs = 10;
390 static const int kDelayDeltaMs = 123; // To be varied for every frame. 412 static const int kDelayDeltaMs = 123; // To be varied for every frame.
391 base::SimpleTestTickClock testing_clock; 413 base::SimpleTestTickClock testing_clock;
392 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); 414 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
393 415
394 RtcpReceiverLogMessage receiver_log; 416 RtcpReceiverLogMessage receiver_log;
395 417
396 for (int j = 0; j < 100; ++j) { 418 for (int j = 0; j < 100; ++j) {
397 RtcpReceiverFrameLogMessage frame_log(RtpTimeTicks().Expand(kRtpTimestamp)); 419 RtcpReceiverFrameLogMessage frame_log(RtpTimeTicks().Expand(kRtpTimestamp));
398 RtcpReceiverEventLogMessage event_log; 420 RtcpReceiverEventLogMessage event_log;
399 event_log.type = FRAME_ACK_SENT; 421 event_log.type = FRAME_ACK_SENT;
400 event_log.event_timestamp = testing_clock.NowTicks(); 422 event_log.event_timestamp = testing_clock.NowTicks();
401 event_log.delay_delta = 423 event_log.delay_delta =
402 base::TimeDelta::FromMilliseconds((j - 50) * kDelayDeltaMs); 424 base::TimeDelta::FromMilliseconds((j - 50) * kDelayDeltaMs);
403 frame_log.event_log_messages_.push_back(event_log); 425 frame_log.event_log_messages_.push_back(event_log);
404 receiver_log.push_back(frame_log); 426 receiver_log.push_back(frame_log);
405 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); 427 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
406 } 428 }
407 429
408 TestRtcpPacketBuilder p; 430 TestRtcpPacketBuilder p;
409 p.AddRr(kSenderSsrc, 1); 431 p.AddRr(kRemoteSsrc, 1);
410 p.AddRb(kSourceSsrc); 432 p.AddRb(kLocalSsrc);
411 p.AddReceiverLog(kSenderSsrc); 433 p.AddReceiverLog(kRemoteSsrc);
412 for (int i = 0; i < 100; ++i) { 434 for (int i = 0; i < 100; ++i) {
413 p.AddReceiverFrameLog(kRtpTimestamp, 1, kTimeBaseMs + i * kTimeDelayMs); 435 p.AddReceiverFrameLog(kRtpTimestamp, 1, kTimeBaseMs + i * kTimeDelayMs);
414 const int delay = (i - 50) * kDelayDeltaMs; 436 const int delay = (i - 50) * kDelayDeltaMs;
415 p.AddReceiverEventLog(static_cast<uint16_t>(delay), FRAME_ACK_SENT, 0); 437 p.AddReceiverEventLog(static_cast<uint16_t>(delay), FRAME_ACK_SENT, 0);
416 } 438 }
417 439
418 RtcpParser parser(kSourceSsrc, kSenderSsrc); 440 RtcpParser parser(kLocalSsrc, kRemoteSsrc);
419 EXPECT_TRUE(parser.Parse(p.Reader())); 441 EXPECT_TRUE(parser.Parse(p.Reader()));
420 ExpectReceiverLog(parser, receiver_log); 442 ExpectReceiverLog(parser, receiver_log);
421 } 443 }
422 444
423 TEST(RtcpUtilityTest, NtpAndTime) { 445 TEST(RtcpUtilityTest, NtpAndTime) {
424 const int64_t kSecondsbetweenYear1900and2010 = INT64_C(40176 * 24 * 60 * 60); 446 const int64_t kSecondsbetweenYear1900and2010 = INT64_C(40176 * 24 * 60 * 60);
425 const int64_t kSecondsbetweenYear1900and2030 = INT64_C(47481 * 24 * 60 * 60); 447 const int64_t kSecondsbetweenYear1900and2030 = INT64_C(47481 * 24 * 60 * 60);
426 448
427 uint32_t ntp_seconds_1 = 0; 449 uint32_t ntp_seconds_1 = 0;
428 uint32_t ntp_fraction_1 = 0; 450 uint32_t ntp_fraction_1 = 0;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 base::TimeTicks out_3 = ConvertNtpToTimeTicks(ntp_seconds_3, ntp_fraction_3); 483 base::TimeTicks out_3 = ConvertNtpToTimeTicks(ntp_seconds_3, ntp_fraction_3);
462 EXPECT_EQ(input_time, out_3); // Verify inverse. 484 EXPECT_EQ(input_time, out_3); // Verify inverse.
463 485
464 // Verify delta. 486 // Verify delta.
465 EXPECT_EQ((out_3 - out_2), time_delta); 487 EXPECT_EQ((out_3 - out_2), time_delta);
466 EXPECT_NEAR((ntp_fraction_3 - ntp_fraction_2), 0xffffffff / 2, 1); 488 EXPECT_NEAR((ntp_fraction_3 - ntp_fraction_2), 0xffffffff / 2, 1);
467 } 489 }
468 490
469 } // namespace cast 491 } // namespace cast
470 } // namespace media 492 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698