blob: 5688d1540bdea4e8aa019edaa084ec36222df7be [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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020015#include "api/mediastreaminterface.h"
16#include "media/base/fakevideocapturer.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020017#include "p2p/base/fakeportallocator.h"
18#include "pc/peerconnectionfactory.h"
19#include "rtc_base/gunit.h"
Patrik Höglund563934e2017-09-15 09:04:28 +020020
ossu7bb87ee2017-01-23 04:56:25 -080021#ifdef WEBRTC_ANDROID
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020022#include "pc/test/androidtestinitializer.h"
ossu7bb87ee2017-01-23 04:56:25 -080023#endif
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020024#include "pc/test/fakertccertificategenerator.h"
25#include "pc/test/fakevideotrackrenderer.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000026
perkj@webrtc.orgc2dd5ee2014-11-04 11:31:29 +000027using webrtc::DataChannelInterface;
Henrik Boström5e56c592015-08-11 10:33:13 +020028using webrtc::FakeVideoTrackRenderer;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000029using webrtc::MediaStreamInterface;
30using webrtc::PeerConnectionFactoryInterface;
31using webrtc::PeerConnectionInterface;
32using webrtc::PeerConnectionObserver;
perkja3ede6c2016-03-08 01:27:48 +010033using webrtc::VideoTrackSourceInterface;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000034using webrtc::VideoTrackInterface;
35
36namespace {
37
henrike@webrtc.org28e20752013-07-10 00:45:36 +000038static const char kStunIceServer[] = "stun:stun.l.google.com:19302";
39static const char kTurnIceServer[] = "turn:test%40hello.com@test.com:1234";
40static const char kTurnIceServerWithTransport[] =
41 "turn:test@hello.com?transport=tcp";
42static const char kSecureTurnIceServer[] =
43 "turns:test@hello.com?transport=tcp";
wu@webrtc.org78187522013-10-07 23:32:02 +000044static const char kSecureTurnIceServerWithoutTransportParam[] =
sergeyu@chromium.org5bc25c42013-12-05 00:24:06 +000045 "turns:test_no_transport@hello.com:443";
46static const char kSecureTurnIceServerWithoutTransportAndPortParam[] =
wu@webrtc.org78187522013-10-07 23:32:02 +000047 "turns:test_no_transport@hello.com";
henrike@webrtc.org28e20752013-07-10 00:45:36 +000048static const char kTurnIceServerWithNoUsernameInUri[] =
49 "turn:test.com:1234";
50static const char kTurnPassword[] = "turnpassword";
wu@webrtc.org91053e72013-08-10 07:18:04 +000051static const int kDefaultStunPort = 3478;
52static const int kDefaultStunTlsPort = 5349;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000053static const char kTurnUsername[] = "test";
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +000054static const char kStunIceServerWithIPv4Address[] = "stun:1.2.3.4:1234";
55static const char kStunIceServerWithIPv4AddressWithoutPort[] = "stun:1.2.3.4";
56static const char kStunIceServerWithIPv6Address[] = "stun:[2401:fa00:4::]:1234";
57static const char kStunIceServerWithIPv6AddressWithoutPort[] =
58 "stun:[2401:fa00:4::]";
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +000059static const char kTurnIceServerWithIPv6Address[] =
60 "turn:test@[2401:fa00:4::]:1234";
henrike@webrtc.org28e20752013-07-10 00:45:36 +000061
62class NullPeerConnectionObserver : public PeerConnectionObserver {
63 public:
Henrik Kjellander3fe372d2016-05-12 08:10:52 +020064 virtual ~NullPeerConnectionObserver() = default;
nisse63b14b72017-01-31 03:34:01 -080065 void OnSignalingChange(
66 PeerConnectionInterface::SignalingState new_state) override {}
67 void OnAddStream(rtc::scoped_refptr<MediaStreamInterface> stream) override {}
68 void OnRemoveStream(
69 rtc::scoped_refptr<MediaStreamInterface> stream) override {}
70 void OnDataChannel(
71 rtc::scoped_refptr<DataChannelInterface> data_channel) override {}
72 void OnRenegotiationNeeded() override {}
73 void OnIceConnectionChange(
74 PeerConnectionInterface::IceConnectionState new_state) override {}
75 void OnIceGatheringChange(
76 PeerConnectionInterface::IceGatheringState new_state) override {}
77 void OnIceCandidate(
78 const webrtc::IceCandidateInterface* candidate) override {}
henrike@webrtc.org28e20752013-07-10 00:45:36 +000079};
80
81} // namespace
82
83class PeerConnectionFactoryTest : public testing::Test {
84 void SetUp() {
phoglund37ebcf02016-01-08 05:04:57 -080085#ifdef WEBRTC_ANDROID
86 webrtc::InitializeAndroidObjects();
87#endif
danilchape9021a32016-05-17 01:52:02 -070088 factory_ = webrtc::CreatePeerConnectionFactory(
89 rtc::Thread::Current(), rtc::Thread::Current(), rtc::Thread::Current(),
90 nullptr, nullptr, nullptr);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000091
92 ASSERT_TRUE(factory_.get() != NULL);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -080093 port_allocator_.reset(
94 new cricket::FakePortAllocator(rtc::Thread::Current(), nullptr));
95 raw_port_allocator_ = port_allocator_.get();
henrike@webrtc.org28e20752013-07-10 00:45:36 +000096 }
97
98 protected:
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -080099 void VerifyStunServers(cricket::ServerAddresses stun_servers) {
100 EXPECT_EQ(stun_servers, raw_port_allocator_->stun_servers());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000101 }
102
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800103 void VerifyTurnServers(std::vector<cricket::RelayServerConfig> turn_servers) {
104 EXPECT_EQ(turn_servers.size(), raw_port_allocator_->turn_servers().size());
105 for (size_t i = 0; i < turn_servers.size(); ++i) {
106 ASSERT_EQ(1u, turn_servers[i].ports.size());
107 EXPECT_EQ(1u, raw_port_allocator_->turn_servers()[i].ports.size());
108 EXPECT_EQ(
109 turn_servers[i].ports[0].address.ToString(),
110 raw_port_allocator_->turn_servers()[i].ports[0].address.ToString());
111 EXPECT_EQ(turn_servers[i].ports[0].proto,
112 raw_port_allocator_->turn_servers()[i].ports[0].proto);
113 EXPECT_EQ(turn_servers[i].credentials.username,
114 raw_port_allocator_->turn_servers()[i].credentials.username);
115 EXPECT_EQ(turn_servers[i].credentials.password,
116 raw_port_allocator_->turn_servers()[i].credentials.password);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000117 }
118 }
119
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000120 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000121 NullPeerConnectionObserver observer_;
kwibergd1fe2812016-04-27 06:47:29 -0700122 std::unique_ptr<cricket::FakePortAllocator> port_allocator_;
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800123 // Since the PC owns the port allocator after it's been initialized,
124 // this should only be used when known to be safe.
125 cricket::FakePortAllocator* raw_port_allocator_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000126};
127
128// Verify creation of PeerConnection using internal ADM, video factory and
129// internal libjingle threads.
130TEST(PeerConnectionFactoryTestInternal, CreatePCUsingInternalModules) {
phoglund37ebcf02016-01-08 05:04:57 -0800131#ifdef WEBRTC_ANDROID
132 webrtc::InitializeAndroidObjects();
133#endif
134
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000135 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory(
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000136 webrtc::CreatePeerConnectionFactory());
137
138 NullPeerConnectionObserver observer;
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800139 webrtc::PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000140
Henrik Boströmd79599d2016-06-01 13:58:50 +0200141 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
142 new FakeRTCCertificateGenerator());
143 rtc::scoped_refptr<PeerConnectionInterface> pc(factory->CreatePeerConnection(
144 config, nullptr, nullptr, std::move(cert_generator), &observer));
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000145
Henrik Boström5e56c592015-08-11 10:33:13 +0200146 EXPECT_TRUE(pc.get() != nullptr);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000147}
148
149// This test verifies creation of PeerConnection with valid STUN and TURN
150// configuration. Also verifies the URL's parsed correctly as expected.
151TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServers) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000152 PeerConnectionInterface::RTCConfiguration config;
153 webrtc::PeerConnectionInterface::IceServer ice_server;
154 ice_server.uri = kStunIceServer;
155 config.servers.push_back(ice_server);
156 ice_server.uri = kTurnIceServer;
157 ice_server.password = kTurnPassword;
158 config.servers.push_back(ice_server);
159 ice_server.uri = kTurnIceServerWithTransport;
160 ice_server.password = kTurnPassword;
161 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200162 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
163 new FakeRTCCertificateGenerator());
164 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
165 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
166 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800167 ASSERT_TRUE(pc.get() != NULL);
168 cricket::ServerAddresses stun_servers;
169 rtc::SocketAddress stun1("stun.l.google.com", 19302);
170 stun_servers.insert(stun1);
171 VerifyStunServers(stun_servers);
172 std::vector<cricket::RelayServerConfig> turn_servers;
173 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com",
hnsl277b2502016-12-13 05:17:23 -0800174 kTurnPassword, cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800175 turn_servers.push_back(turn1);
176 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test",
hnsl277b2502016-12-13 05:17:23 -0800177 kTurnPassword, cricket::PROTO_TCP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800178 turn_servers.push_back(turn2);
179 VerifyTurnServers(turn_servers);
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000180}
181
182// This test verifies creation of PeerConnection with valid STUN and TURN
Joachim Bauch7c4e7452015-05-28 23:06:30 +0200183// configuration. Also verifies the list of URL's parsed correctly as expected.
184TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServersUrls) {
185 PeerConnectionInterface::RTCConfiguration config;
186 webrtc::PeerConnectionInterface::IceServer ice_server;
187 ice_server.urls.push_back(kStunIceServer);
188 ice_server.urls.push_back(kTurnIceServer);
189 ice_server.urls.push_back(kTurnIceServerWithTransport);
190 ice_server.password = kTurnPassword;
191 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200192 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
193 new FakeRTCCertificateGenerator());
194 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
195 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
196 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800197 ASSERT_TRUE(pc.get() != NULL);
198 cricket::ServerAddresses stun_servers;
199 rtc::SocketAddress stun1("stun.l.google.com", 19302);
200 stun_servers.insert(stun1);
201 VerifyStunServers(stun_servers);
202 std::vector<cricket::RelayServerConfig> turn_servers;
203 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com",
hnsl277b2502016-12-13 05:17:23 -0800204 kTurnPassword, cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800205 turn_servers.push_back(turn1);
206 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test",
hnsl277b2502016-12-13 05:17:23 -0800207 kTurnPassword, cricket::PROTO_TCP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800208 turn_servers.push_back(turn2);
209 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000210}
211
212TEST_F(PeerConnectionFactoryTest, CreatePCUsingNoUsernameInUri) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000213 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000214 webrtc::PeerConnectionInterface::IceServer ice_server;
215 ice_server.uri = kStunIceServer;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000216 config.servers.push_back(ice_server);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000217 ice_server.uri = kTurnIceServerWithNoUsernameInUri;
218 ice_server.username = kTurnUsername;
219 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000220 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200221 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
222 new FakeRTCCertificateGenerator());
223 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
224 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
225 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800226 ASSERT_TRUE(pc.get() != NULL);
227 std::vector<cricket::RelayServerConfig> turn_servers;
228 cricket::RelayServerConfig turn("test.com", 1234, kTurnUsername,
hnsl277b2502016-12-13 05:17:23 -0800229 kTurnPassword, cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800230 turn_servers.push_back(turn);
231 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000232}
233
234// This test verifies the PeerConnection created properly with TURN url which
235// has transport parameter in it.
236TEST_F(PeerConnectionFactoryTest, CreatePCUsingTurnUrlWithTransportParam) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000237 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000238 webrtc::PeerConnectionInterface::IceServer ice_server;
239 ice_server.uri = kTurnIceServerWithTransport;
240 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000241 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200242 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
243 new FakeRTCCertificateGenerator());
244 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
245 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
246 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800247 ASSERT_TRUE(pc.get() != NULL);
248 std::vector<cricket::RelayServerConfig> turn_servers;
249 cricket::RelayServerConfig turn("hello.com", kDefaultStunPort, "test",
hnsl277b2502016-12-13 05:17:23 -0800250 kTurnPassword, cricket::PROTO_TCP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800251 turn_servers.push_back(turn);
252 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000253}
254
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000255TEST_F(PeerConnectionFactoryTest, CreatePCUsingSecureTurnUrl) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000256 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000257 webrtc::PeerConnectionInterface::IceServer ice_server;
258 ice_server.uri = kSecureTurnIceServer;
259 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000260 config.servers.push_back(ice_server);
wu@webrtc.org78187522013-10-07 23:32:02 +0000261 ice_server.uri = kSecureTurnIceServerWithoutTransportParam;
262 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000263 config.servers.push_back(ice_server);
sergeyu@chromium.org5bc25c42013-12-05 00:24:06 +0000264 ice_server.uri = kSecureTurnIceServerWithoutTransportAndPortParam;
265 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000266 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200267 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
268 new FakeRTCCertificateGenerator());
269 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
270 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
271 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800272 ASSERT_TRUE(pc.get() != NULL);
273 std::vector<cricket::RelayServerConfig> turn_servers;
274 cricket::RelayServerConfig turn1("hello.com", kDefaultStunTlsPort, "test",
hnsl277b2502016-12-13 05:17:23 -0800275 kTurnPassword, cricket::PROTO_TLS);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800276 turn_servers.push_back(turn1);
wu@webrtc.org78187522013-10-07 23:32:02 +0000277 // TURNS with transport param should be default to tcp.
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800278 cricket::RelayServerConfig turn2("hello.com", 443, "test_no_transport",
hnsl277b2502016-12-13 05:17:23 -0800279 kTurnPassword, cricket::PROTO_TLS);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800280 turn_servers.push_back(turn2);
281 cricket::RelayServerConfig turn3("hello.com", kDefaultStunTlsPort,
282 "test_no_transport", kTurnPassword,
hnsl277b2502016-12-13 05:17:23 -0800283 cricket::PROTO_TLS);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800284 turn_servers.push_back(turn3);
285 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000286}
287
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000288TEST_F(PeerConnectionFactoryTest, CreatePCUsingIPLiteralAddress) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000289 PeerConnectionInterface::RTCConfiguration config;
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000290 webrtc::PeerConnectionInterface::IceServer ice_server;
291 ice_server.uri = kStunIceServerWithIPv4Address;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000292 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000293 ice_server.uri = kStunIceServerWithIPv4AddressWithoutPort;
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 = kStunIceServerWithIPv6Address;
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 = kStunIceServerWithIPv6AddressWithoutPort;
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 = kTurnIceServerWithIPv6Address;
300 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000301 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200302 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
303 new FakeRTCCertificateGenerator());
304 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
305 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
306 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800307 ASSERT_TRUE(pc.get() != NULL);
308 cricket::ServerAddresses stun_servers;
309 rtc::SocketAddress stun1("1.2.3.4", 1234);
310 stun_servers.insert(stun1);
311 rtc::SocketAddress stun2("1.2.3.4", 3478);
312 stun_servers.insert(stun2); // Default port
313 rtc::SocketAddress stun3("2401:fa00:4::", 1234);
314 stun_servers.insert(stun3);
315 rtc::SocketAddress stun4("2401:fa00:4::", 3478);
316 stun_servers.insert(stun4); // Default port
317 VerifyStunServers(stun_servers);
buildbot@webrtc.orgf875f152014-04-14 16:06:21 +0000318
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800319 std::vector<cricket::RelayServerConfig> turn_servers;
320 cricket::RelayServerConfig turn1("2401:fa00:4::", 1234, "test", kTurnPassword,
hnsl277b2502016-12-13 05:17:23 -0800321 cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800322 turn_servers.push_back(turn1);
323 VerifyTurnServers(turn_servers);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000324}
325
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000326// This test verifies the captured stream is rendered locally using a
327// local video track.
328TEST_F(PeerConnectionFactoryTest, LocalRendering) {
329 cricket::FakeVideoCapturer* capturer = new cricket::FakeVideoCapturer();
deadbeef112b2e92017-02-10 20:13:37 -0800330 // The source takes ownership of |capturer|, but we keep a raw pointer to
331 // inject fake frames.
perkja3ede6c2016-03-08 01:27:48 +0100332 rtc::scoped_refptr<VideoTrackSourceInterface> source(
deadbeef112b2e92017-02-10 20:13:37 -0800333 factory_->CreateVideoSource(
334 std::unique_ptr<cricket::VideoCapturer>(capturer), NULL));
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000335 ASSERT_TRUE(source.get() != NULL);
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000336 rtc::scoped_refptr<VideoTrackInterface> track(
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000337 factory_->CreateVideoTrack("testlabel", source));
338 ASSERT_TRUE(track.get() != NULL);
339 FakeVideoTrackRenderer local_renderer(track);
340
341 EXPECT_EQ(0, local_renderer.num_rendered_frames());
342 EXPECT_TRUE(capturer->CaptureFrame());
343 EXPECT_EQ(1, local_renderer.num_rendered_frames());
nisse81354f52016-01-19 00:23:24 -0800344 EXPECT_FALSE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000345
346 track->set_enabled(false);
347 EXPECT_TRUE(capturer->CaptureFrame());
nisse81354f52016-01-19 00:23:24 -0800348 EXPECT_EQ(2, local_renderer.num_rendered_frames());
349 EXPECT_TRUE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000350
351 track->set_enabled(true);
352 EXPECT_TRUE(capturer->CaptureFrame());
nisse81354f52016-01-19 00:23:24 -0800353 EXPECT_EQ(3, local_renderer.num_rendered_frames());
354 EXPECT_FALSE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000355}