blob: a1789986227cd5cc8f0ee48c41fcd96c8140f286 [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;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000074 virtual void OnMessage(const std::string& msg) {}
75 virtual void OnSignalingMessage(const std::string& msg) {}
76 virtual void OnSignalingChange(
77 PeerConnectionInterface::SignalingState new_state) {}
Taylor Brandstetter98cde262016-05-31 13:02:21 -070078 virtual void OnAddStream(rtc::scoped_refptr<MediaStreamInterface> stream) {}
79 virtual void OnRemoveStream(rtc::scoped_refptr<MediaStreamInterface> stream) {
80 }
81 virtual void OnDataChannel(
82 rtc::scoped_refptr<DataChannelInterface> data_channel) {}
henrike@webrtc.org28e20752013-07-10 00:45:36 +000083 virtual void OnRenegotiationNeeded() {}
84 virtual void OnIceConnectionChange(
85 PeerConnectionInterface::IceConnectionState new_state) {}
86 virtual void OnIceGatheringChange(
87 PeerConnectionInterface::IceGatheringState new_state) {}
88 virtual void OnIceCandidate(const webrtc::IceCandidateInterface* candidate) {}
89};
90
91} // namespace
92
93class PeerConnectionFactoryTest : public testing::Test {
94 void SetUp() {
phoglund37ebcf02016-01-08 05:04:57 -080095#ifdef WEBRTC_ANDROID
96 webrtc::InitializeAndroidObjects();
97#endif
danilchape9021a32016-05-17 01:52:02 -070098 factory_ = webrtc::CreatePeerConnectionFactory(
99 rtc::Thread::Current(), rtc::Thread::Current(), rtc::Thread::Current(),
100 nullptr, nullptr, nullptr);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000101
102 ASSERT_TRUE(factory_.get() != NULL);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800103 port_allocator_.reset(
104 new cricket::FakePortAllocator(rtc::Thread::Current(), nullptr));
105 raw_port_allocator_ = port_allocator_.get();
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000106 }
107
108 protected:
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800109 void VerifyStunServers(cricket::ServerAddresses stun_servers) {
110 EXPECT_EQ(stun_servers, raw_port_allocator_->stun_servers());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000111 }
112
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800113 void VerifyTurnServers(std::vector<cricket::RelayServerConfig> turn_servers) {
114 EXPECT_EQ(turn_servers.size(), raw_port_allocator_->turn_servers().size());
115 for (size_t i = 0; i < turn_servers.size(); ++i) {
116 ASSERT_EQ(1u, turn_servers[i].ports.size());
117 EXPECT_EQ(1u, raw_port_allocator_->turn_servers()[i].ports.size());
118 EXPECT_EQ(
119 turn_servers[i].ports[0].address.ToString(),
120 raw_port_allocator_->turn_servers()[i].ports[0].address.ToString());
121 EXPECT_EQ(turn_servers[i].ports[0].proto,
122 raw_port_allocator_->turn_servers()[i].ports[0].proto);
123 EXPECT_EQ(turn_servers[i].credentials.username,
124 raw_port_allocator_->turn_servers()[i].credentials.username);
125 EXPECT_EQ(turn_servers[i].credentials.password,
126 raw_port_allocator_->turn_servers()[i].credentials.password);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000127 }
128 }
129
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000130 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000131 NullPeerConnectionObserver observer_;
kwibergd1fe2812016-04-27 06:47:29 -0700132 std::unique_ptr<cricket::FakePortAllocator> port_allocator_;
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800133 // Since the PC owns the port allocator after it's been initialized,
134 // this should only be used when known to be safe.
135 cricket::FakePortAllocator* raw_port_allocator_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000136};
137
138// Verify creation of PeerConnection using internal ADM, video factory and
139// internal libjingle threads.
140TEST(PeerConnectionFactoryTestInternal, CreatePCUsingInternalModules) {
phoglund37ebcf02016-01-08 05:04:57 -0800141#ifdef WEBRTC_ANDROID
142 webrtc::InitializeAndroidObjects();
143#endif
144
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000145 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory(
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000146 webrtc::CreatePeerConnectionFactory());
147
148 NullPeerConnectionObserver observer;
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800149 webrtc::PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000150
Henrik Boströmd79599d2016-06-01 13:58:50 +0200151 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
152 new FakeRTCCertificateGenerator());
153 rtc::scoped_refptr<PeerConnectionInterface> pc(factory->CreatePeerConnection(
154 config, nullptr, nullptr, std::move(cert_generator), &observer));
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000155
Henrik Boström5e56c592015-08-11 10:33:13 +0200156 EXPECT_TRUE(pc.get() != nullptr);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000157}
158
159// This test verifies creation of PeerConnection with valid STUN and TURN
160// configuration. Also verifies the URL's parsed correctly as expected.
161TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServers) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000162 PeerConnectionInterface::RTCConfiguration config;
163 webrtc::PeerConnectionInterface::IceServer ice_server;
164 ice_server.uri = kStunIceServer;
165 config.servers.push_back(ice_server);
166 ice_server.uri = kTurnIceServer;
167 ice_server.password = kTurnPassword;
168 config.servers.push_back(ice_server);
169 ice_server.uri = kTurnIceServerWithTransport;
170 ice_server.password = kTurnPassword;
171 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200172 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
173 new FakeRTCCertificateGenerator());
174 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
175 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
176 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800177 ASSERT_TRUE(pc.get() != NULL);
178 cricket::ServerAddresses stun_servers;
179 rtc::SocketAddress stun1("stun.l.google.com", 19302);
180 stun_servers.insert(stun1);
181 VerifyStunServers(stun_servers);
182 std::vector<cricket::RelayServerConfig> turn_servers;
183 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com",
hnsl277b2502016-12-13 05:17:23 -0800184 kTurnPassword, cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800185 turn_servers.push_back(turn1);
186 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test",
hnsl277b2502016-12-13 05:17:23 -0800187 kTurnPassword, cricket::PROTO_TCP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800188 turn_servers.push_back(turn2);
189 VerifyTurnServers(turn_servers);
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000190}
191
192// This test verifies creation of PeerConnection with valid STUN and TURN
Joachim Bauch7c4e7452015-05-28 23:06:30 +0200193// configuration. Also verifies the list of URL's parsed correctly as expected.
194TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServersUrls) {
195 PeerConnectionInterface::RTCConfiguration config;
196 webrtc::PeerConnectionInterface::IceServer ice_server;
197 ice_server.urls.push_back(kStunIceServer);
198 ice_server.urls.push_back(kTurnIceServer);
199 ice_server.urls.push_back(kTurnIceServerWithTransport);
200 ice_server.password = kTurnPassword;
201 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200202 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
203 new FakeRTCCertificateGenerator());
204 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
205 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
206 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800207 ASSERT_TRUE(pc.get() != NULL);
208 cricket::ServerAddresses stun_servers;
209 rtc::SocketAddress stun1("stun.l.google.com", 19302);
210 stun_servers.insert(stun1);
211 VerifyStunServers(stun_servers);
212 std::vector<cricket::RelayServerConfig> turn_servers;
213 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com",
hnsl277b2502016-12-13 05:17:23 -0800214 kTurnPassword, cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800215 turn_servers.push_back(turn1);
216 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test",
hnsl277b2502016-12-13 05:17:23 -0800217 kTurnPassword, cricket::PROTO_TCP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800218 turn_servers.push_back(turn2);
219 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000220}
221
222TEST_F(PeerConnectionFactoryTest, CreatePCUsingNoUsernameInUri) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000223 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000224 webrtc::PeerConnectionInterface::IceServer ice_server;
225 ice_server.uri = kStunIceServer;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000226 config.servers.push_back(ice_server);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000227 ice_server.uri = kTurnIceServerWithNoUsernameInUri;
228 ice_server.username = kTurnUsername;
229 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000230 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200231 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
232 new FakeRTCCertificateGenerator());
233 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
234 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
235 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800236 ASSERT_TRUE(pc.get() != NULL);
237 std::vector<cricket::RelayServerConfig> turn_servers;
238 cricket::RelayServerConfig turn("test.com", 1234, kTurnUsername,
hnsl277b2502016-12-13 05:17:23 -0800239 kTurnPassword, cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800240 turn_servers.push_back(turn);
241 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000242}
243
244// This test verifies the PeerConnection created properly with TURN url which
245// has transport parameter in it.
246TEST_F(PeerConnectionFactoryTest, CreatePCUsingTurnUrlWithTransportParam) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000247 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000248 webrtc::PeerConnectionInterface::IceServer ice_server;
249 ice_server.uri = kTurnIceServerWithTransport;
250 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000251 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200252 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
253 new FakeRTCCertificateGenerator());
254 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
255 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
256 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800257 ASSERT_TRUE(pc.get() != NULL);
258 std::vector<cricket::RelayServerConfig> turn_servers;
259 cricket::RelayServerConfig turn("hello.com", kDefaultStunPort, "test",
hnsl277b2502016-12-13 05:17:23 -0800260 kTurnPassword, cricket::PROTO_TCP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800261 turn_servers.push_back(turn);
262 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000263}
264
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000265TEST_F(PeerConnectionFactoryTest, CreatePCUsingSecureTurnUrl) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000266 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000267 webrtc::PeerConnectionInterface::IceServer ice_server;
268 ice_server.uri = kSecureTurnIceServer;
269 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000270 config.servers.push_back(ice_server);
wu@webrtc.org78187522013-10-07 23:32:02 +0000271 ice_server.uri = kSecureTurnIceServerWithoutTransportParam;
272 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000273 config.servers.push_back(ice_server);
sergeyu@chromium.org5bc25c42013-12-05 00:24:06 +0000274 ice_server.uri = kSecureTurnIceServerWithoutTransportAndPortParam;
275 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000276 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200277 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
278 new FakeRTCCertificateGenerator());
279 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
280 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
281 &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",
hnsl277b2502016-12-13 05:17:23 -0800285 kTurnPassword, cricket::PROTO_TLS);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800286 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",
hnsl277b2502016-12-13 05:17:23 -0800289 kTurnPassword, cricket::PROTO_TLS);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800290 turn_servers.push_back(turn2);
291 cricket::RelayServerConfig turn3("hello.com", kDefaultStunTlsPort,
292 "test_no_transport", kTurnPassword,
hnsl277b2502016-12-13 05:17:23 -0800293 cricket::PROTO_TLS);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800294 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);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200312 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
313 new FakeRTCCertificateGenerator());
314 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
315 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
316 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800317 ASSERT_TRUE(pc.get() != NULL);
318 cricket::ServerAddresses stun_servers;
319 rtc::SocketAddress stun1("1.2.3.4", 1234);
320 stun_servers.insert(stun1);
321 rtc::SocketAddress stun2("1.2.3.4", 3478);
322 stun_servers.insert(stun2); // Default port
323 rtc::SocketAddress stun3("2401:fa00:4::", 1234);
324 stun_servers.insert(stun3);
325 rtc::SocketAddress stun4("2401:fa00:4::", 3478);
326 stun_servers.insert(stun4); // Default port
327 VerifyStunServers(stun_servers);
buildbot@webrtc.orgf875f152014-04-14 16:06:21 +0000328
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800329 std::vector<cricket::RelayServerConfig> turn_servers;
330 cricket::RelayServerConfig turn1("2401:fa00:4::", 1234, "test", kTurnPassword,
hnsl277b2502016-12-13 05:17:23 -0800331 cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800332 turn_servers.push_back(turn1);
333 VerifyTurnServers(turn_servers);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000334}
335
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000336// This test verifies the captured stream is rendered locally using a
337// local video track.
338TEST_F(PeerConnectionFactoryTest, LocalRendering) {
339 cricket::FakeVideoCapturer* capturer = new cricket::FakeVideoCapturer();
340 // The source take ownership of |capturer|.
perkja3ede6c2016-03-08 01:27:48 +0100341 rtc::scoped_refptr<VideoTrackSourceInterface> source(
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000342 factory_->CreateVideoSource(capturer, NULL));
343 ASSERT_TRUE(source.get() != NULL);
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000344 rtc::scoped_refptr<VideoTrackInterface> track(
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000345 factory_->CreateVideoTrack("testlabel", source));
346 ASSERT_TRUE(track.get() != NULL);
347 FakeVideoTrackRenderer local_renderer(track);
348
349 EXPECT_EQ(0, local_renderer.num_rendered_frames());
350 EXPECT_TRUE(capturer->CaptureFrame());
351 EXPECT_EQ(1, local_renderer.num_rendered_frames());
nisse81354f52016-01-19 00:23:24 -0800352 EXPECT_FALSE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000353
354 track->set_enabled(false);
355 EXPECT_TRUE(capturer->CaptureFrame());
nisse81354f52016-01-19 00:23:24 -0800356 EXPECT_EQ(2, local_renderer.num_rendered_frames());
357 EXPECT_TRUE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000358
359 track->set_enabled(true);
360 EXPECT_TRUE(capturer->CaptureFrame());
nisse81354f52016-01-19 00:23:24 -0800361 EXPECT_EQ(3, local_renderer.num_rendered_frames());
362 EXPECT_FALSE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000363}