blob: cbabc259bd772f3033e7eaadad6d3e2781448bf6 [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"
kjellandera96e2d72016-02-04 23:52:28 -080016#include "webrtc/media/base/fakevideocapturer.h"
kjellander@webrtc.org5ad12972016-02-12 06:39:40 +010017#include "webrtc/media/engine/webrtccommon.h"
18#include "webrtc/media/engine/webrtcvoe.h"
Taylor Brandstettera1c30352016-05-13 08:15:11 -070019#include "webrtc/p2p/base/fakeportallocator.h"
ossu7bb87ee2017-01-23 04:56:25 -080020#include "webrtc/pc/peerconnectionfactory.h"
Edward Lemurc20978e2017-07-06 19:44:34 +020021#include "webrtc/rtc_base/gunit.h"
22#include "webrtc/rtc_base/thread.h"
ossu7bb87ee2017-01-23 04:56:25 -080023#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:
Henrik Kjellander3fe372d2016-05-12 08:10:52 +020066 virtual ~NullPeerConnectionObserver() = default;
nisse63b14b72017-01-31 03:34:01 -080067 void OnSignalingChange(
68 PeerConnectionInterface::SignalingState new_state) override {}
69 void OnAddStream(rtc::scoped_refptr<MediaStreamInterface> stream) override {}
70 void OnRemoveStream(
71 rtc::scoped_refptr<MediaStreamInterface> stream) override {}
72 void OnDataChannel(
73 rtc::scoped_refptr<DataChannelInterface> data_channel) override {}
74 void OnRenegotiationNeeded() override {}
75 void OnIceConnectionChange(
76 PeerConnectionInterface::IceConnectionState new_state) override {}
77 void OnIceGatheringChange(
78 PeerConnectionInterface::IceGatheringState new_state) override {}
79 void OnIceCandidate(
80 const webrtc::IceCandidateInterface* candidate) override {}
henrike@webrtc.org28e20752013-07-10 00:45:36 +000081};
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
danilchape9021a32016-05-17 01:52:02 -070090 factory_ = webrtc::CreatePeerConnectionFactory(
91 rtc::Thread::Current(), rtc::Thread::Current(), rtc::Thread::Current(),
92 nullptr, nullptr, nullptr);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000093
94 ASSERT_TRUE(factory_.get() != NULL);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -080095 port_allocator_.reset(
96 new cricket::FakePortAllocator(rtc::Thread::Current(), nullptr));
97 raw_port_allocator_ = port_allocator_.get();
henrike@webrtc.org28e20752013-07-10 00:45:36 +000098 }
99
100 protected:
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800101 void VerifyStunServers(cricket::ServerAddresses stun_servers) {
102 EXPECT_EQ(stun_servers, raw_port_allocator_->stun_servers());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000103 }
104
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800105 void VerifyTurnServers(std::vector<cricket::RelayServerConfig> turn_servers) {
106 EXPECT_EQ(turn_servers.size(), raw_port_allocator_->turn_servers().size());
107 for (size_t i = 0; i < turn_servers.size(); ++i) {
108 ASSERT_EQ(1u, turn_servers[i].ports.size());
109 EXPECT_EQ(1u, raw_port_allocator_->turn_servers()[i].ports.size());
110 EXPECT_EQ(
111 turn_servers[i].ports[0].address.ToString(),
112 raw_port_allocator_->turn_servers()[i].ports[0].address.ToString());
113 EXPECT_EQ(turn_servers[i].ports[0].proto,
114 raw_port_allocator_->turn_servers()[i].ports[0].proto);
115 EXPECT_EQ(turn_servers[i].credentials.username,
116 raw_port_allocator_->turn_servers()[i].credentials.username);
117 EXPECT_EQ(turn_servers[i].credentials.password,
118 raw_port_allocator_->turn_servers()[i].credentials.password);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000119 }
120 }
121
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000122 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000123 NullPeerConnectionObserver observer_;
kwibergd1fe2812016-04-27 06:47:29 -0700124 std::unique_ptr<cricket::FakePortAllocator> port_allocator_;
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800125 // Since the PC owns the port allocator after it's been initialized,
126 // this should only be used when known to be safe.
127 cricket::FakePortAllocator* raw_port_allocator_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000128};
129
130// Verify creation of PeerConnection using internal ADM, video factory and
131// internal libjingle threads.
132TEST(PeerConnectionFactoryTestInternal, CreatePCUsingInternalModules) {
phoglund37ebcf02016-01-08 05:04:57 -0800133#ifdef WEBRTC_ANDROID
134 webrtc::InitializeAndroidObjects();
135#endif
136
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000137 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory(
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000138 webrtc::CreatePeerConnectionFactory());
139
140 NullPeerConnectionObserver observer;
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800141 webrtc::PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000142
Henrik Boströmd79599d2016-06-01 13:58:50 +0200143 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
144 new FakeRTCCertificateGenerator());
145 rtc::scoped_refptr<PeerConnectionInterface> pc(factory->CreatePeerConnection(
146 config, nullptr, nullptr, std::move(cert_generator), &observer));
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000147
Henrik Boström5e56c592015-08-11 10:33:13 +0200148 EXPECT_TRUE(pc.get() != nullptr);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000149}
150
151// This test verifies creation of PeerConnection with valid STUN and TURN
152// configuration. Also verifies the URL's parsed correctly as expected.
153TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServers) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000154 PeerConnectionInterface::RTCConfiguration config;
155 webrtc::PeerConnectionInterface::IceServer ice_server;
156 ice_server.uri = kStunIceServer;
157 config.servers.push_back(ice_server);
158 ice_server.uri = kTurnIceServer;
159 ice_server.password = kTurnPassword;
160 config.servers.push_back(ice_server);
161 ice_server.uri = kTurnIceServerWithTransport;
162 ice_server.password = kTurnPassword;
163 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200164 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
165 new FakeRTCCertificateGenerator());
166 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
167 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
168 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800169 ASSERT_TRUE(pc.get() != NULL);
170 cricket::ServerAddresses stun_servers;
171 rtc::SocketAddress stun1("stun.l.google.com", 19302);
172 stun_servers.insert(stun1);
173 VerifyStunServers(stun_servers);
174 std::vector<cricket::RelayServerConfig> turn_servers;
175 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com",
hnsl277b2502016-12-13 05:17:23 -0800176 kTurnPassword, cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800177 turn_servers.push_back(turn1);
178 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test",
hnsl277b2502016-12-13 05:17:23 -0800179 kTurnPassword, cricket::PROTO_TCP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800180 turn_servers.push_back(turn2);
181 VerifyTurnServers(turn_servers);
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000182}
183
184// This test verifies creation of PeerConnection with valid STUN and TURN
Joachim Bauch7c4e7452015-05-28 23:06:30 +0200185// configuration. Also verifies the list of URL's parsed correctly as expected.
186TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServersUrls) {
187 PeerConnectionInterface::RTCConfiguration config;
188 webrtc::PeerConnectionInterface::IceServer ice_server;
189 ice_server.urls.push_back(kStunIceServer);
190 ice_server.urls.push_back(kTurnIceServer);
191 ice_server.urls.push_back(kTurnIceServerWithTransport);
192 ice_server.password = kTurnPassword;
193 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200194 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
195 new FakeRTCCertificateGenerator());
196 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
197 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
198 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800199 ASSERT_TRUE(pc.get() != NULL);
200 cricket::ServerAddresses stun_servers;
201 rtc::SocketAddress stun1("stun.l.google.com", 19302);
202 stun_servers.insert(stun1);
203 VerifyStunServers(stun_servers);
204 std::vector<cricket::RelayServerConfig> turn_servers;
205 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com",
hnsl277b2502016-12-13 05:17:23 -0800206 kTurnPassword, cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800207 turn_servers.push_back(turn1);
208 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test",
hnsl277b2502016-12-13 05:17:23 -0800209 kTurnPassword, cricket::PROTO_TCP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800210 turn_servers.push_back(turn2);
211 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000212}
213
214TEST_F(PeerConnectionFactoryTest, CreatePCUsingNoUsernameInUri) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000215 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000216 webrtc::PeerConnectionInterface::IceServer ice_server;
217 ice_server.uri = kStunIceServer;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000218 config.servers.push_back(ice_server);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000219 ice_server.uri = kTurnIceServerWithNoUsernameInUri;
220 ice_server.username = kTurnUsername;
221 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000222 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200223 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
224 new FakeRTCCertificateGenerator());
225 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
226 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
227 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800228 ASSERT_TRUE(pc.get() != NULL);
229 std::vector<cricket::RelayServerConfig> turn_servers;
230 cricket::RelayServerConfig turn("test.com", 1234, kTurnUsername,
hnsl277b2502016-12-13 05:17:23 -0800231 kTurnPassword, cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800232 turn_servers.push_back(turn);
233 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000234}
235
236// This test verifies the PeerConnection created properly with TURN url which
237// has transport parameter in it.
238TEST_F(PeerConnectionFactoryTest, CreatePCUsingTurnUrlWithTransportParam) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000239 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000240 webrtc::PeerConnectionInterface::IceServer ice_server;
241 ice_server.uri = kTurnIceServerWithTransport;
242 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000243 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200244 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
245 new FakeRTCCertificateGenerator());
246 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
247 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
248 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800249 ASSERT_TRUE(pc.get() != NULL);
250 std::vector<cricket::RelayServerConfig> turn_servers;
251 cricket::RelayServerConfig turn("hello.com", kDefaultStunPort, "test",
hnsl277b2502016-12-13 05:17:23 -0800252 kTurnPassword, cricket::PROTO_TCP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800253 turn_servers.push_back(turn);
254 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000255}
256
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000257TEST_F(PeerConnectionFactoryTest, CreatePCUsingSecureTurnUrl) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000258 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000259 webrtc::PeerConnectionInterface::IceServer ice_server;
260 ice_server.uri = kSecureTurnIceServer;
261 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000262 config.servers.push_back(ice_server);
wu@webrtc.org78187522013-10-07 23:32:02 +0000263 ice_server.uri = kSecureTurnIceServerWithoutTransportParam;
264 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000265 config.servers.push_back(ice_server);
sergeyu@chromium.org5bc25c42013-12-05 00:24:06 +0000266 ice_server.uri = kSecureTurnIceServerWithoutTransportAndPortParam;
267 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000268 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200269 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
270 new FakeRTCCertificateGenerator());
271 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
272 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
273 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800274 ASSERT_TRUE(pc.get() != NULL);
275 std::vector<cricket::RelayServerConfig> turn_servers;
276 cricket::RelayServerConfig turn1("hello.com", kDefaultStunTlsPort, "test",
hnsl277b2502016-12-13 05:17:23 -0800277 kTurnPassword, cricket::PROTO_TLS);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800278 turn_servers.push_back(turn1);
wu@webrtc.org78187522013-10-07 23:32:02 +0000279 // TURNS with transport param should be default to tcp.
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800280 cricket::RelayServerConfig turn2("hello.com", 443, "test_no_transport",
hnsl277b2502016-12-13 05:17:23 -0800281 kTurnPassword, cricket::PROTO_TLS);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800282 turn_servers.push_back(turn2);
283 cricket::RelayServerConfig turn3("hello.com", kDefaultStunTlsPort,
284 "test_no_transport", kTurnPassword,
hnsl277b2502016-12-13 05:17:23 -0800285 cricket::PROTO_TLS);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800286 turn_servers.push_back(turn3);
287 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000288}
289
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000290TEST_F(PeerConnectionFactoryTest, CreatePCUsingIPLiteralAddress) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000291 PeerConnectionInterface::RTCConfiguration config;
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000292 webrtc::PeerConnectionInterface::IceServer ice_server;
293 ice_server.uri = kStunIceServerWithIPv4Address;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000294 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000295 ice_server.uri = kStunIceServerWithIPv4AddressWithoutPort;
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 = kStunIceServerWithIPv6Address;
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 = kStunIceServerWithIPv6AddressWithoutPort;
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 = kTurnIceServerWithIPv6Address;
302 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000303 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200304 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
305 new FakeRTCCertificateGenerator());
306 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
307 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
308 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800309 ASSERT_TRUE(pc.get() != NULL);
310 cricket::ServerAddresses stun_servers;
311 rtc::SocketAddress stun1("1.2.3.4", 1234);
312 stun_servers.insert(stun1);
313 rtc::SocketAddress stun2("1.2.3.4", 3478);
314 stun_servers.insert(stun2); // Default port
315 rtc::SocketAddress stun3("2401:fa00:4::", 1234);
316 stun_servers.insert(stun3);
317 rtc::SocketAddress stun4("2401:fa00:4::", 3478);
318 stun_servers.insert(stun4); // Default port
319 VerifyStunServers(stun_servers);
buildbot@webrtc.orgf875f152014-04-14 16:06:21 +0000320
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800321 std::vector<cricket::RelayServerConfig> turn_servers;
322 cricket::RelayServerConfig turn1("2401:fa00:4::", 1234, "test", kTurnPassword,
hnsl277b2502016-12-13 05:17:23 -0800323 cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800324 turn_servers.push_back(turn1);
325 VerifyTurnServers(turn_servers);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000326}
327
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000328// This test verifies the captured stream is rendered locally using a
329// local video track.
330TEST_F(PeerConnectionFactoryTest, LocalRendering) {
331 cricket::FakeVideoCapturer* capturer = new cricket::FakeVideoCapturer();
deadbeef112b2e92017-02-10 20:13:37 -0800332 // The source takes ownership of |capturer|, but we keep a raw pointer to
333 // inject fake frames.
perkja3ede6c2016-03-08 01:27:48 +0100334 rtc::scoped_refptr<VideoTrackSourceInterface> source(
deadbeef112b2e92017-02-10 20:13:37 -0800335 factory_->CreateVideoSource(
336 std::unique_ptr<cricket::VideoCapturer>(capturer), NULL));
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000337 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}