OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2015 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 "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
12 | 12 |
13 #include "webrtc/media/engine/webrtcmediaengine.h" | 13 #include "webrtc/media/engine/webrtcmediaengine.h" |
14 | 14 |
| 15 using webrtc::RtpExtension; |
| 16 |
15 namespace cricket { | 17 namespace cricket { |
16 namespace { | 18 namespace { |
17 | 19 |
18 std::vector<RtpHeaderExtension> MakeUniqueExtensions() { | 20 std::vector<RtpExtension> MakeUniqueExtensions() { |
19 std::vector<RtpHeaderExtension> result; | 21 std::vector<RtpExtension> result; |
20 char name[] = "a"; | 22 char name[] = "a"; |
21 for (int i = 0; i < 7; ++i) { | 23 for (int i = 0; i < 7; ++i) { |
22 result.push_back(RtpHeaderExtension(name, 1 + i)); | 24 result.push_back(RtpExtension(name, 1 + i)); |
23 name[0]++; | 25 name[0]++; |
24 result.push_back(RtpHeaderExtension(name, 14 - i)); | 26 result.push_back(RtpExtension(name, 14 - i)); |
25 name[0]++; | 27 name[0]++; |
26 } | 28 } |
27 return result; | 29 return result; |
28 } | 30 } |
29 | 31 |
30 std::vector<RtpHeaderExtension> MakeRedundantExtensions() { | 32 std::vector<RtpExtension> MakeRedundantExtensions() { |
31 std::vector<RtpHeaderExtension> result; | 33 std::vector<RtpExtension> result; |
32 char name[] = "a"; | 34 char name[] = "a"; |
33 for (int i = 0; i < 7; ++i) { | 35 for (int i = 0; i < 7; ++i) { |
34 result.push_back(RtpHeaderExtension(name, 1 + i)); | 36 result.push_back(RtpExtension(name, 1 + i)); |
35 result.push_back(RtpHeaderExtension(name, 14 - i)); | 37 result.push_back(RtpExtension(name, 14 - i)); |
36 name[0]++; | 38 name[0]++; |
37 } | 39 } |
38 return result; | 40 return result; |
39 } | 41 } |
40 | 42 |
41 bool SupportedExtensions1(const std::string& name) { | 43 bool SupportedExtensions1(const std::string& name) { |
42 return name == "c" || name == "i"; | 44 return name == "c" || name == "i"; |
43 } | 45 } |
44 | 46 |
45 bool SupportedExtensions2(const std::string& name) { | 47 bool SupportedExtensions2(const std::string& name) { |
46 return name != "a" && name != "n"; | 48 return name != "a" && name != "n"; |
47 } | 49 } |
48 | 50 |
49 bool IsSorted(const std::vector<webrtc::RtpExtension>& extensions) { | 51 bool IsSorted(const std::vector<webrtc::RtpExtension>& extensions) { |
50 const std::string* last = nullptr; | 52 const std::string* last = nullptr; |
51 for (const auto& extension : extensions) { | 53 for (const auto& extension : extensions) { |
52 if (last && *last > extension.name) { | 54 if (last && *last > extension.uri) { |
53 return false; | 55 return false; |
54 } | 56 } |
55 last = &extension.name; | 57 last = &extension.uri; |
56 } | 58 } |
57 return true; | 59 return true; |
58 } | 60 } |
59 } // namespace | 61 } // namespace |
60 | 62 |
61 TEST(WebRtcMediaEngineTest, ValidateRtpExtensions_EmptyList) { | 63 TEST(WebRtcMediaEngineTest, ValidateRtpExtensions_EmptyList) { |
62 std::vector<RtpHeaderExtension> extensions; | 64 std::vector<RtpExtension> extensions; |
63 EXPECT_TRUE(ValidateRtpExtensions(extensions)); | 65 EXPECT_TRUE(ValidateRtpExtensions(extensions)); |
64 } | 66 } |
65 | 67 |
66 TEST(WebRtcMediaEngineTest, ValidateRtpExtensions_AllGood) { | 68 TEST(WebRtcMediaEngineTest, ValidateRtpExtensions_AllGood) { |
67 std::vector<RtpHeaderExtension> extensions = MakeUniqueExtensions(); | 69 std::vector<RtpExtension> extensions = MakeUniqueExtensions(); |
68 EXPECT_TRUE(ValidateRtpExtensions(extensions)); | 70 EXPECT_TRUE(ValidateRtpExtensions(extensions)); |
69 } | 71 } |
70 | 72 |
71 TEST(WebRtcMediaEngineTest, ValidateRtpExtensions_OutOfRangeId_Low) { | 73 TEST(WebRtcMediaEngineTest, ValidateRtpExtensions_OutOfRangeId_Low) { |
72 std::vector<RtpHeaderExtension> extensions = MakeUniqueExtensions(); | 74 std::vector<RtpExtension> extensions = MakeUniqueExtensions(); |
73 extensions.push_back(RtpHeaderExtension("foo", 0)); | 75 extensions.push_back(RtpExtension("foo", 0)); |
74 EXPECT_FALSE(ValidateRtpExtensions(extensions)); | 76 EXPECT_FALSE(ValidateRtpExtensions(extensions)); |
75 } | 77 } |
76 | 78 |
77 TEST(WebRtcMediaEngineTest, ValidateRtpExtensions_OutOfRangeId_High) { | 79 TEST(WebRtcMediaEngineTest, ValidateRtpExtensions_OutOfRangeId_High) { |
78 std::vector<RtpHeaderExtension> extensions = MakeUniqueExtensions(); | 80 std::vector<RtpExtension> extensions = MakeUniqueExtensions(); |
79 extensions.push_back(RtpHeaderExtension("foo", 15)); | 81 extensions.push_back(RtpExtension("foo", 15)); |
80 EXPECT_FALSE(ValidateRtpExtensions(extensions)); | 82 EXPECT_FALSE(ValidateRtpExtensions(extensions)); |
81 } | 83 } |
82 | 84 |
83 TEST(WebRtcMediaEngineTest, ValidateRtpExtensions_OverlappingIds_StartOfSet) { | 85 TEST(WebRtcMediaEngineTest, ValidateRtpExtensions_OverlappingIds_StartOfSet) { |
84 std::vector<RtpHeaderExtension> extensions = MakeUniqueExtensions(); | 86 std::vector<RtpExtension> extensions = MakeUniqueExtensions(); |
85 extensions.push_back(RtpHeaderExtension("foo", 1)); | 87 extensions.push_back(RtpExtension("foo", 1)); |
86 EXPECT_FALSE(ValidateRtpExtensions(extensions)); | 88 EXPECT_FALSE(ValidateRtpExtensions(extensions)); |
87 } | 89 } |
88 | 90 |
89 TEST(WebRtcMediaEngineTest, ValidateRtpExtensions_OverlappingIds_EndOfSet) { | 91 TEST(WebRtcMediaEngineTest, ValidateRtpExtensions_OverlappingIds_EndOfSet) { |
90 std::vector<RtpHeaderExtension> extensions = MakeUniqueExtensions(); | 92 std::vector<RtpExtension> extensions = MakeUniqueExtensions(); |
91 extensions.push_back(RtpHeaderExtension("foo", 14)); | 93 extensions.push_back(RtpExtension("foo", 14)); |
92 EXPECT_FALSE(ValidateRtpExtensions(extensions)); | 94 EXPECT_FALSE(ValidateRtpExtensions(extensions)); |
93 } | 95 } |
94 | 96 |
95 TEST(WebRtcMediaEngineTest, FilterRtpExtensions_EmptyList) { | 97 TEST(WebRtcMediaEngineTest, FilterRtpExtensions_EmptyList) { |
96 std::vector<RtpHeaderExtension> extensions; | 98 std::vector<RtpExtension> extensions; |
97 std::vector<webrtc::RtpExtension> filtered = | 99 std::vector<webrtc::RtpExtension> filtered = |
98 FilterRtpExtensions(extensions, SupportedExtensions1, true); | 100 FilterRtpExtensions(extensions, SupportedExtensions1, true); |
99 EXPECT_EQ(0, filtered.size()); | 101 EXPECT_EQ(0, filtered.size()); |
100 } | 102 } |
101 | 103 |
102 TEST(WebRtcMediaEngineTest, FilterRtpExtensions_IncludeOnlySupported) { | 104 TEST(WebRtcMediaEngineTest, FilterRtpExtensions_IncludeOnlySupported) { |
103 std::vector<RtpHeaderExtension> extensions = MakeUniqueExtensions(); | 105 std::vector<RtpExtension> extensions = MakeUniqueExtensions(); |
104 std::vector<webrtc::RtpExtension> filtered = | 106 std::vector<webrtc::RtpExtension> filtered = |
105 FilterRtpExtensions(extensions, SupportedExtensions1, false); | 107 FilterRtpExtensions(extensions, SupportedExtensions1, false); |
106 EXPECT_EQ(2, filtered.size()); | 108 EXPECT_EQ(2, filtered.size()); |
107 EXPECT_EQ("c", filtered[0].name); | 109 EXPECT_EQ("c", filtered[0].uri); |
108 EXPECT_EQ("i", filtered[1].name); | 110 EXPECT_EQ("i", filtered[1].uri); |
109 } | 111 } |
110 | 112 |
111 TEST(WebRtcMediaEngineTest, FilterRtpExtensions_SortedByName_1) { | 113 TEST(WebRtcMediaEngineTest, FilterRtpExtensions_SortedByName_1) { |
112 std::vector<RtpHeaderExtension> extensions = MakeUniqueExtensions(); | 114 std::vector<RtpExtension> extensions = MakeUniqueExtensions(); |
113 std::vector<webrtc::RtpExtension> filtered = | 115 std::vector<webrtc::RtpExtension> filtered = |
114 FilterRtpExtensions(extensions, SupportedExtensions2, false); | 116 FilterRtpExtensions(extensions, SupportedExtensions2, false); |
115 EXPECT_EQ(12, filtered.size()); | 117 EXPECT_EQ(12, filtered.size()); |
116 EXPECT_TRUE(IsSorted(filtered)); | 118 EXPECT_TRUE(IsSorted(filtered)); |
117 } | 119 } |
118 | 120 |
119 TEST(WebRtcMediaEngineTest, FilterRtpExtensions_SortedByName_2) { | 121 TEST(WebRtcMediaEngineTest, FilterRtpExtensions_SortedByName_2) { |
120 std::vector<RtpHeaderExtension> extensions = MakeUniqueExtensions(); | 122 std::vector<RtpExtension> extensions = MakeUniqueExtensions(); |
121 std::vector<webrtc::RtpExtension> filtered = | 123 std::vector<webrtc::RtpExtension> filtered = |
122 FilterRtpExtensions(extensions, SupportedExtensions2, true); | 124 FilterRtpExtensions(extensions, SupportedExtensions2, true); |
123 EXPECT_EQ(12, filtered.size()); | 125 EXPECT_EQ(12, filtered.size()); |
124 EXPECT_TRUE(IsSorted(filtered)); | 126 EXPECT_TRUE(IsSorted(filtered)); |
125 } | 127 } |
126 | 128 |
127 TEST(WebRtcMediaEngineTest, FilterRtpExtensions_DontRemoveRedundant) { | 129 TEST(WebRtcMediaEngineTest, FilterRtpExtensions_DontRemoveRedundant) { |
128 std::vector<RtpHeaderExtension> extensions = MakeRedundantExtensions(); | 130 std::vector<RtpExtension> extensions = MakeRedundantExtensions(); |
129 std::vector<webrtc::RtpExtension> filtered = | 131 std::vector<webrtc::RtpExtension> filtered = |
130 FilterRtpExtensions(extensions, SupportedExtensions2, false); | 132 FilterRtpExtensions(extensions, SupportedExtensions2, false); |
131 EXPECT_EQ(12, filtered.size()); | 133 EXPECT_EQ(12, filtered.size()); |
132 EXPECT_TRUE(IsSorted(filtered)); | 134 EXPECT_TRUE(IsSorted(filtered)); |
133 EXPECT_EQ(filtered[0].name, filtered[1].name); | 135 EXPECT_EQ(filtered[0].uri, filtered[1].uri); |
134 } | 136 } |
135 | 137 |
136 TEST(WebRtcMediaEngineTest, FilterRtpExtensions_RemoveRedundant) { | 138 TEST(WebRtcMediaEngineTest, FilterRtpExtensions_RemoveRedundant) { |
137 std::vector<RtpHeaderExtension> extensions = MakeRedundantExtensions(); | 139 std::vector<RtpExtension> extensions = MakeRedundantExtensions(); |
138 std::vector<webrtc::RtpExtension> filtered = | 140 std::vector<webrtc::RtpExtension> filtered = |
139 FilterRtpExtensions(extensions, SupportedExtensions2, true); | 141 FilterRtpExtensions(extensions, SupportedExtensions2, true); |
140 EXPECT_EQ(6, filtered.size()); | 142 EXPECT_EQ(6, filtered.size()); |
141 EXPECT_TRUE(IsSorted(filtered)); | 143 EXPECT_TRUE(IsSorted(filtered)); |
142 EXPECT_NE(filtered[0].name, filtered[1].name); | 144 EXPECT_NE(filtered[0].uri, filtered[1].uri); |
143 } | 145 } |
144 | 146 |
145 TEST(WebRtcMediaEngineTest, FilterRtpExtensions_RemoveRedundantBwe_1) { | 147 TEST(WebRtcMediaEngineTest, FilterRtpExtensions_RemoveRedundantBwe_1) { |
146 std::vector<RtpHeaderExtension> extensions; | 148 std::vector<RtpExtension> extensions; |
147 extensions.push_back( | 149 extensions.push_back( |
148 RtpHeaderExtension(kRtpTransportSequenceNumberHeaderExtension, 3)); | 150 RtpExtension(RtpExtension::kTransportSequenceNumberUri, 3)); |
| 151 extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 9)); |
| 152 extensions.push_back(RtpExtension(RtpExtension::kAbsSendTimeUri, 6)); |
149 extensions.push_back( | 153 extensions.push_back( |
150 RtpHeaderExtension(kRtpTimestampOffsetHeaderExtension, 9)); | 154 RtpExtension(RtpExtension::kTransportSequenceNumberUri, 1)); |
151 extensions.push_back( | 155 extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 14)); |
152 RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, 6)); | |
153 extensions.push_back( | |
154 RtpHeaderExtension(kRtpTransportSequenceNumberHeaderExtension, 1)); | |
155 extensions.push_back( | |
156 RtpHeaderExtension(kRtpTimestampOffsetHeaderExtension, 14)); | |
157 std::vector<webrtc::RtpExtension> filtered = | 156 std::vector<webrtc::RtpExtension> filtered = |
158 FilterRtpExtensions(extensions, SupportedExtensions2, true); | 157 FilterRtpExtensions(extensions, SupportedExtensions2, true); |
159 EXPECT_EQ(1, filtered.size()); | 158 EXPECT_EQ(1, filtered.size()); |
160 EXPECT_EQ(kRtpTransportSequenceNumberHeaderExtension, filtered[0].name); | 159 EXPECT_EQ(RtpExtension::kTransportSequenceNumberUri, filtered[0].uri); |
161 } | 160 } |
162 | 161 |
163 TEST(WebRtcMediaEngineTest, FilterRtpExtensions_RemoveRedundantBwe_2) { | 162 TEST(WebRtcMediaEngineTest, FilterRtpExtensions_RemoveRedundantBwe_2) { |
164 std::vector<RtpHeaderExtension> extensions; | 163 std::vector<RtpExtension> extensions; |
165 extensions.push_back( | 164 extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 1)); |
166 RtpHeaderExtension(kRtpTimestampOffsetHeaderExtension, 1)); | 165 extensions.push_back(RtpExtension(RtpExtension::kAbsSendTimeUri, 14)); |
167 extensions.push_back( | 166 extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 7)); |
168 RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, 14)); | |
169 extensions.push_back( | |
170 RtpHeaderExtension(kRtpTimestampOffsetHeaderExtension, 7)); | |
171 std::vector<webrtc::RtpExtension> filtered = | 167 std::vector<webrtc::RtpExtension> filtered = |
172 FilterRtpExtensions(extensions, SupportedExtensions2, true); | 168 FilterRtpExtensions(extensions, SupportedExtensions2, true); |
173 EXPECT_EQ(1, filtered.size()); | 169 EXPECT_EQ(1, filtered.size()); |
174 EXPECT_EQ(kRtpAbsoluteSenderTimeHeaderExtension, filtered[0].name); | 170 EXPECT_EQ(RtpExtension::kAbsSendTimeUri, filtered[0].uri); |
175 } | 171 } |
176 | 172 |
177 TEST(WebRtcMediaEngineTest, FilterRtpExtensions_RemoveRedundantBwe_3) { | 173 TEST(WebRtcMediaEngineTest, FilterRtpExtensions_RemoveRedundantBwe_3) { |
178 std::vector<RtpHeaderExtension> extensions; | 174 std::vector<RtpExtension> extensions; |
179 extensions.push_back( | 175 extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 2)); |
180 RtpHeaderExtension(kRtpTimestampOffsetHeaderExtension, 2)); | 176 extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 14)); |
181 extensions.push_back( | |
182 RtpHeaderExtension(kRtpTimestampOffsetHeaderExtension, 14)); | |
183 std::vector<webrtc::RtpExtension> filtered = | 177 std::vector<webrtc::RtpExtension> filtered = |
184 FilterRtpExtensions(extensions, SupportedExtensions2, true); | 178 FilterRtpExtensions(extensions, SupportedExtensions2, true); |
185 EXPECT_EQ(1, filtered.size()); | 179 EXPECT_EQ(1, filtered.size()); |
186 EXPECT_EQ(kRtpTimestampOffsetHeaderExtension, filtered[0].name); | 180 EXPECT_EQ(RtpExtension::kTimestampOffsetUri, filtered[0].uri); |
187 } | 181 } |
188 } // namespace cricket | 182 } // namespace cricket |
OLD | NEW |