blob: 2d158e16af5b0cff9d323364e5f874a3e9fccbc8 [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 Boströmd79599d2016-06-01 13:58:50 +020020#include "webrtc/api/test/fakertccertificategenerator.h"
Henrik Kjellander15583c12016-02-10 10:53:12 +010021#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::FakeVideoTrackRenderer;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000031using webrtc::MediaStreamInterface;
32using webrtc::PeerConnectionFactoryInterface;
33using webrtc::PeerConnectionInterface;
34using webrtc::PeerConnectionObserver;
perkja3ede6c2016-03-08 01:27:48 +010035using webrtc::VideoTrackSourceInterface;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000036using webrtc::VideoTrackInterface;
37
38namespace {
39
henrike@webrtc.org28e20752013-07-10 00:45:36 +000040static const char kStunIceServer[] = "stun:stun.l.google.com:19302";
41static const char kTurnIceServer[] = "turn:test%40hello.com@test.com:1234";
42static const char kTurnIceServerWithTransport[] =
43 "turn:test@hello.com?transport=tcp";
44static const char kSecureTurnIceServer[] =
45 "turns:test@hello.com?transport=tcp";
wu@webrtc.org78187522013-10-07 23:32:02 +000046static const char kSecureTurnIceServerWithoutTransportParam[] =
sergeyu@chromium.org5bc25c42013-12-05 00:24:06 +000047 "turns:test_no_transport@hello.com:443";
48static const char kSecureTurnIceServerWithoutTransportAndPortParam[] =
wu@webrtc.org78187522013-10-07 23:32:02 +000049 "turns:test_no_transport@hello.com";
henrike@webrtc.org28e20752013-07-10 00:45:36 +000050static const char kTurnIceServerWithNoUsernameInUri[] =
51 "turn:test.com:1234";
52static const char kTurnPassword[] = "turnpassword";
wu@webrtc.org91053e72013-08-10 07:18:04 +000053static const int kDefaultStunPort = 3478;
54static const int kDefaultStunTlsPort = 5349;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000055static const char kTurnUsername[] = "test";
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +000056static const char kStunIceServerWithIPv4Address[] = "stun:1.2.3.4:1234";
57static const char kStunIceServerWithIPv4AddressWithoutPort[] = "stun:1.2.3.4";
58static const char kStunIceServerWithIPv6Address[] = "stun:[2401:fa00:4::]:1234";
59static const char kStunIceServerWithIPv6AddressWithoutPort[] =
60 "stun:[2401:fa00:4::]";
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +000061static const char kTurnIceServerWithIPv6Address[] =
62 "turn:test@[2401:fa00:4::]:1234";
henrike@webrtc.org28e20752013-07-10 00:45:36 +000063
64class NullPeerConnectionObserver : public PeerConnectionObserver {
65 public:
Henrik Kjellander3fe372d2016-05-12 08:10:52 +020066 virtual ~NullPeerConnectionObserver() = default;
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) {}
Taylor Brandstetter98cde262016-05-31 13:02:21 -070071 virtual void OnAddStream(rtc::scoped_refptr<MediaStreamInterface> stream) {}
72 virtual void OnRemoveStream(rtc::scoped_refptr<MediaStreamInterface> stream) {
73 }
74 virtual void OnDataChannel(
75 rtc::scoped_refptr<DataChannelInterface> data_channel) {}
henrike@webrtc.org28e20752013-07-10 00:45:36 +000076 virtual void OnRenegotiationNeeded() {}
77 virtual void OnIceConnectionChange(
78 PeerConnectionInterface::IceConnectionState new_state) {}
79 virtual void OnIceGatheringChange(
80 PeerConnectionInterface::IceGatheringState new_state) {}
81 virtual void OnIceCandidate(const webrtc::IceCandidateInterface* candidate) {}
82};
83
84} // namespace
85
86class PeerConnectionFactoryTest : public testing::Test {
87 void SetUp() {
phoglund37ebcf02016-01-08 05:04:57 -080088#ifdef WEBRTC_ANDROID
89 webrtc::InitializeAndroidObjects();
90#endif
danilchape9021a32016-05-17 01:52:02 -070091 factory_ = webrtc::CreatePeerConnectionFactory(
92 rtc::Thread::Current(), rtc::Thread::Current(), rtc::Thread::Current(),
93 nullptr, nullptr, nullptr);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000094
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_;
kwibergd1fe2812016-04-27 06:47:29 -0700125 std::unique_ptr<cricket::FakePortAllocator> port_allocator_;
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800126 // 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ömd79599d2016-06-01 13:58:50 +0200144 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
145 new FakeRTCCertificateGenerator());
146 rtc::scoped_refptr<PeerConnectionInterface> pc(factory->CreatePeerConnection(
147 config, nullptr, nullptr, std::move(cert_generator), &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ömd79599d2016-06-01 13:58:50 +0200165 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
166 new FakeRTCCertificateGenerator());
167 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
168 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
169 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800170 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ömd79599d2016-06-01 13:58:50 +0200195 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
196 new FakeRTCCertificateGenerator());
197 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
198 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
199 &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ömd79599d2016-06-01 13:58:50 +0200224 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
225 new FakeRTCCertificateGenerator());
226 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
227 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
228 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800229 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ömd79599d2016-06-01 13:58:50 +0200245 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
246 new FakeRTCCertificateGenerator());
247 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
248 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
249 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800250 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ömd79599d2016-06-01 13:58:50 +0200270 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
271 new FakeRTCCertificateGenerator());
272 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
273 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
274 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800275 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ömd79599d2016-06-01 13:58:50 +0200305 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
306 new FakeRTCCertificateGenerator());
307 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
308 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
309 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800310 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}