blob: 21659379453b9651bfc1447a1d54eb2e00a4bf09 [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"
21#include "webrtc/api/videosourceinterface.h"
buildbot@webrtc.orga09a9992014-08-13 17:26:08 +000022#include "webrtc/base/gunit.h"
23#include "webrtc/base/scoped_ptr.h"
24#include "webrtc/base/thread.h"
kjellandera96e2d72016-02-04 23:52:28 -080025#include "webrtc/media/base/fakevideocapturer.h"
kjellander@webrtc.org5ad12972016-02-12 06:39:40 +010026#include "webrtc/media/engine/webrtccommon.h"
27#include "webrtc/media/engine/webrtcvoe.h"
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -080028#include "webrtc/p2p/client/fakeportallocator.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000029
perkj@webrtc.orgc2dd5ee2014-11-04 11:31:29 +000030using webrtc::DataChannelInterface;
Henrik Boström5e56c592015-08-11 10:33:13 +020031using webrtc::DtlsIdentityStoreInterface;
32using webrtc::FakeVideoTrackRenderer;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000033using webrtc::MediaStreamInterface;
34using webrtc::PeerConnectionFactoryInterface;
35using webrtc::PeerConnectionInterface;
36using webrtc::PeerConnectionObserver;
perkja3ede6c2016-03-08 01:27:48 +010037using webrtc::VideoTrackSourceInterface;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000038using webrtc::VideoTrackInterface;
39
40namespace {
41
henrike@webrtc.org28e20752013-07-10 00:45:36 +000042static const char kStunIceServer[] = "stun:stun.l.google.com:19302";
43static const char kTurnIceServer[] = "turn:test%40hello.com@test.com:1234";
44static const char kTurnIceServerWithTransport[] =
45 "turn:test@hello.com?transport=tcp";
46static const char kSecureTurnIceServer[] =
47 "turns:test@hello.com?transport=tcp";
wu@webrtc.org78187522013-10-07 23:32:02 +000048static const char kSecureTurnIceServerWithoutTransportParam[] =
sergeyu@chromium.org5bc25c42013-12-05 00:24:06 +000049 "turns:test_no_transport@hello.com:443";
50static const char kSecureTurnIceServerWithoutTransportAndPortParam[] =
wu@webrtc.org78187522013-10-07 23:32:02 +000051 "turns:test_no_transport@hello.com";
henrike@webrtc.org28e20752013-07-10 00:45:36 +000052static const char kTurnIceServerWithNoUsernameInUri[] =
53 "turn:test.com:1234";
54static const char kTurnPassword[] = "turnpassword";
wu@webrtc.org91053e72013-08-10 07:18:04 +000055static const int kDefaultStunPort = 3478;
56static const int kDefaultStunTlsPort = 5349;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000057static const char kTurnUsername[] = "test";
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +000058static const char kStunIceServerWithIPv4Address[] = "stun:1.2.3.4:1234";
59static const char kStunIceServerWithIPv4AddressWithoutPort[] = "stun:1.2.3.4";
60static const char kStunIceServerWithIPv6Address[] = "stun:[2401:fa00:4::]:1234";
61static const char kStunIceServerWithIPv6AddressWithoutPort[] =
62 "stun:[2401:fa00:4::]";
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +000063static const char kTurnIceServerWithIPv6Address[] =
64 "turn:test@[2401:fa00:4::]:1234";
henrike@webrtc.org28e20752013-07-10 00:45:36 +000065
66class NullPeerConnectionObserver : public PeerConnectionObserver {
67 public:
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) {}
72 virtual void OnAddStream(MediaStreamInterface* stream) {}
73 virtual void OnRemoveStream(MediaStreamInterface* stream) {}
perkj@webrtc.orgc2dd5ee2014-11-04 11:31:29 +000074 virtual void OnDataChannel(DataChannelInterface* data_channel) {}
henrike@webrtc.org28e20752013-07-10 00:45:36 +000075 virtual void OnRenegotiationNeeded() {}
76 virtual void OnIceConnectionChange(
77 PeerConnectionInterface::IceConnectionState new_state) {}
78 virtual void OnIceGatheringChange(
79 PeerConnectionInterface::IceGatheringState new_state) {}
80 virtual void OnIceCandidate(const webrtc::IceCandidateInterface* candidate) {}
81};
82
83} // namespace
84
85class PeerConnectionFactoryTest : public testing::Test {
86 void SetUp() {
phoglund37ebcf02016-01-08 05:04:57 -080087#ifdef WEBRTC_ANDROID
88 webrtc::InitializeAndroidObjects();
89#endif
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +000090 factory_ = webrtc::CreatePeerConnectionFactory(rtc::Thread::Current(),
91 rtc::Thread::Current(),
henrike@webrtc.org28e20752013-07-10 00:45:36 +000092 NULL,
93 NULL,
94 NULL);
95
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_;
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800126 rtc::scoped_ptr<cricket::FakePortAllocator> port_allocator_;
127 // 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
Henrik Boström5e56c592015-08-11 10:33:13 +0200145 rtc::scoped_ptr<FakeDtlsIdentityStore> dtls_identity_store(
146 new FakeDtlsIdentityStore());
kwiberg0eb15ed2015-12-17 03:04:15 -0800147 rtc::scoped_refptr<PeerConnectionInterface> pc(factory->CreatePeerConnection(
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800148 config, nullptr, nullptr, std::move(dtls_identity_store), &observer));
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000149
Henrik Boström5e56c592015-08-11 10:33:13 +0200150 EXPECT_TRUE(pc.get() != nullptr);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000151}
152
153// This test verifies creation of PeerConnection with valid STUN and TURN
154// configuration. Also verifies the URL's parsed correctly as expected.
155TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServers) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000156 PeerConnectionInterface::RTCConfiguration config;
157 webrtc::PeerConnectionInterface::IceServer ice_server;
158 ice_server.uri = kStunIceServer;
159 config.servers.push_back(ice_server);
160 ice_server.uri = kTurnIceServer;
161 ice_server.password = kTurnPassword;
162 config.servers.push_back(ice_server);
163 ice_server.uri = kTurnIceServerWithTransport;
164 ice_server.password = kTurnPassword;
165 config.servers.push_back(ice_server);
Henrik Boström5e56c592015-08-11 10:33:13 +0200166 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store(
167 new FakeDtlsIdentityStore());
kwiberg0eb15ed2015-12-17 03:04:15 -0800168 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800169 config, nullptr, std::move(port_allocator_),
170 std::move(dtls_identity_store), &observer_));
171 ASSERT_TRUE(pc.get() != NULL);
172 cricket::ServerAddresses stun_servers;
173 rtc::SocketAddress stun1("stun.l.google.com", 19302);
174 stun_servers.insert(stun1);
175 VerifyStunServers(stun_servers);
176 std::vector<cricket::RelayServerConfig> turn_servers;
177 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com",
178 kTurnPassword, cricket::PROTO_UDP, false);
179 turn_servers.push_back(turn1);
180 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test",
181 kTurnPassword, cricket::PROTO_TCP, false);
182 turn_servers.push_back(turn2);
183 VerifyTurnServers(turn_servers);
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000184}
185
186// This test verifies creation of PeerConnection with valid STUN and TURN
Joachim Bauch7c4e7452015-05-28 23:06:30 +0200187// configuration. Also verifies the list of URL's parsed correctly as expected.
188TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServersUrls) {
189 PeerConnectionInterface::RTCConfiguration config;
190 webrtc::PeerConnectionInterface::IceServer ice_server;
191 ice_server.urls.push_back(kStunIceServer);
192 ice_server.urls.push_back(kTurnIceServer);
193 ice_server.urls.push_back(kTurnIceServerWithTransport);
194 ice_server.password = kTurnPassword;
195 config.servers.push_back(ice_server);
Henrik Boström5e56c592015-08-11 10:33:13 +0200196 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store(
197 new FakeDtlsIdentityStore());
kwiberg0eb15ed2015-12-17 03:04:15 -0800198 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800199 config, nullptr, std::move(port_allocator_),
kwiberg0eb15ed2015-12-17 03:04:15 -0800200 std::move(dtls_identity_store), &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800201 ASSERT_TRUE(pc.get() != NULL);
202 cricket::ServerAddresses stun_servers;
203 rtc::SocketAddress stun1("stun.l.google.com", 19302);
204 stun_servers.insert(stun1);
205 VerifyStunServers(stun_servers);
206 std::vector<cricket::RelayServerConfig> turn_servers;
207 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com",
208 kTurnPassword, cricket::PROTO_UDP, false);
209 turn_servers.push_back(turn1);
210 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test",
211 kTurnPassword, cricket::PROTO_TCP, false);
212 turn_servers.push_back(turn2);
213 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000214}
215
216TEST_F(PeerConnectionFactoryTest, CreatePCUsingNoUsernameInUri) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000217 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000218 webrtc::PeerConnectionInterface::IceServer ice_server;
219 ice_server.uri = kStunIceServer;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000220 config.servers.push_back(ice_server);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000221 ice_server.uri = kTurnIceServerWithNoUsernameInUri;
222 ice_server.username = kTurnUsername;
223 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000224 config.servers.push_back(ice_server);
Henrik Boström5e56c592015-08-11 10:33:13 +0200225 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store(
226 new FakeDtlsIdentityStore());
kwiberg0eb15ed2015-12-17 03:04:15 -0800227 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800228 config, nullptr, std::move(port_allocator_),
229 std::move(dtls_identity_store), &observer_));
230 ASSERT_TRUE(pc.get() != NULL);
231 std::vector<cricket::RelayServerConfig> turn_servers;
232 cricket::RelayServerConfig turn("test.com", 1234, kTurnUsername,
233 kTurnPassword, cricket::PROTO_UDP, false);
234 turn_servers.push_back(turn);
235 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000236}
237
238// This test verifies the PeerConnection created properly with TURN url which
239// has transport parameter in it.
240TEST_F(PeerConnectionFactoryTest, CreatePCUsingTurnUrlWithTransportParam) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000241 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000242 webrtc::PeerConnectionInterface::IceServer ice_server;
243 ice_server.uri = kTurnIceServerWithTransport;
244 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000245 config.servers.push_back(ice_server);
Henrik Boström5e56c592015-08-11 10:33:13 +0200246 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store(
247 new FakeDtlsIdentityStore());
kwiberg0eb15ed2015-12-17 03:04:15 -0800248 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800249 config, nullptr, std::move(port_allocator_),
250 std::move(dtls_identity_store), &observer_));
251 ASSERT_TRUE(pc.get() != NULL);
252 std::vector<cricket::RelayServerConfig> turn_servers;
253 cricket::RelayServerConfig turn("hello.com", kDefaultStunPort, "test",
254 kTurnPassword, cricket::PROTO_TCP, false);
255 turn_servers.push_back(turn);
256 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000257}
258
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000259TEST_F(PeerConnectionFactoryTest, CreatePCUsingSecureTurnUrl) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000260 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000261 webrtc::PeerConnectionInterface::IceServer ice_server;
262 ice_server.uri = kSecureTurnIceServer;
263 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000264 config.servers.push_back(ice_server);
wu@webrtc.org78187522013-10-07 23:32:02 +0000265 ice_server.uri = kSecureTurnIceServerWithoutTransportParam;
266 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000267 config.servers.push_back(ice_server);
sergeyu@chromium.org5bc25c42013-12-05 00:24:06 +0000268 ice_server.uri = kSecureTurnIceServerWithoutTransportAndPortParam;
269 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000270 config.servers.push_back(ice_server);
Henrik Boström5e56c592015-08-11 10:33:13 +0200271 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store(
272 new FakeDtlsIdentityStore());
kwiberg0eb15ed2015-12-17 03:04:15 -0800273 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800274 config, nullptr, std::move(port_allocator_),
275 std::move(dtls_identity_store), &observer_));
276 ASSERT_TRUE(pc.get() != NULL);
277 std::vector<cricket::RelayServerConfig> turn_servers;
278 cricket::RelayServerConfig turn1("hello.com", kDefaultStunTlsPort, "test",
279 kTurnPassword, cricket::PROTO_TCP, true);
280 turn_servers.push_back(turn1);
wu@webrtc.org78187522013-10-07 23:32:02 +0000281 // TURNS with transport param should be default to tcp.
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800282 cricket::RelayServerConfig turn2("hello.com", 443, "test_no_transport",
283 kTurnPassword, cricket::PROTO_TCP, true);
284 turn_servers.push_back(turn2);
285 cricket::RelayServerConfig turn3("hello.com", kDefaultStunTlsPort,
286 "test_no_transport", kTurnPassword,
287 cricket::PROTO_TCP, true);
288 turn_servers.push_back(turn3);
289 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000290}
291
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000292TEST_F(PeerConnectionFactoryTest, CreatePCUsingIPLiteralAddress) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000293 PeerConnectionInterface::RTCConfiguration config;
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000294 webrtc::PeerConnectionInterface::IceServer ice_server;
295 ice_server.uri = kStunIceServerWithIPv4Address;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000296 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000297 ice_server.uri = kStunIceServerWithIPv4AddressWithoutPort;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000298 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000299 ice_server.uri = kStunIceServerWithIPv6Address;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000300 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000301 ice_server.uri = kStunIceServerWithIPv6AddressWithoutPort;
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 = kTurnIceServerWithIPv6Address;
304 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000305 config.servers.push_back(ice_server);
Henrik Boström5e56c592015-08-11 10:33:13 +0200306 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store(
307 new FakeDtlsIdentityStore());
kwiberg0eb15ed2015-12-17 03:04:15 -0800308 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800309 config, nullptr, std::move(port_allocator_),
310 std::move(dtls_identity_store), &observer_));
311 ASSERT_TRUE(pc.get() != NULL);
312 cricket::ServerAddresses stun_servers;
313 rtc::SocketAddress stun1("1.2.3.4", 1234);
314 stun_servers.insert(stun1);
315 rtc::SocketAddress stun2("1.2.3.4", 3478);
316 stun_servers.insert(stun2); // Default port
317 rtc::SocketAddress stun3("2401:fa00:4::", 1234);
318 stun_servers.insert(stun3);
319 rtc::SocketAddress stun4("2401:fa00:4::", 3478);
320 stun_servers.insert(stun4); // Default port
321 VerifyStunServers(stun_servers);
buildbot@webrtc.orgf875f152014-04-14 16:06:21 +0000322
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800323 std::vector<cricket::RelayServerConfig> turn_servers;
324 cricket::RelayServerConfig turn1("2401:fa00:4::", 1234, "test", kTurnPassword,
325 cricket::PROTO_UDP, false);
326 turn_servers.push_back(turn1);
327 VerifyTurnServers(turn_servers);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000328}
329
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000330// This test verifies the captured stream is rendered locally using a
331// local video track.
332TEST_F(PeerConnectionFactoryTest, LocalRendering) {
333 cricket::FakeVideoCapturer* capturer = new cricket::FakeVideoCapturer();
334 // The source take ownership of |capturer|.
perkja3ede6c2016-03-08 01:27:48 +0100335 rtc::scoped_refptr<VideoTrackSourceInterface> source(
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000336 factory_->CreateVideoSource(capturer, NULL));
337 ASSERT_TRUE(source.get() != NULL);
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000338 rtc::scoped_refptr<VideoTrackInterface> track(
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000339 factory_->CreateVideoTrack("testlabel", source));
340 ASSERT_TRUE(track.get() != NULL);
341 FakeVideoTrackRenderer local_renderer(track);
342
343 EXPECT_EQ(0, local_renderer.num_rendered_frames());
344 EXPECT_TRUE(capturer->CaptureFrame());
345 EXPECT_EQ(1, local_renderer.num_rendered_frames());
nisse81354f52016-01-19 00:23:24 -0800346 EXPECT_FALSE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000347
348 track->set_enabled(false);
349 EXPECT_TRUE(capturer->CaptureFrame());
nisse81354f52016-01-19 00:23:24 -0800350 EXPECT_EQ(2, local_renderer.num_rendered_frames());
351 EXPECT_TRUE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000352
353 track->set_enabled(true);
354 EXPECT_TRUE(capturer->CaptureFrame());
nisse81354f52016-01-19 00:23:24 -0800355 EXPECT_EQ(3, local_renderer.num_rendered_frames());
356 EXPECT_FALSE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000357}