blob: 254e4e0a02524d12ae81862509903497a8d4c219 [file] [log] [blame]
henrike@webrtc.org28e20752013-07-10 00:45:36 +00001/*
kjellanderb24317b2016-02-10 07:54:43 -08002 * Copyright 2012 The WebRTC project authors. All Rights Reserved.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00003 *
kjellanderb24317b2016-02-10 07:54:43 -08004 * 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.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00009 */
10
11#include <string>
kwiberg0eb15ed2015-12-17 03:04:15 -080012#include <utility>
henrike@webrtc.org28e20752013-07-10 00:45:36 +000013
Henrik Kjellander15583c12016-02-10 10:53:12 +010014#include "webrtc/api/mediastreaminterface.h"
15#include "webrtc/api/peerconnectionfactory.h"
phoglund37ebcf02016-01-08 05:04:57 -080016#ifdef WEBRTC_ANDROID
Henrik Kjellander15583c12016-02-10 10:53:12 +010017#include "webrtc/api/test/androidtestinitializer.h"
phoglund37ebcf02016-01-08 05:04:57 -080018#endif
Henrik Kjellander15583c12016-02-10 10:53:12 +010019#include "webrtc/api/test/fakedtlsidentitystore.h"
20#include "webrtc/api/test/fakevideotrackrenderer.h"
buildbot@webrtc.orga09a9992014-08-13 17:26:08 +000021#include "webrtc/base/gunit.h"
22#include "webrtc/base/scoped_ptr.h"
23#include "webrtc/base/thread.h"
kjellandera96e2d72016-02-04 23:52:28 -080024#include "webrtc/media/base/fakevideocapturer.h"
kjellander@webrtc.org5ad12972016-02-12 06:39:40 +010025#include "webrtc/media/engine/webrtccommon.h"
26#include "webrtc/media/engine/webrtcvoe.h"
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -080027#include "webrtc/p2p/client/fakeportallocator.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000028
perkj@webrtc.orgc2dd5ee2014-11-04 11:31:29 +000029using webrtc::DataChannelInterface;
Henrik Boström5e56c592015-08-11 10:33:13 +020030using webrtc::DtlsIdentityStoreInterface;
31using webrtc::FakeVideoTrackRenderer;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000032using webrtc::MediaStreamInterface;
33using webrtc::PeerConnectionFactoryInterface;
34using webrtc::PeerConnectionInterface;
35using webrtc::PeerConnectionObserver;
perkja3ede6c2016-03-08 01:27:48 +010036using webrtc::VideoTrackSourceInterface;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000037using webrtc::VideoTrackInterface;
38
39namespace {
40
henrike@webrtc.org28e20752013-07-10 00:45:36 +000041static const char kStunIceServer[] = "stun:stun.l.google.com:19302";
42static const char kTurnIceServer[] = "turn:test%40hello.com@test.com:1234";
43static const char kTurnIceServerWithTransport[] =
44 "turn:test@hello.com?transport=tcp";
45static const char kSecureTurnIceServer[] =
46 "turns:test@hello.com?transport=tcp";
wu@webrtc.org78187522013-10-07 23:32:02 +000047static const char kSecureTurnIceServerWithoutTransportParam[] =
sergeyu@chromium.org5bc25c42013-12-05 00:24:06 +000048 "turns:test_no_transport@hello.com:443";
49static const char kSecureTurnIceServerWithoutTransportAndPortParam[] =
wu@webrtc.org78187522013-10-07 23:32:02 +000050 "turns:test_no_transport@hello.com";
henrike@webrtc.org28e20752013-07-10 00:45:36 +000051static const char kTurnIceServerWithNoUsernameInUri[] =
52 "turn:test.com:1234";
53static const char kTurnPassword[] = "turnpassword";
wu@webrtc.org91053e72013-08-10 07:18:04 +000054static const int kDefaultStunPort = 3478;
55static const int kDefaultStunTlsPort = 5349;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000056static const char kTurnUsername[] = "test";
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +000057static const char kStunIceServerWithIPv4Address[] = "stun:1.2.3.4:1234";
58static const char kStunIceServerWithIPv4AddressWithoutPort[] = "stun:1.2.3.4";
59static const char kStunIceServerWithIPv6Address[] = "stun:[2401:fa00:4::]:1234";
60static const char kStunIceServerWithIPv6AddressWithoutPort[] =
61 "stun:[2401:fa00:4::]";
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +000062static const char kTurnIceServerWithIPv6Address[] =
63 "turn:test@[2401:fa00:4::]:1234";
henrike@webrtc.org28e20752013-07-10 00:45:36 +000064
65class NullPeerConnectionObserver : public PeerConnectionObserver {
66 public:
henrike@webrtc.org28e20752013-07-10 00:45:36 +000067 virtual void OnMessage(const std::string& msg) {}
68 virtual void OnSignalingMessage(const std::string& msg) {}
69 virtual void OnSignalingChange(
70 PeerConnectionInterface::SignalingState new_state) {}
71 virtual void OnAddStream(MediaStreamInterface* stream) {}
72 virtual void OnRemoveStream(MediaStreamInterface* stream) {}
perkj@webrtc.orgc2dd5ee2014-11-04 11:31:29 +000073 virtual void OnDataChannel(DataChannelInterface* data_channel) {}
henrike@webrtc.org28e20752013-07-10 00:45:36 +000074 virtual void OnRenegotiationNeeded() {}
75 virtual void OnIceConnectionChange(
76 PeerConnectionInterface::IceConnectionState new_state) {}
77 virtual void OnIceGatheringChange(
78 PeerConnectionInterface::IceGatheringState new_state) {}
79 virtual void OnIceCandidate(const webrtc::IceCandidateInterface* candidate) {}
80};
81
82} // namespace
83
84class PeerConnectionFactoryTest : public testing::Test {
85 void SetUp() {
phoglund37ebcf02016-01-08 05:04:57 -080086#ifdef WEBRTC_ANDROID
87 webrtc::InitializeAndroidObjects();
88#endif
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +000089 factory_ = webrtc::CreatePeerConnectionFactory(rtc::Thread::Current(),
90 rtc::Thread::Current(),
henrike@webrtc.org28e20752013-07-10 00:45:36 +000091 NULL,
92 NULL,
93 NULL);
94
95 ASSERT_TRUE(factory_.get() != NULL);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -080096 port_allocator_.reset(
97 new cricket::FakePortAllocator(rtc::Thread::Current(), nullptr));
98 raw_port_allocator_ = port_allocator_.get();
henrike@webrtc.org28e20752013-07-10 00:45:36 +000099 }
100
101 protected:
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800102 void VerifyStunServers(cricket::ServerAddresses stun_servers) {
103 EXPECT_EQ(stun_servers, raw_port_allocator_->stun_servers());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000104 }
105
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800106 void VerifyTurnServers(std::vector<cricket::RelayServerConfig> turn_servers) {
107 EXPECT_EQ(turn_servers.size(), raw_port_allocator_->turn_servers().size());
108 for (size_t i = 0; i < turn_servers.size(); ++i) {
109 ASSERT_EQ(1u, turn_servers[i].ports.size());
110 EXPECT_EQ(1u, raw_port_allocator_->turn_servers()[i].ports.size());
111 EXPECT_EQ(
112 turn_servers[i].ports[0].address.ToString(),
113 raw_port_allocator_->turn_servers()[i].ports[0].address.ToString());
114 EXPECT_EQ(turn_servers[i].ports[0].proto,
115 raw_port_allocator_->turn_servers()[i].ports[0].proto);
116 EXPECT_EQ(turn_servers[i].credentials.username,
117 raw_port_allocator_->turn_servers()[i].credentials.username);
118 EXPECT_EQ(turn_servers[i].credentials.password,
119 raw_port_allocator_->turn_servers()[i].credentials.password);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000120 }
121 }
122
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000123 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000124 NullPeerConnectionObserver observer_;
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800125 rtc::scoped_ptr<cricket::FakePortAllocator> port_allocator_;
126 // Since the PC owns the port allocator after it's been initialized,
127 // this should only be used when known to be safe.
128 cricket::FakePortAllocator* raw_port_allocator_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000129};
130
131// Verify creation of PeerConnection using internal ADM, video factory and
132// internal libjingle threads.
133TEST(PeerConnectionFactoryTestInternal, CreatePCUsingInternalModules) {
phoglund37ebcf02016-01-08 05:04:57 -0800134#ifdef WEBRTC_ANDROID
135 webrtc::InitializeAndroidObjects();
136#endif
137
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000138 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory(
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000139 webrtc::CreatePeerConnectionFactory());
140
141 NullPeerConnectionObserver observer;
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800142 webrtc::PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000143
Henrik Boström5e56c592015-08-11 10:33:13 +0200144 rtc::scoped_ptr<FakeDtlsIdentityStore> dtls_identity_store(
145 new FakeDtlsIdentityStore());
kwiberg0eb15ed2015-12-17 03:04:15 -0800146 rtc::scoped_refptr<PeerConnectionInterface> pc(factory->CreatePeerConnection(
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800147 config, nullptr, nullptr, std::move(dtls_identity_store), &observer));
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000148
Henrik Boström5e56c592015-08-11 10:33:13 +0200149 EXPECT_TRUE(pc.get() != nullptr);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000150}
151
152// This test verifies creation of PeerConnection with valid STUN and TURN
153// configuration. Also verifies the URL's parsed correctly as expected.
154TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServers) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000155 PeerConnectionInterface::RTCConfiguration config;
156 webrtc::PeerConnectionInterface::IceServer ice_server;
157 ice_server.uri = kStunIceServer;
158 config.servers.push_back(ice_server);
159 ice_server.uri = kTurnIceServer;
160 ice_server.password = kTurnPassword;
161 config.servers.push_back(ice_server);
162 ice_server.uri = kTurnIceServerWithTransport;
163 ice_server.password = kTurnPassword;
164 config.servers.push_back(ice_server);
Henrik Boström5e56c592015-08-11 10:33:13 +0200165 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store(
166 new FakeDtlsIdentityStore());
kwiberg0eb15ed2015-12-17 03:04:15 -0800167 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800168 config, nullptr, std::move(port_allocator_),
169 std::move(dtls_identity_store), &observer_));
170 ASSERT_TRUE(pc.get() != NULL);
171 cricket::ServerAddresses stun_servers;
172 rtc::SocketAddress stun1("stun.l.google.com", 19302);
173 stun_servers.insert(stun1);
174 VerifyStunServers(stun_servers);
175 std::vector<cricket::RelayServerConfig> turn_servers;
176 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com",
177 kTurnPassword, cricket::PROTO_UDP, false);
178 turn_servers.push_back(turn1);
179 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test",
180 kTurnPassword, cricket::PROTO_TCP, false);
181 turn_servers.push_back(turn2);
182 VerifyTurnServers(turn_servers);
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000183}
184
185// This test verifies creation of PeerConnection with valid STUN and TURN
Joachim Bauch7c4e7452015-05-28 23:06:30 +0200186// configuration. Also verifies the list of URL's parsed correctly as expected.
187TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServersUrls) {
188 PeerConnectionInterface::RTCConfiguration config;
189 webrtc::PeerConnectionInterface::IceServer ice_server;
190 ice_server.urls.push_back(kStunIceServer);
191 ice_server.urls.push_back(kTurnIceServer);
192 ice_server.urls.push_back(kTurnIceServerWithTransport);
193 ice_server.password = kTurnPassword;
194 config.servers.push_back(ice_server);
Henrik Boström5e56c592015-08-11 10:33:13 +0200195 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store(
196 new FakeDtlsIdentityStore());
kwiberg0eb15ed2015-12-17 03:04:15 -0800197 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800198 config, nullptr, std::move(port_allocator_),
kwiberg0eb15ed2015-12-17 03:04:15 -0800199 std::move(dtls_identity_store), &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800200 ASSERT_TRUE(pc.get() != NULL);
201 cricket::ServerAddresses stun_servers;
202 rtc::SocketAddress stun1("stun.l.google.com", 19302);
203 stun_servers.insert(stun1);
204 VerifyStunServers(stun_servers);
205 std::vector<cricket::RelayServerConfig> turn_servers;
206 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com",
207 kTurnPassword, cricket::PROTO_UDP, false);
208 turn_servers.push_back(turn1);
209 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test",
210 kTurnPassword, cricket::PROTO_TCP, false);
211 turn_servers.push_back(turn2);
212 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000213}
214
215TEST_F(PeerConnectionFactoryTest, CreatePCUsingNoUsernameInUri) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000216 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000217 webrtc::PeerConnectionInterface::IceServer ice_server;
218 ice_server.uri = kStunIceServer;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000219 config.servers.push_back(ice_server);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000220 ice_server.uri = kTurnIceServerWithNoUsernameInUri;
221 ice_server.username = kTurnUsername;
222 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000223 config.servers.push_back(ice_server);
Henrik Boström5e56c592015-08-11 10:33:13 +0200224 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store(
225 new FakeDtlsIdentityStore());
kwiberg0eb15ed2015-12-17 03:04:15 -0800226 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800227 config, nullptr, std::move(port_allocator_),
228 std::move(dtls_identity_store), &observer_));
229 ASSERT_TRUE(pc.get() != NULL);
230 std::vector<cricket::RelayServerConfig> turn_servers;
231 cricket::RelayServerConfig turn("test.com", 1234, kTurnUsername,
232 kTurnPassword, cricket::PROTO_UDP, false);
233 turn_servers.push_back(turn);
234 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000235}
236
237// This test verifies the PeerConnection created properly with TURN url which
238// has transport parameter in it.
239TEST_F(PeerConnectionFactoryTest, CreatePCUsingTurnUrlWithTransportParam) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000240 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000241 webrtc::PeerConnectionInterface::IceServer ice_server;
242 ice_server.uri = kTurnIceServerWithTransport;
243 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000244 config.servers.push_back(ice_server);
Henrik Boström5e56c592015-08-11 10:33:13 +0200245 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store(
246 new FakeDtlsIdentityStore());
kwiberg0eb15ed2015-12-17 03:04:15 -0800247 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800248 config, nullptr, std::move(port_allocator_),
249 std::move(dtls_identity_store), &observer_));
250 ASSERT_TRUE(pc.get() != NULL);
251 std::vector<cricket::RelayServerConfig> turn_servers;
252 cricket::RelayServerConfig turn("hello.com", kDefaultStunPort, "test",
253 kTurnPassword, cricket::PROTO_TCP, false);
254 turn_servers.push_back(turn);
255 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000256}
257
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000258TEST_F(PeerConnectionFactoryTest, CreatePCUsingSecureTurnUrl) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000259 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000260 webrtc::PeerConnectionInterface::IceServer ice_server;
261 ice_server.uri = kSecureTurnIceServer;
262 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000263 config.servers.push_back(ice_server);
wu@webrtc.org78187522013-10-07 23:32:02 +0000264 ice_server.uri = kSecureTurnIceServerWithoutTransportParam;
265 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000266 config.servers.push_back(ice_server);
sergeyu@chromium.org5bc25c42013-12-05 00:24:06 +0000267 ice_server.uri = kSecureTurnIceServerWithoutTransportAndPortParam;
268 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000269 config.servers.push_back(ice_server);
Henrik Boström5e56c592015-08-11 10:33:13 +0200270 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store(
271 new FakeDtlsIdentityStore());
kwiberg0eb15ed2015-12-17 03:04:15 -0800272 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800273 config, nullptr, std::move(port_allocator_),
274 std::move(dtls_identity_store), &observer_));
275 ASSERT_TRUE(pc.get() != NULL);
276 std::vector<cricket::RelayServerConfig> turn_servers;
277 cricket::RelayServerConfig turn1("hello.com", kDefaultStunTlsPort, "test",
278 kTurnPassword, cricket::PROTO_TCP, true);
279 turn_servers.push_back(turn1);
wu@webrtc.org78187522013-10-07 23:32:02 +0000280 // TURNS with transport param should be default to tcp.
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800281 cricket::RelayServerConfig turn2("hello.com", 443, "test_no_transport",
282 kTurnPassword, cricket::PROTO_TCP, true);
283 turn_servers.push_back(turn2);
284 cricket::RelayServerConfig turn3("hello.com", kDefaultStunTlsPort,
285 "test_no_transport", kTurnPassword,
286 cricket::PROTO_TCP, true);
287 turn_servers.push_back(turn3);
288 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000289}
290
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000291TEST_F(PeerConnectionFactoryTest, CreatePCUsingIPLiteralAddress) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000292 PeerConnectionInterface::RTCConfiguration config;
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000293 webrtc::PeerConnectionInterface::IceServer ice_server;
294 ice_server.uri = kStunIceServerWithIPv4Address;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000295 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000296 ice_server.uri = kStunIceServerWithIPv4AddressWithoutPort;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000297 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000298 ice_server.uri = kStunIceServerWithIPv6Address;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000299 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000300 ice_server.uri = kStunIceServerWithIPv6AddressWithoutPort;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000301 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000302 ice_server.uri = kTurnIceServerWithIPv6Address;
303 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000304 config.servers.push_back(ice_server);
Henrik Boström5e56c592015-08-11 10:33:13 +0200305 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store(
306 new FakeDtlsIdentityStore());
kwiberg0eb15ed2015-12-17 03:04:15 -0800307 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800308 config, nullptr, std::move(port_allocator_),
309 std::move(dtls_identity_store), &observer_));
310 ASSERT_TRUE(pc.get() != NULL);
311 cricket::ServerAddresses stun_servers;
312 rtc::SocketAddress stun1("1.2.3.4", 1234);
313 stun_servers.insert(stun1);
314 rtc::SocketAddress stun2("1.2.3.4", 3478);
315 stun_servers.insert(stun2); // Default port
316 rtc::SocketAddress stun3("2401:fa00:4::", 1234);
317 stun_servers.insert(stun3);
318 rtc::SocketAddress stun4("2401:fa00:4::", 3478);
319 stun_servers.insert(stun4); // Default port
320 VerifyStunServers(stun_servers);
buildbot@webrtc.orgf875f152014-04-14 16:06:21 +0000321
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800322 std::vector<cricket::RelayServerConfig> turn_servers;
323 cricket::RelayServerConfig turn1("2401:fa00:4::", 1234, "test", kTurnPassword,
324 cricket::PROTO_UDP, false);
325 turn_servers.push_back(turn1);
326 VerifyTurnServers(turn_servers);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000327}
328
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000329// This test verifies the captured stream is rendered locally using a
330// local video track.
331TEST_F(PeerConnectionFactoryTest, LocalRendering) {
332 cricket::FakeVideoCapturer* capturer = new cricket::FakeVideoCapturer();
333 // The source take ownership of |capturer|.
perkja3ede6c2016-03-08 01:27:48 +0100334 rtc::scoped_refptr<VideoTrackSourceInterface> source(
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000335 factory_->CreateVideoSource(capturer, NULL));
336 ASSERT_TRUE(source.get() != NULL);
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000337 rtc::scoped_refptr<VideoTrackInterface> track(
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000338 factory_->CreateVideoTrack("testlabel", source));
339 ASSERT_TRUE(track.get() != NULL);
340 FakeVideoTrackRenderer local_renderer(track);
341
342 EXPECT_EQ(0, local_renderer.num_rendered_frames());
343 EXPECT_TRUE(capturer->CaptureFrame());
344 EXPECT_EQ(1, local_renderer.num_rendered_frames());
nisse81354f52016-01-19 00:23:24 -0800345 EXPECT_FALSE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000346
347 track->set_enabled(false);
348 EXPECT_TRUE(capturer->CaptureFrame());
nisse81354f52016-01-19 00:23:24 -0800349 EXPECT_EQ(2, local_renderer.num_rendered_frames());
350 EXPECT_TRUE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000351
352 track->set_enabled(true);
353 EXPECT_TRUE(capturer->CaptureFrame());
nisse81354f52016-01-19 00:23:24 -0800354 EXPECT_EQ(3, local_renderer.num_rendered_frames());
355 EXPECT_FALSE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000356}