OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 10 matching lines...) Expand all Loading... |
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; | 21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, | 22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | 23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 */ | 26 */ |
27 | 27 |
28 #include <string> | 28 #include <string> |
29 #include <utility> | 29 #include <utility> |
30 | 30 |
31 #include "talk/app/webrtc/fakeportallocatorfactory.h" | |
32 #include "talk/app/webrtc/mediastreaminterface.h" | 31 #include "talk/app/webrtc/mediastreaminterface.h" |
33 #include "talk/app/webrtc/peerconnectionfactory.h" | 32 #include "talk/app/webrtc/peerconnectionfactory.h" |
34 #include "talk/app/webrtc/test/fakedtlsidentitystore.h" | 33 #include "talk/app/webrtc/test/fakedtlsidentitystore.h" |
35 #include "talk/app/webrtc/test/fakevideotrackrenderer.h" | 34 #include "talk/app/webrtc/test/fakevideotrackrenderer.h" |
36 #include "talk/app/webrtc/videosourceinterface.h" | 35 #include "talk/app/webrtc/videosourceinterface.h" |
37 #include "talk/media/base/fakevideocapturer.h" | 36 #include "talk/media/base/fakevideocapturer.h" |
38 #include "talk/media/webrtc/webrtccommon.h" | 37 #include "talk/media/webrtc/webrtccommon.h" |
39 #include "talk/media/webrtc/webrtcvoe.h" | 38 #include "talk/media/webrtc/webrtcvoe.h" |
40 #include "webrtc/base/gunit.h" | 39 #include "webrtc/base/gunit.h" |
41 #include "webrtc/base/scoped_ptr.h" | 40 #include "webrtc/base/scoped_ptr.h" |
42 #include "webrtc/base/thread.h" | 41 #include "webrtc/base/thread.h" |
| 42 #include "webrtc/p2p/client/fakeportallocator.h" |
43 | 43 |
44 using webrtc::DataChannelInterface; | 44 using webrtc::DataChannelInterface; |
45 using webrtc::DtlsIdentityStoreInterface; | 45 using webrtc::DtlsIdentityStoreInterface; |
46 using webrtc::FakeVideoTrackRenderer; | 46 using webrtc::FakeVideoTrackRenderer; |
47 using webrtc::MediaStreamInterface; | 47 using webrtc::MediaStreamInterface; |
48 using webrtc::PeerConnectionFactoryInterface; | 48 using webrtc::PeerConnectionFactoryInterface; |
49 using webrtc::PeerConnectionInterface; | 49 using webrtc::PeerConnectionInterface; |
50 using webrtc::PeerConnectionObserver; | 50 using webrtc::PeerConnectionObserver; |
51 using webrtc::PortAllocatorFactoryInterface; | |
52 using webrtc::VideoSourceInterface; | 51 using webrtc::VideoSourceInterface; |
53 using webrtc::VideoTrackInterface; | 52 using webrtc::VideoTrackInterface; |
54 | 53 |
55 namespace { | 54 namespace { |
56 | 55 |
57 typedef std::vector<PortAllocatorFactoryInterface::StunConfiguration> | |
58 StunConfigurations; | |
59 typedef std::vector<PortAllocatorFactoryInterface::TurnConfiguration> | |
60 TurnConfigurations; | |
61 | |
62 static const char kStunIceServer[] = "stun:stun.l.google.com:19302"; | 56 static const char kStunIceServer[] = "stun:stun.l.google.com:19302"; |
63 static const char kTurnIceServer[] = "turn:test%40hello.com@test.com:1234"; | 57 static const char kTurnIceServer[] = "turn:test%40hello.com@test.com:1234"; |
64 static const char kTurnIceServerWithTransport[] = | 58 static const char kTurnIceServerWithTransport[] = |
65 "turn:test@hello.com?transport=tcp"; | 59 "turn:test@hello.com?transport=tcp"; |
66 static const char kSecureTurnIceServer[] = | 60 static const char kSecureTurnIceServer[] = |
67 "turns:test@hello.com?transport=tcp"; | 61 "turns:test@hello.com?transport=tcp"; |
68 static const char kSecureTurnIceServerWithoutTransportParam[] = | 62 static const char kSecureTurnIceServerWithoutTransportParam[] = |
69 "turns:test_no_transport@hello.com:443"; | 63 "turns:test_no_transport@hello.com:443"; |
70 static const char kSecureTurnIceServerWithoutTransportAndPortParam[] = | 64 static const char kSecureTurnIceServerWithoutTransportAndPortParam[] = |
71 "turns:test_no_transport@hello.com"; | 65 "turns:test_no_transport@hello.com"; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 | 98 |
105 class PeerConnectionFactoryTest : public testing::Test { | 99 class PeerConnectionFactoryTest : public testing::Test { |
106 void SetUp() { | 100 void SetUp() { |
107 factory_ = webrtc::CreatePeerConnectionFactory(rtc::Thread::Current(), | 101 factory_ = webrtc::CreatePeerConnectionFactory(rtc::Thread::Current(), |
108 rtc::Thread::Current(), | 102 rtc::Thread::Current(), |
109 NULL, | 103 NULL, |
110 NULL, | 104 NULL, |
111 NULL); | 105 NULL); |
112 | 106 |
113 ASSERT_TRUE(factory_.get() != NULL); | 107 ASSERT_TRUE(factory_.get() != NULL); |
114 allocator_factory_ = webrtc::FakePortAllocatorFactory::Create(); | 108 port_allocator_.reset( |
| 109 new cricket::FakePortAllocator(rtc::Thread::Current(), nullptr)); |
| 110 raw_port_allocator_ = port_allocator_.get(); |
115 } | 111 } |
116 | 112 |
117 protected: | 113 protected: |
118 void VerifyStunConfigurations(StunConfigurations stun_config) { | 114 void VerifyStunServers(cricket::ServerAddresses stun_servers) { |
119 webrtc::FakePortAllocatorFactory* allocator = | 115 EXPECT_EQ(stun_servers, raw_port_allocator_->stun_servers()); |
120 static_cast<webrtc::FakePortAllocatorFactory*>( | |
121 allocator_factory_.get()); | |
122 ASSERT_TRUE(allocator != NULL); | |
123 EXPECT_EQ(stun_config.size(), allocator->stun_configs().size()); | |
124 for (size_t i = 0; i < stun_config.size(); ++i) { | |
125 EXPECT_EQ(stun_config[i].server.ToString(), | |
126 allocator->stun_configs()[i].server.ToString()); | |
127 } | |
128 } | 116 } |
129 | 117 |
130 void VerifyTurnConfigurations(TurnConfigurations turn_config) { | 118 void VerifyTurnServers(std::vector<cricket::RelayServerConfig> turn_servers) { |
131 webrtc::FakePortAllocatorFactory* allocator = | 119 EXPECT_EQ(turn_servers.size(), raw_port_allocator_->turn_servers().size()); |
132 static_cast<webrtc::FakePortAllocatorFactory*>( | 120 for (size_t i = 0; i < turn_servers.size(); ++i) { |
133 allocator_factory_.get()); | 121 ASSERT_EQ(1u, turn_servers[i].ports.size()); |
134 ASSERT_TRUE(allocator != NULL); | 122 EXPECT_EQ(1u, raw_port_allocator_->turn_servers()[i].ports.size()); |
135 EXPECT_EQ(turn_config.size(), allocator->turn_configs().size()); | 123 EXPECT_EQ( |
136 for (size_t i = 0; i < turn_config.size(); ++i) { | 124 turn_servers[i].ports[0].address.ToString(), |
137 EXPECT_EQ(turn_config[i].server.ToString(), | 125 raw_port_allocator_->turn_servers()[i].ports[0].address.ToString()); |
138 allocator->turn_configs()[i].server.ToString()); | 126 EXPECT_EQ(turn_servers[i].ports[0].proto, |
139 EXPECT_EQ(turn_config[i].username, allocator->turn_configs()[i].username); | 127 raw_port_allocator_->turn_servers()[i].ports[0].proto); |
140 EXPECT_EQ(turn_config[i].password, allocator->turn_configs()[i].password); | 128 EXPECT_EQ(turn_servers[i].credentials.username, |
141 EXPECT_EQ(turn_config[i].transport_type, | 129 raw_port_allocator_->turn_servers()[i].credentials.username); |
142 allocator->turn_configs()[i].transport_type); | 130 EXPECT_EQ(turn_servers[i].credentials.password, |
| 131 raw_port_allocator_->turn_servers()[i].credentials.password); |
143 } | 132 } |
144 } | 133 } |
145 | 134 |
146 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory_; | 135 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory_; |
147 NullPeerConnectionObserver observer_; | 136 NullPeerConnectionObserver observer_; |
148 rtc::scoped_refptr<PortAllocatorFactoryInterface> allocator_factory_; | 137 rtc::scoped_ptr<cricket::FakePortAllocator> port_allocator_; |
| 138 // 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_; |
149 }; | 141 }; |
150 | 142 |
151 // Verify creation of PeerConnection using internal ADM, video factory and | 143 // Verify creation of PeerConnection using internal ADM, video factory and |
152 // internal libjingle threads. | 144 // internal libjingle threads. |
153 TEST(PeerConnectionFactoryTestInternal, CreatePCUsingInternalModules) { | 145 TEST(PeerConnectionFactoryTestInternal, CreatePCUsingInternalModules) { |
154 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory( | 146 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory( |
155 webrtc::CreatePeerConnectionFactory()); | 147 webrtc::CreatePeerConnectionFactory()); |
156 | 148 |
157 NullPeerConnectionObserver observer; | 149 NullPeerConnectionObserver observer; |
158 webrtc::PeerConnectionInterface::IceServers servers; | 150 webrtc::PeerConnectionInterface::RTCConfiguration config; |
159 | 151 |
160 rtc::scoped_ptr<FakeDtlsIdentityStore> dtls_identity_store( | 152 rtc::scoped_ptr<FakeDtlsIdentityStore> dtls_identity_store( |
161 new FakeDtlsIdentityStore()); | 153 new FakeDtlsIdentityStore()); |
162 rtc::scoped_refptr<PeerConnectionInterface> pc(factory->CreatePeerConnection( | 154 rtc::scoped_refptr<PeerConnectionInterface> pc(factory->CreatePeerConnection( |
163 servers, nullptr, nullptr, std::move(dtls_identity_store), &observer)); | 155 config, nullptr, nullptr, std::move(dtls_identity_store), &observer)); |
164 | 156 |
165 EXPECT_TRUE(pc.get() != nullptr); | 157 EXPECT_TRUE(pc.get() != nullptr); |
166 } | 158 } |
167 | 159 |
168 // This test verifies creation of PeerConnection with valid STUN and TURN | 160 // This test verifies creation of PeerConnection with valid STUN and TURN |
169 // configuration. Also verifies the URL's parsed correctly as expected. | 161 // configuration. Also verifies the URL's parsed correctly as expected. |
170 TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServers) { | 162 TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServers) { |
171 PeerConnectionInterface::RTCConfiguration config; | 163 PeerConnectionInterface::RTCConfiguration config; |
172 webrtc::PeerConnectionInterface::IceServer ice_server; | 164 webrtc::PeerConnectionInterface::IceServer ice_server; |
173 ice_server.uri = kStunIceServer; | 165 ice_server.uri = kStunIceServer; |
174 config.servers.push_back(ice_server); | 166 config.servers.push_back(ice_server); |
175 ice_server.uri = kTurnIceServer; | 167 ice_server.uri = kTurnIceServer; |
176 ice_server.password = kTurnPassword; | 168 ice_server.password = kTurnPassword; |
177 config.servers.push_back(ice_server); | 169 config.servers.push_back(ice_server); |
178 ice_server.uri = kTurnIceServerWithTransport; | 170 ice_server.uri = kTurnIceServerWithTransport; |
179 ice_server.password = kTurnPassword; | 171 ice_server.password = kTurnPassword; |
180 config.servers.push_back(ice_server); | 172 config.servers.push_back(ice_server); |
181 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store( | 173 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store( |
182 new FakeDtlsIdentityStore()); | 174 new FakeDtlsIdentityStore()); |
183 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection( | 175 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection( |
184 config, nullptr, allocator_factory_.get(), std::move(dtls_identity_store), | 176 config, nullptr, std::move(port_allocator_), |
185 &observer_)); | 177 std::move(dtls_identity_store), &observer_)); |
186 EXPECT_TRUE(pc.get() != NULL); | 178 ASSERT_TRUE(pc.get() != NULL); |
187 StunConfigurations stun_configs; | 179 cricket::ServerAddresses stun_servers; |
188 webrtc::PortAllocatorFactoryInterface::StunConfiguration stun1( | 180 rtc::SocketAddress stun1("stun.l.google.com", 19302); |
189 "stun.l.google.com", 19302); | 181 stun_servers.insert(stun1); |
190 stun_configs.push_back(stun1); | 182 VerifyStunServers(stun_servers); |
191 VerifyStunConfigurations(stun_configs); | 183 std::vector<cricket::RelayServerConfig> turn_servers; |
192 TurnConfigurations turn_configs; | 184 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com", |
193 webrtc::PortAllocatorFactoryInterface::TurnConfiguration turn1( | 185 kTurnPassword, cricket::PROTO_UDP, false); |
194 "test.com", 1234, "test@hello.com", kTurnPassword, "udp", false); | 186 turn_servers.push_back(turn1); |
195 turn_configs.push_back(turn1); | 187 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test", |
196 webrtc::PortAllocatorFactoryInterface::TurnConfiguration turn2( | 188 kTurnPassword, cricket::PROTO_TCP, false); |
197 "hello.com", kDefaultStunPort, "test", kTurnPassword, "tcp", false); | 189 turn_servers.push_back(turn2); |
198 turn_configs.push_back(turn2); | 190 VerifyTurnServers(turn_servers); |
199 VerifyTurnConfigurations(turn_configs); | |
200 } | 191 } |
201 | 192 |
202 // This test verifies creation of PeerConnection with valid STUN and TURN | 193 // This test verifies creation of PeerConnection with valid STUN and TURN |
203 // configuration. Also verifies the list of URL's parsed correctly as expected. | 194 // configuration. Also verifies the list of URL's parsed correctly as expected. |
204 TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServersUrls) { | 195 TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServersUrls) { |
205 PeerConnectionInterface::RTCConfiguration config; | 196 PeerConnectionInterface::RTCConfiguration config; |
206 webrtc::PeerConnectionInterface::IceServer ice_server; | 197 webrtc::PeerConnectionInterface::IceServer ice_server; |
207 ice_server.urls.push_back(kStunIceServer); | 198 ice_server.urls.push_back(kStunIceServer); |
208 ice_server.urls.push_back(kTurnIceServer); | 199 ice_server.urls.push_back(kTurnIceServer); |
209 ice_server.urls.push_back(kTurnIceServerWithTransport); | 200 ice_server.urls.push_back(kTurnIceServerWithTransport); |
210 ice_server.password = kTurnPassword; | 201 ice_server.password = kTurnPassword; |
211 config.servers.push_back(ice_server); | 202 config.servers.push_back(ice_server); |
212 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store( | 203 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store( |
213 new FakeDtlsIdentityStore()); | 204 new FakeDtlsIdentityStore()); |
214 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection( | 205 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection( |
215 config, nullptr, allocator_factory_.get(), std::move(dtls_identity_store), | 206 config, nullptr, std::move(port_allocator_), |
216 &observer_)); | |
217 EXPECT_TRUE(pc.get() != NULL); | |
218 StunConfigurations stun_configs; | |
219 webrtc::PortAllocatorFactoryInterface::StunConfiguration stun1( | |
220 "stun.l.google.com", 19302); | |
221 stun_configs.push_back(stun1); | |
222 VerifyStunConfigurations(stun_configs); | |
223 TurnConfigurations turn_configs; | |
224 webrtc::PortAllocatorFactoryInterface::TurnConfiguration turn1( | |
225 "test.com", 1234, "test@hello.com", kTurnPassword, "udp", false); | |
226 turn_configs.push_back(turn1); | |
227 webrtc::PortAllocatorFactoryInterface::TurnConfiguration turn2( | |
228 "hello.com", kDefaultStunPort, "test", kTurnPassword, "tcp", false); | |
229 turn_configs.push_back(turn2); | |
230 VerifyTurnConfigurations(turn_configs); | |
231 } | |
232 | |
233 // This test verifies creation of PeerConnection with valid STUN and TURN | |
234 // configuration. Also verifies the URL's parsed correctly as expected. | |
235 // This version doesn't use RTCConfiguration. | |
236 // TODO(mallinath) - Remove this method after clients start using RTCConfig. | |
237 TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServersOldSignature) { | |
238 webrtc::PeerConnectionInterface::IceServers ice_servers; | |
239 webrtc::PeerConnectionInterface::IceServer ice_server; | |
240 ice_server.uri = kStunIceServer; | |
241 ice_servers.push_back(ice_server); | |
242 ice_server.uri = kTurnIceServer; | |
243 ice_server.password = kTurnPassword; | |
244 ice_servers.push_back(ice_server); | |
245 ice_server.uri = kTurnIceServerWithTransport; | |
246 ice_server.password = kTurnPassword; | |
247 ice_servers.push_back(ice_server); | |
248 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store( | |
249 new FakeDtlsIdentityStore()); | |
250 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection( | |
251 ice_servers, nullptr, allocator_factory_.get(), | |
252 std::move(dtls_identity_store), &observer_)); | 207 std::move(dtls_identity_store), &observer_)); |
253 EXPECT_TRUE(pc.get() != NULL); | 208 ASSERT_TRUE(pc.get() != NULL); |
254 StunConfigurations stun_configs; | 209 cricket::ServerAddresses stun_servers; |
255 webrtc::PortAllocatorFactoryInterface::StunConfiguration stun1( | 210 rtc::SocketAddress stun1("stun.l.google.com", 19302); |
256 "stun.l.google.com", 19302); | 211 stun_servers.insert(stun1); |
257 stun_configs.push_back(stun1); | 212 VerifyStunServers(stun_servers); |
258 VerifyStunConfigurations(stun_configs); | 213 std::vector<cricket::RelayServerConfig> turn_servers; |
259 TurnConfigurations turn_configs; | 214 cricket::RelayServerConfig turn1("test.com", 1234, "test@hello.com", |
260 webrtc::PortAllocatorFactoryInterface::TurnConfiguration turn1( | 215 kTurnPassword, cricket::PROTO_UDP, false); |
261 "test.com", 1234, "test@hello.com", kTurnPassword, "udp", false); | 216 turn_servers.push_back(turn1); |
262 turn_configs.push_back(turn1); | 217 cricket::RelayServerConfig turn2("hello.com", kDefaultStunPort, "test", |
263 webrtc::PortAllocatorFactoryInterface::TurnConfiguration turn2( | 218 kTurnPassword, cricket::PROTO_TCP, false); |
264 "hello.com", kDefaultStunPort, "test", kTurnPassword, "tcp", false); | 219 turn_servers.push_back(turn2); |
265 turn_configs.push_back(turn2); | 220 VerifyTurnServers(turn_servers); |
266 VerifyTurnConfigurations(turn_configs); | |
267 } | 221 } |
268 | 222 |
269 TEST_F(PeerConnectionFactoryTest, CreatePCUsingNoUsernameInUri) { | 223 TEST_F(PeerConnectionFactoryTest, CreatePCUsingNoUsernameInUri) { |
270 PeerConnectionInterface::RTCConfiguration config; | 224 PeerConnectionInterface::RTCConfiguration config; |
271 webrtc::PeerConnectionInterface::IceServer ice_server; | 225 webrtc::PeerConnectionInterface::IceServer ice_server; |
272 ice_server.uri = kStunIceServer; | 226 ice_server.uri = kStunIceServer; |
273 config.servers.push_back(ice_server); | 227 config.servers.push_back(ice_server); |
274 ice_server.uri = kTurnIceServerWithNoUsernameInUri; | 228 ice_server.uri = kTurnIceServerWithNoUsernameInUri; |
275 ice_server.username = kTurnUsername; | 229 ice_server.username = kTurnUsername; |
276 ice_server.password = kTurnPassword; | 230 ice_server.password = kTurnPassword; |
277 config.servers.push_back(ice_server); | 231 config.servers.push_back(ice_server); |
278 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store( | 232 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store( |
279 new FakeDtlsIdentityStore()); | 233 new FakeDtlsIdentityStore()); |
280 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection( | 234 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection( |
281 config, nullptr, allocator_factory_.get(), std::move(dtls_identity_store), | 235 config, nullptr, std::move(port_allocator_), |
282 &observer_)); | 236 std::move(dtls_identity_store), &observer_)); |
283 EXPECT_TRUE(pc.get() != NULL); | 237 ASSERT_TRUE(pc.get() != NULL); |
284 TurnConfigurations turn_configs; | 238 std::vector<cricket::RelayServerConfig> turn_servers; |
285 webrtc::PortAllocatorFactoryInterface::TurnConfiguration turn( | 239 cricket::RelayServerConfig turn("test.com", 1234, kTurnUsername, |
286 "test.com", 1234, kTurnUsername, kTurnPassword, "udp", false); | 240 kTurnPassword, cricket::PROTO_UDP, false); |
287 turn_configs.push_back(turn); | 241 turn_servers.push_back(turn); |
288 VerifyTurnConfigurations(turn_configs); | 242 VerifyTurnServers(turn_servers); |
289 } | 243 } |
290 | 244 |
291 // This test verifies the PeerConnection created properly with TURN url which | 245 // This test verifies the PeerConnection created properly with TURN url which |
292 // has transport parameter in it. | 246 // has transport parameter in it. |
293 TEST_F(PeerConnectionFactoryTest, CreatePCUsingTurnUrlWithTransportParam) { | 247 TEST_F(PeerConnectionFactoryTest, CreatePCUsingTurnUrlWithTransportParam) { |
294 PeerConnectionInterface::RTCConfiguration config; | 248 PeerConnectionInterface::RTCConfiguration config; |
295 webrtc::PeerConnectionInterface::IceServer ice_server; | 249 webrtc::PeerConnectionInterface::IceServer ice_server; |
296 ice_server.uri = kTurnIceServerWithTransport; | 250 ice_server.uri = kTurnIceServerWithTransport; |
297 ice_server.password = kTurnPassword; | 251 ice_server.password = kTurnPassword; |
298 config.servers.push_back(ice_server); | 252 config.servers.push_back(ice_server); |
299 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store( | 253 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store( |
300 new FakeDtlsIdentityStore()); | 254 new FakeDtlsIdentityStore()); |
301 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection( | 255 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection( |
302 config, nullptr, allocator_factory_.get(), std::move(dtls_identity_store), | 256 config, nullptr, std::move(port_allocator_), |
303 &observer_)); | 257 std::move(dtls_identity_store), &observer_)); |
304 EXPECT_TRUE(pc.get() != NULL); | 258 ASSERT_TRUE(pc.get() != NULL); |
305 TurnConfigurations turn_configs; | 259 std::vector<cricket::RelayServerConfig> turn_servers; |
306 webrtc::PortAllocatorFactoryInterface::TurnConfiguration turn( | 260 cricket::RelayServerConfig turn("hello.com", kDefaultStunPort, "test", |
307 "hello.com", kDefaultStunPort, "test", kTurnPassword, "tcp", false); | 261 kTurnPassword, cricket::PROTO_TCP, false); |
308 turn_configs.push_back(turn); | 262 turn_servers.push_back(turn); |
309 VerifyTurnConfigurations(turn_configs); | 263 VerifyTurnServers(turn_servers); |
310 } | 264 } |
311 | 265 |
312 TEST_F(PeerConnectionFactoryTest, CreatePCUsingSecureTurnUrl) { | 266 TEST_F(PeerConnectionFactoryTest, CreatePCUsingSecureTurnUrl) { |
313 PeerConnectionInterface::RTCConfiguration config; | 267 PeerConnectionInterface::RTCConfiguration config; |
314 webrtc::PeerConnectionInterface::IceServer ice_server; | 268 webrtc::PeerConnectionInterface::IceServer ice_server; |
315 ice_server.uri = kSecureTurnIceServer; | 269 ice_server.uri = kSecureTurnIceServer; |
316 ice_server.password = kTurnPassword; | 270 ice_server.password = kTurnPassword; |
317 config.servers.push_back(ice_server); | 271 config.servers.push_back(ice_server); |
318 ice_server.uri = kSecureTurnIceServerWithoutTransportParam; | 272 ice_server.uri = kSecureTurnIceServerWithoutTransportParam; |
319 ice_server.password = kTurnPassword; | 273 ice_server.password = kTurnPassword; |
320 config.servers.push_back(ice_server); | 274 config.servers.push_back(ice_server); |
321 ice_server.uri = kSecureTurnIceServerWithoutTransportAndPortParam; | 275 ice_server.uri = kSecureTurnIceServerWithoutTransportAndPortParam; |
322 ice_server.password = kTurnPassword; | 276 ice_server.password = kTurnPassword; |
323 config.servers.push_back(ice_server); | 277 config.servers.push_back(ice_server); |
324 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store( | 278 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store( |
325 new FakeDtlsIdentityStore()); | 279 new FakeDtlsIdentityStore()); |
326 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection( | 280 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection( |
327 config, nullptr, allocator_factory_.get(), std::move(dtls_identity_store), | 281 config, nullptr, std::move(port_allocator_), |
328 &observer_)); | 282 std::move(dtls_identity_store), &observer_)); |
329 EXPECT_TRUE(pc.get() != NULL); | 283 ASSERT_TRUE(pc.get() != NULL); |
330 TurnConfigurations turn_configs; | 284 std::vector<cricket::RelayServerConfig> turn_servers; |
331 webrtc::PortAllocatorFactoryInterface::TurnConfiguration turn1( | 285 cricket::RelayServerConfig turn1("hello.com", kDefaultStunTlsPort, "test", |
332 "hello.com", kDefaultStunTlsPort, "test", kTurnPassword, "tcp", true); | 286 kTurnPassword, cricket::PROTO_TCP, true); |
333 turn_configs.push_back(turn1); | 287 turn_servers.push_back(turn1); |
334 // TURNS with transport param should be default to tcp. | 288 // TURNS with transport param should be default to tcp. |
335 webrtc::PortAllocatorFactoryInterface::TurnConfiguration turn2( | 289 cricket::RelayServerConfig turn2("hello.com", 443, "test_no_transport", |
336 "hello.com", 443, "test_no_transport", kTurnPassword, "tcp", true); | 290 kTurnPassword, cricket::PROTO_TCP, true); |
337 turn_configs.push_back(turn2); | 291 turn_servers.push_back(turn2); |
338 webrtc::PortAllocatorFactoryInterface::TurnConfiguration turn3( | 292 cricket::RelayServerConfig turn3("hello.com", kDefaultStunTlsPort, |
339 "hello.com", kDefaultStunTlsPort, "test_no_transport", | 293 "test_no_transport", kTurnPassword, |
340 kTurnPassword, "tcp", true); | 294 cricket::PROTO_TCP, true); |
341 turn_configs.push_back(turn3); | 295 turn_servers.push_back(turn3); |
342 VerifyTurnConfigurations(turn_configs); | 296 VerifyTurnServers(turn_servers); |
343 } | 297 } |
344 | 298 |
345 TEST_F(PeerConnectionFactoryTest, CreatePCUsingIPLiteralAddress) { | 299 TEST_F(PeerConnectionFactoryTest, CreatePCUsingIPLiteralAddress) { |
346 PeerConnectionInterface::RTCConfiguration config; | 300 PeerConnectionInterface::RTCConfiguration config; |
347 webrtc::PeerConnectionInterface::IceServer ice_server; | 301 webrtc::PeerConnectionInterface::IceServer ice_server; |
348 ice_server.uri = kStunIceServerWithIPv4Address; | 302 ice_server.uri = kStunIceServerWithIPv4Address; |
349 config.servers.push_back(ice_server); | 303 config.servers.push_back(ice_server); |
350 ice_server.uri = kStunIceServerWithIPv4AddressWithoutPort; | 304 ice_server.uri = kStunIceServerWithIPv4AddressWithoutPort; |
351 config.servers.push_back(ice_server); | 305 config.servers.push_back(ice_server); |
352 ice_server.uri = kStunIceServerWithIPv6Address; | 306 ice_server.uri = kStunIceServerWithIPv6Address; |
353 config.servers.push_back(ice_server); | 307 config.servers.push_back(ice_server); |
354 ice_server.uri = kStunIceServerWithIPv6AddressWithoutPort; | 308 ice_server.uri = kStunIceServerWithIPv6AddressWithoutPort; |
355 config.servers.push_back(ice_server); | 309 config.servers.push_back(ice_server); |
356 ice_server.uri = kTurnIceServerWithIPv6Address; | 310 ice_server.uri = kTurnIceServerWithIPv6Address; |
357 ice_server.password = kTurnPassword; | 311 ice_server.password = kTurnPassword; |
358 config.servers.push_back(ice_server); | 312 config.servers.push_back(ice_server); |
359 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store( | 313 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store( |
360 new FakeDtlsIdentityStore()); | 314 new FakeDtlsIdentityStore()); |
361 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection( | 315 rtc::scoped_refptr<PeerConnectionInterface> pc(factory_->CreatePeerConnection( |
362 config, nullptr, allocator_factory_.get(), std::move(dtls_identity_store), | 316 config, nullptr, std::move(port_allocator_), |
363 &observer_)); | 317 std::move(dtls_identity_store), &observer_)); |
364 EXPECT_TRUE(pc.get() != NULL); | 318 ASSERT_TRUE(pc.get() != NULL); |
365 StunConfigurations stun_configs; | 319 cricket::ServerAddresses stun_servers; |
366 webrtc::PortAllocatorFactoryInterface::StunConfiguration stun1( | 320 rtc::SocketAddress stun1("1.2.3.4", 1234); |
367 "1.2.3.4", 1234); | 321 stun_servers.insert(stun1); |
368 stun_configs.push_back(stun1); | 322 rtc::SocketAddress stun2("1.2.3.4", 3478); |
369 webrtc::PortAllocatorFactoryInterface::StunConfiguration stun2( | 323 stun_servers.insert(stun2); // Default port |
370 "1.2.3.4", 3478); | 324 rtc::SocketAddress stun3("2401:fa00:4::", 1234); |
371 stun_configs.push_back(stun2); // Default port | 325 stun_servers.insert(stun3); |
372 webrtc::PortAllocatorFactoryInterface::StunConfiguration stun3( | 326 rtc::SocketAddress stun4("2401:fa00:4::", 3478); |
373 "2401:fa00:4::", 1234); | 327 stun_servers.insert(stun4); // Default port |
374 stun_configs.push_back(stun3); | 328 VerifyStunServers(stun_servers); |
375 webrtc::PortAllocatorFactoryInterface::StunConfiguration stun4( | |
376 "2401:fa00:4::", 3478); | |
377 stun_configs.push_back(stun4); // Default port | |
378 VerifyStunConfigurations(stun_configs); | |
379 | 329 |
380 TurnConfigurations turn_configs; | 330 std::vector<cricket::RelayServerConfig> turn_servers; |
381 webrtc::PortAllocatorFactoryInterface::TurnConfiguration turn1( | 331 cricket::RelayServerConfig turn1("2401:fa00:4::", 1234, "test", kTurnPassword, |
382 "2401:fa00:4::", 1234, "test", kTurnPassword, "udp", false); | 332 cricket::PROTO_UDP, false); |
383 turn_configs.push_back(turn1); | 333 turn_servers.push_back(turn1); |
384 VerifyTurnConfigurations(turn_configs); | 334 VerifyTurnServers(turn_servers); |
385 } | 335 } |
386 | 336 |
387 // This test verifies the captured stream is rendered locally using a | 337 // This test verifies the captured stream is rendered locally using a |
388 // local video track. | 338 // local video track. |
389 TEST_F(PeerConnectionFactoryTest, LocalRendering) { | 339 TEST_F(PeerConnectionFactoryTest, LocalRendering) { |
390 cricket::FakeVideoCapturer* capturer = new cricket::FakeVideoCapturer(); | 340 cricket::FakeVideoCapturer* capturer = new cricket::FakeVideoCapturer(); |
391 // The source take ownership of |capturer|. | 341 // The source take ownership of |capturer|. |
392 rtc::scoped_refptr<VideoSourceInterface> source( | 342 rtc::scoped_refptr<VideoSourceInterface> source( |
393 factory_->CreateVideoSource(capturer, NULL)); | 343 factory_->CreateVideoSource(capturer, NULL)); |
394 ASSERT_TRUE(source.get() != NULL); | 344 ASSERT_TRUE(source.get() != NULL); |
395 rtc::scoped_refptr<VideoTrackInterface> track( | 345 rtc::scoped_refptr<VideoTrackInterface> track( |
396 factory_->CreateVideoTrack("testlabel", source)); | 346 factory_->CreateVideoTrack("testlabel", source)); |
397 ASSERT_TRUE(track.get() != NULL); | 347 ASSERT_TRUE(track.get() != NULL); |
398 FakeVideoTrackRenderer local_renderer(track); | 348 FakeVideoTrackRenderer local_renderer(track); |
399 | 349 |
400 EXPECT_EQ(0, local_renderer.num_rendered_frames()); | 350 EXPECT_EQ(0, local_renderer.num_rendered_frames()); |
401 EXPECT_TRUE(capturer->CaptureFrame()); | 351 EXPECT_TRUE(capturer->CaptureFrame()); |
402 EXPECT_EQ(1, local_renderer.num_rendered_frames()); | 352 EXPECT_EQ(1, local_renderer.num_rendered_frames()); |
403 | 353 |
404 track->set_enabled(false); | 354 track->set_enabled(false); |
405 EXPECT_TRUE(capturer->CaptureFrame()); | 355 EXPECT_TRUE(capturer->CaptureFrame()); |
406 EXPECT_EQ(1, local_renderer.num_rendered_frames()); | 356 EXPECT_EQ(1, local_renderer.num_rendered_frames()); |
407 | 357 |
408 track->set_enabled(true); | 358 track->set_enabled(true); |
409 EXPECT_TRUE(capturer->CaptureFrame()); | 359 EXPECT_TRUE(capturer->CaptureFrame()); |
410 EXPECT_EQ(2, local_renderer.num_rendered_frames()); | 360 EXPECT_EQ(2, local_renderer.num_rendered_frames()); |
411 } | 361 } |
412 | 362 |
OLD | NEW |