blob: fde5260e42a16f9a50f9a6f18c3c04af26ccdf6b [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
kwibergd1fe2812016-04-27 06:47:29 -070011#include <memory>
henrike@webrtc.org28e20752013-07-10 00:45:36 +000012#include <string>
kwiberg0eb15ed2015-12-17 03:04:15 -080013#include <utility>
henrike@webrtc.org28e20752013-07-10 00:45:36 +000014
Henrik Kjellander15583c12016-02-10 10:53:12 +010015#include "webrtc/api/mediastreaminterface.h"
16#include "webrtc/api/peerconnectionfactory.h"
phoglund37ebcf02016-01-08 05:04:57 -080017#ifdef WEBRTC_ANDROID
Henrik Kjellander15583c12016-02-10 10:53:12 +010018#include "webrtc/api/test/androidtestinitializer.h"
phoglund37ebcf02016-01-08 05:04:57 -080019#endif
Henrik Kjellander15583c12016-02-10 10:53:12 +010020#include "webrtc/api/test/fakedtlsidentitystore.h"
21#include "webrtc/api/test/fakevideotrackrenderer.h"
buildbot@webrtc.orga09a9992014-08-13 17:26:08 +000022#include "webrtc/base/gunit.h"
buildbot@webrtc.orga09a9992014-08-13 17:26:08 +000023#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 Brandstettera1c30352016-05-13 08:15:11 -070027#include "webrtc/p2p/base/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:
Henrik Kjellander3fe372d2016-05-12 08:10:52 +020067 virtual ~NullPeerConnectionObserver() = default;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000068 virtual void OnMessage(const std::string& msg) {}
69 virtual void OnSignalingMessage(const std::string& msg) {}
70 virtual void OnSignalingChange(
71 PeerConnectionInterface::SignalingState new_state) {}
Taylor Brandstetter98cde262016-05-31 13:02:21 -070072 virtual void OnAddStream(rtc::scoped_refptr<MediaStreamInterface> stream) {}
73 virtual void OnRemoveStream(rtc::scoped_refptr<MediaStreamInterface> stream) {
74 }
75 virtual void OnDataChannel(
76 rtc::scoped_refptr<DataChannelInterface> data_channel) {}
henrike@webrtc.org28e20752013-07-10 00:45:36 +000077 virtual void OnRenegotiationNeeded() {}
78 virtual void OnIceConnectionChange(
79 PeerConnectionInterface::IceConnectionState new_state) {}
80 virtual void OnIceGatheringChange(
81 PeerConnectionInterface::IceGatheringState new_state) {}
82 virtual void OnIceCandidate(const webrtc::IceCandidateInterface* candidate) {}
83};
84
85} // namespace
86
87class PeerConnectionFactoryTest : public testing::Test {
88 void SetUp() {
phoglund37ebcf02016-01-08 05:04:57 -080089#ifdef WEBRTC_ANDROID
90 webrtc::InitializeAndroidObjects();
91#endif
danilchape9021a32016-05-17 01:52:02 -070092 factory_ = webrtc::CreatePeerConnectionFactory(
93 rtc::Thread::Current(), rtc::Thread::Current(), rtc::Thread::Current(),
94 nullptr, nullptr, nullptr);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000095
96 ASSERT_TRUE(factory_.get() != NULL);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -080097 port_allocator_.reset(
98 new cricket::FakePortAllocator(rtc::Thread::Current(), nullptr));
99 raw_port_allocator_ = port_allocator_.get();
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000100 }
101
102 protected:
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800103 void VerifyStunServers(cricket::ServerAddresses stun_servers) {
104 EXPECT_EQ(stun_servers, raw_port_allocator_->stun_servers());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000105 }
106
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800107 void VerifyTurnServers(std::vector<cricket::RelayServerConfig> turn_servers) {
108 EXPECT_EQ(turn_servers.size(), raw_port_allocator_->turn_servers().size());
109 for (size_t i = 0; i < turn_servers.size(); ++i) {
110 ASSERT_EQ(1u, turn_servers[i].ports.size());
111 EXPECT_EQ(1u, raw_port_allocator_->turn_servers()[i].ports.size());
112 EXPECT_EQ(
113 turn_servers[i].ports[0].address.ToString(),
114 raw_port_allocator_->turn_servers()[i].ports[0].address.ToString());
115 EXPECT_EQ(turn_servers[i].ports[0].proto,
116 raw_port_allocator_->turn_servers()[i].ports[0].proto);
117 EXPECT_EQ(turn_servers[i].credentials.username,
118 raw_port_allocator_->turn_servers()[i].credentials.username);
119 EXPECT_EQ(turn_servers[i].credentials.password,
120 raw_port_allocator_->turn_servers()[i].credentials.password);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000121 }
122 }
123
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000124 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000125 NullPeerConnectionObserver observer_;
kwibergd1fe2812016-04-27 06:47:29 -0700126 std::unique_ptr<cricket::FakePortAllocator> port_allocator_;
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800127 // Since the PC owns the port allocator after it's been initialized,
128 // this should only be used when known to be safe.
129 cricket::FakePortAllocator* raw_port_allocator_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000130};
131
132// Verify creation of PeerConnection using internal ADM, video factory and
133// internal libjingle threads.
134TEST(PeerConnectionFactoryTestInternal, CreatePCUsingInternalModules) {
phoglund37ebcf02016-01-08 05:04:57 -0800135#ifdef WEBRTC_ANDROID
136 webrtc::InitializeAndroidObjects();
137#endif
138
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000139 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory(
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000140 webrtc::CreatePeerConnectionFactory());
141
142 NullPeerConnectionObserver observer;
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800143 webrtc::PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000144
kwibergd1fe2812016-04-27 06:47:29 -0700145 std::unique_ptr<FakeDtlsIdentityStore> dtls_identity_store(
Henrik Boström5e56c592015-08-11 10:33:13 +0200146 new FakeDtlsIdentityStore());
Henrik Boströmd03c23b2016-06-01 11:44:18 +0200147 rtc::scoped_refptr<PeerConnectionInterface> pc(
148 factory->CreatePeerConnectionWithStore(
149 config, nullptr, nullptr, std::move(dtls_identity_store), &observer));
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000150
Henrik Boström5e56c592015-08-11 10:33:13 +0200151 EXPECT_TRUE(pc.get() != nullptr);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000152}
153
154// This test verifies creation of PeerConnection with valid STUN and TURN
155// configuration. Also verifies the URL's parsed correctly as expected.
156TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServers) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000157 PeerConnectionInterface::RTCConfiguration config;
158 webrtc::PeerConnectionInterface::IceServer ice_server;
159 ice_server.uri = kStunIceServer;
160 config.servers.push_back(ice_server);
161 ice_server.uri = kTurnIceServer;
162 ice_server.password = kTurnPassword;
163 config.servers.push_back(ice_server);
164 ice_server.uri = kTurnIceServerWithTransport;
165 ice_server.password = kTurnPassword;
166 config.servers.push_back(ice_server);
kwibergd1fe2812016-04-27 06:47:29 -0700167 std::unique_ptr<DtlsIdentityStoreInterface> dtls_identity_store(
Henrik Boström5e56c592015-08-11 10:33:13 +0200168 new FakeDtlsIdentityStore());
Henrik Boströmd03c23b2016-06-01 11:44:18 +0200169 rtc::scoped_refptr<PeerConnectionInterface> pc(
170 factory_->CreatePeerConnectionWithStore(
171 config, nullptr, std::move(port_allocator_),
172 std::move(dtls_identity_store), &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800173 ASSERT_TRUE(pc.get() != NULL);
174 cricket::ServerAddresses stun_servers;
175 rtc::SocketAddress stun1("stun.l.google.com", 19302);
176 stun_servers.insert(stun1);
177 VerifyStunServers(stun_servers);
178 std::vector<cricket::RelayServerConfig> turn_servers;
179 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com",
180 kTurnPassword, cricket::PROTO_UDP, false);
181 turn_servers.push_back(turn1);
182 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test",
183 kTurnPassword, cricket::PROTO_TCP, false);
184 turn_servers.push_back(turn2);
185 VerifyTurnServers(turn_servers);
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000186}
187
188// This test verifies creation of PeerConnection with valid STUN and TURN
Joachim Bauch7c4e7452015-05-28 23:06:30 +0200189// configuration. Also verifies the list of URL's parsed correctly as expected.
190TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServersUrls) {
191 PeerConnectionInterface::RTCConfiguration config;
192 webrtc::PeerConnectionInterface::IceServer ice_server;
193 ice_server.urls.push_back(kStunIceServer);
194 ice_server.urls.push_back(kTurnIceServer);
195 ice_server.urls.push_back(kTurnIceServerWithTransport);
196 ice_server.password = kTurnPassword;
197 config.servers.push_back(ice_server);
kwibergd1fe2812016-04-27 06:47:29 -0700198 std::unique_ptr<DtlsIdentityStoreInterface> dtls_identity_store(
Henrik Boström5e56c592015-08-11 10:33:13 +0200199 new FakeDtlsIdentityStore());
Henrik Boströmd03c23b2016-06-01 11:44:18 +0200200 rtc::scoped_refptr<PeerConnectionInterface> pc(
201 factory_->CreatePeerConnectionWithStore(
202 config, nullptr, std::move(port_allocator_),
203 std::move(dtls_identity_store), &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800204 ASSERT_TRUE(pc.get() != NULL);
205 cricket::ServerAddresses stun_servers;
206 rtc::SocketAddress stun1("stun.l.google.com", 19302);
207 stun_servers.insert(stun1);
208 VerifyStunServers(stun_servers);
209 std::vector<cricket::RelayServerConfig> turn_servers;
210 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com",
211 kTurnPassword, cricket::PROTO_UDP, false);
212 turn_servers.push_back(turn1);
213 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test",
214 kTurnPassword, cricket::PROTO_TCP, false);
215 turn_servers.push_back(turn2);
216 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000217}
218
219TEST_F(PeerConnectionFactoryTest, CreatePCUsingNoUsernameInUri) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000220 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000221 webrtc::PeerConnectionInterface::IceServer ice_server;
222 ice_server.uri = kStunIceServer;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000223 config.servers.push_back(ice_server);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000224 ice_server.uri = kTurnIceServerWithNoUsernameInUri;
225 ice_server.username = kTurnUsername;
226 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000227 config.servers.push_back(ice_server);
kwibergd1fe2812016-04-27 06:47:29 -0700228 std::unique_ptr<DtlsIdentityStoreInterface> dtls_identity_store(
Henrik Boström5e56c592015-08-11 10:33:13 +0200229 new FakeDtlsIdentityStore());
Henrik Boströmd03c23b2016-06-01 11:44:18 +0200230 rtc::scoped_refptr<PeerConnectionInterface> pc(
231 factory_->CreatePeerConnectionWithStore(
232 config, nullptr, std::move(port_allocator_),
233 std::move(dtls_identity_store), &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800234 ASSERT_TRUE(pc.get() != NULL);
235 std::vector<cricket::RelayServerConfig> turn_servers;
236 cricket::RelayServerConfig turn("test.com", 1234, kTurnUsername,
237 kTurnPassword, cricket::PROTO_UDP, false);
238 turn_servers.push_back(turn);
239 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000240}
241
242// This test verifies the PeerConnection created properly with TURN url which
243// has transport parameter in it.
244TEST_F(PeerConnectionFactoryTest, CreatePCUsingTurnUrlWithTransportParam) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000245 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000246 webrtc::PeerConnectionInterface::IceServer ice_server;
247 ice_server.uri = kTurnIceServerWithTransport;
248 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000249 config.servers.push_back(ice_server);
kwibergd1fe2812016-04-27 06:47:29 -0700250 std::unique_ptr<DtlsIdentityStoreInterface> dtls_identity_store(
Henrik Boström5e56c592015-08-11 10:33:13 +0200251 new FakeDtlsIdentityStore());
Henrik Boströmd03c23b2016-06-01 11:44:18 +0200252 rtc::scoped_refptr<PeerConnectionInterface> pc(
253 factory_->CreatePeerConnectionWithStore(
254 config, nullptr, std::move(port_allocator_),
255 std::move(dtls_identity_store), &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800256 ASSERT_TRUE(pc.get() != NULL);
257 std::vector<cricket::RelayServerConfig> turn_servers;
258 cricket::RelayServerConfig turn("hello.com", kDefaultStunPort, "test",
259 kTurnPassword, cricket::PROTO_TCP, false);
260 turn_servers.push_back(turn);
261 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000262}
263
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000264TEST_F(PeerConnectionFactoryTest, CreatePCUsingSecureTurnUrl) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000265 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000266 webrtc::PeerConnectionInterface::IceServer ice_server;
267 ice_server.uri = kSecureTurnIceServer;
268 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000269 config.servers.push_back(ice_server);
wu@webrtc.org78187522013-10-07 23:32:02 +0000270 ice_server.uri = kSecureTurnIceServerWithoutTransportParam;
271 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000272 config.servers.push_back(ice_server);
sergeyu@chromium.org5bc25c42013-12-05 00:24:06 +0000273 ice_server.uri = kSecureTurnIceServerWithoutTransportAndPortParam;
274 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000275 config.servers.push_back(ice_server);
kwibergd1fe2812016-04-27 06:47:29 -0700276 std::unique_ptr<DtlsIdentityStoreInterface> dtls_identity_store(
Henrik Boström5e56c592015-08-11 10:33:13 +0200277 new FakeDtlsIdentityStore());
Henrik Boströmd03c23b2016-06-01 11:44:18 +0200278 rtc::scoped_refptr<PeerConnectionInterface> pc(
279 factory_->CreatePeerConnectionWithStore(
280 config, nullptr, std::move(port_allocator_),
281 std::move(dtls_identity_store), &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800282 ASSERT_TRUE(pc.get() != NULL);
283 std::vector<cricket::RelayServerConfig> turn_servers;
284 cricket::RelayServerConfig turn1("hello.com", kDefaultStunTlsPort, "test",
285 kTurnPassword, cricket::PROTO_TCP, true);
286 turn_servers.push_back(turn1);
wu@webrtc.org78187522013-10-07 23:32:02 +0000287 // TURNS with transport param should be default to tcp.
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800288 cricket::RelayServerConfig turn2("hello.com", 443, "test_no_transport",
289 kTurnPassword, cricket::PROTO_TCP, true);
290 turn_servers.push_back(turn2);
291 cricket::RelayServerConfig turn3("hello.com", kDefaultStunTlsPort,
292 "test_no_transport", kTurnPassword,
293 cricket::PROTO_TCP, true);
294 turn_servers.push_back(turn3);
295 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000296}
297
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000298TEST_F(PeerConnectionFactoryTest, CreatePCUsingIPLiteralAddress) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000299 PeerConnectionInterface::RTCConfiguration config;
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000300 webrtc::PeerConnectionInterface::IceServer ice_server;
301 ice_server.uri = kStunIceServerWithIPv4Address;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000302 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000303 ice_server.uri = kStunIceServerWithIPv4AddressWithoutPort;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000304 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000305 ice_server.uri = kStunIceServerWithIPv6Address;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000306 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000307 ice_server.uri = kStunIceServerWithIPv6AddressWithoutPort;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000308 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000309 ice_server.uri = kTurnIceServerWithIPv6Address;
310 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000311 config.servers.push_back(ice_server);
kwibergd1fe2812016-04-27 06:47:29 -0700312 std::unique_ptr<DtlsIdentityStoreInterface> dtls_identity_store(
Henrik Boström5e56c592015-08-11 10:33:13 +0200313 new FakeDtlsIdentityStore());
Henrik Boströmd03c23b2016-06-01 11:44:18 +0200314 rtc::scoped_refptr<PeerConnectionInterface> pc(
315 factory_->CreatePeerConnectionWithStore(
316 config, nullptr, std::move(port_allocator_),
317 std::move(dtls_identity_store), &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800318 ASSERT_TRUE(pc.get() != NULL);
319 cricket::ServerAddresses stun_servers;
320 rtc::SocketAddress stun1("1.2.3.4", 1234);
321 stun_servers.insert(stun1);
322 rtc::SocketAddress stun2("1.2.3.4", 3478);
323 stun_servers.insert(stun2); // Default port
324 rtc::SocketAddress stun3("2401:fa00:4::", 1234);
325 stun_servers.insert(stun3);
326 rtc::SocketAddress stun4("2401:fa00:4::", 3478);
327 stun_servers.insert(stun4); // Default port
328 VerifyStunServers(stun_servers);
buildbot@webrtc.orgf875f152014-04-14 16:06:21 +0000329
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800330 std::vector<cricket::RelayServerConfig> turn_servers;
331 cricket::RelayServerConfig turn1("2401:fa00:4::", 1234, "test", kTurnPassword,
332 cricket::PROTO_UDP, false);
333 turn_servers.push_back(turn1);
334 VerifyTurnServers(turn_servers);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000335}
336
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000337// This test verifies the captured stream is rendered locally using a
338// local video track.
339TEST_F(PeerConnectionFactoryTest, LocalRendering) {
340 cricket::FakeVideoCapturer* capturer = new cricket::FakeVideoCapturer();
341 // The source take ownership of |capturer|.
perkja3ede6c2016-03-08 01:27:48 +0100342 rtc::scoped_refptr<VideoTrackSourceInterface> source(
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000343 factory_->CreateVideoSource(capturer, NULL));
344 ASSERT_TRUE(source.get() != NULL);
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000345 rtc::scoped_refptr<VideoTrackInterface> track(
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000346 factory_->CreateVideoTrack("testlabel", source));
347 ASSERT_TRUE(track.get() != NULL);
348 FakeVideoTrackRenderer local_renderer(track);
349
350 EXPECT_EQ(0, local_renderer.num_rendered_frames());
351 EXPECT_TRUE(capturer->CaptureFrame());
352 EXPECT_EQ(1, local_renderer.num_rendered_frames());
nisse81354f52016-01-19 00:23:24 -0800353 EXPECT_FALSE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000354
355 track->set_enabled(false);
356 EXPECT_TRUE(capturer->CaptureFrame());
nisse81354f52016-01-19 00:23:24 -0800357 EXPECT_EQ(2, local_renderer.num_rendered_frames());
358 EXPECT_TRUE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000359
360 track->set_enabled(true);
361 EXPECT_TRUE(capturer->CaptureFrame());
nisse81354f52016-01-19 00:23:24 -0800362 EXPECT_EQ(3, local_renderer.num_rendered_frames());
363 EXPECT_FALSE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000364}