blob: 66036b18735f821adb6294cafdf3d4e4dd2c4626 [file] [log] [blame]
henrike@webrtc.org28e20752013-07-10 00:45:361/*
kjellanderb24317b2016-02-10 15:54:432 * Copyright 2012 The WebRTC project authors. All Rights Reserved.
henrike@webrtc.org28e20752013-07-10 00:45:363 *
kjellanderb24317b2016-02-10 15:54:434 * 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:369 */
10
kwibergd1fe2812016-04-27 13:47:2911#include <memory>
henrike@webrtc.org28e20752013-07-10 00:45:3612#include <string>
kwiberg0eb15ed2015-12-17 11:04:1513#include <utility>
Steve Anton36b29d12017-10-30 16:57:4214#include <vector>
henrike@webrtc.org28e20752013-07-10 00:45:3615
Karl Wiberg1b0eae32017-10-17 12:48:5416#include "api/audio_codecs/builtin_audio_decoder_factory.h"
17#include "api/audio_codecs/builtin_audio_encoder_factory.h"
Mirko Bonadei92ea95e2017-09-15 04:47:3118#include "api/mediastreaminterface.h"
Anders Carlsson67537952018-05-03 09:28:2919#include "api/video_codecs/builtin_video_decoder_factory.h"
20#include "api/video_codecs/builtin_video_encoder_factory.h"
Mirko Bonadei92ea95e2017-09-15 04:47:3121#include "media/base/fakevideocapturer.h"
Mirko Bonadei92ea95e2017-09-15 04:47:3122#include "p2p/base/fakeportallocator.h"
23#include "pc/peerconnectionfactory.h"
henrika919dc2e2017-10-12 12:24:5524#include "pc/test/fakeaudiocapturemodule.h"
Mirko Bonadei92ea95e2017-09-15 04:47:3125#include "rtc_base/gunit.h"
Patrik Höglund563934e2017-09-15 07:04:2826
ossu7bb87ee2017-01-23 12:56:2527#ifdef WEBRTC_ANDROID
Mirko Bonadei92ea95e2017-09-15 04:47:3128#include "pc/test/androidtestinitializer.h"
ossu7bb87ee2017-01-23 12:56:2529#endif
Mirko Bonadei92ea95e2017-09-15 04:47:3130#include "pc/test/fakertccertificategenerator.h"
31#include "pc/test/fakevideotrackrenderer.h"
henrike@webrtc.org28e20752013-07-10 00:45:3632
perkj@webrtc.orgc2dd5ee2014-11-04 11:31:2933using webrtc::DataChannelInterface;
Henrik Boström5e56c592015-08-11 08:33:1334using webrtc::FakeVideoTrackRenderer;
henrike@webrtc.org28e20752013-07-10 00:45:3635using webrtc::MediaStreamInterface;
36using webrtc::PeerConnectionFactoryInterface;
37using webrtc::PeerConnectionInterface;
38using webrtc::PeerConnectionObserver;
perkja3ede6c2016-03-08 00:27:4839using webrtc::VideoTrackSourceInterface;
henrike@webrtc.org28e20752013-07-10 00:45:3640using webrtc::VideoTrackInterface;
41
42namespace {
43
henrike@webrtc.org28e20752013-07-10 00:45:3644static const char kStunIceServer[] = "stun:stun.l.google.com:19302";
45static const char kTurnIceServer[] = "turn:test%40hello.com@test.com:1234";
46static const char kTurnIceServerWithTransport[] =
47 "turn:test@hello.com?transport=tcp";
48static const char kSecureTurnIceServer[] =
49 "turns:test@hello.com?transport=tcp";
wu@webrtc.org78187522013-10-07 23:32:0250static const char kSecureTurnIceServerWithoutTransportParam[] =
sergeyu@chromium.org5bc25c42013-12-05 00:24:0651 "turns:test_no_transport@hello.com:443";
52static const char kSecureTurnIceServerWithoutTransportAndPortParam[] =
wu@webrtc.org78187522013-10-07 23:32:0253 "turns:test_no_transport@hello.com";
henrike@webrtc.org28e20752013-07-10 00:45:3654static const char kTurnIceServerWithNoUsernameInUri[] =
55 "turn:test.com:1234";
56static const char kTurnPassword[] = "turnpassword";
wu@webrtc.org91053e72013-08-10 07:18:0457static const int kDefaultStunPort = 3478;
58static const int kDefaultStunTlsPort = 5349;
henrike@webrtc.org28e20752013-07-10 00:45:3659static const char kTurnUsername[] = "test";
sergeyu@chromium.orga23f0ca2013-11-13 22:48:5260static const char kStunIceServerWithIPv4Address[] = "stun:1.2.3.4:1234";
61static const char kStunIceServerWithIPv4AddressWithoutPort[] = "stun:1.2.3.4";
62static const char kStunIceServerWithIPv6Address[] = "stun:[2401:fa00:4::]:1234";
63static const char kStunIceServerWithIPv6AddressWithoutPort[] =
64 "stun:[2401:fa00:4::]";
sergeyu@chromium.orga23f0ca2013-11-13 22:48:5265static const char kTurnIceServerWithIPv6Address[] =
66 "turn:test@[2401:fa00:4::]:1234";
henrike@webrtc.org28e20752013-07-10 00:45:3667
68class NullPeerConnectionObserver : public PeerConnectionObserver {
69 public:
Henrik Kjellander3fe372d2016-05-12 06:10:5270 virtual ~NullPeerConnectionObserver() = default;
nisse63b14b72017-01-31 11:34:0171 void OnSignalingChange(
72 PeerConnectionInterface::SignalingState new_state) override {}
73 void OnAddStream(rtc::scoped_refptr<MediaStreamInterface> stream) override {}
74 void OnRemoveStream(
75 rtc::scoped_refptr<MediaStreamInterface> stream) override {}
76 void OnDataChannel(
77 rtc::scoped_refptr<DataChannelInterface> data_channel) override {}
78 void OnRenegotiationNeeded() override {}
79 void OnIceConnectionChange(
80 PeerConnectionInterface::IceConnectionState new_state) override {}
81 void OnIceGatheringChange(
82 PeerConnectionInterface::IceGatheringState new_state) override {}
83 void OnIceCandidate(
84 const webrtc::IceCandidateInterface* candidate) override {}
henrike@webrtc.org28e20752013-07-10 00:45:3685};
86
87} // namespace
88
89class PeerConnectionFactoryTest : public testing::Test {
90 void SetUp() {
phoglund37ebcf02016-01-08 13:04:5791#ifdef WEBRTC_ANDROID
92 webrtc::InitializeAndroidObjects();
93#endif
henrika919dc2e2017-10-12 12:24:5594 // Use fake audio device module since we're only testing the interface
95 // level, and using a real one could make tests flaky e.g. when run in
96 // parallel.
danilchape9021a32016-05-17 08:52:0297 factory_ = webrtc::CreatePeerConnectionFactory(
Anders Carlsson67537952018-05-03 09:28:2998 rtc::Thread::Current(), rtc::Thread::Current(), rtc::Thread::Current(),
99 rtc::scoped_refptr<webrtc::AudioDeviceModule>(
100 FakeAudioCaptureModule::Create()),
Karl Wiberg1b0eae32017-10-17 12:48:54101 webrtc::CreateBuiltinAudioEncoderFactory(),
Anders Carlsson67537952018-05-03 09:28:29102 webrtc::CreateBuiltinAudioDecoderFactory(),
103 webrtc::CreateBuiltinVideoEncoderFactory(),
104 webrtc::CreateBuiltinVideoDecoderFactory(), nullptr /* audio_mixer */,
105 nullptr /* audio_processing */);
henrike@webrtc.org28e20752013-07-10 00:45:36106
107 ASSERT_TRUE(factory_.get() != NULL);
Taylor Brandstetter0c7e9f52015-12-29 22:14:52108 port_allocator_.reset(
109 new cricket::FakePortAllocator(rtc::Thread::Current(), nullptr));
110 raw_port_allocator_ = port_allocator_.get();
henrike@webrtc.org28e20752013-07-10 00:45:36111 }
112
113 protected:
Taylor Brandstetter0c7e9f52015-12-29 22:14:52114 void VerifyStunServers(cricket::ServerAddresses stun_servers) {
115 EXPECT_EQ(stun_servers, raw_port_allocator_->stun_servers());
henrike@webrtc.org28e20752013-07-10 00:45:36116 }
117
Taylor Brandstetter0c7e9f52015-12-29 22:14:52118 void VerifyTurnServers(std::vector<cricket::RelayServerConfig> turn_servers) {
119 EXPECT_EQ(turn_servers.size(), raw_port_allocator_->turn_servers().size());
120 for (size_t i = 0; i < turn_servers.size(); ++i) {
121 ASSERT_EQ(1u, turn_servers[i].ports.size());
122 EXPECT_EQ(1u, raw_port_allocator_->turn_servers()[i].ports.size());
123 EXPECT_EQ(
124 turn_servers[i].ports[0].address.ToString(),
125 raw_port_allocator_->turn_servers()[i].ports[0].address.ToString());
126 EXPECT_EQ(turn_servers[i].ports[0].proto,
127 raw_port_allocator_->turn_servers()[i].ports[0].proto);
128 EXPECT_EQ(turn_servers[i].credentials.username,
129 raw_port_allocator_->turn_servers()[i].credentials.username);
130 EXPECT_EQ(turn_servers[i].credentials.password,
131 raw_port_allocator_->turn_servers()[i].credentials.password);
henrike@webrtc.org28e20752013-07-10 00:45:36132 }
133 }
134
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52135 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory_;
henrike@webrtc.org28e20752013-07-10 00:45:36136 NullPeerConnectionObserver observer_;
kwibergd1fe2812016-04-27 13:47:29137 std::unique_ptr<cricket::FakePortAllocator> port_allocator_;
Taylor Brandstetter0c7e9f52015-12-29 22:14:52138 // Since the PC owns the port allocator after it's been initialized,
139 // this should only be used when known to be safe.
140 cricket::FakePortAllocator* raw_port_allocator_;
henrike@webrtc.org28e20752013-07-10 00:45:36141};
142
143// Verify creation of PeerConnection using internal ADM, video factory and
144// internal libjingle threads.
henrika919dc2e2017-10-12 12:24:55145// TODO(henrika): disabling this test since relying on real audio can result in
146// flaky tests and focus on details that are out of scope for you might expect
147// for a PeerConnectionFactory unit test.
148// See https://bugs.chromium.org/p/webrtc/issues/detail?id=7806 for details.
149TEST(PeerConnectionFactoryTestInternal, DISABLED_CreatePCUsingInternalModules) {
phoglund37ebcf02016-01-08 13:04:57150#ifdef WEBRTC_ANDROID
151 webrtc::InitializeAndroidObjects();
152#endif
153
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52154 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory(
Karl Wiberg1b0eae32017-10-17 12:48:54155 webrtc::CreatePeerConnectionFactory(
Anders Carlsson67537952018-05-03 09:28:29156 nullptr /* network_thread */, nullptr /* worker_thread */,
157 nullptr /* signaling_thread */, nullptr /* default_adm */,
Karl Wiberg1b0eae32017-10-17 12:48:54158 webrtc::CreateBuiltinAudioEncoderFactory(),
Anders Carlsson67537952018-05-03 09:28:29159 webrtc::CreateBuiltinAudioDecoderFactory(),
160 webrtc::CreateBuiltinVideoEncoderFactory(),
161 webrtc::CreateBuiltinVideoDecoderFactory(), nullptr /* audio_mixer */,
162 nullptr /* audio_processing */));
henrike@webrtc.org28e20752013-07-10 00:45:36163
164 NullPeerConnectionObserver observer;
Taylor Brandstetter0c7e9f52015-12-29 22:14:52165 webrtc::PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36166
Henrik Boströmd79599d2016-06-01 11:58:50167 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
168 new FakeRTCCertificateGenerator());
169 rtc::scoped_refptr<PeerConnectionInterface> pc(factory->CreatePeerConnection(
170 config, nullptr, nullptr, std::move(cert_generator), &observer));
henrike@webrtc.org28e20752013-07-10 00:45:36171
Henrik Boström5e56c592015-08-11 08:33:13172 EXPECT_TRUE(pc.get() != nullptr);
henrike@webrtc.org28e20752013-07-10 00:45:36173}
174
175// This test verifies creation of PeerConnection with valid STUN and TURN
176// configuration. Also verifies the URL's parsed correctly as expected.
177TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServers) {
buildbot@webrtc.org41451d42014-05-03 05:39:45178 PeerConnectionInterface::RTCConfiguration config;
179 webrtc::PeerConnectionInterface::IceServer ice_server;
180 ice_server.uri = kStunIceServer;
181 config.servers.push_back(ice_server);
182 ice_server.uri = kTurnIceServer;
183 ice_server.password = kTurnPassword;
184 config.servers.push_back(ice_server);
185 ice_server.uri = kTurnIceServerWithTransport;
186 ice_server.password = kTurnPassword;
187 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 11:58:50188 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
189 new FakeRTCCertificateGenerator());
190 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
191 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
192 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 22:14:52193 ASSERT_TRUE(pc.get() != NULL);
194 cricket::ServerAddresses stun_servers;
195 rtc::SocketAddress stun1("stun.l.google.com", 19302);
196 stun_servers.insert(stun1);
197 VerifyStunServers(stun_servers);
198 std::vector<cricket::RelayServerConfig> turn_servers;
199 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com",
hnsl277b2502016-12-13 13:17:23200 kTurnPassword, cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 22:14:52201 turn_servers.push_back(turn1);
202 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test",
hnsl277b2502016-12-13 13:17:23203 kTurnPassword, cricket::PROTO_TCP);
Taylor Brandstetter0c7e9f52015-12-29 22:14:52204 turn_servers.push_back(turn2);
205 VerifyTurnServers(turn_servers);
buildbot@webrtc.org41451d42014-05-03 05:39:45206}
207
208// This test verifies creation of PeerConnection with valid STUN and TURN
Joachim Bauch7c4e7452015-05-28 21:06:30209// configuration. Also verifies the list of URL's parsed correctly as expected.
210TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServersUrls) {
211 PeerConnectionInterface::RTCConfiguration config;
212 webrtc::PeerConnectionInterface::IceServer ice_server;
213 ice_server.urls.push_back(kStunIceServer);
214 ice_server.urls.push_back(kTurnIceServer);
215 ice_server.urls.push_back(kTurnIceServerWithTransport);
216 ice_server.password = kTurnPassword;
217 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 11:58:50218 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
219 new FakeRTCCertificateGenerator());
220 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
221 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
222 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 22:14:52223 ASSERT_TRUE(pc.get() != NULL);
224 cricket::ServerAddresses stun_servers;
225 rtc::SocketAddress stun1("stun.l.google.com", 19302);
226 stun_servers.insert(stun1);
227 VerifyStunServers(stun_servers);
228 std::vector<cricket::RelayServerConfig> turn_servers;
229 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com",
hnsl277b2502016-12-13 13:17:23230 kTurnPassword, cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 22:14:52231 turn_servers.push_back(turn1);
232 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test",
hnsl277b2502016-12-13 13:17:23233 kTurnPassword, cricket::PROTO_TCP);
Taylor Brandstetter0c7e9f52015-12-29 22:14:52234 turn_servers.push_back(turn2);
235 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36236}
237
238TEST_F(PeerConnectionFactoryTest, CreatePCUsingNoUsernameInUri) {
buildbot@webrtc.org41451d42014-05-03 05:39:45239 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36240 webrtc::PeerConnectionInterface::IceServer ice_server;
241 ice_server.uri = kStunIceServer;
buildbot@webrtc.org41451d42014-05-03 05:39:45242 config.servers.push_back(ice_server);
henrike@webrtc.org28e20752013-07-10 00:45:36243 ice_server.uri = kTurnIceServerWithNoUsernameInUri;
244 ice_server.username = kTurnUsername;
245 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45246 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 11:58:50247 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
248 new FakeRTCCertificateGenerator());
249 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
250 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
251 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 22:14:52252 ASSERT_TRUE(pc.get() != NULL);
253 std::vector<cricket::RelayServerConfig> turn_servers;
254 cricket::RelayServerConfig turn("test.com", 1234, kTurnUsername,
hnsl277b2502016-12-13 13:17:23255 kTurnPassword, cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 22:14:52256 turn_servers.push_back(turn);
257 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36258}
259
260// This test verifies the PeerConnection created properly with TURN url which
261// has transport parameter in it.
262TEST_F(PeerConnectionFactoryTest, CreatePCUsingTurnUrlWithTransportParam) {
buildbot@webrtc.org41451d42014-05-03 05:39:45263 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36264 webrtc::PeerConnectionInterface::IceServer ice_server;
265 ice_server.uri = kTurnIceServerWithTransport;
266 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45267 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 11:58:50268 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
269 new FakeRTCCertificateGenerator());
270 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
271 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
272 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 22:14:52273 ASSERT_TRUE(pc.get() != NULL);
274 std::vector<cricket::RelayServerConfig> turn_servers;
275 cricket::RelayServerConfig turn("hello.com", kDefaultStunPort, "test",
hnsl277b2502016-12-13 13:17:23276 kTurnPassword, cricket::PROTO_TCP);
Taylor Brandstetter0c7e9f52015-12-29 22:14:52277 turn_servers.push_back(turn);
278 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36279}
280
henrike@webrtc.org28e20752013-07-10 00:45:36281TEST_F(PeerConnectionFactoryTest, CreatePCUsingSecureTurnUrl) {
buildbot@webrtc.org41451d42014-05-03 05:39:45282 PeerConnectionInterface::RTCConfiguration config;
henrike@webrtc.org28e20752013-07-10 00:45:36283 webrtc::PeerConnectionInterface::IceServer ice_server;
284 ice_server.uri = kSecureTurnIceServer;
285 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45286 config.servers.push_back(ice_server);
wu@webrtc.org78187522013-10-07 23:32:02287 ice_server.uri = kSecureTurnIceServerWithoutTransportParam;
288 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45289 config.servers.push_back(ice_server);
sergeyu@chromium.org5bc25c42013-12-05 00:24:06290 ice_server.uri = kSecureTurnIceServerWithoutTransportAndPortParam;
291 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45292 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 11:58:50293 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
294 new FakeRTCCertificateGenerator());
295 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
296 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
297 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 22:14:52298 ASSERT_TRUE(pc.get() != NULL);
299 std::vector<cricket::RelayServerConfig> turn_servers;
300 cricket::RelayServerConfig turn1("hello.com", kDefaultStunTlsPort, "test",
hnsl277b2502016-12-13 13:17:23301 kTurnPassword, cricket::PROTO_TLS);
Taylor Brandstetter0c7e9f52015-12-29 22:14:52302 turn_servers.push_back(turn1);
wu@webrtc.org78187522013-10-07 23:32:02303 // TURNS with transport param should be default to tcp.
Taylor Brandstetter0c7e9f52015-12-29 22:14:52304 cricket::RelayServerConfig turn2("hello.com", 443, "test_no_transport",
hnsl277b2502016-12-13 13:17:23305 kTurnPassword, cricket::PROTO_TLS);
Taylor Brandstetter0c7e9f52015-12-29 22:14:52306 turn_servers.push_back(turn2);
307 cricket::RelayServerConfig turn3("hello.com", kDefaultStunTlsPort,
308 "test_no_transport", kTurnPassword,
hnsl277b2502016-12-13 13:17:23309 cricket::PROTO_TLS);
Taylor Brandstetter0c7e9f52015-12-29 22:14:52310 turn_servers.push_back(turn3);
311 VerifyTurnServers(turn_servers);
henrike@webrtc.org28e20752013-07-10 00:45:36312}
313
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52314TEST_F(PeerConnectionFactoryTest, CreatePCUsingIPLiteralAddress) {
buildbot@webrtc.org41451d42014-05-03 05:39:45315 PeerConnectionInterface::RTCConfiguration config;
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52316 webrtc::PeerConnectionInterface::IceServer ice_server;
317 ice_server.uri = kStunIceServerWithIPv4Address;
buildbot@webrtc.org41451d42014-05-03 05:39:45318 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52319 ice_server.uri = kStunIceServerWithIPv4AddressWithoutPort;
buildbot@webrtc.org41451d42014-05-03 05:39:45320 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52321 ice_server.uri = kStunIceServerWithIPv6Address;
buildbot@webrtc.org41451d42014-05-03 05:39:45322 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52323 ice_server.uri = kStunIceServerWithIPv6AddressWithoutPort;
buildbot@webrtc.org41451d42014-05-03 05:39:45324 config.servers.push_back(ice_server);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52325 ice_server.uri = kTurnIceServerWithIPv6Address;
326 ice_server.password = kTurnPassword;
buildbot@webrtc.org41451d42014-05-03 05:39:45327 config.servers.push_back(ice_server);
Henrik Boströmd79599d2016-06-01 11:58:50328 std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
329 new FakeRTCCertificateGenerator());
330 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection(
331 config, nullptr, std::move(port_allocator_), std::move(cert_generator),
332 &observer_));
Taylor Brandstetter0c7e9f52015-12-29 22:14:52333 ASSERT_TRUE(pc.get() != NULL);
334 cricket::ServerAddresses stun_servers;
335 rtc::SocketAddress stun1("1.2.3.4", 1234);
336 stun_servers.insert(stun1);
337 rtc::SocketAddress stun2("1.2.3.4", 3478);
338 stun_servers.insert(stun2); // Default port
339 rtc::SocketAddress stun3("2401:fa00:4::", 1234);
340 stun_servers.insert(stun3);
341 rtc::SocketAddress stun4("2401:fa00:4::", 3478);
342 stun_servers.insert(stun4); // Default port
343 VerifyStunServers(stun_servers);
buildbot@webrtc.orgf875f152014-04-14 16:06:21344
Taylor Brandstetter0c7e9f52015-12-29 22:14:52345 std::vector<cricket::RelayServerConfig> turn_servers;
346 cricket::RelayServerConfig turn1("2401:fa00:4::", 1234, "test", kTurnPassword,
hnsl277b2502016-12-13 13:17:23347 cricket::PROTO_UDP);
Taylor Brandstetter0c7e9f52015-12-29 22:14:52348 turn_servers.push_back(turn1);
349 VerifyTurnServers(turn_servers);
sergeyu@chromium.orga23f0ca2013-11-13 22:48:52350}
351
henrike@webrtc.org28e20752013-07-10 00:45:36352// This test verifies the captured stream is rendered locally using a
353// local video track.
354TEST_F(PeerConnectionFactoryTest, LocalRendering) {
Tommi1829af62018-02-06 08:29:17355 cricket::FakeVideoCapturerWithTaskQueue* capturer =
356 new cricket::FakeVideoCapturerWithTaskQueue();
deadbeef112b2e92017-02-11 04:13:37357 // The source takes ownership of |capturer|, but we keep a raw pointer to
358 // inject fake frames.
perkja3ede6c2016-03-08 00:27:48359 rtc::scoped_refptr<VideoTrackSourceInterface> source(
deadbeef112b2e92017-02-11 04:13:37360 factory_->CreateVideoSource(
361 std::unique_ptr<cricket::VideoCapturer>(capturer), NULL));
henrike@webrtc.org28e20752013-07-10 00:45:36362 ASSERT_TRUE(source.get() != NULL);
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52363 rtc::scoped_refptr<VideoTrackInterface> track(
henrike@webrtc.org28e20752013-07-10 00:45:36364 factory_->CreateVideoTrack("testlabel", source));
365 ASSERT_TRUE(track.get() != NULL);
366 FakeVideoTrackRenderer local_renderer(track);
367
368 EXPECT_EQ(0, local_renderer.num_rendered_frames());
369 EXPECT_TRUE(capturer->CaptureFrame());
370 EXPECT_EQ(1, local_renderer.num_rendered_frames());
nisse81354f52016-01-19 08:23:24371 EXPECT_FALSE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36372
373 track->set_enabled(false);
374 EXPECT_TRUE(capturer->CaptureFrame());
nisse81354f52016-01-19 08:23:24375 EXPECT_EQ(2, local_renderer.num_rendered_frames());
376 EXPECT_TRUE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36377
378 track->set_enabled(true);
379 EXPECT_TRUE(capturer->CaptureFrame());
nisse81354f52016-01-19 08:23:24380 EXPECT_EQ(3, local_renderer.num_rendered_frames());
381 EXPECT_FALSE(local_renderer.black_frame());
henrike@webrtc.org28e20752013-07-10 00:45:36382}