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 | 16 |
17 using testing::ElementsAre; | 17 using testing::ElementsAre; |
18 using testing::ElementsAreArray; | 18 using testing::ElementsAreArray; |
19 using testing::IsEmpty; | 19 using testing::IsEmpty; |
20 using testing::make_tuple; | 20 using testing::make_tuple; |
21 using webrtc::rtcp::Dlrr; | 21 using webrtc::rtcp::Dlrr; |
22 using webrtc::rtcp::ExtendedReports; | 22 using webrtc::rtcp::ExtendedReports; |
23 using webrtc::rtcp::RawPacket; | |
24 using webrtc::rtcp::ReceiveTimeInfo; | 23 using webrtc::rtcp::ReceiveTimeInfo; |
25 using webrtc::rtcp::Rrtr; | 24 using webrtc::rtcp::Rrtr; |
26 using webrtc::rtcp::VoipMetric; | 25 using webrtc::rtcp::VoipMetric; |
27 using webrtc::RTCPUtility::RtcpCommonHeader; | 26 using webrtc::RTCPUtility::RtcpCommonHeader; |
28 using webrtc::RTCPUtility::RtcpParseCommonHeader; | 27 using webrtc::RTCPUtility::RtcpParseCommonHeader; |
29 | 28 |
30 namespace webrtc { | 29 namespace webrtc { |
31 // Define comparision operators that shouldn't be needed in production, | 30 // Define comparision operators that shouldn't be needed in production, |
32 // but make testing matches more clear. | 31 // but make testing matches more clear. |
33 bool operator==(const RTCPVoIPMetric& metric1, const RTCPVoIPMetric& metric2) { | 32 bool operator==(const RTCPVoIPMetric& metric1, const RTCPVoIPMetric& metric2) { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 | 80 |
82 bool Parse(const uint8_t* buffer, | 81 bool Parse(const uint8_t* buffer, |
83 size_t length, | 82 size_t length, |
84 ExtendedReports* packet) { | 83 ExtendedReports* packet) { |
85 RtcpCommonHeader header; | 84 RtcpCommonHeader header; |
86 EXPECT_TRUE(RtcpParseCommonHeader(buffer, length, &header)); | 85 EXPECT_TRUE(RtcpParseCommonHeader(buffer, length, &header)); |
87 EXPECT_EQ(length, header.BlockSize()); | 86 EXPECT_EQ(length, header.BlockSize()); |
88 return packet->Parse(header, buffer + RtcpCommonHeader::kHeaderSizeBytes); | 87 return packet->Parse(header, buffer + RtcpCommonHeader::kHeaderSizeBytes); |
89 } | 88 } |
90 | 89 |
91 bool Parse(const RawPacket& buffer, ExtendedReports* packet) { | 90 bool Parse(const rtc::Buffer& buffer, ExtendedReports* packet) { |
92 return Parse(buffer.Buffer(), buffer.Length(), packet); | 91 return Parse(buffer.data(), buffer.size(), packet); |
93 } | 92 } |
94 } // namespace | 93 } // namespace |
95 | 94 |
96 class RtcpPacketExtendedReportsTest : public ::testing::Test { | 95 class RtcpPacketExtendedReportsTest : public ::testing::Test { |
97 public: | 96 public: |
98 RtcpPacketExtendedReportsTest() : random_(0x123456789) {} | 97 RtcpPacketExtendedReportsTest() : random_(0x123456789) {} |
99 | 98 |
100 protected: | 99 protected: |
101 template <typename T> | 100 template <typename T> |
102 T Rand() { | 101 T Rand() { |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 VoipMetric voip_metric; | 159 VoipMetric voip_metric; |
161 voip_metric.To(Rand<uint32_t>()); | 160 voip_metric.To(Rand<uint32_t>()); |
162 voip_metric.WithVoipMetric(Rand<RTCPVoIPMetric>()); | 161 voip_metric.WithVoipMetric(Rand<RTCPVoIPMetric>()); |
163 return voip_metric; | 162 return voip_metric; |
164 } | 163 } |
165 | 164 |
166 TEST_F(RtcpPacketExtendedReportsTest, CreateWithoutReportBlocks) { | 165 TEST_F(RtcpPacketExtendedReportsTest, CreateWithoutReportBlocks) { |
167 ExtendedReports xr; | 166 ExtendedReports xr; |
168 xr.From(kSenderSsrc); | 167 xr.From(kSenderSsrc); |
169 | 168 |
170 rtc::scoped_ptr<RawPacket> packet = xr.Build(); | 169 rtc::Buffer packet = xr.Build(); |
171 | 170 |
172 EXPECT_THAT(make_tuple(packet->Buffer(), packet->Length()), | 171 EXPECT_THAT(make_tuple(packet.data(), packet.size()), |
173 ElementsAreArray(kEmptyPacket)); | 172 ElementsAreArray(kEmptyPacket)); |
174 } | 173 } |
175 | 174 |
176 TEST_F(RtcpPacketExtendedReportsTest, ParseWithoutReportBlocks) { | 175 TEST_F(RtcpPacketExtendedReportsTest, ParseWithoutReportBlocks) { |
177 ExtendedReports parsed; | 176 ExtendedReports parsed; |
178 EXPECT_TRUE(Parse(kEmptyPacket, sizeof(kEmptyPacket), &parsed)); | 177 EXPECT_TRUE(Parse(kEmptyPacket, sizeof(kEmptyPacket), &parsed)); |
179 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); | 178 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
180 EXPECT_THAT(parsed.rrtrs(), IsEmpty()); | 179 EXPECT_THAT(parsed.rrtrs(), IsEmpty()); |
181 EXPECT_THAT(parsed.dlrrs(), IsEmpty()); | 180 EXPECT_THAT(parsed.dlrrs(), IsEmpty()); |
182 EXPECT_THAT(parsed.voip_metrics(), IsEmpty()); | 181 EXPECT_THAT(parsed.voip_metrics(), IsEmpty()); |
183 } | 182 } |
184 | 183 |
185 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithOneRrtrBlock) { | 184 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithOneRrtrBlock) { |
186 Rrtr rrtr = Rand<Rrtr>(); | 185 Rrtr rrtr = Rand<Rrtr>(); |
187 ExtendedReports xr; | 186 ExtendedReports xr; |
188 xr.From(kSenderSsrc); | 187 xr.From(kSenderSsrc); |
189 EXPECT_TRUE(xr.WithRrtr(rrtr)); | 188 EXPECT_TRUE(xr.WithRrtr(rrtr)); |
190 rtc::scoped_ptr<RawPacket> packet = xr.Build(); | 189 rtc::Buffer packet = xr.Build(); |
191 | 190 |
192 ExtendedReports mparsed; | 191 ExtendedReports mparsed; |
193 EXPECT_TRUE(Parse(*packet, &mparsed)); | 192 EXPECT_TRUE(Parse(packet, &mparsed)); |
194 const ExtendedReports& parsed = mparsed; | 193 const ExtendedReports& parsed = mparsed; |
195 | 194 |
196 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); | 195 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
197 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr)); | 196 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr)); |
198 } | 197 } |
199 | 198 |
200 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithTwoRrtrBlocks) { | 199 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithTwoRrtrBlocks) { |
201 Rrtr rrtr1 = Rand<Rrtr>(); | 200 Rrtr rrtr1 = Rand<Rrtr>(); |
202 Rrtr rrtr2 = Rand<Rrtr>(); | 201 Rrtr rrtr2 = Rand<Rrtr>(); |
203 ExtendedReports xr; | 202 ExtendedReports xr; |
204 xr.From(kSenderSsrc); | 203 xr.From(kSenderSsrc); |
205 EXPECT_TRUE(xr.WithRrtr(rrtr1)); | 204 EXPECT_TRUE(xr.WithRrtr(rrtr1)); |
206 EXPECT_TRUE(xr.WithRrtr(rrtr2)); | 205 EXPECT_TRUE(xr.WithRrtr(rrtr2)); |
207 | 206 |
208 rtc::scoped_ptr<RawPacket> packet = xr.Build(); | 207 rtc::Buffer packet = xr.Build(); |
209 | 208 |
210 ExtendedReports mparsed; | 209 ExtendedReports mparsed; |
211 EXPECT_TRUE(Parse(*packet, &mparsed)); | 210 EXPECT_TRUE(Parse(packet, &mparsed)); |
212 const ExtendedReports& parsed = mparsed; | 211 const ExtendedReports& parsed = mparsed; |
213 | 212 |
214 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); | 213 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
215 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr1, rrtr2)); | 214 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr1, rrtr2)); |
216 } | 215 } |
217 | 216 |
218 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithDlrrWithOneSubBlock) { | 217 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithDlrrWithOneSubBlock) { |
219 Dlrr dlrr; | 218 Dlrr dlrr; |
220 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); | 219 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); |
221 ExtendedReports xr; | 220 ExtendedReports xr; |
222 xr.From(kSenderSsrc); | 221 xr.From(kSenderSsrc); |
223 EXPECT_TRUE(xr.WithDlrr(dlrr)); | 222 EXPECT_TRUE(xr.WithDlrr(dlrr)); |
224 | 223 |
225 rtc::scoped_ptr<RawPacket> packet = xr.Build(); | 224 rtc::Buffer packet = xr.Build(); |
226 | 225 |
227 ExtendedReports mparsed; | 226 ExtendedReports mparsed; |
228 EXPECT_TRUE(Parse(*packet, &mparsed)); | 227 EXPECT_TRUE(Parse(packet, &mparsed)); |
229 const ExtendedReports& parsed = mparsed; | 228 const ExtendedReports& parsed = mparsed; |
230 | 229 |
231 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); | 230 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
232 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr)); | 231 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr)); |
233 } | 232 } |
234 | 233 |
235 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithDlrrWithTwoSubBlocks) { | 234 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithDlrrWithTwoSubBlocks) { |
236 Dlrr dlrr; | 235 Dlrr dlrr; |
237 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); | 236 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); |
238 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); | 237 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); |
239 ExtendedReports xr; | 238 ExtendedReports xr; |
240 xr.From(kSenderSsrc); | 239 xr.From(kSenderSsrc); |
241 EXPECT_TRUE(xr.WithDlrr(dlrr)); | 240 EXPECT_TRUE(xr.WithDlrr(dlrr)); |
242 | 241 |
243 rtc::scoped_ptr<RawPacket> packet = xr.Build(); | 242 rtc::Buffer packet = xr.Build(); |
244 | 243 |
245 ExtendedReports mparsed; | 244 ExtendedReports mparsed; |
246 EXPECT_TRUE(Parse(*packet, &mparsed)); | 245 EXPECT_TRUE(Parse(packet, &mparsed)); |
247 const ExtendedReports& parsed = mparsed; | 246 const ExtendedReports& parsed = mparsed; |
248 | 247 |
249 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); | 248 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
250 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr)); | 249 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr)); |
251 } | 250 } |
252 | 251 |
253 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithTwoDlrrBlocks) { | 252 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithTwoDlrrBlocks) { |
254 Dlrr dlrr1; | 253 Dlrr dlrr1; |
255 EXPECT_TRUE(dlrr1.WithDlrrItem(Rand<ReceiveTimeInfo>())); | 254 EXPECT_TRUE(dlrr1.WithDlrrItem(Rand<ReceiveTimeInfo>())); |
256 Dlrr dlrr2; | 255 Dlrr dlrr2; |
257 EXPECT_TRUE(dlrr2.WithDlrrItem(Rand<ReceiveTimeInfo>())); | 256 EXPECT_TRUE(dlrr2.WithDlrrItem(Rand<ReceiveTimeInfo>())); |
258 ExtendedReports xr; | 257 ExtendedReports xr; |
259 xr.From(kSenderSsrc); | 258 xr.From(kSenderSsrc); |
260 EXPECT_TRUE(xr.WithDlrr(dlrr1)); | 259 EXPECT_TRUE(xr.WithDlrr(dlrr1)); |
261 EXPECT_TRUE(xr.WithDlrr(dlrr2)); | 260 EXPECT_TRUE(xr.WithDlrr(dlrr2)); |
262 | 261 |
263 rtc::scoped_ptr<RawPacket> packet = xr.Build(); | 262 rtc::Buffer packet = xr.Build(); |
264 | 263 |
265 ExtendedReports mparsed; | 264 ExtendedReports mparsed; |
266 EXPECT_TRUE(Parse(*packet, &mparsed)); | 265 EXPECT_TRUE(Parse(packet, &mparsed)); |
267 const ExtendedReports& parsed = mparsed; | 266 const ExtendedReports& parsed = mparsed; |
268 | 267 |
269 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); | 268 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
270 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr1, dlrr2)); | 269 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr1, dlrr2)); |
271 } | 270 } |
272 | 271 |
273 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithVoipMetric) { | 272 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithVoipMetric) { |
274 VoipMetric voip_metric = Rand<VoipMetric>(); | 273 VoipMetric voip_metric = Rand<VoipMetric>(); |
275 | 274 |
276 ExtendedReports xr; | 275 ExtendedReports xr; |
277 xr.From(kSenderSsrc); | 276 xr.From(kSenderSsrc); |
278 EXPECT_TRUE(xr.WithVoipMetric(voip_metric)); | 277 EXPECT_TRUE(xr.WithVoipMetric(voip_metric)); |
279 | 278 |
280 rtc::scoped_ptr<RawPacket> packet = xr.Build(); | 279 rtc::Buffer packet = xr.Build(); |
281 | 280 |
282 ExtendedReports mparsed; | 281 ExtendedReports mparsed; |
283 EXPECT_TRUE(Parse(*packet, &mparsed)); | 282 EXPECT_TRUE(Parse(packet, &mparsed)); |
284 const ExtendedReports& parsed = mparsed; | 283 const ExtendedReports& parsed = mparsed; |
285 | 284 |
286 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); | 285 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
287 EXPECT_THAT(parsed.voip_metrics(), ElementsAre(voip_metric)); | 286 EXPECT_THAT(parsed.voip_metrics(), ElementsAre(voip_metric)); |
288 } | 287 } |
289 | 288 |
290 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithMultipleReportBlocks) { | 289 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithMultipleReportBlocks) { |
291 Rrtr rrtr = Rand<Rrtr>(); | 290 Rrtr rrtr = Rand<Rrtr>(); |
292 Dlrr dlrr; | 291 Dlrr dlrr; |
293 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); | 292 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); |
294 VoipMetric metric = Rand<VoipMetric>(); | 293 VoipMetric metric = Rand<VoipMetric>(); |
295 ExtendedReports xr; | 294 ExtendedReports xr; |
296 xr.From(kSenderSsrc); | 295 xr.From(kSenderSsrc); |
297 EXPECT_TRUE(xr.WithRrtr(rrtr)); | 296 EXPECT_TRUE(xr.WithRrtr(rrtr)); |
298 EXPECT_TRUE(xr.WithDlrr(dlrr)); | 297 EXPECT_TRUE(xr.WithDlrr(dlrr)); |
299 EXPECT_TRUE(xr.WithVoipMetric(metric)); | 298 EXPECT_TRUE(xr.WithVoipMetric(metric)); |
300 | 299 |
301 rtc::scoped_ptr<RawPacket> packet = xr.Build(); | 300 rtc::Buffer packet = xr.Build(); |
302 | 301 |
303 ExtendedReports mparsed; | 302 ExtendedReports mparsed; |
304 EXPECT_TRUE(Parse(*packet, &mparsed)); | 303 EXPECT_TRUE(Parse(packet, &mparsed)); |
305 const ExtendedReports& parsed = mparsed; | 304 const ExtendedReports& parsed = mparsed; |
306 | 305 |
307 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); | 306 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
308 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr)); | 307 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr)); |
309 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr)); | 308 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr)); |
310 EXPECT_THAT(parsed.voip_metrics(), ElementsAre(metric)); | 309 EXPECT_THAT(parsed.voip_metrics(), ElementsAre(metric)); |
311 } | 310 } |
312 | 311 |
313 TEST_F(RtcpPacketExtendedReportsTest, DlrrWithoutItemNotIncludedInPacket) { | 312 TEST_F(RtcpPacketExtendedReportsTest, DlrrWithoutItemNotIncludedInPacket) { |
314 Rrtr rrtr = Rand<Rrtr>(); | 313 Rrtr rrtr = Rand<Rrtr>(); |
315 Dlrr dlrr; | 314 Dlrr dlrr; |
316 VoipMetric metric = Rand<VoipMetric>(); | 315 VoipMetric metric = Rand<VoipMetric>(); |
317 ExtendedReports xr; | 316 ExtendedReports xr; |
318 xr.From(kSenderSsrc); | 317 xr.From(kSenderSsrc); |
319 EXPECT_TRUE(xr.WithRrtr(rrtr)); | 318 EXPECT_TRUE(xr.WithRrtr(rrtr)); |
320 EXPECT_TRUE(xr.WithDlrr(dlrr)); | 319 EXPECT_TRUE(xr.WithDlrr(dlrr)); |
321 EXPECT_TRUE(xr.WithVoipMetric(metric)); | 320 EXPECT_TRUE(xr.WithVoipMetric(metric)); |
322 | 321 |
323 rtc::scoped_ptr<RawPacket> packet = xr.Build(); | 322 rtc::Buffer packet = xr.Build(); |
324 | 323 |
325 ExtendedReports mparsed; | 324 ExtendedReports mparsed; |
326 EXPECT_TRUE(Parse(*packet, &mparsed)); | 325 EXPECT_TRUE(Parse(packet, &mparsed)); |
327 const ExtendedReports& parsed = mparsed; | 326 const ExtendedReports& parsed = mparsed; |
328 | 327 |
329 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr)); | 328 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr)); |
330 EXPECT_THAT(parsed.dlrrs(), IsEmpty()); | 329 EXPECT_THAT(parsed.dlrrs(), IsEmpty()); |
331 EXPECT_THAT(parsed.voip_metrics(), ElementsAre(metric)); | 330 EXPECT_THAT(parsed.voip_metrics(), ElementsAre(metric)); |
332 } | 331 } |
333 | 332 |
334 TEST_F(RtcpPacketExtendedReportsTest, WithTooManyBlocks) { | 333 TEST_F(RtcpPacketExtendedReportsTest, WithTooManyBlocks) { |
335 const size_t kMaxBlocks = 50; | 334 const size_t kMaxBlocks = 50; |
336 ExtendedReports xr; | 335 ExtendedReports xr; |
337 | 336 |
338 Rrtr rrtr = Rand<Rrtr>(); | 337 Rrtr rrtr = Rand<Rrtr>(); |
339 for (size_t i = 0; i < kMaxBlocks; ++i) | 338 for (size_t i = 0; i < kMaxBlocks; ++i) |
340 EXPECT_TRUE(xr.WithRrtr(rrtr)); | 339 EXPECT_TRUE(xr.WithRrtr(rrtr)); |
341 EXPECT_FALSE(xr.WithRrtr(rrtr)); | 340 EXPECT_FALSE(xr.WithRrtr(rrtr)); |
342 | 341 |
343 Dlrr dlrr; | 342 Dlrr dlrr; |
344 for (size_t i = 0; i < kMaxBlocks; ++i) | 343 for (size_t i = 0; i < kMaxBlocks; ++i) |
345 EXPECT_TRUE(xr.WithDlrr(dlrr)); | 344 EXPECT_TRUE(xr.WithDlrr(dlrr)); |
346 EXPECT_FALSE(xr.WithDlrr(dlrr)); | 345 EXPECT_FALSE(xr.WithDlrr(dlrr)); |
347 | 346 |
348 VoipMetric voip_metric = Rand<VoipMetric>(); | 347 VoipMetric voip_metric = Rand<VoipMetric>(); |
349 for (size_t i = 0; i < kMaxBlocks; ++i) | 348 for (size_t i = 0; i < kMaxBlocks; ++i) |
350 EXPECT_TRUE(xr.WithVoipMetric(voip_metric)); | 349 EXPECT_TRUE(xr.WithVoipMetric(voip_metric)); |
351 EXPECT_FALSE(xr.WithVoipMetric(voip_metric)); | 350 EXPECT_FALSE(xr.WithVoipMetric(voip_metric)); |
352 } | 351 } |
353 } // namespace webrtc | 352 } // namespace webrtc |
OLD | NEW |