OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h" | 11 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h" |
12 | 12 |
13 #include "testing/gmock/include/gmock/gmock.h" | 13 #include "testing/gmock/include/gmock/gmock.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
15 #include "webrtc/base/random.h" | 15 #include "webrtc/base/random.h" |
| 16 #include "webrtc/test/rtcp_packet_parser.h" |
16 | 17 |
17 using testing::ElementsAre; | 18 using testing::ElementsAre; |
18 using testing::ElementsAreArray; | 19 using testing::ElementsAreArray; |
19 using testing::IsEmpty; | 20 using testing::IsEmpty; |
20 using testing::make_tuple; | 21 using testing::make_tuple; |
21 using webrtc::rtcp::Dlrr; | 22 using webrtc::rtcp::Dlrr; |
22 using webrtc::rtcp::ExtendedReports; | 23 using webrtc::rtcp::ExtendedReports; |
23 using webrtc::rtcp::ReceiveTimeInfo; | 24 using webrtc::rtcp::ReceiveTimeInfo; |
24 using webrtc::rtcp::Rrtr; | 25 using webrtc::rtcp::Rrtr; |
25 using webrtc::rtcp::VoipMetric; | 26 using webrtc::rtcp::VoipMetric; |
26 using webrtc::RTCPUtility::RtcpCommonHeader; | |
27 using webrtc::RTCPUtility::RtcpParseCommonHeader; | |
28 | 27 |
29 namespace webrtc { | 28 namespace webrtc { |
30 // Define comparision operators that shouldn't be needed in production, | 29 // Define comparision operators that shouldn't be needed in production, |
31 // but make testing matches more clear. | 30 // but make testing matches more clear. |
32 bool operator==(const RTCPVoIPMetric& metric1, const RTCPVoIPMetric& metric2) { | 31 bool operator==(const RTCPVoIPMetric& metric1, const RTCPVoIPMetric& metric2) { |
33 return metric1.lossRate == metric2.lossRate && | 32 return metric1.lossRate == metric2.lossRate && |
34 metric1.discardRate == metric2.discardRate && | 33 metric1.discardRate == metric2.discardRate && |
35 metric1.burstDensity == metric2.burstDensity && | 34 metric1.burstDensity == metric2.burstDensity && |
36 metric1.gapDensity == metric2.gapDensity && | 35 metric1.gapDensity == metric2.gapDensity && |
37 metric1.burstDuration == metric2.burstDuration && | 36 metric1.burstDuration == metric2.burstDuration && |
(...skipping 29 matching lines...) Expand all Loading... |
67 return dlrr1.sub_blocks() == dlrr2.sub_blocks(); | 66 return dlrr1.sub_blocks() == dlrr2.sub_blocks(); |
68 } | 67 } |
69 | 68 |
70 bool operator==(const VoipMetric& metric1, const VoipMetric& metric2) { | 69 bool operator==(const VoipMetric& metric1, const VoipMetric& metric2) { |
71 return metric1.ssrc() == metric2.ssrc() && | 70 return metric1.ssrc() == metric2.ssrc() && |
72 metric1.voip_metric() == metric2.voip_metric(); | 71 metric1.voip_metric() == metric2.voip_metric(); |
73 } | 72 } |
74 } // namespace rtcp | 73 } // namespace rtcp |
75 | 74 |
76 namespace { | 75 namespace { |
77 const uint32_t kSenderSsrc = 0x12345678; | 76 constexpr uint32_t kSenderSsrc = 0x12345678; |
78 const uint8_t kEmptyPacket[8] = {0x80, 207, 0x00, 0x01, | 77 constexpr uint8_t kEmptyPacket[] = {0x80, 207, 0x00, 0x01, |
79 0x12, 0x34, 0x56, 0x78}; | 78 0x12, 0x34, 0x56, 0x78}; |
80 | |
81 bool Parse(const uint8_t* buffer, | |
82 size_t length, | |
83 ExtendedReports* packet) { | |
84 RtcpCommonHeader header; | |
85 EXPECT_TRUE(RtcpParseCommonHeader(buffer, length, &header)); | |
86 EXPECT_EQ(length, header.BlockSize()); | |
87 return packet->Parse(header, buffer + RtcpCommonHeader::kHeaderSizeBytes); | |
88 } | |
89 | |
90 bool Parse(const rtc::Buffer& buffer, ExtendedReports* packet) { | |
91 return Parse(buffer.data(), buffer.size(), packet); | |
92 } | |
93 } // namespace | 79 } // namespace |
94 | 80 |
95 class RtcpPacketExtendedReportsTest : public ::testing::Test { | 81 class RtcpPacketExtendedReportsTest : public ::testing::Test { |
96 public: | 82 public: |
97 RtcpPacketExtendedReportsTest() : random_(0x123456789) {} | 83 RtcpPacketExtendedReportsTest() : random_(0x123456789) {} |
98 | 84 |
99 protected: | 85 protected: |
100 template <typename T> | 86 template <typename T> |
101 T Rand() { | 87 T Rand() { |
102 return random_.Rand<T>(); | 88 return random_.Rand<T>(); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 xr.From(kSenderSsrc); | 153 xr.From(kSenderSsrc); |
168 | 154 |
169 rtc::Buffer packet = xr.Build(); | 155 rtc::Buffer packet = xr.Build(); |
170 | 156 |
171 EXPECT_THAT(make_tuple(packet.data(), packet.size()), | 157 EXPECT_THAT(make_tuple(packet.data(), packet.size()), |
172 ElementsAreArray(kEmptyPacket)); | 158 ElementsAreArray(kEmptyPacket)); |
173 } | 159 } |
174 | 160 |
175 TEST_F(RtcpPacketExtendedReportsTest, ParseWithoutReportBlocks) { | 161 TEST_F(RtcpPacketExtendedReportsTest, ParseWithoutReportBlocks) { |
176 ExtendedReports parsed; | 162 ExtendedReports parsed; |
177 EXPECT_TRUE(Parse(kEmptyPacket, sizeof(kEmptyPacket), &parsed)); | 163 EXPECT_TRUE(test::ParseSinglePacket(kEmptyPacket, &parsed)); |
178 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); | 164 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
179 EXPECT_THAT(parsed.rrtrs(), IsEmpty()); | 165 EXPECT_THAT(parsed.rrtrs(), IsEmpty()); |
180 EXPECT_THAT(parsed.dlrrs(), IsEmpty()); | 166 EXPECT_THAT(parsed.dlrrs(), IsEmpty()); |
181 EXPECT_THAT(parsed.voip_metrics(), IsEmpty()); | 167 EXPECT_THAT(parsed.voip_metrics(), IsEmpty()); |
182 } | 168 } |
183 | 169 |
184 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithOneRrtrBlock) { | 170 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithOneRrtrBlock) { |
185 Rrtr rrtr = Rand<Rrtr>(); | 171 Rrtr rrtr = Rand<Rrtr>(); |
186 ExtendedReports xr; | 172 ExtendedReports xr; |
187 xr.From(kSenderSsrc); | 173 xr.From(kSenderSsrc); |
188 EXPECT_TRUE(xr.WithRrtr(rrtr)); | 174 EXPECT_TRUE(xr.WithRrtr(rrtr)); |
189 rtc::Buffer packet = xr.Build(); | 175 rtc::Buffer packet = xr.Build(); |
190 | 176 |
191 ExtendedReports mparsed; | 177 ExtendedReports mparsed; |
192 EXPECT_TRUE(Parse(packet, &mparsed)); | 178 EXPECT_TRUE(test::ParseSinglePacket(packet, &mparsed)); |
193 const ExtendedReports& parsed = mparsed; | 179 const ExtendedReports& parsed = mparsed; |
194 | 180 |
195 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); | 181 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
196 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr)); | 182 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr)); |
197 } | 183 } |
198 | 184 |
199 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithTwoRrtrBlocks) { | 185 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithTwoRrtrBlocks) { |
200 Rrtr rrtr1 = Rand<Rrtr>(); | 186 Rrtr rrtr1 = Rand<Rrtr>(); |
201 Rrtr rrtr2 = Rand<Rrtr>(); | 187 Rrtr rrtr2 = Rand<Rrtr>(); |
202 ExtendedReports xr; | 188 ExtendedReports xr; |
203 xr.From(kSenderSsrc); | 189 xr.From(kSenderSsrc); |
204 EXPECT_TRUE(xr.WithRrtr(rrtr1)); | 190 EXPECT_TRUE(xr.WithRrtr(rrtr1)); |
205 EXPECT_TRUE(xr.WithRrtr(rrtr2)); | 191 EXPECT_TRUE(xr.WithRrtr(rrtr2)); |
206 | 192 |
207 rtc::Buffer packet = xr.Build(); | 193 rtc::Buffer packet = xr.Build(); |
208 | 194 |
209 ExtendedReports mparsed; | 195 ExtendedReports mparsed; |
210 EXPECT_TRUE(Parse(packet, &mparsed)); | 196 EXPECT_TRUE(test::ParseSinglePacket(packet, &mparsed)); |
211 const ExtendedReports& parsed = mparsed; | 197 const ExtendedReports& parsed = mparsed; |
212 | 198 |
213 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); | 199 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
214 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr1, rrtr2)); | 200 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr1, rrtr2)); |
215 } | 201 } |
216 | 202 |
217 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithDlrrWithOneSubBlock) { | 203 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithDlrrWithOneSubBlock) { |
218 Dlrr dlrr; | 204 Dlrr dlrr; |
219 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); | 205 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); |
220 ExtendedReports xr; | 206 ExtendedReports xr; |
221 xr.From(kSenderSsrc); | 207 xr.From(kSenderSsrc); |
222 EXPECT_TRUE(xr.WithDlrr(dlrr)); | 208 EXPECT_TRUE(xr.WithDlrr(dlrr)); |
223 | 209 |
224 rtc::Buffer packet = xr.Build(); | 210 rtc::Buffer packet = xr.Build(); |
225 | 211 |
226 ExtendedReports mparsed; | 212 ExtendedReports mparsed; |
227 EXPECT_TRUE(Parse(packet, &mparsed)); | 213 EXPECT_TRUE(test::ParseSinglePacket(packet, &mparsed)); |
228 const ExtendedReports& parsed = mparsed; | 214 const ExtendedReports& parsed = mparsed; |
229 | 215 |
230 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); | 216 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
231 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr)); | 217 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr)); |
232 } | 218 } |
233 | 219 |
234 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithDlrrWithTwoSubBlocks) { | 220 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithDlrrWithTwoSubBlocks) { |
235 Dlrr dlrr; | 221 Dlrr dlrr; |
236 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); | 222 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); |
237 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); | 223 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); |
238 ExtendedReports xr; | 224 ExtendedReports xr; |
239 xr.From(kSenderSsrc); | 225 xr.From(kSenderSsrc); |
240 EXPECT_TRUE(xr.WithDlrr(dlrr)); | 226 EXPECT_TRUE(xr.WithDlrr(dlrr)); |
241 | 227 |
242 rtc::Buffer packet = xr.Build(); | 228 rtc::Buffer packet = xr.Build(); |
243 | 229 |
244 ExtendedReports mparsed; | 230 ExtendedReports mparsed; |
245 EXPECT_TRUE(Parse(packet, &mparsed)); | 231 EXPECT_TRUE(test::ParseSinglePacket(packet, &mparsed)); |
246 const ExtendedReports& parsed = mparsed; | 232 const ExtendedReports& parsed = mparsed; |
247 | 233 |
248 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); | 234 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
249 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr)); | 235 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr)); |
250 } | 236 } |
251 | 237 |
252 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithTwoDlrrBlocks) { | 238 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithTwoDlrrBlocks) { |
253 Dlrr dlrr1; | 239 Dlrr dlrr1; |
254 EXPECT_TRUE(dlrr1.WithDlrrItem(Rand<ReceiveTimeInfo>())); | 240 EXPECT_TRUE(dlrr1.WithDlrrItem(Rand<ReceiveTimeInfo>())); |
255 Dlrr dlrr2; | 241 Dlrr dlrr2; |
256 EXPECT_TRUE(dlrr2.WithDlrrItem(Rand<ReceiveTimeInfo>())); | 242 EXPECT_TRUE(dlrr2.WithDlrrItem(Rand<ReceiveTimeInfo>())); |
257 ExtendedReports xr; | 243 ExtendedReports xr; |
258 xr.From(kSenderSsrc); | 244 xr.From(kSenderSsrc); |
259 EXPECT_TRUE(xr.WithDlrr(dlrr1)); | 245 EXPECT_TRUE(xr.WithDlrr(dlrr1)); |
260 EXPECT_TRUE(xr.WithDlrr(dlrr2)); | 246 EXPECT_TRUE(xr.WithDlrr(dlrr2)); |
261 | 247 |
262 rtc::Buffer packet = xr.Build(); | 248 rtc::Buffer packet = xr.Build(); |
263 | 249 |
264 ExtendedReports mparsed; | 250 ExtendedReports mparsed; |
265 EXPECT_TRUE(Parse(packet, &mparsed)); | 251 EXPECT_TRUE(test::ParseSinglePacket(packet, &mparsed)); |
266 const ExtendedReports& parsed = mparsed; | 252 const ExtendedReports& parsed = mparsed; |
267 | 253 |
268 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); | 254 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
269 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr1, dlrr2)); | 255 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr1, dlrr2)); |
270 } | 256 } |
271 | 257 |
272 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithVoipMetric) { | 258 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithVoipMetric) { |
273 VoipMetric voip_metric = Rand<VoipMetric>(); | 259 VoipMetric voip_metric = Rand<VoipMetric>(); |
274 | 260 |
275 ExtendedReports xr; | 261 ExtendedReports xr; |
276 xr.From(kSenderSsrc); | 262 xr.From(kSenderSsrc); |
277 EXPECT_TRUE(xr.WithVoipMetric(voip_metric)); | 263 EXPECT_TRUE(xr.WithVoipMetric(voip_metric)); |
278 | 264 |
279 rtc::Buffer packet = xr.Build(); | 265 rtc::Buffer packet = xr.Build(); |
280 | 266 |
281 ExtendedReports mparsed; | 267 ExtendedReports mparsed; |
282 EXPECT_TRUE(Parse(packet, &mparsed)); | 268 EXPECT_TRUE(test::ParseSinglePacket(packet, &mparsed)); |
283 const ExtendedReports& parsed = mparsed; | 269 const ExtendedReports& parsed = mparsed; |
284 | 270 |
285 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); | 271 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
286 EXPECT_THAT(parsed.voip_metrics(), ElementsAre(voip_metric)); | 272 EXPECT_THAT(parsed.voip_metrics(), ElementsAre(voip_metric)); |
287 } | 273 } |
288 | 274 |
289 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithMultipleReportBlocks) { | 275 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithMultipleReportBlocks) { |
290 Rrtr rrtr = Rand<Rrtr>(); | 276 Rrtr rrtr = Rand<Rrtr>(); |
291 Dlrr dlrr; | 277 Dlrr dlrr; |
292 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); | 278 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); |
293 VoipMetric metric = Rand<VoipMetric>(); | 279 VoipMetric metric = Rand<VoipMetric>(); |
294 ExtendedReports xr; | 280 ExtendedReports xr; |
295 xr.From(kSenderSsrc); | 281 xr.From(kSenderSsrc); |
296 EXPECT_TRUE(xr.WithRrtr(rrtr)); | 282 EXPECT_TRUE(xr.WithRrtr(rrtr)); |
297 EXPECT_TRUE(xr.WithDlrr(dlrr)); | 283 EXPECT_TRUE(xr.WithDlrr(dlrr)); |
298 EXPECT_TRUE(xr.WithVoipMetric(metric)); | 284 EXPECT_TRUE(xr.WithVoipMetric(metric)); |
299 | 285 |
300 rtc::Buffer packet = xr.Build(); | 286 rtc::Buffer packet = xr.Build(); |
301 | 287 |
302 ExtendedReports mparsed; | 288 ExtendedReports mparsed; |
303 EXPECT_TRUE(Parse(packet, &mparsed)); | 289 EXPECT_TRUE(test::ParseSinglePacket(packet, &mparsed)); |
304 const ExtendedReports& parsed = mparsed; | 290 const ExtendedReports& parsed = mparsed; |
305 | 291 |
306 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); | 292 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
307 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr)); | 293 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr)); |
308 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr)); | 294 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr)); |
309 EXPECT_THAT(parsed.voip_metrics(), ElementsAre(metric)); | 295 EXPECT_THAT(parsed.voip_metrics(), ElementsAre(metric)); |
310 } | 296 } |
311 | 297 |
312 TEST_F(RtcpPacketExtendedReportsTest, DlrrWithoutItemNotIncludedInPacket) { | 298 TEST_F(RtcpPacketExtendedReportsTest, DlrrWithoutItemNotIncludedInPacket) { |
313 Rrtr rrtr = Rand<Rrtr>(); | 299 Rrtr rrtr = Rand<Rrtr>(); |
314 Dlrr dlrr; | 300 Dlrr dlrr; |
315 VoipMetric metric = Rand<VoipMetric>(); | 301 VoipMetric metric = Rand<VoipMetric>(); |
316 ExtendedReports xr; | 302 ExtendedReports xr; |
317 xr.From(kSenderSsrc); | 303 xr.From(kSenderSsrc); |
318 EXPECT_TRUE(xr.WithRrtr(rrtr)); | 304 EXPECT_TRUE(xr.WithRrtr(rrtr)); |
319 EXPECT_TRUE(xr.WithDlrr(dlrr)); | 305 EXPECT_TRUE(xr.WithDlrr(dlrr)); |
320 EXPECT_TRUE(xr.WithVoipMetric(metric)); | 306 EXPECT_TRUE(xr.WithVoipMetric(metric)); |
321 | 307 |
322 rtc::Buffer packet = xr.Build(); | 308 rtc::Buffer packet = xr.Build(); |
323 | 309 |
324 ExtendedReports mparsed; | 310 ExtendedReports mparsed; |
325 EXPECT_TRUE(Parse(packet, &mparsed)); | 311 EXPECT_TRUE(test::ParseSinglePacket(packet, &mparsed)); |
326 const ExtendedReports& parsed = mparsed; | 312 const ExtendedReports& parsed = mparsed; |
327 | 313 |
328 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr)); | 314 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr)); |
329 EXPECT_THAT(parsed.dlrrs(), IsEmpty()); | 315 EXPECT_THAT(parsed.dlrrs(), IsEmpty()); |
330 EXPECT_THAT(parsed.voip_metrics(), ElementsAre(metric)); | 316 EXPECT_THAT(parsed.voip_metrics(), ElementsAre(metric)); |
331 } | 317 } |
332 | 318 |
333 TEST_F(RtcpPacketExtendedReportsTest, WithTooManyBlocks) { | 319 TEST_F(RtcpPacketExtendedReportsTest, WithTooManyBlocks) { |
334 const size_t kMaxBlocks = 50; | 320 const size_t kMaxBlocks = 50; |
335 ExtendedReports xr; | 321 ExtendedReports xr; |
336 | 322 |
337 Rrtr rrtr = Rand<Rrtr>(); | 323 Rrtr rrtr = Rand<Rrtr>(); |
338 for (size_t i = 0; i < kMaxBlocks; ++i) | 324 for (size_t i = 0; i < kMaxBlocks; ++i) |
339 EXPECT_TRUE(xr.WithRrtr(rrtr)); | 325 EXPECT_TRUE(xr.WithRrtr(rrtr)); |
340 EXPECT_FALSE(xr.WithRrtr(rrtr)); | 326 EXPECT_FALSE(xr.WithRrtr(rrtr)); |
341 | 327 |
342 Dlrr dlrr; | 328 Dlrr dlrr; |
343 for (size_t i = 0; i < kMaxBlocks; ++i) | 329 for (size_t i = 0; i < kMaxBlocks; ++i) |
344 EXPECT_TRUE(xr.WithDlrr(dlrr)); | 330 EXPECT_TRUE(xr.WithDlrr(dlrr)); |
345 EXPECT_FALSE(xr.WithDlrr(dlrr)); | 331 EXPECT_FALSE(xr.WithDlrr(dlrr)); |
346 | 332 |
347 VoipMetric voip_metric = Rand<VoipMetric>(); | 333 VoipMetric voip_metric = Rand<VoipMetric>(); |
348 for (size_t i = 0; i < kMaxBlocks; ++i) | 334 for (size_t i = 0; i < kMaxBlocks; ++i) |
349 EXPECT_TRUE(xr.WithVoipMetric(voip_metric)); | 335 EXPECT_TRUE(xr.WithVoipMetric(voip_metric)); |
350 EXPECT_FALSE(xr.WithVoipMetric(voip_metric)); | 336 EXPECT_FALSE(xr.WithVoipMetric(voip_metric)); |
351 } | 337 } |
352 } // namespace webrtc | 338 } // namespace webrtc |
OLD | NEW |