blob: 59f6cde7076dba7d0f85c9c9ee557911f07c2d96 [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"
henrika919dc2e2017-10-12 14:24:55 +020019#include "pc/test/fakeaudiocapturemodule.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020020#include "rtc_base/gunit.h"
Patrik Höglund563934e2017-09-15 09:04:28 +020021
ossu7bb87ee2017-01-23 04:56:25 -080022#ifdef WEBRTC_ANDROID
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020023#include "pc/test/androidtestinitializer.h"
ossu7bb87ee2017-01-23 04:56:25 -080024#endif
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020025#include "pc/test/fakertccertificategenerator.h"
26#include "pc/test/fakevideotrackrenderer.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000027
perkj@webrtc.orgc2dd5ee2014-11-04 11:31:29 +000028using webrtc::DataChannelInterface;
Henrik Boström5e56c592015-08-11 10:33:13 +020029using webrtc::FakeVideoTrackRenderer;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000030using webrtc::MediaStreamInterface;
31using webrtc::PeerConnectionFactoryInterface;
32using webrtc::PeerConnectionInterface;
33using webrtc::PeerConnectionObserver;
perkja3ede6c2016-03-08 01:27:48 +010034using webrtc::VideoTrackSourceInterface;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000035using webrtc::VideoTrackInterface;
36
37namespace {
38
henrike@webrtc.org28e20752013-07-10 00:45:36 +000039static const char kStunIceServer[] = "stun:stun.l.google.com:19302";
40static const char kTurnIceServer[] = "turn:test%40hello.com@test.com:1234";
41static const char kTurnIceServerWithTransport[] =
42 "turn:test@hello.com?transport=tcp";
43static const char kSecureTurnIceServer[] =
44 "turns:test@hello.com?transport=tcp";
wu@webrtc.org78187522013-10-07 23:32:02 +000045static const char kSecureTurnIceServerWithoutTransportParam[] =
sergeyu@chromium.org5bc25c42013-12-05 00:24:06 +000046 "turns:test_no_transport@hello.com:443";
47static const char kSecureTurnIceServerWithoutTransportAndPortParam[] =
wu@webrtc.org78187522013-10-07 23:32:02 +000048 "turns:test_no_transport@hello.com";
henrike@webrtc.org28e20752013-07-10 00:45:36 +000049static const char kTurnIceServerWithNoUsernameInUri[] =
50 "turn:test.com:1234";
51static const char kTurnPassword[] = "turnpassword";
wu@webrtc.org91053e72013-08-10 07:18:04 +000052static const int kDefaultStunPort = 3478;
53static const int kDefaultStunTlsPort = 5349;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000054static const char kTurnUsername[] = "test";
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +000055static const char kStunIceServerWithIPv4Address[] = "stun:1.2.3.4:1234";
56static const char kStunIceServerWithIPv4AddressWithoutPort[] = "stun:1.2.3.4";
57static const char kStunIceServerWithIPv6Address[] = "stun:[2401:fa00:4::]:1234";
58static const char kStunIceServerWithIPv6AddressWithoutPort[] =
59 "stun:[2401:fa00:4::]";
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +000060static const char kTurnIceServerWithIPv6Address[] =
61 "turn:test@[2401:fa00:4::]:1234";
henrike@webrtc.org28e20752013-07-10 00:45:36 +000062
63class NullPeerConnectionObserver : public PeerConnectionObserver {
64 public:
Henrik Kjellander3fe372d2016-05-12 08:10:52 +020065 virtual ~NullPeerConnectionObserver() = default;
nisse63b14b72017-01-31 03:34:01 -080066 void OnSignalingChange(
67 PeerConnectionInterface::SignalingState new_state) override {}
68 void OnAddStream(rtc::scoped_refptr<MediaStreamInterface> stream) override {}
69 void OnRemoveStream(
70 rtc::scoped_refptr<MediaStreamInterface> stream) override {}
71 void OnDataChannel(
72 rtc::scoped_refptr<DataChannelInterface> data_channel) override {}
73 void OnRenegotiationNeeded() override {}
74 void OnIceConnectionChange(
75 PeerConnectionInterface::IceConnectionState new_state) override {}
76 void OnIceGatheringChange(
77 PeerConnectionInterface::IceGatheringState new_state) override {}
78 void OnIceCandidate(
79 const webrtc::IceCandidateInterface* candidate) override {}
henrike@webrtc.org28e20752013-07-10 00:45:36 +000080};
81
82} // namespace
83
84class PeerConnectionFactoryTest : public testing::Test {
85 void SetUp() {
phoglund37ebcf02016-01-08 05:04:57 -080086#ifdef WEBRTC_ANDROID
87 webrtc::InitializeAndroidObjects();
88#endif
henrika919dc2e2017-10-12 14:24:55 +020089 // Use fake audio device module since we're only testing the interface
90 // level, and using a real one could make tests flaky e.g. when run in
91 // parallel.
danilchape9021a32016-05-17 01:52:02 -070092 factory_ = webrtc::CreatePeerConnectionFactory(
henrika919dc2e2017-10-12 14:24:55 +020093 rtc::Thread::Current(), rtc::Thread::Current(),
94 FakeAudioCaptureModule::Create(), nullptr, nullptr);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000095
96 ASSERT_TRUE(factory_.get() != NULL);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -080097 port_allocator_.reset(
98 new cricket::FakePortAllocator(rtc::Thread::Current(), nullptr));
99 raw_port_allocator_ = port_allocator_.get();
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000100 }
101
102 protected:
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800103 void VerifyStunServers(cricket::ServerAddresses stun_servers) {
104 EXPECT_EQ(stun_servers, raw_port_allocator_->stun_servers());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000105 }
106
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800107 void VerifyTurnServers(std::vector<cricket::RelayServerConfig> turn_servers) {
108 EXPECT_EQ(turn_servers.size(), raw_port_allocator_->turn_servers().size());
109 for (size_t i = 0; i < turn_servers.size(); ++i) {
110 ASSERT_EQ(1u, turn_servers[i].ports.size());
111 EXPECT_EQ(1u, raw_port_allocator_->turn_servers()[i].ports.size());
112 EXPECT_EQ(
113 turn_servers[i].ports[0].address.ToString(),
114 raw_port_allocator_->turn_servers()[i].ports[0].address.ToString());
115 EXPECT_EQ(turn_servers[i].ports[0].proto,
116 raw_port_allocator_->turn_servers()[i].ports[0].proto);
117 EXPECT_EQ(turn_servers[i].credentials.username,
118 raw_port_allocator_->turn_servers()[i].credentials.username);
119 EXPECT_EQ(turn_servers[i].credentials.password,
120 raw_port_allocator_->turn_servers()[i].credentials.password);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000121 }
122 }
123
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000124 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000125 NullPeerConnectionObserver observer_;
kwibergd1fe2812016-04-27 06:47:29 -0700126 std::unique_ptr<cricket::FakePortAllocator> port_allocator_;
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800127 // Since the PC owns the port allocator after it's been initialized,
128 // this should only be used when known to be safe.
129 cricket::FakePortAllocator* raw_port_allocator_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000130};
131
132// Verify creation of PeerConnection using internal ADM, video factory and
133// internal libjingle threads.
henrika919dc2e2017-10-12 14:24:55 +0200134// TODO(henrika): disabling this test since relying on real audio can result in
135// flaky tests and focus on details that are out of scope for you might expect
136// for a PeerConnectionFactory unit test.
137// See https://bugs.chromium.org/p/webrtc/issues/detail?id=7806 for details.
138TEST(PeerConnectionFactoryTestInternal, DISABLED_CreatePCUsingInternalModules) {
phoglund37ebcf02016-01-08 05:04:57 -0800139#ifdef WEBRTC_ANDROID
140 webrtc::InitializeAndroidObjects();
141#endif
142
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000143 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory(
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000144 webrtc::CreatePeerConnectionFactory());
145
146 NullPeerConnectionObserver observer;
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800147 webrtc::PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000148
Henrik Boströmd79599d2016-06-01 13:58:50 +0200149 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
150 new FakeRTCCertificateGenerator());
151 rtc::scoped_refptr<PeerConnectionInterface> pc(factory->CreatePeerConnection(
152 config, nullptr, nullptr, std::move(cert_generator), &observer));
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000153
Henrik Boström5e56c592015-08-11 10:33:13 +0200154 EXPECT_TRUE(pc.get() != nullptr);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000155}
156
157// This test verifies creation of PeerConnection with valid STUN and TURN
158// configuration. Also verifies the URL's parsed correctly as expected.
159TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServers) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000160 PeerConnectionInterface::RTCConfiguration config;
161 webrtc::PeerConnectionInterface::IceServer ice_server;
162 ice_server.uri = kStunIceServer;
163 config.servers.push_back(ice_server);
164 ice_server.uri = kTurnIceServer;
165 ice_server.password = kTurnPassword;
166 config.servers.push_back(ice_server);
167 ice_server.uri = kTurnIceServerWithTransport;
168 ice_server.password = kTurnPassword;
169 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200170 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
171 new FakeRTCCertificateGenerator());
172 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
173 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
174 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800175 ASSERT_TRUE(pc.get() != NULL);
176 cricket::ServerAddresses stun_servers;
177 rtc::SocketAddress stun1("stun.l.google.com", 19302);
178 stun_servers.insert(stun1);
179 VerifyStunServers(stun_servers);
180 std::vector<cricket::RelayServerConfig> turn_servers;
181 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com",
hnsl277b2502016-12-13 05:17:23 -0800182 kTurnPassword, cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800183 turn_servers.push_back(turn1);
184 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test",
hnsl277b2502016-12-13 05:17:23 -0800185 kTurnPassword, cricket::PROTO_TCP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800186 turn_servers.push_back(turn2);
187 VerifyTurnServers(turn_servers);
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000188}
189
190// This test verifies creation of PeerConnection with valid STUN and TURN
Joachim Bauch7c4e7452015-05-28 23:06:30 +0200191// configuration. Also verifies the list of URL's parsed correctly as expected.
192TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServersUrls) {
193 PeerConnectionInterface::RTCConfiguration config;
194 webrtc::PeerConnectionInterface::IceServer ice_server;
195 ice_server.urls.push_back(kStunIceServer);
196 ice_server.urls.push_back(kTurnIceServer);
197 ice_server.urls.push_back(kTurnIceServerWithTransport);
198 ice_server.password = kTurnPassword;
199 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200200 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
201 new FakeRTCCertificateGenerator());
202 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
203 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
204 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800205 ASSERT_TRUE(pc.get() != NULL);
206 cricket::ServerAddresses stun_servers;
207 rtc::SocketAddress stun1("stun.l.google.com", 19302);
208 stun_servers.insert(stun1);
209 VerifyStunServers(stun_servers);
210 std::vector<cricket::RelayServerConfig> turn_servers;
211 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com",
hnsl277b2502016-12-13 05:17:23 -0800212 kTurnPassword, cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800213 turn_servers.push_back(turn1);
214 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test",
hnsl277b2502016-12-13 05:17:23 -0800215 kTurnPassword, cricket::PROTO_TCP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800216 turn_servers.push_back(turn2);
217 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000218}
219
220TEST_F(PeerConnectionFactoryTest, CreatePCUsingNoUsernameInUri) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000221 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000222 webrtc::PeerConnectionInterface::IceServer ice_server;
223 ice_server.uri = kStunIceServer;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000224 config.servers.push_back(ice_server);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000225 ice_server.uri = kTurnIceServerWithNoUsernameInUri;
226 ice_server.username = kTurnUsername;
227 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000228 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200229 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
230 new FakeRTCCertificateGenerator());
231 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
232 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
233 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800234 ASSERT_TRUE(pc.get() != NULL);
235 std::vector<cricket::RelayServerConfig> turn_servers;
236 cricket::RelayServerConfig turn("test.com", 1234, kTurnUsername,
hnsl277b2502016-12-13 05:17:23 -0800237 kTurnPassword, cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800238 turn_servers.push_back(turn);
239 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000240}
241
242// This test verifies the PeerConnection created properly with TURN url which
243// has transport parameter in it.
244TEST_F(PeerConnectionFactoryTest, CreatePCUsingTurnUrlWithTransportParam) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000245 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000246 webrtc::PeerConnectionInterface::IceServer ice_server;
247 ice_server.uri = kTurnIceServerWithTransport;
248 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000249 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200250 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
251 new FakeRTCCertificateGenerator());
252 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
253 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
254 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800255 ASSERT_TRUE(pc.get() != NULL);
256 std::vector<cricket::RelayServerConfig> turn_servers;
257 cricket::RelayServerConfig turn("hello.com", kDefaultStunPort, "test",
hnsl277b2502016-12-13 05:17:23 -0800258 kTurnPassword, cricket::PROTO_TCP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800259 turn_servers.push_back(turn);
260 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000261}
262
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000263TEST_F(PeerConnectionFactoryTest, CreatePCUsingSecureTurnUrl) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000264 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000265 webrtc::PeerConnectionInterface::IceServer ice_server;
266 ice_server.uri = kSecureTurnIceServer;
267 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000268 config.servers.push_back(ice_server);
wu@webrtc.org78187522013-10-07 23:32:02 +0000269 ice_server.uri = kSecureTurnIceServerWithoutTransportParam;
270 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000271 config.servers.push_back(ice_server);
sergeyu@chromium.org5bc25c42013-12-05 00:24:06 +0000272 ice_server.uri = kSecureTurnIceServerWithoutTransportAndPortParam;
273 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000274 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200275 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
276 new FakeRTCCertificateGenerator());
277 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
278 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
279 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800280 ASSERT_TRUE(pc.get() != NULL);
281 std::vector<cricket::RelayServerConfig> turn_servers;
282 cricket::RelayServerConfig turn1("hello.com", kDefaultStunTlsPort, "test",
hnsl277b2502016-12-13 05:17:23 -0800283 kTurnPassword, cricket::PROTO_TLS);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800284 turn_servers.push_back(turn1);
wu@webrtc.org78187522013-10-07 23:32:02 +0000285 // TURNS with transport param should be default to tcp.
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800286 cricket::RelayServerConfig turn2("hello.com", 443, "test_no_transport",
hnsl277b2502016-12-13 05:17:23 -0800287 kTurnPassword, cricket::PROTO_TLS);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800288 turn_servers.push_back(turn2);
289 cricket::RelayServerConfig turn3("hello.com", kDefaultStunTlsPort,
290 "test_no_transport", kTurnPassword,
hnsl277b2502016-12-13 05:17:23 -0800291 cricket::PROTO_TLS);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800292 turn_servers.push_back(turn3);
293 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000294}
295
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000296TEST_F(PeerConnectionFactoryTest, CreatePCUsingIPLiteralAddress) {
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000297 PeerConnectionInterface::RTCConfiguration config;
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000298 webrtc::PeerConnectionInterface::IceServer ice_server;
299 ice_server.uri = kStunIceServerWithIPv4Address;
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 = kStunIceServerWithIPv4AddressWithoutPort;
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 = kStunIceServerWithIPv6Address;
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 = kStunIceServerWithIPv6AddressWithoutPort;
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 = kTurnIceServerWithIPv6Address;
308 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45 +0000309 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 13:58:50 +0200310 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
311 new FakeRTCCertificateGenerator());
312 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
313 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
314 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800315 ASSERT_TRUE(pc.get() != NULL);
316 cricket::ServerAddresses stun_servers;
317 rtc::SocketAddress stun1("1.2.3.4", 1234);
318 stun_servers.insert(stun1);
319 rtc::SocketAddress stun2("1.2.3.4", 3478);
320 stun_servers.insert(stun2); // Default port
321 rtc::SocketAddress stun3("2401:fa00:4::", 1234);
322 stun_servers.insert(stun3);
323 rtc::SocketAddress stun4("2401:fa00:4::", 3478);
324 stun_servers.insert(stun4); // Default port
325 VerifyStunServers(stun_servers);
buildbot@webrtc.orgf875f152014-04-14 16:06:21 +0000326
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800327 std::vector<cricket::RelayServerConfig> turn_servers;
328 cricket::RelayServerConfig turn1("2401:fa00:4::", 1234, "test", kTurnPassword,
hnsl277b2502016-12-13 05:17:23 -0800329 cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 14:14:52 -0800330 turn_servers.push_back(turn1);
331 VerifyTurnServers(turn_servers);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52 +0000332}
333
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000334// This test verifies the captured stream is rendered locally using a
335// local video track.
336TEST_F(PeerConnectionFactoryTest, LocalRendering) {
337 cricket::FakeVideoCapturer* capturer = new cricket::FakeVideoCapturer();
deadbeef112b2e92017-02-10 20:13:37 -0800338 // The source takes ownership of |capturer|, but we keep a raw pointer to
339 // inject fake frames.
perkja3ede6c2016-03-08 01:27:48 +0100340 rtc::scoped_refptr<VideoTrackSourceInterface> source(
deadbeef112b2e92017-02-10 20:13:37 -0800341 factory_->CreateVideoSource(
342 std::unique_ptr<cricket::VideoCapturer>(capturer), NULL));
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000343 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}