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

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports_unittest.cc

Issue 1557593002: [rtp_rtcp] rtcp::ExtenededReports packet got Parse function (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 10 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 /* 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/test/rtcp_packet_parser.h" 15 #include "webrtc/base/random.h"
16 16
17 using testing::ElementsAre;
18 using testing::ElementsAreArray;
19 using testing::IsEmpty;
20 using testing::make_tuple;
17 using webrtc::rtcp::Dlrr; 21 using webrtc::rtcp::Dlrr;
18 using webrtc::rtcp::ExtendedReports; 22 using webrtc::rtcp::ExtendedReports;
19 using webrtc::rtcp::RawPacket; 23 using webrtc::rtcp::RawPacket;
24 using webrtc::rtcp::ReceiveTimeInfo;
20 using webrtc::rtcp::Rrtr; 25 using webrtc::rtcp::Rrtr;
21 using webrtc::rtcp::VoipMetric; 26 using webrtc::rtcp::VoipMetric;
22 using webrtc::test::RtcpPacketParser; 27 using webrtc::RTCPUtility::RtcpCommonHeader;
28 using webrtc::RTCPUtility::RtcpParseCommonHeader;
23 29
24 namespace webrtc { 30 namespace webrtc {
31 // Define comparision operators that shouldn't be needed in production,
32 // but make testing matches more clear.
33 bool operator==(const RTCPVoIPMetric& metric1, const RTCPVoIPMetric& metric2) {
34 return metric1.lossRate == metric2.lossRate &&
35 metric1.discardRate == metric2.discardRate &&
36 metric1.burstDensity == metric2.burstDensity &&
37 metric1.gapDensity == metric2.gapDensity &&
38 metric1.burstDuration == metric2.burstDuration &&
39 metric1.gapDuration == metric2.gapDuration &&
40 metric1.roundTripDelay == metric2.roundTripDelay &&
41 metric1.endSystemDelay == metric2.endSystemDelay &&
42 metric1.signalLevel == metric2.signalLevel &&
43 metric1.noiseLevel == metric2.noiseLevel &&
44 metric1.RERL == metric2.RERL &&
45 metric1.Gmin == metric2.Gmin &&
46 metric1.Rfactor == metric2.Rfactor &&
47 metric1.extRfactor == metric2.extRfactor &&
48 metric1.MOSLQ == metric2.MOSLQ &&
49 metric1.MOSCQ == metric2.MOSCQ &&
50 metric1.RXconfig == metric2.RXconfig &&
51 metric1.JBnominal == metric2.JBnominal &&
52 metric1.JBmax == metric2.JBmax &&
53 metric1.JBabsMax == metric2.JBabsMax;
54 }
55
25 namespace rtcp { 56 namespace rtcp {
26 const uint32_t kSenderSsrc = 0x12345678; 57 bool operator==(const Rrtr& rrtr1, const Rrtr& rrtr2) {
27 const uint32_t kRemoteSsrc = 0x23456789; 58 return rrtr1.ntp() == rrtr2.ntp();
28 59 }
29 TEST(RtcpPacketExtendedReportsTest, WithNoReportBlocks) { 60
30 ExtendedReports xr; 61 bool operator==(const ReceiveTimeInfo& time1, const ReceiveTimeInfo& time2) {
31 xr.From(kSenderSsrc); 62 return time1.ssrc == time2.ssrc &&
32 63 time1.last_rr == time2.last_rr &&
33 rtc::scoped_ptr<RawPacket> packet(xr.Build()); 64 time1.delay_since_last_rr == time2.delay_since_last_rr;
34 RtcpPacketParser parser; 65 }
35 parser.Parse(packet->Buffer(), packet->Length()); 66
36 EXPECT_EQ(1, parser.xr_header()->num_packets()); 67 bool operator==(const Dlrr& dlrr1, const Dlrr& dlrr2) {
37 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 68 return dlrr1.sub_blocks() == dlrr2.sub_blocks();
38 } 69 }
39 70
40 TEST(RtcpPacketExtendedReportsTest, WithRrtr) { 71 bool operator==(const VoipMetric& metric1, const VoipMetric& metric2) {
72 return metric1.ssrc() == metric2.ssrc() &&
73 metric1.voip_metric() == metric2.voip_metric();
74 }
75 } // namespace rtcp
76
77 class RtcpPacketExtendedReportsTest : public ::testing::Test {
78 public:
79 const uint32_t kSenderSsrc = 0x12345678;
80 const uint8_t kEmptyPacket[8] = {0x80, 207, 0x00, 0x01,
81 0x12, 0x34, 0x56, 0x78};
82
83 RtcpPacketExtendedReportsTest() : random_(0x123456789) {}
84
85 protected:
86 static bool Parse(const uint8_t* buffer,
87 size_t length,
88 ExtendedReports* packet) {
89 RtcpCommonHeader header;
90 EXPECT_TRUE(RtcpParseCommonHeader(buffer, length, &header));
91 EXPECT_EQ(length, header.BlockSize());
92 return packet->Parse(header, buffer + RtcpCommonHeader::kHeaderSizeBytes);
93 }
94 static bool Parse(const RawPacket& buffer, ExtendedReports* packet) {
95 return Parse(buffer.Buffer(), buffer.Length(), packet);
96 }
97
98 template <typename T>
99 T Rand() {
100 return random_.Rand<T>();
101 }
102
103 private:
104 Random random_;
105 };
106
107 template <>
108 ReceiveTimeInfo RtcpPacketExtendedReportsTest::Rand<ReceiveTimeInfo>() {
109 uint32_t ssrc = Rand<uint32_t>();
110 uint32_t last_rr = Rand<uint32_t>();
111 uint32_t delay_since_last_rr = Rand<uint32_t>();
112 return ReceiveTimeInfo(ssrc, last_rr, delay_since_last_rr);
113 }
114
115 template <>
116 NtpTime RtcpPacketExtendedReportsTest::Rand<NtpTime>() {
117 uint32_t secs = Rand<uint32_t>();
118 uint32_t frac = Rand<uint32_t>();
119 return NtpTime(secs, frac);
120 }
121
122 template <>
123 Rrtr RtcpPacketExtendedReportsTest::Rand<Rrtr>() {
41 Rrtr rrtr; 124 Rrtr rrtr;
42 rrtr.WithNtp(NtpTime(0x11111111, 0x22222222)); 125 rrtr.WithNtp(Rand<NtpTime>());
43 ExtendedReports xr; 126 return rrtr;
44 xr.From(kSenderSsrc); 127 }
45 EXPECT_TRUE(xr.WithRrtr(&rrtr)); 128
46 129 template <>
47 rtc::scoped_ptr<RawPacket> packet(xr.Build()); 130 RTCPVoIPMetric RtcpPacketExtendedReportsTest::Rand<RTCPVoIPMetric>() {
48 RtcpPacketParser parser; 131 RTCPVoIPMetric metric;
49 parser.Parse(packet->Buffer(), packet->Length()); 132 metric.lossRate = Rand<uint8_t>();
50 EXPECT_EQ(1, parser.xr_header()->num_packets()); 133 metric.discardRate = Rand<uint8_t>();
51 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 134 metric.burstDensity = Rand<uint8_t>();
52 EXPECT_EQ(1, parser.rrtr()->num_packets()); 135 metric.gapDensity = Rand<uint8_t>();
53 EXPECT_EQ(0x11111111U, parser.rrtr()->NtpSec()); 136 metric.burstDuration = Rand<uint16_t>();
54 EXPECT_EQ(0x22222222U, parser.rrtr()->NtpFrac()); 137 metric.gapDuration = Rand<uint16_t>();
55 } 138 metric.roundTripDelay = Rand<uint16_t>();
56 139 metric.endSystemDelay = Rand<uint16_t>();
57 TEST(RtcpPacketExtendedReportsTest, WithTwoRrtrBlocks) { 140 metric.signalLevel = Rand<uint8_t>();
58 Rrtr rrtr1; 141 metric.noiseLevel = Rand<uint8_t>();
59 rrtr1.WithNtp(NtpTime(0x11111111, 0x22222222)); 142 metric.RERL = Rand<uint8_t>();
60 Rrtr rrtr2; 143 metric.Gmin = Rand<uint8_t>();
61 rrtr2.WithNtp(NtpTime(0x33333333, 0x44444444)); 144 metric.Rfactor = Rand<uint8_t>();
62 ExtendedReports xr; 145 metric.extRfactor = Rand<uint8_t>();
63 xr.From(kSenderSsrc); 146 metric.MOSLQ = Rand<uint8_t>();
64 EXPECT_TRUE(xr.WithRrtr(&rrtr1)); 147 metric.MOSCQ = Rand<uint8_t>();
65 EXPECT_TRUE(xr.WithRrtr(&rrtr2)); 148 metric.RXconfig = Rand<uint8_t>();
66 149 metric.JBnominal = Rand<uint16_t>();
67 rtc::scoped_ptr<RawPacket> packet(xr.Build()); 150 metric.JBmax = Rand<uint16_t>();
68 RtcpPacketParser parser; 151 metric.JBabsMax = Rand<uint16_t>();
69 parser.Parse(packet->Buffer(), packet->Length()); 152 return metric;
70 EXPECT_EQ(1, parser.xr_header()->num_packets()); 153 }
71 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 154
72 EXPECT_EQ(2, parser.rrtr()->num_packets()); 155 template <>
73 EXPECT_EQ(0x33333333U, parser.rrtr()->NtpSec()); 156 VoipMetric RtcpPacketExtendedReportsTest::Rand<VoipMetric>() {
74 EXPECT_EQ(0x44444444U, parser.rrtr()->NtpFrac()); 157 VoipMetric voip_metric;
75 } 158 voip_metric.To(Rand<uint32_t>());
76 159 voip_metric.WithVoipMetric(Rand<RTCPVoIPMetric>());
77 TEST(RtcpPacketExtendedReportsTest, WithDlrrWithOneSubBlock) { 160 return voip_metric;
78 Dlrr dlrr; 161 }
79 EXPECT_TRUE(dlrr.WithDlrrItem(0x11111111, 0x22222222, 0x33333333)); 162
80 ExtendedReports xr; 163 TEST_F(RtcpPacketExtendedReportsTest, CreateWithoutReportBlocks) {
81 xr.From(kSenderSsrc); 164 ExtendedReports xr;
82 EXPECT_TRUE(xr.WithDlrr(&dlrr)); 165 xr.From(kSenderSsrc);
83 166
84 rtc::scoped_ptr<RawPacket> packet(xr.Build()); 167 rtc::scoped_ptr<RawPacket> packet = xr.Build();
85 RtcpPacketParser parser; 168
86 parser.Parse(packet->Buffer(), packet->Length()); 169 EXPECT_THAT(make_tuple(packet->Buffer(), packet->Length()),
87 EXPECT_EQ(1, parser.xr_header()->num_packets()); 170 ElementsAreArray(kEmptyPacket));
88 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 171 }
89 EXPECT_EQ(1, parser.dlrr()->num_packets()); 172
90 EXPECT_EQ(1, parser.dlrr_items()->num_packets()); 173 TEST_F(RtcpPacketExtendedReportsTest, ParseWithoutReportBlocks) {
91 EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0)); 174 ExtendedReports parsed;
92 EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0)); 175 EXPECT_TRUE(Parse(kEmptyPacket, sizeof(kEmptyPacket), &parsed));
93 EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0)); 176 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
94 } 177 EXPECT_THAT(parsed.rrtrs(), IsEmpty());
95 178 EXPECT_THAT(parsed.dlrrs(), IsEmpty());
96 TEST(RtcpPacketExtendedReportsTest, WithDlrrWithTwoSubBlocks) { 179 EXPECT_THAT(parsed.voip_metrics(), IsEmpty());
97 Dlrr dlrr; 180 }
98 EXPECT_TRUE(dlrr.WithDlrrItem(0x11111111, 0x22222222, 0x33333333)); 181
99 EXPECT_TRUE(dlrr.WithDlrrItem(0x44444444, 0x55555555, 0x66666666)); 182 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithRrtr) {
åsapersson 2016/01/29 12:46:09 maybe CreateAndParseWithOneRrtrBlock
danilchap 2016/01/29 13:49:31 Done.
100 ExtendedReports xr; 183 Rrtr rrtr = Rand<Rrtr>();
101 xr.From(kSenderSsrc); 184 ExtendedReports xr;
102 EXPECT_TRUE(xr.WithDlrr(&dlrr)); 185 xr.From(kSenderSsrc);
103 186 EXPECT_TRUE(xr.WithRrtr(rrtr));
104 rtc::scoped_ptr<RawPacket> packet(xr.Build()); 187 rtc::scoped_ptr<RawPacket> packet = xr.Build();
105 RtcpPacketParser parser; 188
106 parser.Parse(packet->Buffer(), packet->Length()); 189 ExtendedReports mparsed;
107 EXPECT_EQ(1, parser.xr_header()->num_packets()); 190 EXPECT_TRUE(Parse(*packet, &mparsed));
108 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 191 const ExtendedReports& parsed = mparsed;
109 EXPECT_EQ(1, parser.dlrr()->num_packets()); 192
110 EXPECT_EQ(2, parser.dlrr_items()->num_packets()); 193 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
111 EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0)); 194 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr));
112 EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0)); 195 }
113 EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0)); 196
114 EXPECT_EQ(0x44444444U, parser.dlrr_items()->Ssrc(1)); 197 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithTwoRrtrBlocks) {
115 EXPECT_EQ(0x55555555U, parser.dlrr_items()->LastRr(1)); 198 Rrtr rrtr1 = Rand<Rrtr>();
116 EXPECT_EQ(0x66666666U, parser.dlrr_items()->DelayLastRr(1)); 199 Rrtr rrtr2 = Rand<Rrtr>();
117 } 200 ExtendedReports xr;
118 201 xr.From(kSenderSsrc);
119 TEST(RtcpPacketExtendedReportsTest, WithTwoDlrrBlocks) { 202 EXPECT_TRUE(xr.WithRrtr(rrtr1));
203 EXPECT_TRUE(xr.WithRrtr(rrtr2));
204
205 rtc::scoped_ptr<RawPacket> packet = xr.Build();
206
207 ExtendedReports mparsed;
208 EXPECT_TRUE(Parse(*packet, &mparsed));
209 const ExtendedReports& parsed = mparsed;
210
211 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
212 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr1, rrtr2));
213 }
214
215 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithDlrrWithOneSubBlock) {
216 Dlrr dlrr;
217 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>()));
218 ExtendedReports xr;
219 xr.From(kSenderSsrc);
220 EXPECT_TRUE(xr.WithDlrr(dlrr));
221
222 rtc::scoped_ptr<RawPacket> packet = xr.Build();
223
224 ExtendedReports mparsed;
225 EXPECT_TRUE(Parse(*packet, &mparsed));
226 const ExtendedReports& parsed = mparsed;
227
228 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
229 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr));
230 }
231
232 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithDlrrWithTwoSubBlocks) {
233 Dlrr dlrr;
234 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>()));
235 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>()));
236 ExtendedReports xr;
237 xr.From(kSenderSsrc);
238 EXPECT_TRUE(xr.WithDlrr(dlrr));
239
240 rtc::scoped_ptr<RawPacket> packet = xr.Build();
241
242 ExtendedReports mparsed;
243 EXPECT_TRUE(Parse(*packet, &mparsed));
244 const ExtendedReports& parsed = mparsed;
245
246 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
247 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr));
248 }
249
250 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithTwoDlrrBlocks) {
120 Dlrr dlrr1; 251 Dlrr dlrr1;
121 EXPECT_TRUE(dlrr1.WithDlrrItem(0x11111111, 0x22222222, 0x33333333)); 252 EXPECT_TRUE(dlrr1.WithDlrrItem(Rand<ReceiveTimeInfo>()));
122 Dlrr dlrr2; 253 Dlrr dlrr2;
123 EXPECT_TRUE(dlrr2.WithDlrrItem(0x44444444, 0x55555555, 0x66666666)); 254 EXPECT_TRUE(dlrr2.WithDlrrItem(Rand<ReceiveTimeInfo>()));
124 ExtendedReports xr; 255 ExtendedReports xr;
125 xr.From(kSenderSsrc); 256 xr.From(kSenderSsrc);
126 EXPECT_TRUE(xr.WithDlrr(&dlrr1)); 257 EXPECT_TRUE(xr.WithDlrr(dlrr1));
127 EXPECT_TRUE(xr.WithDlrr(&dlrr2)); 258 EXPECT_TRUE(xr.WithDlrr(dlrr2));
128 259
129 rtc::scoped_ptr<RawPacket> packet(xr.Build()); 260 rtc::scoped_ptr<RawPacket> packet = xr.Build();
130 RtcpPacketParser parser; 261
131 parser.Parse(packet->Buffer(), packet->Length()); 262 ExtendedReports mparsed;
132 EXPECT_EQ(1, parser.xr_header()->num_packets()); 263 EXPECT_TRUE(Parse(*packet, &mparsed));
133 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 264 const ExtendedReports& parsed = mparsed;
134 EXPECT_EQ(2, parser.dlrr()->num_packets()); 265
135 EXPECT_EQ(2, parser.dlrr_items()->num_packets()); 266 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
136 EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0)); 267 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr1, dlrr2));
137 EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0)); 268 }
138 EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0)); 269
139 EXPECT_EQ(0x44444444U, parser.dlrr_items()->Ssrc(1)); 270 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithVoipMetric) {
140 EXPECT_EQ(0x55555555U, parser.dlrr_items()->LastRr(1)); 271 VoipMetric voip_metric = Rand<VoipMetric>();
141 EXPECT_EQ(0x66666666U, parser.dlrr_items()->DelayLastRr(1)); 272
142 } 273 ExtendedReports xr;
143 274 xr.From(kSenderSsrc);
144 TEST(RtcpPacketExtendedReportsTest, WithVoipMetric) { 275 EXPECT_TRUE(xr.WithVoipMetric(voip_metric));
145 RTCPVoIPMetric metric; 276
146 metric.lossRate = 1; 277 rtc::scoped_ptr<RawPacket> packet = xr.Build();
147 metric.discardRate = 2; 278
148 metric.burstDensity = 3; 279 ExtendedReports mparsed;
149 metric.gapDensity = 4; 280 EXPECT_TRUE(Parse(*packet, &mparsed));
150 metric.burstDuration = 0x1111; 281 const ExtendedReports& parsed = mparsed;
151 metric.gapDuration = 0x2222; 282
152 metric.roundTripDelay = 0x3333; 283 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
153 metric.endSystemDelay = 0x4444; 284 EXPECT_THAT(parsed.voip_metrics(), ElementsAre(voip_metric));
154 metric.signalLevel = 5; 285 }
155 metric.noiseLevel = 6; 286
156 metric.RERL = 7; 287 TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithMultipleReportBlocks) {
157 metric.Gmin = 8; 288 Rrtr rrtr = Rand<Rrtr>();
158 metric.Rfactor = 9; 289 Dlrr dlrr;
159 metric.extRfactor = 10; 290 EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>()));
160 metric.MOSLQ = 11; 291 VoipMetric metric = Rand<VoipMetric>();
161 metric.MOSCQ = 12; 292 ExtendedReports xr;
162 metric.RXconfig = 13; 293 xr.From(kSenderSsrc);
163 metric.JBnominal = 0x5555; 294 EXPECT_TRUE(xr.WithRrtr(rrtr));
164 metric.JBmax = 0x6666; 295 EXPECT_TRUE(xr.WithDlrr(dlrr));
165 metric.JBabsMax = 0x7777; 296 EXPECT_TRUE(xr.WithVoipMetric(metric));
166 VoipMetric metric_block; 297
167 metric_block.To(kRemoteSsrc); 298 rtc::scoped_ptr<RawPacket> packet = xr.Build();
168 metric_block.WithVoipMetric(metric); 299
169 ExtendedReports xr; 300 ExtendedReports mparsed;
170 xr.From(kSenderSsrc); 301 EXPECT_TRUE(Parse(*packet, &mparsed));
171 EXPECT_TRUE(xr.WithVoipMetric(&metric_block)); 302 const ExtendedReports& parsed = mparsed;
172 303
173 rtc::scoped_ptr<RawPacket> packet(xr.Build()); 304 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
174 RtcpPacketParser parser; 305 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr));
175 parser.Parse(packet->Buffer(), packet->Length()); 306 EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr));
176 EXPECT_EQ(1, parser.xr_header()->num_packets()); 307 EXPECT_THAT(parsed.voip_metrics(), ElementsAre(metric));
177 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 308 }
178 EXPECT_EQ(1, parser.voip_metric()->num_packets()); 309
179 EXPECT_EQ(kRemoteSsrc, parser.voip_metric()->Ssrc()); 310 TEST_F(RtcpPacketExtendedReportsTest, DlrrWithoutItemNotIncludedInPacket) {
180 EXPECT_EQ(1, parser.voip_metric()->LossRate()); 311 Rrtr rrtr = Rand<Rrtr>();
181 EXPECT_EQ(2, parser.voip_metric()->DiscardRate()); 312 Dlrr dlrr;
182 EXPECT_EQ(3, parser.voip_metric()->BurstDensity()); 313 VoipMetric metric = Rand<VoipMetric>();
183 EXPECT_EQ(4, parser.voip_metric()->GapDensity()); 314 ExtendedReports xr;
184 EXPECT_EQ(0x1111, parser.voip_metric()->BurstDuration()); 315 xr.From(kSenderSsrc);
185 EXPECT_EQ(0x2222, parser.voip_metric()->GapDuration()); 316 EXPECT_TRUE(xr.WithRrtr(rrtr));
186 EXPECT_EQ(0x3333, parser.voip_metric()->RoundTripDelay()); 317 EXPECT_TRUE(xr.WithDlrr(dlrr));
187 EXPECT_EQ(0x4444, parser.voip_metric()->EndSystemDelay()); 318 EXPECT_TRUE(xr.WithVoipMetric(metric));
188 EXPECT_EQ(5, parser.voip_metric()->SignalLevel()); 319
189 EXPECT_EQ(6, parser.voip_metric()->NoiseLevel()); 320 rtc::scoped_ptr<RawPacket> packet = xr.Build();
190 EXPECT_EQ(7, parser.voip_metric()->Rerl()); 321
191 EXPECT_EQ(8, parser.voip_metric()->Gmin()); 322 ExtendedReports mparsed;
192 EXPECT_EQ(9, parser.voip_metric()->Rfactor()); 323 EXPECT_TRUE(Parse(*packet, &mparsed));
193 EXPECT_EQ(10, parser.voip_metric()->ExtRfactor()); 324 const ExtendedReports& parsed = mparsed;
194 EXPECT_EQ(11, parser.voip_metric()->MosLq()); 325
195 EXPECT_EQ(12, parser.voip_metric()->MosCq()); 326 EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr));
196 EXPECT_EQ(13, parser.voip_metric()->RxConfig()); 327 EXPECT_THAT(parsed.dlrrs(), IsEmpty());
197 EXPECT_EQ(0x5555, parser.voip_metric()->JbNominal()); 328 EXPECT_THAT(parsed.voip_metrics(), ElementsAre(metric));
198 EXPECT_EQ(0x6666, parser.voip_metric()->JbMax()); 329 }
199 EXPECT_EQ(0x7777, parser.voip_metric()->JbAbsMax()); 330
200 } 331 TEST_F(RtcpPacketExtendedReportsTest, WithTooManyBlocks) {
201 332 const size_t kMaxBlocks = 50;
202 TEST(RtcpPacketExtendedReportsTest, WithMultipleReportBlocks) { 333 ExtendedReports xr;
203 Rrtr rrtr; 334
204 Dlrr dlrr; 335 Rrtr rrtr = Rand<Rrtr>();
205 EXPECT_TRUE(dlrr.WithDlrrItem(1, 2, 3)); 336 for (size_t i = 0; i < kMaxBlocks; ++i)
206 VoipMetric metric; 337 EXPECT_TRUE(xr.WithRrtr(rrtr));
207 ExtendedReports xr; 338 EXPECT_FALSE(xr.WithRrtr(rrtr));
208 xr.From(kSenderSsrc); 339
209 EXPECT_TRUE(xr.WithRrtr(&rrtr)); 340 Dlrr dlrr;
210 EXPECT_TRUE(xr.WithDlrr(&dlrr)); 341 for (size_t i = 0; i < kMaxBlocks; ++i)
211 EXPECT_TRUE(xr.WithVoipMetric(&metric)); 342 EXPECT_TRUE(xr.WithDlrr(dlrr));
212 343 EXPECT_FALSE(xr.WithDlrr(dlrr));
213 rtc::scoped_ptr<RawPacket> packet(xr.Build()); 344
214 RtcpPacketParser parser; 345 VoipMetric voip_metric = Rand<VoipMetric>();
215 parser.Parse(packet->Buffer(), packet->Length()); 346 for (size_t i = 0; i < kMaxBlocks; ++i)
216 EXPECT_EQ(1, parser.xr_header()->num_packets()); 347 EXPECT_TRUE(xr.WithVoipMetric(voip_metric));
217 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 348 EXPECT_FALSE(xr.WithVoipMetric(voip_metric));
218 EXPECT_EQ(1, parser.rrtr()->num_packets()); 349 }
219 EXPECT_EQ(1, parser.dlrr()->num_packets());
220 EXPECT_EQ(1, parser.dlrr_items()->num_packets());
221 EXPECT_EQ(1, parser.voip_metric()->num_packets());
222 }
223
224 TEST(RtcpPacketExtendedReportsTest, DlrrWithoutItemNotIncludedInPacket) {
225 Rrtr rrtr;
226 Dlrr dlrr;
227 VoipMetric metric;
228 ExtendedReports xr;
229 xr.From(kSenderSsrc);
230 EXPECT_TRUE(xr.WithRrtr(&rrtr));
231 EXPECT_TRUE(xr.WithDlrr(&dlrr));
232 EXPECT_TRUE(xr.WithVoipMetric(&metric));
233
234 rtc::scoped_ptr<RawPacket> packet(xr.Build());
235 RtcpPacketParser parser;
236 parser.Parse(packet->Buffer(), packet->Length());
237 EXPECT_EQ(1, parser.xr_header()->num_packets());
238 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc());
239 EXPECT_EQ(1, parser.rrtr()->num_packets());
240 EXPECT_EQ(0, parser.dlrr()->num_packets());
241 EXPECT_EQ(1, parser.voip_metric()->num_packets());
242 }
243
244 TEST(RtcpPacketExtendedReportsTest, WithTooManyBlocks) {
245 const int kMaxBlocks = 50;
246 ExtendedReports xr;
247
248 Rrtr rrtr;
249 for (int i = 0; i < kMaxBlocks; ++i)
250 EXPECT_TRUE(xr.WithRrtr(&rrtr));
251 EXPECT_FALSE(xr.WithRrtr(&rrtr));
252
253 Dlrr dlrr;
254 for (int i = 0; i < kMaxBlocks; ++i)
255 EXPECT_TRUE(xr.WithDlrr(&dlrr));
256 EXPECT_FALSE(xr.WithDlrr(&dlrr));
257
258 VoipMetric voip_metric;
259 for (int i = 0; i < kMaxBlocks; ++i)
260 EXPECT_TRUE(xr.WithVoipMetric(&voip_metric));
261 EXPECT_FALSE(xr.WithVoipMetric(&voip_metric));
262 }
263 } // namespace rtcp
264 } // namespace webrtc 350 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698