OLD | NEW |
---|---|
(Empty) | |
1 /* | |
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | |
3 * | |
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 | |
6 * tree. An additional intellectual property rights grant can be found | |
7 * in the file PATENTS. All contributing project authors may | |
8 * be found in the AUTHORS file in the root of the source tree. | |
9 */ | |
10 | |
11 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h" | |
12 | |
13 #include "testing/gmock/include/gmock/gmock.h" | |
14 #include "testing/gtest/include/gtest/gtest.h" | |
15 | |
16 using webrtc::rtcp::Dlrr; | |
17 using webrtc::rtcp::ExtendedReports; | |
18 using webrtc::rtcp::RawPacket; | |
19 using webrtc::rtcp::Rrtr; | |
20 using webrtc::rtcp::VoipMetric; | |
21 using webrtc::test::RtcpPacketParser; | |
22 | |
23 namespace webrtc { | |
24 namespace rtcp { | |
25 | |
26 TEST(RtcpPacketTest, ExtendedReportsWithNoReportBlocks) { | |
åsapersson
2016/01/15 11:10:30
rename to RtcpPacketExtendedReportsTest.WithNoRepo
| |
27 ExtendedReports xr; | |
28 xr.From(kSenderSsrc); | |
29 | |
30 rtc::scoped_ptr<RawPacket> packet(xr.Build()); | |
31 RtcpPacketParser parser; | |
32 parser.Parse(packet->Buffer(), packet->Length()); | |
33 EXPECT_EQ(1, parser.xr_header()->num_packets()); | |
34 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); | |
35 } | |
36 | |
37 TEST(RtcpPacketTest, ExtendedReportsWithRrtr) { | |
åsapersson
2016/01/15 11:10:30
and similar...
| |
38 Rrtr rrtr; | |
39 rrtr.WithNtp(NtpTime(0x11111111, 0x22222222)); | |
40 ExtendedReports xr; | |
41 xr.From(kSenderSsrc); | |
42 EXPECT_TRUE(xr.WithRrtr(&rrtr)); | |
43 | |
44 rtc::scoped_ptr<RawPacket> packet(xr.Build()); | |
45 RtcpPacketParser parser; | |
46 parser.Parse(packet->Buffer(), packet->Length()); | |
47 EXPECT_EQ(1, parser.xr_header()->num_packets()); | |
48 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); | |
49 EXPECT_EQ(1, parser.rrtr()->num_packets()); | |
50 EXPECT_EQ(0x11111111U, parser.rrtr()->NtpSec()); | |
51 EXPECT_EQ(0x22222222U, parser.rrtr()->NtpFrac()); | |
52 } | |
53 | |
54 TEST(RtcpPacketTest, ExtendedReportsWithTwoRrtrBlocks) { | |
55 Rrtr rrtr1; | |
56 rrtr1.WithNtp(NtpTime(0x11111111, 0x22222222)); | |
57 Rrtr rrtr2; | |
58 rrtr2.WithNtp(NtpTime(0x33333333, 0x44444444)); | |
59 ExtendedReports xr; | |
60 xr.From(kSenderSsrc); | |
61 EXPECT_TRUE(xr.WithRrtr(&rrtr1)); | |
62 EXPECT_TRUE(xr.WithRrtr(&rrtr2)); | |
63 | |
64 rtc::scoped_ptr<RawPacket> packet(xr.Build()); | |
65 RtcpPacketParser parser; | |
66 parser.Parse(packet->Buffer(), packet->Length()); | |
67 EXPECT_EQ(1, parser.xr_header()->num_packets()); | |
68 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); | |
69 EXPECT_EQ(2, parser.rrtr()->num_packets()); | |
70 EXPECT_EQ(0x33333333U, parser.rrtr()->NtpSec()); | |
71 EXPECT_EQ(0x44444444U, parser.rrtr()->NtpFrac()); | |
72 } | |
73 | |
74 TEST(RtcpPacketTest, ExtendedReportsWithDlrrWithOneSubBlock) { | |
75 Dlrr dlrr; | |
76 EXPECT_TRUE(dlrr.WithDlrrItem(0x11111111, 0x22222222, 0x33333333)); | |
77 ExtendedReports xr; | |
78 xr.From(kSenderSsrc); | |
79 EXPECT_TRUE(xr.WithDlrr(&dlrr)); | |
80 | |
81 rtc::scoped_ptr<RawPacket> packet(xr.Build()); | |
82 RtcpPacketParser parser; | |
83 parser.Parse(packet->Buffer(), packet->Length()); | |
84 EXPECT_EQ(1, parser.xr_header()->num_packets()); | |
85 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); | |
86 EXPECT_EQ(1, parser.dlrr()->num_packets()); | |
87 EXPECT_EQ(1, parser.dlrr_items()->num_packets()); | |
88 EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0)); | |
89 EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0)); | |
90 EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0)); | |
91 } | |
92 | |
93 TEST(RtcpPacketTest, ExtendedReportsWithDlrrWithTwoSubBlocks) { | |
94 Dlrr dlrr; | |
95 EXPECT_TRUE(dlrr.WithDlrrItem(0x11111111, 0x22222222, 0x33333333)); | |
96 EXPECT_TRUE(dlrr.WithDlrrItem(0x44444444, 0x55555555, 0x66666666)); | |
97 ExtendedReports xr; | |
98 xr.From(kSenderSsrc); | |
99 EXPECT_TRUE(xr.WithDlrr(&dlrr)); | |
100 | |
101 rtc::scoped_ptr<RawPacket> packet(xr.Build()); | |
102 RtcpPacketParser parser; | |
103 parser.Parse(packet->Buffer(), packet->Length()); | |
104 EXPECT_EQ(1, parser.xr_header()->num_packets()); | |
105 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); | |
106 EXPECT_EQ(1, parser.dlrr()->num_packets()); | |
107 EXPECT_EQ(2, parser.dlrr_items()->num_packets()); | |
108 EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0)); | |
109 EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0)); | |
110 EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0)); | |
111 EXPECT_EQ(0x44444444U, parser.dlrr_items()->Ssrc(1)); | |
112 EXPECT_EQ(0x55555555U, parser.dlrr_items()->LastRr(1)); | |
113 EXPECT_EQ(0x66666666U, parser.dlrr_items()->DelayLastRr(1)); | |
114 } | |
115 | |
116 TEST(RtcpPacketTest, ExtendedReportsWithTwoDlrrBlocks) { | |
117 Dlrr dlrr1; | |
118 EXPECT_TRUE(dlrr1.WithDlrrItem(0x11111111, 0x22222222, 0x33333333)); | |
119 Dlrr dlrr2; | |
120 EXPECT_TRUE(dlrr2.WithDlrrItem(0x44444444, 0x55555555, 0x66666666)); | |
121 ExtendedReports xr; | |
122 xr.From(kSenderSsrc); | |
123 EXPECT_TRUE(xr.WithDlrr(&dlrr1)); | |
124 EXPECT_TRUE(xr.WithDlrr(&dlrr2)); | |
125 | |
126 rtc::scoped_ptr<RawPacket> packet(xr.Build()); | |
127 RtcpPacketParser parser; | |
128 parser.Parse(packet->Buffer(), packet->Length()); | |
129 EXPECT_EQ(1, parser.xr_header()->num_packets()); | |
130 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); | |
131 EXPECT_EQ(2, parser.dlrr()->num_packets()); | |
132 EXPECT_EQ(2, parser.dlrr_items()->num_packets()); | |
133 EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0)); | |
134 EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0)); | |
135 EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0)); | |
136 EXPECT_EQ(0x44444444U, parser.dlrr_items()->Ssrc(1)); | |
137 EXPECT_EQ(0x55555555U, parser.dlrr_items()->LastRr(1)); | |
138 EXPECT_EQ(0x66666666U, parser.dlrr_items()->DelayLastRr(1)); | |
139 } | |
140 | |
141 TEST(RtcpPacketTest, ExtendedReportsWithVoipMetric) { | |
142 RTCPVoIPMetric metric; | |
143 metric.lossRate = 1; | |
144 metric.discardRate = 2; | |
145 metric.burstDensity = 3; | |
146 metric.gapDensity = 4; | |
147 metric.burstDuration = 0x1111; | |
148 metric.gapDuration = 0x2222; | |
149 metric.roundTripDelay = 0x3333; | |
150 metric.endSystemDelay = 0x4444; | |
151 metric.signalLevel = 5; | |
152 metric.noiseLevel = 6; | |
153 metric.RERL = 7; | |
154 metric.Gmin = 8; | |
155 metric.Rfactor = 9; | |
156 metric.extRfactor = 10; | |
157 metric.MOSLQ = 11; | |
158 metric.MOSCQ = 12; | |
159 metric.RXconfig = 13; | |
160 metric.JBnominal = 0x5555; | |
161 metric.JBmax = 0x6666; | |
162 metric.JBabsMax = 0x7777; | |
163 VoipMetric metric_block; | |
164 metric_block.To(kRemoteSsrc); | |
165 metric_block.WithVoipMetric(metric); | |
166 ExtendedReports xr; | |
167 xr.From(kSenderSsrc); | |
168 EXPECT_TRUE(xr.WithVoipMetric(&metric_block)); | |
169 | |
170 rtc::scoped_ptr<RawPacket> packet(xr.Build()); | |
171 RtcpPacketParser parser; | |
172 parser.Parse(packet->Buffer(), packet->Length()); | |
173 EXPECT_EQ(1, parser.xr_header()->num_packets()); | |
174 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); | |
175 EXPECT_EQ(1, parser.voip_metric()->num_packets()); | |
176 EXPECT_EQ(kRemoteSsrc, parser.voip_metric()->Ssrc()); | |
177 EXPECT_EQ(1, parser.voip_metric()->LossRate()); | |
178 EXPECT_EQ(2, parser.voip_metric()->DiscardRate()); | |
179 EXPECT_EQ(3, parser.voip_metric()->BurstDensity()); | |
180 EXPECT_EQ(4, parser.voip_metric()->GapDensity()); | |
181 EXPECT_EQ(0x1111, parser.voip_metric()->BurstDuration()); | |
182 EXPECT_EQ(0x2222, parser.voip_metric()->GapDuration()); | |
183 EXPECT_EQ(0x3333, parser.voip_metric()->RoundTripDelay()); | |
184 EXPECT_EQ(0x4444, parser.voip_metric()->EndSystemDelay()); | |
185 EXPECT_EQ(5, parser.voip_metric()->SignalLevel()); | |
186 EXPECT_EQ(6, parser.voip_metric()->NoiseLevel()); | |
187 EXPECT_EQ(7, parser.voip_metric()->Rerl()); | |
188 EXPECT_EQ(8, parser.voip_metric()->Gmin()); | |
189 EXPECT_EQ(9, parser.voip_metric()->Rfactor()); | |
190 EXPECT_EQ(10, parser.voip_metric()->ExtRfactor()); | |
191 EXPECT_EQ(11, parser.voip_metric()->MosLq()); | |
192 EXPECT_EQ(12, parser.voip_metric()->MosCq()); | |
193 EXPECT_EQ(13, parser.voip_metric()->RxConfig()); | |
194 EXPECT_EQ(0x5555, parser.voip_metric()->JbNominal()); | |
195 EXPECT_EQ(0x6666, parser.voip_metric()->JbMax()); | |
196 EXPECT_EQ(0x7777, parser.voip_metric()->JbAbsMax()); | |
197 } | |
198 | |
199 TEST(RtcpPacketTest, ExtendedReportsWithMultipleReportBlocks) { | |
200 Rrtr rrtr; | |
201 Dlrr dlrr; | |
202 EXPECT_TRUE(dlrr.WithDlrrItem(1, 2, 3)); | |
203 VoipMetric metric; | |
204 ExtendedReports xr; | |
205 xr.From(kSenderSsrc); | |
206 EXPECT_TRUE(xr.WithRrtr(&rrtr)); | |
207 EXPECT_TRUE(xr.WithDlrr(&dlrr)); | |
208 EXPECT_TRUE(xr.WithVoipMetric(&metric)); | |
209 | |
210 rtc::scoped_ptr<RawPacket> packet(xr.Build()); | |
211 RtcpPacketParser parser; | |
212 parser.Parse(packet->Buffer(), packet->Length()); | |
213 EXPECT_EQ(1, parser.xr_header()->num_packets()); | |
214 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); | |
215 EXPECT_EQ(1, parser.rrtr()->num_packets()); | |
216 EXPECT_EQ(1, parser.dlrr()->num_packets()); | |
217 EXPECT_EQ(1, parser.dlrr_items()->num_packets()); | |
218 EXPECT_EQ(1, parser.voip_metric()->num_packets()); | |
219 } | |
220 | |
221 TEST(RtcpPacketTest, DlrrWithoutItemNotIncludedInPacket) { | |
222 Rrtr rrtr; | |
223 Dlrr dlrr; | |
224 VoipMetric metric; | |
225 ExtendedReports xr; | |
226 xr.From(kSenderSsrc); | |
227 EXPECT_TRUE(xr.WithRrtr(&rrtr)); | |
228 EXPECT_TRUE(xr.WithDlrr(&dlrr)); | |
229 EXPECT_TRUE(xr.WithVoipMetric(&metric)); | |
230 | |
231 rtc::scoped_ptr<RawPacket> packet(xr.Build()); | |
232 RtcpPacketParser parser; | |
233 parser.Parse(packet->Buffer(), packet->Length()); | |
234 EXPECT_EQ(1, parser.xr_header()->num_packets()); | |
235 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); | |
236 EXPECT_EQ(1, parser.rrtr()->num_packets()); | |
237 EXPECT_EQ(0, parser.dlrr()->num_packets()); | |
238 EXPECT_EQ(1, parser.voip_metric()->num_packets()); | |
239 } | |
240 | |
241 TEST(RtcpPacketTest, ExtendedReportsWithTooManyBlocks) { | |
242 const int kMaxBlocks = 50; | |
243 Xr xr; | |
244 | |
245 Rrtr rrtr; | |
246 for (int i = 0; i < kMaxBlocks; ++i) | |
247 EXPECT_TRUE(xr.WithRrtr(&rrtr)); | |
248 EXPECT_FALSE(xr.WithRrtr(&rrtr)); | |
249 | |
250 Dlrr dlrr; | |
251 for (int i = 0; i < kMaxBlocks; ++i) | |
252 EXPECT_TRUE(xr.WithDlrr(&dlrr)); | |
253 EXPECT_FALSE(xr.WithDlrr(&dlrr)); | |
254 | |
255 VoipMetric voip_metric; | |
256 for (int i = 0; i < kMaxBlocks; ++i) | |
257 EXPECT_TRUE(xr.WithVoipMetric(&voip_metric)); | |
258 EXPECT_FALSE(xr.WithVoipMetric(&voip_metric)); | |
259 } | |
260 } // namespace rtcp | |
261 } // namespace webrtc | |
OLD | NEW |