blob: 3fa523e3e710b22932c6c928cb77e5ce2487ac9a [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"
buildbot@webrtc.orga09a9992014-08-13 17:26:08 +000016#include "webrtc/base/gunit.h"
buildbot@webrtc.orga09a9992014-08-13 17:26:08 +000017#include "webrtc/base/thread.h"
kjellandera96e2d72016-02-04 23:52:28 -080018#include "webrtc/media/base/fakevideocapturer.h"
kjellander@webrtc.org5ad12972016-02-12 06:39:40 +010019#include "webrtc/media/engine/webrtccommon.h"
20#include "webrtc/media/engine/webrtcvoe.h"
Taylor Brandstettera1c30352016-05-13 08:15:11 -070021#include "webrtc/p2p/base/fakeportallocator.h"
ossu7bb87ee2017-01-23 04:56:25 -080022#include "webrtc/pc/peerconnectionfactory.h"
23#ifdef WEBRTC_ANDROID
24#include "webrtc/pc/test/androidtestinitializer.h"
25#endif
26#include "webrtc/pc/test/fakertccertificategenerator.h"
27#include "webrtc/pc/test/fakevideotrackrenderer.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:
kjellander71a1b612016-11-07 01:18:08 -080066 // We need these using declarations because there are two versions of each of
67 // the below methods and we only override one of them.
68 // TODO(deadbeef): Remove once there's only one version of the methods.
69 using PeerConnectionObserver::OnAddStream;
70 using PeerConnectionObserver::OnRemoveStream;
71 using PeerConnectionObserver::OnDataChannel;
72
Henrik Kjellander3fe372d2016-05-12 08:10:52 +020073 virtual ~NullPeerConnectionObserver() = default;
nisse63b14b72017-01-31 03:34:01 -080074 void OnSignalingChange(
75 PeerConnectionInterface::SignalingState new_state) override {}
76 void OnAddStream(rtc::scoped_refptr<MediaStreamInterface> stream) override {}
77 void OnRemoveStream(
78 rtc::scoped_refptr<MediaStreamInterface> stream) override {}
79 void OnDataChannel(
80 rtc::scoped_refptr<DataChannelInterface> data_channel) override {}
81 void OnRenegotiationNeeded() override {}
82 void OnIceConnectionChange(
83 PeerConnectionInterface::IceConnectionState new_state) override {}
84 void OnIceGatheringChange(
85 PeerConnectionInterface::IceGatheringState new_state) override {}
86 void OnIceCandidate(
87 const webrtc::IceCandidateInterface* candidate) override {}
henrike@webrtc.org28e20752013-07-10 00:45:36 +000088};
89
90} // namespace
91
92class PeerConnectionFactoryTest : public testing::Test {
93 void SetUp() {
phoglund37ebcf02016-01-08 05:04:57 -080094#ifdef WEBRTC_ANDROID
95 webrtc::InitializeAndroidObjects();
96#endif
danilchape9021a32016-05-17 01:52:02 -070097 factory_ = webrtc::CreatePeerConnectionFactory(
98 rtc::Thread::Current(), rtc::Thread::Current(), rtc::Thread::Current(),
99 nullptr, nullptr, nullptr);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000100
101 ASSERT_TRUE(factory_.get() != NULL);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800102 port_allocator_.reset(
103 new cricket::FakePortAllocator(rtc::Thread::Current(), nullptr));
104 raw_port_allocator_ = port_allocator_.get();
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000105 }
106
107 protected:
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800108 void VerifyStunServers(cricket::ServerAddresses stun_servers) {
109 EXPECT_EQ(stun_servers, raw_port_allocator_->stun_servers());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000110 }
111
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800112 void VerifyTurnServers(std::vector<cricket::RelayServerConfig> turn_servers) {
113 EXPECT_EQ(turn_servers.size(), raw_port_allocator_->turn_servers().size());
114 for (size_t i = 0; i < turn_servers.size(); ++i) {
115 ASSERT_EQ(1u, turn_servers[i].ports.size());
116 EXPECT_EQ(1u, raw_port_allocator_->turn_servers()[i].ports.size());
117 EXPECT_EQ(
118 turn_servers[i].ports[0].address.ToString(),
119 raw_port_allocator_->turn_servers()[i].ports[0].address.ToString());
120 EXPECT_EQ(turn_servers[i].ports[0].proto,
121 raw_port_allocator_->turn_servers()[i].ports[0].proto);
122 EXPECT_EQ(turn_servers[i].credentials.username,
123 raw_port_allocator_->turn_servers()[i].credentials.username);
124 EXPECT_EQ(turn_servers[i].credentials.password,
125 raw_port_allocator_->turn_servers()[i].credentials.password);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000126 }
127 }
128
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000129 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000130 NullPeerConnectionObserver observer_;
kwibergd1fe2812016-04-27 06:47:29 -0700131 std::unique_ptr<cricket::FakePortAllocator> port_allocator_;
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800132 // Since the PC owns the port allocator after it's been initialized,
133 // this should only be used when known to be safe.
134 cricket::FakePortAllocator* raw_port_allocator_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000135};
136
137// Verify creation of PeerConnection using internal ADM, video factory and
138// internal libjingle threads.
139TEST(PeerConnectionFactoryTestInternal, CreatePCUsingInternalModules) {
phoglund37ebcf02016-01-08 05:04:57 -0800140#ifdef WEBRTC_ANDROID
141 webrtc::InitializeAndroidObjects();
142#endif
143
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000144 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory(
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000145 webrtc::CreatePeerConnectionFactory());
146
147 NullPeerConnectionObserver observer;
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800148 webrtc::PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000149
Henrik Boströmd79599d2016-06-01 13:58:50 +0200150 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
151 new FakeRTCCertificateGenerator());
152 rtc::scoped_refptr<PeerConnectionInterface> pc(factory->CreatePeerConnection(
153 config, nullptr, nullptr, std::move(cert_generator), &observer));
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000154
Henrik Boström5e56c592015-08-11 10:33:13 +0200155 EXPECT_TRUE(pc.get() != nullptr);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000156}
157
158// This test verifies creation of PeerConnection with valid STUN and TURN
159// configuration. Also verifies the URL's parsed correctly as expected.
160TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServers) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000161 PeerConnectionInterface::RTCConfiguration config;
162 webrtc::PeerConnectionInterface::IceServer ice_server;
163 ice_server.uri = kStunIceServer;
164 config.servers.push_back(ice_server);
165 ice_server.uri = kTurnIceServer;
166 ice_server.password = kTurnPassword;
167 config.servers.push_back(ice_server);
168 ice_server.uri = kTurnIceServerWithTransport;
169 ice_server.password = kTurnPassword;
170 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200171 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
172 new FakeRTCCertificateGenerator());
173 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
174 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
175 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800176 ASSERT_TRUE(pc.get() != NULL);
177 cricket::ServerAddresses stun_servers;
178 rtc::SocketAddress stun1("stun.l.google.com", 19302);
179 stun_servers.insert(stun1);
180 VerifyStunServers(stun_servers);
181 std::vector<cricket::RelayServerConfig> turn_servers;
182 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com",
hnsl277b2502016-12-13 05:17:23 -0800183 kTurnPassword, cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800184 turn_servers.push_back(turn1);
185 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test",
hnsl277b2502016-12-13 05:17:23 -0800186 kTurnPassword, cricket::PROTO_TCP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800187 turn_servers.push_back(turn2);
188 VerifyTurnServers(turn_servers);
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000189}
190
191// This test verifies creation of PeerConnection with valid STUN and TURN
Joachim Bauch7c4e7452015-05-28 23:06:30 +0200192// configuration. Also verifies the list of URL's parsed correctly as expected.
193TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServersUrls) {
194 PeerConnectionInterface::RTCConfiguration config;
195 webrtc::PeerConnectionInterface::IceServer ice_server;
196 ice_server.urls.push_back(kStunIceServer);
197 ice_server.urls.push_back(kTurnIceServer);
198 ice_server.urls.push_back(kTurnIceServerWithTransport);
199 ice_server.password = kTurnPassword;
200 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200201 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
202 new FakeRTCCertificateGenerator());
203 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
204 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
205 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800206 ASSERT_TRUE(pc.get() != NULL);
207 cricket::ServerAddresses stun_servers;
208 rtc::SocketAddress stun1("stun.l.google.com", 19302);
209 stun_servers.insert(stun1);
210 VerifyStunServers(stun_servers);
211 std::vector<cricket::RelayServerConfig> turn_servers;
212 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com",
hnsl277b2502016-12-13 05:17:23 -0800213 kTurnPassword, cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800214 turn_servers.push_back(turn1);
215 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test",
hnsl277b2502016-12-13 05:17:23 -0800216 kTurnPassword, cricket::PROTO_TCP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800217 turn_servers.push_back(turn2);
218 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000219}
220
221TEST_F(PeerConnectionFactoryTest, CreatePCUsingNoUsernameInUri) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000222 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000223 webrtc::PeerConnectionInterface::IceServer ice_server;
224 ice_server.uri = kStunIceServer;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000225 config.servers.push_back(ice_server);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000226 ice_server.uri = kTurnIceServerWithNoUsernameInUri;
227 ice_server.username = kTurnUsername;
228 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000229 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200230 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
231 new FakeRTCCertificateGenerator());
232 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
233 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
234 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800235 ASSERT_TRUE(pc.get() != NULL);
236 std::vector<cricket::RelayServerConfig> turn_servers;
237 cricket::RelayServerConfig turn("test.com", 1234, kTurnUsername,
hnsl277b2502016-12-13 05:17:23 -0800238 kTurnPassword, cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800239 turn_servers.push_back(turn);
240 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000241}
242
243// This test verifies the PeerConnection created properly with TURN url which
244// has transport parameter in it.
245TEST_F(PeerConnectionFactoryTest, CreatePCUsingTurnUrlWithTransportParam) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000246 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000247 webrtc::PeerConnectionInterface::IceServer ice_server;
248 ice_server.uri = kTurnIceServerWithTransport;
249 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000250 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200251 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
252 new FakeRTCCertificateGenerator());
253 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
254 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
255 &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",
hnsl277b2502016-12-13 05:17:23 -0800259 kTurnPassword, cricket::PROTO_TCP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800260 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);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200276 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
277 new FakeRTCCertificateGenerator());
278 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
279 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
280 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800281 ASSERT_TRUE(pc.get() != NULL);
282 std::vector<cricket::RelayServerConfig> turn_servers;
283 cricket::RelayServerConfig turn1("hello.com", kDefaultStunTlsPort, "test",
hnsl277b2502016-12-13 05:17:23 -0800284 kTurnPassword, cricket::PROTO_TLS);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800285 turn_servers.push_back(turn1);
wu@webrtc.org78187522013-10-07 23:32:02 +0000286 // TURNS with transport param should be default to tcp.
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800287 cricket::RelayServerConfig turn2("hello.com", 443, "test_no_transport",
hnsl277b2502016-12-13 05:17:23 -0800288 kTurnPassword, cricket::PROTO_TLS);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800289 turn_servers.push_back(turn2);
290 cricket::RelayServerConfig turn3("hello.com", kDefaultStunTlsPort,
291 "test_no_transport", kTurnPassword,
hnsl277b2502016-12-13 05:17:23 -0800292 cricket::PROTO_TLS);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800293 turn_servers.push_back(turn3);
294 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000295}
296
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000297TEST_F(PeerConnectionFactoryTest, CreatePCUsingIPLiteralAddress) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000298 PeerConnectionInterface::RTCConfiguration config;
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000299 webrtc::PeerConnectionInterface::IceServer ice_server;
300 ice_server.uri = kStunIceServerWithIPv4Address;
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 = kStunIceServerWithIPv4AddressWithoutPort;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000303 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000304 ice_server.uri = kStunIceServerWithIPv6Address;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000305 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000306 ice_server.uri = kStunIceServerWithIPv6AddressWithoutPort;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000307 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000308 ice_server.uri = kTurnIceServerWithIPv6Address;
309 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000310 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200311 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
312 new FakeRTCCertificateGenerator());
313 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
314 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
315 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800316 ASSERT_TRUE(pc.get() != NULL);
317 cricket::ServerAddresses stun_servers;
318 rtc::SocketAddress stun1("1.2.3.4", 1234);
319 stun_servers.insert(stun1);
320 rtc::SocketAddress stun2("1.2.3.4", 3478);
321 stun_servers.insert(stun2); // Default port
322 rtc::SocketAddress stun3("2401:fa00:4::", 1234);
323 stun_servers.insert(stun3);
324 rtc::SocketAddress stun4("2401:fa00:4::", 3478);
325 stun_servers.insert(stun4); // Default port
326 VerifyStunServers(stun_servers);
buildbot@webrtc.orgf875f152014-04-14 16:06:21 +0000327
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800328 std::vector<cricket::RelayServerConfig> turn_servers;
329 cricket::RelayServerConfig turn1("2401:fa00:4::", 1234, "test", kTurnPassword,
hnsl277b2502016-12-13 05:17:23 -0800330 cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800331 turn_servers.push_back(turn1);
332 VerifyTurnServers(turn_servers);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000333}
334
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000335// This test verifies the captured stream is rendered locally using a
336// local video track.
337TEST_F(PeerConnectionFactoryTest, LocalRendering) {
338 cricket::FakeVideoCapturer* capturer = new cricket::FakeVideoCapturer();
339 // The source take ownership of |capturer|.
perkja3ede6c2016-03-08 01:27:48 +0100340 rtc::scoped_refptr<VideoTrackSourceInterface> source(
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000341 factory_->CreateVideoSource(capturer, NULL));
342 ASSERT_TRUE(source.get() != NULL);
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000343 rtc::scoped_refptr<VideoTrackInterface> track(
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000344 factory_->CreateVideoTrack("testlabel", source));
345 ASSERT_TRUE(track.get() != NULL);
346 FakeVideoTrackRenderer local_renderer(track);
347
348 EXPECT_EQ(0, local_renderer.num_rendered_frames());
349 EXPECT_TRUE(capturer->CaptureFrame());
350 EXPECT_EQ(1, local_renderer.num_rendered_frames());
nisse81354f52016-01-19 00:23:24 -0800351 EXPECT_FALSE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000352
353 track->set_enabled(false);
354 EXPECT_TRUE(capturer->CaptureFrame());
nisse81354f52016-01-19 00:23:24 -0800355 EXPECT_EQ(2, local_renderer.num_rendered_frames());
356 EXPECT_TRUE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000357
358 track->set_enabled(true);
359 EXPECT_TRUE(capturer->CaptureFrame());
nisse81354f52016-01-19 00:23:24 -0800360 EXPECT_EQ(3, local_renderer.num_rendered_frames());
361 EXPECT_FALSE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000362}