OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2012 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 <memory> | 11 #include <memory> |
12 #include <string> | 12 #include <string> |
13 #include <utility> | 13 #include <utility> |
14 | 14 |
15 #include "webrtc/api/mediastreaminterface.h" | 15 #include "webrtc/api/mediastreaminterface.h" |
16 #include "webrtc/api/peerconnectionfactory.h" | 16 #include "webrtc/api/peerconnectionfactory.h" |
17 #ifdef WEBRTC_ANDROID | 17 #ifdef WEBRTC_ANDROID |
18 #include "webrtc/api/test/androidtestinitializer.h" | 18 #include "webrtc/api/test/androidtestinitializer.h" |
19 #endif | 19 #endif |
20 #include "webrtc/api/test/fakedtlsidentitystore.h" | 20 #include "webrtc/api/test/fakertccertificategenerator.h" |
21 #include "webrtc/api/test/fakevideotrackrenderer.h" | 21 #include "webrtc/api/test/fakevideotrackrenderer.h" |
22 #include "webrtc/base/gunit.h" | 22 #include "webrtc/base/gunit.h" |
23 #include "webrtc/base/thread.h" | 23 #include "webrtc/base/thread.h" |
24 #include "webrtc/media/base/fakevideocapturer.h" | 24 #include "webrtc/media/base/fakevideocapturer.h" |
25 #include "webrtc/media/engine/webrtccommon.h" | 25 #include "webrtc/media/engine/webrtccommon.h" |
26 #include "webrtc/media/engine/webrtcvoe.h" | 26 #include "webrtc/media/engine/webrtcvoe.h" |
27 #include "webrtc/p2p/base/fakeportallocator.h" | 27 #include "webrtc/p2p/base/fakeportallocator.h" |
28 | 28 |
29 using webrtc::DataChannelInterface; | 29 using webrtc::DataChannelInterface; |
30 using webrtc::DtlsIdentityStoreInterface; | 30 using webrtc::DtlsIdentityStoreInterface; |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 #ifdef WEBRTC_ANDROID | 135 #ifdef WEBRTC_ANDROID |
136 webrtc::InitializeAndroidObjects(); | 136 webrtc::InitializeAndroidObjects(); |
137 #endif | 137 #endif |
138 | 138 |
139 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory( | 139 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory( |
140 webrtc::CreatePeerConnectionFactory()); | 140 webrtc::CreatePeerConnectionFactory()); |
141 | 141 |
142 NullPeerConnectionObserver observer; | 142 NullPeerConnectionObserver observer; |
143 webrtc::PeerConnectionInterface::RTCConfiguration config; | 143 webrtc::PeerConnectionInterface::RTCConfiguration config; |
144 | 144 |
145 std::unique_ptr<FakeDtlsIdentityStore> dtls_identity_store( | 145 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator( |
146 new FakeDtlsIdentityStore()); | 146 new FakeRTCCertificateGenerator()); |
147 rtc::scoped_refptr<PeerConnectionInterface> pc( | 147 rtc::scoped_refptr<PeerConnectionInterface> pc(factory->CreatePeerConnection( |
148 factory->CreatePeerConnectionWithStore( | 148 config, nullptr, nullptr, std::move(cert_generator), &observer)); |
149 config, nullptr, nullptr, std::move(dtls_identity_store), &observer)); | |
150 | 149 |
151 EXPECT_TRUE(pc.get() != nullptr); | 150 EXPECT_TRUE(pc.get() != nullptr); |
152 } | 151 } |
153 | 152 |
154 // This test verifies creation of PeerConnection with valid STUN and TURN | 153 // This test verifies creation of PeerConnection with valid STUN and TURN |
155 // configuration. Also verifies the URL's parsed correctly as expected. | 154 // configuration. Also verifies the URL's parsed correctly as expected. |
156 TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServers) { | 155 TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServers) { |
157 PeerConnectionInterface::RTCConfiguration config; | 156 PeerConnectionInterface::RTCConfiguration config; |
158 webrtc::PeerConnectionInterface::IceServer ice_server; | 157 webrtc::PeerConnectionInterface::IceServer ice_server; |
159 ice_server.uri = kStunIceServer; | 158 ice_server.uri = kStunIceServer; |
160 config.servers.push_back(ice_server); | 159 config.servers.push_back(ice_server); |
161 ice_server.uri = kTurnIceServer; | 160 ice_server.uri = kTurnIceServer; |
162 ice_server.password = kTurnPassword; | 161 ice_server.password = kTurnPassword; |
163 config.servers.push_back(ice_server); | 162 config.servers.push_back(ice_server); |
164 ice_server.uri = kTurnIceServerWithTransport; | 163 ice_server.uri = kTurnIceServerWithTransport; |
165 ice_server.password = kTurnPassword; | 164 ice_server.password = kTurnPassword; |
166 config.servers.push_back(ice_server); | 165 config.servers.push_back(ice_server); |
167 std::unique_ptr<DtlsIdentityStoreInterface> dtls_identity_store( | 166 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator( |
168 new FakeDtlsIdentityStore()); | 167 new FakeRTCCertificateGenerator()); |
169 rtc::scoped_refptr<PeerConnectionInterface> pc( | 168 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection( |
170 factory_->CreatePeerConnectionWithStore( | 169 config, nullptr, std::move(port_allocator_), std::move(cert_generator), |
171 config, nullptr, std::move(port_allocator_), | 170 &observer_)); |
172 std::move(dtls_identity_store), &observer_)); | |
173 ASSERT_TRUE(pc.get() != NULL); | 171 ASSERT_TRUE(pc.get() != NULL); |
174 cricket::ServerAddresses stun_servers; | 172 cricket::ServerAddresses stun_servers; |
175 rtc::SocketAddress stun1("stun.l.google.com", 19302); | 173 rtc::SocketAddress stun1("stun.l.google.com", 19302); |
176 stun_servers.insert(stun1); | 174 stun_servers.insert(stun1); |
177 VerifyStunServers(stun_servers); | 175 VerifyStunServers(stun_servers); |
178 std::vector<cricket::RelayServerConfig> turn_servers; | 176 std::vector<cricket::RelayServerConfig> turn_servers; |
179 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com", | 177 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com", |
180 kTurnPassword, cricket::PROTO_UDP, false); | 178 kTurnPassword, cricket::PROTO_UDP, false); |
181 turn_servers.push_back(turn1); | 179 turn_servers.push_back(turn1); |
182 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test", | 180 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test", |
183 kTurnPassword, cricket::PROTO_TCP, false); | 181 kTurnPassword, cricket::PROTO_TCP, false); |
184 turn_servers.push_back(turn2); | 182 turn_servers.push_back(turn2); |
185 VerifyTurnServers(turn_servers); | 183 VerifyTurnServers(turn_servers); |
186 } | 184 } |
187 | 185 |
188 // This test verifies creation of PeerConnection with valid STUN and TURN | 186 // This test verifies creation of PeerConnection with valid STUN and TURN |
189 // configuration. Also verifies the list of URL's parsed correctly as expected. | 187 // configuration. Also verifies the list of URL's parsed correctly as expected. |
190 TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServersUrls) { | 188 TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServersUrls) { |
191 PeerConnectionInterface::RTCConfiguration config; | 189 PeerConnectionInterface::RTCConfiguration config; |
192 webrtc::PeerConnectionInterface::IceServer ice_server; | 190 webrtc::PeerConnectionInterface::IceServer ice_server; |
193 ice_server.urls.push_back(kStunIceServer); | 191 ice_server.urls.push_back(kStunIceServer); |
194 ice_server.urls.push_back(kTurnIceServer); | 192 ice_server.urls.push_back(kTurnIceServer); |
195 ice_server.urls.push_back(kTurnIceServerWithTransport); | 193 ice_server.urls.push_back(kTurnIceServerWithTransport); |
196 ice_server.password = kTurnPassword; | 194 ice_server.password = kTurnPassword; |
197 config.servers.push_back(ice_server); | 195 config.servers.push_back(ice_server); |
198 std::unique_ptr<DtlsIdentityStoreInterface> dtls_identity_store( | 196 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator( |
199 new FakeDtlsIdentityStore()); | 197 new FakeRTCCertificateGenerator()); |
200 rtc::scoped_refptr<PeerConnectionInterface> pc( | 198 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection( |
201 factory_->CreatePeerConnectionWithStore( | 199 config, nullptr, std::move(port_allocator_), std::move(cert_generator), |
202 config, nullptr, std::move(port_allocator_), | 200 &observer_)); |
203 std::move(dtls_identity_store), &observer_)); | |
204 ASSERT_TRUE(pc.get() != NULL); | 201 ASSERT_TRUE(pc.get() != NULL); |
205 cricket::ServerAddresses stun_servers; | 202 cricket::ServerAddresses stun_servers; |
206 rtc::SocketAddress stun1("stun.l.google.com", 19302); | 203 rtc::SocketAddress stun1("stun.l.google.com", 19302); |
207 stun_servers.insert(stun1); | 204 stun_servers.insert(stun1); |
208 VerifyStunServers(stun_servers); | 205 VerifyStunServers(stun_servers); |
209 std::vector<cricket::RelayServerConfig> turn_servers; | 206 std::vector<cricket::RelayServerConfig> turn_servers; |
210 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com", | 207 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com", |
211 kTurnPassword, cricket::PROTO_UDP, false); | 208 kTurnPassword, cricket::PROTO_UDP, false); |
212 turn_servers.push_back(turn1); | 209 turn_servers.push_back(turn1); |
213 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test", | 210 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test", |
214 kTurnPassword, cricket::PROTO_TCP, false); | 211 kTurnPassword, cricket::PROTO_TCP, false); |
215 turn_servers.push_back(turn2); | 212 turn_servers.push_back(turn2); |
216 VerifyTurnServers(turn_servers); | 213 VerifyTurnServers(turn_servers); |
217 } | 214 } |
218 | 215 |
219 TEST_F(PeerConnectionFactoryTest, CreatePCUsingNoUsernameInUri) { | 216 TEST_F(PeerConnectionFactoryTest, CreatePCUsingNoUsernameInUri) { |
220 PeerConnectionInterface::RTCConfiguration config; | 217 PeerConnectionInterface::RTCConfiguration config; |
221 webrtc::PeerConnectionInterface::IceServer ice_server; | 218 webrtc::PeerConnectionInterface::IceServer ice_server; |
222 ice_server.uri = kStunIceServer; | 219 ice_server.uri = kStunIceServer; |
223 config.servers.push_back(ice_server); | 220 config.servers.push_back(ice_server); |
224 ice_server.uri = kTurnIceServerWithNoUsernameInUri; | 221 ice_server.uri = kTurnIceServerWithNoUsernameInUri; |
225 ice_server.username = kTurnUsername; | 222 ice_server.username = kTurnUsername; |
226 ice_server.password = kTurnPassword; | 223 ice_server.password = kTurnPassword; |
227 config.servers.push_back(ice_server); | 224 config.servers.push_back(ice_server); |
228 std::unique_ptr<DtlsIdentityStoreInterface> dtls_identity_store( | 225 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator( |
229 new FakeDtlsIdentityStore()); | 226 new FakeRTCCertificateGenerator()); |
230 rtc::scoped_refptr<PeerConnectionInterface> pc( | 227 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection( |
231 factory_->CreatePeerConnectionWithStore( | 228 config, nullptr, std::move(port_allocator_), std::move(cert_generator), |
232 config, nullptr, std::move(port_allocator_), | 229 &observer_)); |
233 std::move(dtls_identity_store), &observer_)); | |
234 ASSERT_TRUE(pc.get() != NULL); | 230 ASSERT_TRUE(pc.get() != NULL); |
235 std::vector<cricket::RelayServerConfig> turn_servers; | 231 std::vector<cricket::RelayServerConfig> turn_servers; |
236 cricket::RelayServerConfig turn("test.com", 1234, kTurnUsername, | 232 cricket::RelayServerConfig turn("test.com", 1234, kTurnUsername, |
237 kTurnPassword, cricket::PROTO_UDP, false); | 233 kTurnPassword, cricket::PROTO_UDP, false); |
238 turn_servers.push_back(turn); | 234 turn_servers.push_back(turn); |
239 VerifyTurnServers(turn_servers); | 235 VerifyTurnServers(turn_servers); |
240 } | 236 } |
241 | 237 |
242 // This test verifies the PeerConnection created properly with TURN url which | 238 // This test verifies the PeerConnection created properly with TURN url which |
243 // has transport parameter in it. | 239 // has transport parameter in it. |
244 TEST_F(PeerConnectionFactoryTest, CreatePCUsingTurnUrlWithTransportParam) { | 240 TEST_F(PeerConnectionFactoryTest, CreatePCUsingTurnUrlWithTransportParam) { |
245 PeerConnectionInterface::RTCConfiguration config; | 241 PeerConnectionInterface::RTCConfiguration config; |
246 webrtc::PeerConnectionInterface::IceServer ice_server; | 242 webrtc::PeerConnectionInterface::IceServer ice_server; |
247 ice_server.uri = kTurnIceServerWithTransport; | 243 ice_server.uri = kTurnIceServerWithTransport; |
248 ice_server.password = kTurnPassword; | 244 ice_server.password = kTurnPassword; |
249 config.servers.push_back(ice_server); | 245 config.servers.push_back(ice_server); |
250 std::unique_ptr<DtlsIdentityStoreInterface> dtls_identity_store( | 246 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator( |
251 new FakeDtlsIdentityStore()); | 247 new FakeRTCCertificateGenerator()); |
252 rtc::scoped_refptr<PeerConnectionInterface> pc( | 248 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection( |
253 factory_->CreatePeerConnectionWithStore( | 249 config, nullptr, std::move(port_allocator_), std::move(cert_generator), |
254 config, nullptr, std::move(port_allocator_), | 250 &observer_)); |
255 std::move(dtls_identity_store), &observer_)); | |
256 ASSERT_TRUE(pc.get() != NULL); | 251 ASSERT_TRUE(pc.get() != NULL); |
257 std::vector<cricket::RelayServerConfig> turn_servers; | 252 std::vector<cricket::RelayServerConfig> turn_servers; |
258 cricket::RelayServerConfig turn("hello.com", kDefaultStunPort, "test", | 253 cricket::RelayServerConfig turn("hello.com", kDefaultStunPort, "test", |
259 kTurnPassword, cricket::PROTO_TCP, false); | 254 kTurnPassword, cricket::PROTO_TCP, false); |
260 turn_servers.push_back(turn); | 255 turn_servers.push_back(turn); |
261 VerifyTurnServers(turn_servers); | 256 VerifyTurnServers(turn_servers); |
262 } | 257 } |
263 | 258 |
264 TEST_F(PeerConnectionFactoryTest, CreatePCUsingSecureTurnUrl) { | 259 TEST_F(PeerConnectionFactoryTest, CreatePCUsingSecureTurnUrl) { |
265 PeerConnectionInterface::RTCConfiguration config; | 260 PeerConnectionInterface::RTCConfiguration config; |
266 webrtc::PeerConnectionInterface::IceServer ice_server; | 261 webrtc::PeerConnectionInterface::IceServer ice_server; |
267 ice_server.uri = kSecureTurnIceServer; | 262 ice_server.uri = kSecureTurnIceServer; |
268 ice_server.password = kTurnPassword; | 263 ice_server.password = kTurnPassword; |
269 config.servers.push_back(ice_server); | 264 config.servers.push_back(ice_server); |
270 ice_server.uri = kSecureTurnIceServerWithoutTransportParam; | 265 ice_server.uri = kSecureTurnIceServerWithoutTransportParam; |
271 ice_server.password = kTurnPassword; | 266 ice_server.password = kTurnPassword; |
272 config.servers.push_back(ice_server); | 267 config.servers.push_back(ice_server); |
273 ice_server.uri = kSecureTurnIceServerWithoutTransportAndPortParam; | 268 ice_server.uri = kSecureTurnIceServerWithoutTransportAndPortParam; |
274 ice_server.password = kTurnPassword; | 269 ice_server.password = kTurnPassword; |
275 config.servers.push_back(ice_server); | 270 config.servers.push_back(ice_server); |
276 std::unique_ptr<DtlsIdentityStoreInterface> dtls_identity_store( | 271 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator( |
277 new FakeDtlsIdentityStore()); | 272 new FakeRTCCertificateGenerator()); |
278 rtc::scoped_refptr<PeerConnectionInterface> pc( | 273 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection( |
279 factory_->CreatePeerConnectionWithStore( | 274 config, nullptr, std::move(port_allocator_), std::move(cert_generator), |
280 config, nullptr, std::move(port_allocator_), | 275 &observer_)); |
281 std::move(dtls_identity_store), &observer_)); | |
282 ASSERT_TRUE(pc.get() != NULL); | 276 ASSERT_TRUE(pc.get() != NULL); |
283 std::vector<cricket::RelayServerConfig> turn_servers; | 277 std::vector<cricket::RelayServerConfig> turn_servers; |
284 cricket::RelayServerConfig turn1("hello.com", kDefaultStunTlsPort, "test", | 278 cricket::RelayServerConfig turn1("hello.com", kDefaultStunTlsPort, "test", |
285 kTurnPassword, cricket::PROTO_TCP, true); | 279 kTurnPassword, cricket::PROTO_TCP, true); |
286 turn_servers.push_back(turn1); | 280 turn_servers.push_back(turn1); |
287 // TURNS with transport param should be default to tcp. | 281 // TURNS with transport param should be default to tcp. |
288 cricket::RelayServerConfig turn2("hello.com", 443, "test_no_transport", | 282 cricket::RelayServerConfig turn2("hello.com", 443, "test_no_transport", |
289 kTurnPassword, cricket::PROTO_TCP, true); | 283 kTurnPassword, cricket::PROTO_TCP, true); |
290 turn_servers.push_back(turn2); | 284 turn_servers.push_back(turn2); |
291 cricket::RelayServerConfig turn3("hello.com", kDefaultStunTlsPort, | 285 cricket::RelayServerConfig turn3("hello.com", kDefaultStunTlsPort, |
(...skipping 10 matching lines...) Expand all Loading... |
302 config.servers.push_back(ice_server); | 296 config.servers.push_back(ice_server); |
303 ice_server.uri = kStunIceServerWithIPv4AddressWithoutPort; | 297 ice_server.uri = kStunIceServerWithIPv4AddressWithoutPort; |
304 config.servers.push_back(ice_server); | 298 config.servers.push_back(ice_server); |
305 ice_server.uri = kStunIceServerWithIPv6Address; | 299 ice_server.uri = kStunIceServerWithIPv6Address; |
306 config.servers.push_back(ice_server); | 300 config.servers.push_back(ice_server); |
307 ice_server.uri = kStunIceServerWithIPv6AddressWithoutPort; | 301 ice_server.uri = kStunIceServerWithIPv6AddressWithoutPort; |
308 config.servers.push_back(ice_server); | 302 config.servers.push_back(ice_server); |
309 ice_server.uri = kTurnIceServerWithIPv6Address; | 303 ice_server.uri = kTurnIceServerWithIPv6Address; |
310 ice_server.password = kTurnPassword; | 304 ice_server.password = kTurnPassword; |
311 config.servers.push_back(ice_server); | 305 config.servers.push_back(ice_server); |
312 std::unique_ptr<DtlsIdentityStoreInterface> dtls_identity_store( | 306 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator( |
313 new FakeDtlsIdentityStore()); | 307 new FakeRTCCertificateGenerator()); |
314 rtc::scoped_refptr<PeerConnectionInterface> pc( | 308 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection( |
315 factory_->CreatePeerConnectionWithStore( | 309 config, nullptr, std::move(port_allocator_), std::move(cert_generator), |
316 config, nullptr, std::move(port_allocator_), | 310 &observer_)); |
317 std::move(dtls_identity_store), &observer_)); | |
318 ASSERT_TRUE(pc.get() != NULL); | 311 ASSERT_TRUE(pc.get() != NULL); |
319 cricket::ServerAddresses stun_servers; | 312 cricket::ServerAddresses stun_servers; |
320 rtc::SocketAddress stun1("1.2.3.4", 1234); | 313 rtc::SocketAddress stun1("1.2.3.4", 1234); |
321 stun_servers.insert(stun1); | 314 stun_servers.insert(stun1); |
322 rtc::SocketAddress stun2("1.2.3.4", 3478); | 315 rtc::SocketAddress stun2("1.2.3.4", 3478); |
323 stun_servers.insert(stun2); // Default port | 316 stun_servers.insert(stun2); // Default port |
324 rtc::SocketAddress stun3("2401:fa00:4::", 1234); | 317 rtc::SocketAddress stun3("2401:fa00:4::", 1234); |
325 stun_servers.insert(stun3); | 318 stun_servers.insert(stun3); |
326 rtc::SocketAddress stun4("2401:fa00:4::", 3478); | 319 rtc::SocketAddress stun4("2401:fa00:4::", 3478); |
327 stun_servers.insert(stun4); // Default port | 320 stun_servers.insert(stun4); // Default port |
(...skipping 27 matching lines...) Expand all Loading... |
355 track->set_enabled(false); | 348 track->set_enabled(false); |
356 EXPECT_TRUE(capturer->CaptureFrame()); | 349 EXPECT_TRUE(capturer->CaptureFrame()); |
357 EXPECT_EQ(2, local_renderer.num_rendered_frames()); | 350 EXPECT_EQ(2, local_renderer.num_rendered_frames()); |
358 EXPECT_TRUE(local_renderer.black_frame()); | 351 EXPECT_TRUE(local_renderer.black_frame()); |
359 | 352 |
360 track->set_enabled(true); | 353 track->set_enabled(true); |
361 EXPECT_TRUE(capturer->CaptureFrame()); | 354 EXPECT_TRUE(capturer->CaptureFrame()); |
362 EXPECT_EQ(3, local_renderer.num_rendered_frames()); | 355 EXPECT_EQ(3, local_renderer.num_rendered_frames()); |
363 EXPECT_FALSE(local_renderer.black_frame()); | 356 EXPECT_FALSE(local_renderer.black_frame()); |
364 } | 357 } |
OLD | NEW |