blob: 51ad4267483220b4e566ec861105762aca12e4f2 [file] [log] [blame]
jbauch5869f502017-06-29 12:31:36 -07001/*
2 * Copyright (c) 2017 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
Steve Anton10542f22019-01-11 09:11:00 -080011#include "api/rtp_parameters.h"
Jonas Olssona4d87372019-07-05 19:08:33 +020012
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020013#include "test/gtest.h"
jbauch5869f502017-06-29 12:31:36 -070014
Stefan Holmer1acbd682017-09-01 15:29:28 +020015namespace webrtc {
jbauch5869f502017-06-29 12:31:36 -070016
17using webrtc::RtpExtension;
18
19static const char kExtensionUri1[] = "extension-uri1";
20static const char kExtensionUri2[] = "extension-uri2";
21
22static const RtpExtension kExtension1(kExtensionUri1, 1);
23static const RtpExtension kExtension1Encrypted(kExtensionUri1, 10, true);
24static const RtpExtension kExtension2(kExtensionUri2, 2);
25
Lennart Grahl0d0ed762021-05-17 16:06:37 +020026TEST(RtpExtensionTest, DeduplicateHeaderExtensions) {
jbauch5869f502017-06-29 12:31:36 -070027 std::vector<RtpExtension> extensions;
28 std::vector<RtpExtension> filtered;
29
Lennart Grahl0d0ed762021-05-17 16:06:37 +020030 extensions.clear();
jbauch5869f502017-06-29 12:31:36 -070031 extensions.push_back(kExtension1);
32 extensions.push_back(kExtension1Encrypted);
Lennart Grahl0d0ed762021-05-17 16:06:37 +020033 filtered = RtpExtension::DeduplicateHeaderExtensions(
34 extensions, RtpExtension::Filter::kDiscardEncryptedExtension);
35 EXPECT_EQ(1u, filtered.size());
36 EXPECT_EQ(std::vector<RtpExtension>{kExtension1}, filtered);
37
38 extensions.clear();
39 extensions.push_back(kExtension1);
40 extensions.push_back(kExtension1Encrypted);
41 filtered = RtpExtension::DeduplicateHeaderExtensions(
42 extensions, RtpExtension::Filter::kPreferEncryptedExtension);
43 EXPECT_EQ(1u, filtered.size());
44 EXPECT_EQ(std::vector<RtpExtension>{kExtension1Encrypted}, filtered);
45
46 extensions.clear();
47 extensions.push_back(kExtension1);
48 extensions.push_back(kExtension1Encrypted);
49 filtered = RtpExtension::DeduplicateHeaderExtensions(
50 extensions, RtpExtension::Filter::kRequireEncryptedExtension);
jbauch5869f502017-06-29 12:31:36 -070051 EXPECT_EQ(1u, filtered.size());
52 EXPECT_EQ(std::vector<RtpExtension>{kExtension1Encrypted}, filtered);
53
54 extensions.clear();
55 extensions.push_back(kExtension1Encrypted);
56 extensions.push_back(kExtension1);
Lennart Grahl0d0ed762021-05-17 16:06:37 +020057 filtered = RtpExtension::DeduplicateHeaderExtensions(
58 extensions, RtpExtension::Filter::kDiscardEncryptedExtension);
59 EXPECT_EQ(1u, filtered.size());
60 EXPECT_EQ(std::vector<RtpExtension>{kExtension1}, filtered);
61
62 extensions.clear();
63 extensions.push_back(kExtension1Encrypted);
64 extensions.push_back(kExtension1);
65 filtered = RtpExtension::DeduplicateHeaderExtensions(
66 extensions, RtpExtension::Filter::kPreferEncryptedExtension);
67 EXPECT_EQ(1u, filtered.size());
68 EXPECT_EQ(std::vector<RtpExtension>{kExtension1Encrypted}, filtered);
69
70 extensions.clear();
71 extensions.push_back(kExtension1Encrypted);
72 extensions.push_back(kExtension1);
73 filtered = RtpExtension::DeduplicateHeaderExtensions(
74 extensions, RtpExtension::Filter::kRequireEncryptedExtension);
jbauch5869f502017-06-29 12:31:36 -070075 EXPECT_EQ(1u, filtered.size());
76 EXPECT_EQ(std::vector<RtpExtension>{kExtension1Encrypted}, filtered);
77
78 extensions.clear();
79 extensions.push_back(kExtension1);
80 extensions.push_back(kExtension2);
Lennart Grahl0d0ed762021-05-17 16:06:37 +020081 filtered = RtpExtension::DeduplicateHeaderExtensions(
82 extensions, RtpExtension::Filter::kDiscardEncryptedExtension);
jbauch5869f502017-06-29 12:31:36 -070083 EXPECT_EQ(2u, filtered.size());
84 EXPECT_EQ(extensions, filtered);
Lennart Grahl0d0ed762021-05-17 16:06:37 +020085 filtered = RtpExtension::DeduplicateHeaderExtensions(
86 extensions, RtpExtension::Filter::kPreferEncryptedExtension);
87 EXPECT_EQ(2u, filtered.size());
88 EXPECT_EQ(extensions, filtered);
89 filtered = RtpExtension::DeduplicateHeaderExtensions(
90 extensions, RtpExtension::Filter::kRequireEncryptedExtension);
91 EXPECT_EQ(0u, filtered.size());
92
93 extensions.clear();
94 extensions.push_back(kExtension1);
95 extensions.push_back(kExtension2);
96 extensions.push_back(kExtension1Encrypted);
97 filtered = RtpExtension::DeduplicateHeaderExtensions(
98 extensions, RtpExtension::Filter::kDiscardEncryptedExtension);
99 EXPECT_EQ(2u, filtered.size());
100 EXPECT_EQ((std::vector<RtpExtension>{kExtension1, kExtension2}), filtered);
101 filtered = RtpExtension::DeduplicateHeaderExtensions(
102 extensions, RtpExtension::Filter::kPreferEncryptedExtension);
103 EXPECT_EQ(2u, filtered.size());
104 EXPECT_EQ((std::vector<RtpExtension>{kExtension1Encrypted, kExtension2}),
105 filtered);
106 filtered = RtpExtension::DeduplicateHeaderExtensions(
107 extensions, RtpExtension::Filter::kRequireEncryptedExtension);
108 EXPECT_EQ(1u, filtered.size());
109 EXPECT_EQ((std::vector<RtpExtension>{kExtension1Encrypted}), filtered);
110}
111
112TEST(RtpExtensionTest, FindHeaderExtensionByUriAndEncryption) {
113 std::vector<RtpExtension> extensions;
114
115 extensions.clear();
116 EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUriAndEncryption(
117 extensions, kExtensionUri1, false));
118
119 extensions.clear();
120 extensions.push_back(kExtension1);
121 EXPECT_EQ(kExtension1, *RtpExtension::FindHeaderExtensionByUriAndEncryption(
122 extensions, kExtensionUri1, false));
123 EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUriAndEncryption(
124 extensions, kExtensionUri1, true));
125 EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUriAndEncryption(
126 extensions, kExtensionUri2, false));
127
128 extensions.clear();
129 extensions.push_back(kExtension1);
130 extensions.push_back(kExtension2);
131 extensions.push_back(kExtension1Encrypted);
132 EXPECT_EQ(kExtension1, *RtpExtension::FindHeaderExtensionByUriAndEncryption(
133 extensions, kExtensionUri1, false));
134 EXPECT_EQ(kExtension2, *RtpExtension::FindHeaderExtensionByUriAndEncryption(
135 extensions, kExtensionUri2, false));
136 EXPECT_EQ(kExtension1Encrypted,
137 *RtpExtension::FindHeaderExtensionByUriAndEncryption(
138 extensions, kExtensionUri1, true));
139 EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUriAndEncryption(
140 extensions, kExtensionUri2, true));
141}
142
143TEST(RtpExtensionTest, FindHeaderExtensionByUri) {
144 std::vector<RtpExtension> extensions;
145
146 extensions.clear();
147 EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
148 extensions, kExtensionUri1,
149 RtpExtension::Filter::kDiscardEncryptedExtension));
150 EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
151 extensions, kExtensionUri1,
152 RtpExtension::Filter::kPreferEncryptedExtension));
153 EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
154 extensions, kExtensionUri1,
155 RtpExtension::Filter::kRequireEncryptedExtension));
156
157 extensions.clear();
158 extensions.push_back(kExtension1);
159 EXPECT_EQ(kExtension1, *RtpExtension::FindHeaderExtensionByUri(
160 extensions, kExtensionUri1,
161 RtpExtension::Filter::kDiscardEncryptedExtension));
162 EXPECT_EQ(kExtension1, *RtpExtension::FindHeaderExtensionByUri(
163 extensions, kExtensionUri1,
164 RtpExtension::Filter::kPreferEncryptedExtension));
165 EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
166 extensions, kExtensionUri1,
167 RtpExtension::Filter::kRequireEncryptedExtension));
168 EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
169 extensions, kExtensionUri2,
170 RtpExtension::Filter::kDiscardEncryptedExtension));
171 EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
172 extensions, kExtensionUri2,
173 RtpExtension::Filter::kPreferEncryptedExtension));
174 EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
175 extensions, kExtensionUri2,
176 RtpExtension::Filter::kRequireEncryptedExtension));
177
178 extensions.clear();
179 extensions.push_back(kExtension1);
180 extensions.push_back(kExtension1Encrypted);
181 EXPECT_EQ(kExtension1, *RtpExtension::FindHeaderExtensionByUri(
182 extensions, kExtensionUri1,
183 RtpExtension::Filter::kDiscardEncryptedExtension));
184
185 extensions.clear();
186 extensions.push_back(kExtension1);
187 extensions.push_back(kExtension1Encrypted);
188 EXPECT_EQ(kExtension1Encrypted,
189 *RtpExtension::FindHeaderExtensionByUri(
190 extensions, kExtensionUri1,
191 RtpExtension::Filter::kPreferEncryptedExtension));
192
193 extensions.clear();
194 extensions.push_back(kExtension1);
195 extensions.push_back(kExtension1Encrypted);
196 EXPECT_EQ(kExtension1Encrypted,
197 *RtpExtension::FindHeaderExtensionByUri(
198 extensions, kExtensionUri1,
199 RtpExtension::Filter::kRequireEncryptedExtension));
200
201 extensions.clear();
202 extensions.push_back(kExtension1Encrypted);
203 extensions.push_back(kExtension1);
204 EXPECT_EQ(kExtension1, *RtpExtension::FindHeaderExtensionByUri(
205 extensions, kExtensionUri1,
206 RtpExtension::Filter::kDiscardEncryptedExtension));
207
208 extensions.clear();
209 extensions.push_back(kExtension1Encrypted);
210 extensions.push_back(kExtension1);
211 EXPECT_EQ(kExtension1Encrypted,
212 *RtpExtension::FindHeaderExtensionByUri(
213 extensions, kExtensionUri1,
214 RtpExtension::Filter::kPreferEncryptedExtension));
215
216 extensions.clear();
217 extensions.push_back(kExtension1Encrypted);
218 extensions.push_back(kExtension1);
219 EXPECT_EQ(kExtension1Encrypted,
220 *RtpExtension::FindHeaderExtensionByUri(
221 extensions, kExtensionUri1,
222 RtpExtension::Filter::kRequireEncryptedExtension));
223
224 extensions.clear();
225 extensions.push_back(kExtension1);
226 extensions.push_back(kExtension2);
227 EXPECT_EQ(kExtension1, *RtpExtension::FindHeaderExtensionByUri(
228 extensions, kExtensionUri1,
229 RtpExtension::Filter::kDiscardEncryptedExtension));
230 EXPECT_EQ(kExtension1, *RtpExtension::FindHeaderExtensionByUri(
231 extensions, kExtensionUri1,
232 RtpExtension::Filter::kPreferEncryptedExtension));
233 EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
234 extensions, kExtensionUri1,
235 RtpExtension::Filter::kRequireEncryptedExtension));
236 EXPECT_EQ(kExtension2, *RtpExtension::FindHeaderExtensionByUri(
237 extensions, kExtensionUri2,
238 RtpExtension::Filter::kDiscardEncryptedExtension));
239 EXPECT_EQ(kExtension2, *RtpExtension::FindHeaderExtensionByUri(
240 extensions, kExtensionUri2,
241 RtpExtension::Filter::kPreferEncryptedExtension));
242 EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
243 extensions, kExtensionUri2,
244 RtpExtension::Filter::kRequireEncryptedExtension));
245
246 extensions.clear();
247 extensions.push_back(kExtension1);
248 extensions.push_back(kExtension2);
249 extensions.push_back(kExtension1Encrypted);
250 EXPECT_EQ(kExtension1, *RtpExtension::FindHeaderExtensionByUri(
251 extensions, kExtensionUri1,
252 RtpExtension::Filter::kDiscardEncryptedExtension));
253 EXPECT_EQ(kExtension1Encrypted,
254 *RtpExtension::FindHeaderExtensionByUri(
255 extensions, kExtensionUri1,
256 RtpExtension::Filter::kPreferEncryptedExtension));
257 EXPECT_EQ(kExtension1Encrypted,
258 *RtpExtension::FindHeaderExtensionByUri(
259 extensions, kExtensionUri1,
260 RtpExtension::Filter::kRequireEncryptedExtension));
261 EXPECT_EQ(kExtension2, *RtpExtension::FindHeaderExtensionByUri(
262 extensions, kExtensionUri2,
263 RtpExtension::Filter::kDiscardEncryptedExtension));
264 EXPECT_EQ(kExtension2, *RtpExtension::FindHeaderExtensionByUri(
265 extensions, kExtensionUri2,
266 RtpExtension::Filter::kPreferEncryptedExtension));
267 EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
268 extensions, kExtensionUri2,
269 RtpExtension::Filter::kRequireEncryptedExtension));
jbauch5869f502017-06-29 12:31:36 -0700270}
Stefan Holmer1acbd682017-09-01 15:29:28 +0200271} // namespace webrtc