OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2009 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2009 The WebRTC Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 14 matching lines...) Expand all Loading... |
25 #include "webrtc/base/physicalsocketserver.h" | 25 #include "webrtc/base/physicalsocketserver.h" |
26 #include "webrtc/base/proxyserver.h" | 26 #include "webrtc/base/proxyserver.h" |
27 #include "webrtc/base/socketaddress.h" | 27 #include "webrtc/base/socketaddress.h" |
28 #include "webrtc/base/ssladapter.h" | 28 #include "webrtc/base/ssladapter.h" |
29 #include "webrtc/base/thread.h" | 29 #include "webrtc/base/thread.h" |
30 #include "webrtc/base/virtualsocketserver.h" | 30 #include "webrtc/base/virtualsocketserver.h" |
31 | 31 |
32 using cricket::kDefaultPortAllocatorFlags; | 32 using cricket::kDefaultPortAllocatorFlags; |
33 using cricket::kMinimumStepDelay; | 33 using cricket::kMinimumStepDelay; |
34 using cricket::kDefaultStepDelay; | 34 using cricket::kDefaultStepDelay; |
35 using cricket::PORTALLOCATOR_ENABLE_SHARED_UFRAG; | |
36 using cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET; | 35 using cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET; |
37 using cricket::ServerAddresses; | 36 using cricket::ServerAddresses; |
38 using rtc::SocketAddress; | 37 using rtc::SocketAddress; |
39 | 38 |
40 static const int kDefaultTimeout = 1000; | 39 static const int kDefaultTimeout = 1000; |
41 static const int kOnlyLocalPorts = cricket::PORTALLOCATOR_DISABLE_STUN | | 40 static const int kOnlyLocalPorts = cricket::PORTALLOCATOR_DISABLE_STUN | |
42 cricket::PORTALLOCATOR_DISABLE_RELAY | | 41 cricket::PORTALLOCATOR_DISABLE_RELAY | |
43 cricket::PORTALLOCATOR_DISABLE_TCP; | 42 cricket::PORTALLOCATOR_DISABLE_TCP; |
44 // Addresses on the public internet. | 43 // Addresses on the public internet. |
45 static const SocketAddress kPublicAddrs[2] = | 44 static const SocketAddress kPublicAddrs[2] = |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
170 | 169 |
171 struct Result { | 170 struct Result { |
172 Result(const std::string& lt, const std::string& lp, | 171 Result(const std::string& lt, const std::string& lp, |
173 const std::string& rt, const std::string& rp, | 172 const std::string& rt, const std::string& rp, |
174 const std::string& lt2, const std::string& lp2, | 173 const std::string& lt2, const std::string& lp2, |
175 const std::string& rt2, const std::string& rp2, int wait) | 174 const std::string& rt2, const std::string& rp2, int wait) |
176 : local_type(lt), local_proto(lp), remote_type(rt), remote_proto(rp), | 175 : local_type(lt), local_proto(lp), remote_type(rt), remote_proto(rp), |
177 local_type2(lt2), local_proto2(lp2), remote_type2(rt2), | 176 local_type2(lt2), local_proto2(lp2), remote_type2(rt2), |
178 remote_proto2(rp2), connect_wait(wait) { | 177 remote_proto2(rp2), connect_wait(wait) { |
179 } | 178 } |
| 179 |
180 std::string local_type; | 180 std::string local_type; |
181 std::string local_proto; | 181 std::string local_proto; |
182 std::string remote_type; | 182 std::string remote_type; |
183 std::string remote_proto; | 183 std::string remote_proto; |
184 std::string local_type2; | 184 std::string local_type2; |
185 std::string local_proto2; | 185 std::string local_proto2; |
186 std::string remote_type2; | 186 std::string remote_type2; |
187 std::string remote_proto2; | 187 std::string remote_proto2; |
188 int connect_wait; | 188 int connect_wait; |
189 }; | 189 }; |
(...skipping 20 matching lines...) Expand all Loading... |
210 } | 210 } |
211 cricket::TransportChannel* channel; | 211 cricket::TransportChannel* channel; |
212 cricket::Candidate candidate; | 212 cricket::Candidate candidate; |
213 }; | 213 }; |
214 | 214 |
215 struct Endpoint { | 215 struct Endpoint { |
216 Endpoint() | 216 Endpoint() |
217 : role_(cricket::ICEROLE_UNKNOWN), | 217 : role_(cricket::ICEROLE_UNKNOWN), |
218 tiebreaker_(0), | 218 tiebreaker_(0), |
219 role_conflict_(false), | 219 role_conflict_(false), |
220 save_candidates_(false), | 220 save_candidates_(false) {} |
221 protocol_type_(cricket::ICEPROTO_GOOGLE) {} | |
222 bool HasChannel(cricket::TransportChannel* ch) { | 221 bool HasChannel(cricket::TransportChannel* ch) { |
223 return (ch == cd1_.ch_.get() || ch == cd2_.ch_.get()); | 222 return (ch == cd1_.ch_.get() || ch == cd2_.ch_.get()); |
224 } | 223 } |
225 ChannelData* GetChannelData(cricket::TransportChannel* ch) { | 224 ChannelData* GetChannelData(cricket::TransportChannel* ch) { |
226 if (!HasChannel(ch)) return NULL; | 225 if (!HasChannel(ch)) return NULL; |
227 if (cd1_.ch_.get() == ch) | 226 if (cd1_.ch_.get() == ch) |
228 return &cd1_; | 227 return &cd1_; |
229 else | 228 else |
230 return &cd2_; | 229 return &cd2_; |
231 } | 230 } |
232 | 231 |
233 void SetIceRole(cricket::IceRole role) { role_ = role; } | 232 void SetIceRole(cricket::IceRole role) { role_ = role; } |
234 cricket::IceRole ice_role() { return role_; } | 233 cricket::IceRole ice_role() { return role_; } |
235 void SetIceProtocolType(cricket::IceProtocolType type) { | |
236 protocol_type_ = type; | |
237 } | |
238 cricket::IceProtocolType protocol_type() { return protocol_type_; } | |
239 void SetIceTiebreaker(uint64 tiebreaker) { tiebreaker_ = tiebreaker; } | 234 void SetIceTiebreaker(uint64 tiebreaker) { tiebreaker_ = tiebreaker; } |
240 uint64 GetIceTiebreaker() { return tiebreaker_; } | 235 uint64 GetIceTiebreaker() { return tiebreaker_; } |
241 void OnRoleConflict(bool role_conflict) { role_conflict_ = role_conflict; } | 236 void OnRoleConflict(bool role_conflict) { role_conflict_ = role_conflict; } |
242 bool role_conflict() { return role_conflict_; } | 237 bool role_conflict() { return role_conflict_; } |
243 void SetAllocationStepDelay(uint32 delay) { | 238 void SetAllocationStepDelay(uint32 delay) { |
244 allocator_->set_step_delay(delay); | 239 allocator_->set_step_delay(delay); |
245 } | 240 } |
246 void SetAllowTcpListen(bool allow_tcp_listen) { | 241 void SetAllowTcpListen(bool allow_tcp_listen) { |
247 allocator_->set_allow_tcp_listen(allow_tcp_listen); | 242 allocator_->set_allow_tcp_listen(allow_tcp_listen); |
248 } | 243 } |
249 | 244 |
250 rtc::FakeNetworkManager network_manager_; | 245 rtc::FakeNetworkManager network_manager_; |
251 rtc::scoped_ptr<cricket::BasicPortAllocator> allocator_; | 246 rtc::scoped_ptr<cricket::BasicPortAllocator> allocator_; |
252 ChannelData cd1_; | 247 ChannelData cd1_; |
253 ChannelData cd2_; | 248 ChannelData cd2_; |
254 cricket::IceRole role_; | 249 cricket::IceRole role_; |
255 uint64 tiebreaker_; | 250 uint64 tiebreaker_; |
256 bool role_conflict_; | 251 bool role_conflict_; |
257 bool save_candidates_; | 252 bool save_candidates_; |
258 cricket::IceProtocolType protocol_type_; | |
259 std::vector<CandidateData*> saved_candidates_; | 253 std::vector<CandidateData*> saved_candidates_; |
260 }; | 254 }; |
261 | 255 |
262 ChannelData* GetChannelData(cricket::TransportChannel* channel) { | 256 ChannelData* GetChannelData(cricket::TransportChannel* channel) { |
263 if (ep1_.HasChannel(channel)) | 257 if (ep1_.HasChannel(channel)) |
264 return ep1_.GetChannelData(channel); | 258 return ep1_.GetChannelData(channel); |
265 else | 259 else |
266 return ep2_.GetChannelData(channel); | 260 return ep2_.GetChannelData(channel); |
267 } | 261 } |
268 | 262 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 cricket::P2PTransportChannel* channel = new cricket::P2PTransportChannel( | 298 cricket::P2PTransportChannel* channel = new cricket::P2PTransportChannel( |
305 "test content name", component, NULL, GetAllocator(endpoint)); | 299 "test content name", component, NULL, GetAllocator(endpoint)); |
306 channel->SignalRequestSignaling.connect( | 300 channel->SignalRequestSignaling.connect( |
307 this, &P2PTransportChannelTestBase::OnChannelRequestSignaling); | 301 this, &P2PTransportChannelTestBase::OnChannelRequestSignaling); |
308 channel->SignalCandidateReady.connect(this, | 302 channel->SignalCandidateReady.connect(this, |
309 &P2PTransportChannelTestBase::OnCandidate); | 303 &P2PTransportChannelTestBase::OnCandidate); |
310 channel->SignalReadPacket.connect( | 304 channel->SignalReadPacket.connect( |
311 this, &P2PTransportChannelTestBase::OnReadPacket); | 305 this, &P2PTransportChannelTestBase::OnReadPacket); |
312 channel->SignalRoleConflict.connect( | 306 channel->SignalRoleConflict.connect( |
313 this, &P2PTransportChannelTestBase::OnRoleConflict); | 307 this, &P2PTransportChannelTestBase::OnRoleConflict); |
314 channel->SetIceProtocolType(GetEndpoint(endpoint)->protocol_type()); | |
315 channel->SetIceCredentials(local_ice_ufrag, local_ice_pwd); | 308 channel->SetIceCredentials(local_ice_ufrag, local_ice_pwd); |
316 if (clear_remote_candidates_ufrag_pwd_) { | 309 if (clear_remote_candidates_ufrag_pwd_) { |
317 // This only needs to be set if we're clearing them from the | 310 // This only needs to be set if we're clearing them from the |
318 // candidates. Some unit tests rely on this not being set. | 311 // candidates. Some unit tests rely on this not being set. |
319 channel->SetRemoteIceCredentials(remote_ice_ufrag, remote_ice_pwd); | 312 channel->SetRemoteIceCredentials(remote_ice_ufrag, remote_ice_pwd); |
320 } | 313 } |
321 channel->SetIceRole(GetEndpoint(endpoint)->ice_role()); | 314 channel->SetIceRole(GetEndpoint(endpoint)->ice_role()); |
322 channel->SetIceTiebreaker(GetEndpoint(endpoint)->GetIceTiebreaker()); | 315 channel->SetIceTiebreaker(GetEndpoint(endpoint)->GetIceTiebreaker()); |
323 channel->Connect(); | 316 channel->Connect(); |
324 return channel; | 317 return channel; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
372 void SetProxy(int endpoint, rtc::ProxyType type) { | 365 void SetProxy(int endpoint, rtc::ProxyType type) { |
373 rtc::ProxyInfo info; | 366 rtc::ProxyInfo info; |
374 info.type = type; | 367 info.type = type; |
375 info.address = (type == rtc::PROXY_HTTPS) ? | 368 info.address = (type == rtc::PROXY_HTTPS) ? |
376 kHttpsProxyAddrs[endpoint] : kSocksProxyAddrs[endpoint]; | 369 kHttpsProxyAddrs[endpoint] : kSocksProxyAddrs[endpoint]; |
377 GetAllocator(endpoint)->set_proxy("unittest/1.0", info); | 370 GetAllocator(endpoint)->set_proxy("unittest/1.0", info); |
378 } | 371 } |
379 void SetAllocatorFlags(int endpoint, int flags) { | 372 void SetAllocatorFlags(int endpoint, int flags) { |
380 GetAllocator(endpoint)->set_flags(flags); | 373 GetAllocator(endpoint)->set_flags(flags); |
381 } | 374 } |
382 void SetIceProtocol(int endpoint, cricket::IceProtocolType type) { | |
383 GetEndpoint(endpoint)->SetIceProtocolType(type); | |
384 } | |
385 void SetIceRole(int endpoint, cricket::IceRole role) { | 375 void SetIceRole(int endpoint, cricket::IceRole role) { |
386 GetEndpoint(endpoint)->SetIceRole(role); | 376 GetEndpoint(endpoint)->SetIceRole(role); |
387 } | 377 } |
388 void SetIceTiebreaker(int endpoint, uint64 tiebreaker) { | 378 void SetIceTiebreaker(int endpoint, uint64 tiebreaker) { |
389 GetEndpoint(endpoint)->SetIceTiebreaker(tiebreaker); | 379 GetEndpoint(endpoint)->SetIceTiebreaker(tiebreaker); |
390 } | 380 } |
391 bool GetRoleConflict(int endpoint) { | 381 bool GetRoleConflict(int endpoint) { |
392 return GetEndpoint(endpoint)->role_conflict(); | 382 return GetEndpoint(endpoint)->role_conflict(); |
393 } | 383 } |
394 void SetAllocationStepDelay(int endpoint, uint32 delay) { | 384 void SetAllocationStepDelay(int endpoint, uint32 delay) { |
395 return GetEndpoint(endpoint)->SetAllocationStepDelay(delay); | 385 return GetEndpoint(endpoint)->SetAllocationStepDelay(delay); |
396 } | 386 } |
397 void SetAllowTcpListen(int endpoint, bool allow_tcp_listen) { | 387 void SetAllowTcpListen(int endpoint, bool allow_tcp_listen) { |
398 return GetEndpoint(endpoint)->SetAllowTcpListen(allow_tcp_listen); | 388 return GetEndpoint(endpoint)->SetAllowTcpListen(allow_tcp_listen); |
399 } | 389 } |
400 | 390 |
| 391 bool IsLocalToPrflxOrTheReverse(const Result& expected) { |
| 392 return ((expected.local_type == "local" && |
| 393 expected.remote_type == "prflx") || |
| 394 (expected.local_type == "prflx" && |
| 395 expected.remote_type == "local")); |
| 396 } |
| 397 |
| 398 bool CheckCandidate1(const Result& expected) { |
| 399 const std::string& local_type = LocalCandidate(ep1_ch1())->type(); |
| 400 const std::string& local_proto = LocalCandidate(ep1_ch1())->protocol(); |
| 401 const std::string& remote_type = RemoteCandidate(ep1_ch1())->type(); |
| 402 const std::string& remote_proto = RemoteCandidate(ep1_ch1())->protocol(); |
| 403 return ((local_proto == expected.local_proto && |
| 404 remote_proto == expected.remote_proto) && |
| 405 ((local_type == expected.local_type && |
| 406 remote_type == expected.remote_type) || |
| 407 // Sometimes we expect local -> prflx or prflx -> local |
| 408 // and instead get prflx -> local or local -> prflx, and |
| 409 // that's OK. |
| 410 (IsLocalToPrflxOrTheReverse(expected) && |
| 411 local_type == expected.remote_type && |
| 412 remote_type == expected.local_type))); |
| 413 } |
| 414 |
| 415 void ExpectCandidate1(const Result& expected) { |
| 416 if (CheckCandidate1(expected)) { |
| 417 return; |
| 418 } |
| 419 |
| 420 const std::string& local_type = LocalCandidate(ep1_ch1())->type(); |
| 421 const std::string& local_proto = LocalCandidate(ep1_ch1())->protocol(); |
| 422 const std::string& remote_type = RemoteCandidate(ep1_ch1())->type(); |
| 423 const std::string& remote_proto = RemoteCandidate(ep1_ch1())->protocol(); |
| 424 EXPECT_EQ(expected.local_type, local_type); |
| 425 EXPECT_EQ(expected.remote_type, remote_type); |
| 426 EXPECT_EQ(expected.local_proto, local_proto); |
| 427 EXPECT_EQ(expected.remote_proto, remote_proto); |
| 428 } |
| 429 |
| 430 bool CheckCandidate2(const Result& expected) { |
| 431 const std::string& local_type = LocalCandidate(ep2_ch1())->type(); |
| 432 // const std::string& remote_type = RemoteCandidate(ep2_ch1())->type(); |
| 433 const std::string& local_proto = LocalCandidate(ep2_ch1())->protocol(); |
| 434 const std::string& remote_proto = RemoteCandidate(ep2_ch1())->protocol(); |
| 435 // Removed remote_type comparision aginst best connection remote |
| 436 // candidate. This is done to handle remote type discrepancy from |
| 437 // local to stun based on the test type. |
| 438 // For example in case of Open -> NAT, ep2 channels will have LULU |
| 439 // and in other cases like NAT -> NAT it will be LUSU. To avoid these |
| 440 // mismatches and we are doing comparision in different way. |
| 441 // i.e. when don't match its remote type is either local or stun. |
| 442 // TODO(ronghuawu): Refine the test criteria. |
| 443 // https://code.google.com/p/webrtc/issues/detail?id=1953 |
| 444 return ((local_proto == expected.local_proto2 && |
| 445 remote_proto == expected.remote_proto2) && |
| 446 (local_type == expected.local_type2 || |
| 447 // Sometimes we expect local -> prflx or prflx -> local |
| 448 // and instead get prflx -> local or local -> prflx, and |
| 449 // that's OK. |
| 450 (IsLocalToPrflxOrTheReverse(expected) && |
| 451 local_type == expected.remote_type2))); |
| 452 } |
| 453 |
| 454 void ExpectCandidate2(const Result& expected) { |
| 455 if (CheckCandidate2(expected)) { |
| 456 return; |
| 457 } |
| 458 |
| 459 const std::string& local_type = LocalCandidate(ep2_ch1())->type(); |
| 460 const std::string& local_proto = LocalCandidate(ep2_ch1())->protocol(); |
| 461 const std::string& remote_type = RemoteCandidate(ep2_ch1())->type(); |
| 462 EXPECT_EQ(expected.local_proto2, local_proto); |
| 463 EXPECT_EQ(expected.remote_proto2, remote_type); |
| 464 EXPECT_EQ(expected.local_type2, local_type); |
| 465 if (remote_type != expected.remote_type2) { |
| 466 EXPECT_TRUE(expected.remote_type2 == cricket::LOCAL_PORT_TYPE || |
| 467 expected.remote_type2 == cricket::STUN_PORT_TYPE); |
| 468 EXPECT_TRUE(remote_type == cricket::LOCAL_PORT_TYPE || |
| 469 remote_type == cricket::STUN_PORT_TYPE || |
| 470 remote_type == cricket::PRFLX_PORT_TYPE); |
| 471 } |
| 472 } |
| 473 |
401 void Test(const Result& expected) { | 474 void Test(const Result& expected) { |
402 int32 connect_start = rtc::Time(), connect_time; | 475 int32 connect_start = rtc::Time(), connect_time; |
403 | 476 |
404 // Create the channels and wait for them to connect. | 477 // Create the channels and wait for them to connect. |
405 CreateChannels(1); | 478 CreateChannels(1); |
406 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1() != NULL && | 479 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1() != NULL && |
407 ep2_ch1() != NULL && | 480 ep2_ch1() != NULL && |
408 ep1_ch1()->readable() && | 481 ep1_ch1()->readable() && |
409 ep1_ch1()->writable() && | 482 ep1_ch1()->writable() && |
410 ep2_ch1()->readable() && | 483 ep2_ch1()->readable() && |
411 ep2_ch1()->writable(), | 484 ep2_ch1()->writable(), |
412 expected.connect_wait, | 485 expected.connect_wait, |
413 1000); | 486 1000); |
414 connect_time = rtc::TimeSince(connect_start); | 487 connect_time = rtc::TimeSince(connect_start); |
415 if (connect_time < expected.connect_wait) { | 488 if (connect_time < expected.connect_wait) { |
416 LOG(LS_INFO) << "Connect time: " << connect_time << " ms"; | 489 LOG(LS_INFO) << "Connect time: " << connect_time << " ms"; |
417 } else { | 490 } else { |
418 LOG(LS_INFO) << "Connect time: " << "TIMEOUT (" | 491 LOG(LS_INFO) << "Connect time: " << "TIMEOUT (" |
419 << expected.connect_wait << " ms)"; | 492 << expected.connect_wait << " ms)"; |
420 } | 493 } |
421 | 494 |
422 // Allow a few turns of the crank for the best connections to emerge. | 495 // Allow a few turns of the crank for the best connections to emerge. |
423 // This may take up to 2 seconds. | 496 // This may take up to 2 seconds. |
424 if (ep1_ch1()->best_connection() && | 497 if (ep1_ch1()->best_connection() && |
425 ep2_ch1()->best_connection()) { | 498 ep2_ch1()->best_connection()) { |
426 int32 converge_start = rtc::Time(), converge_time; | 499 int32 converge_start = rtc::Time(), converge_time; |
427 int converge_wait = 2000; | 500 int converge_wait = 2000; |
428 EXPECT_TRUE_WAIT_MARGIN( | 501 EXPECT_TRUE_WAIT_MARGIN(CheckCandidate1(expected), |
429 LocalCandidate(ep1_ch1())->type() == expected.local_type && | 502 converge_wait, converge_wait); |
430 LocalCandidate(ep1_ch1())->protocol() == expected.local_proto && | |
431 RemoteCandidate(ep1_ch1())->type() == expected.remote_type && | |
432 RemoteCandidate(ep1_ch1())->protocol() == expected.remote_proto, | |
433 converge_wait, | |
434 converge_wait); | |
435 | |
436 // Also do EXPECT_EQ on each part so that failures are more verbose. | 503 // Also do EXPECT_EQ on each part so that failures are more verbose. |
437 EXPECT_EQ(expected.local_type, LocalCandidate(ep1_ch1())->type()); | 504 ExpectCandidate1(expected); |
438 EXPECT_EQ(expected.local_proto, LocalCandidate(ep1_ch1())->protocol()); | |
439 EXPECT_EQ(expected.remote_type, RemoteCandidate(ep1_ch1())->type()); | |
440 EXPECT_EQ(expected.remote_proto, RemoteCandidate(ep1_ch1())->protocol()); | |
441 | 505 |
442 // Verifying remote channel best connection information. This is done | 506 // Verifying remote channel best connection information. This is done |
443 // only for the RFC 5245 as controlled agent will use USE-CANDIDATE | 507 // only for the RFC 5245 as controlled agent will use USE-CANDIDATE |
444 // from controlling (ep1) agent. We can easily predict from EP1 result | 508 // from controlling (ep1) agent. We can easily predict from EP1 result |
445 // matrix. | 509 // matrix. |
446 if (ep2_.protocol_type_ == cricket::ICEPROTO_RFC5245) { | |
447 // Checking for best connection candidates information at remote. | |
448 EXPECT_TRUE_WAIT( | |
449 LocalCandidate(ep2_ch1())->type() == expected.local_type2 && | |
450 LocalCandidate(ep2_ch1())->protocol() == expected.local_proto2 && | |
451 RemoteCandidate(ep2_ch1())->protocol() == expected.remote_proto2, | |
452 kDefaultTimeout); | |
453 | 510 |
454 // For verbose | 511 // Checking for best connection candidates information at remote. |
455 EXPECT_EQ(expected.local_type2, LocalCandidate(ep2_ch1())->type()); | 512 EXPECT_TRUE_WAIT(CheckCandidate2(expected), kDefaultTimeout); |
456 EXPECT_EQ(expected.local_proto2, LocalCandidate(ep2_ch1())->protocol()); | 513 // For verbose |
457 EXPECT_EQ(expected.remote_proto2, | 514 ExpectCandidate2(expected); |
458 RemoteCandidate(ep2_ch1())->protocol()); | |
459 // Removed remote_type comparision aginst best connection remote | |
460 // candidate. This is done to handle remote type discrepancy from | |
461 // local to stun based on the test type. | |
462 // For example in case of Open -> NAT, ep2 channels will have LULU | |
463 // and in other cases like NAT -> NAT it will be LUSU. To avoid these | |
464 // mismatches and we are doing comparision in different way. | |
465 // i.e. when don't match its remote type is either local or stun. | |
466 // TODO(ronghuawu): Refine the test criteria. | |
467 // https://code.google.com/p/webrtc/issues/detail?id=1953 | |
468 if (expected.remote_type2 != RemoteCandidate(ep2_ch1())->type()) { | |
469 EXPECT_TRUE(expected.remote_type2 == cricket::LOCAL_PORT_TYPE || | |
470 expected.remote_type2 == cricket::STUN_PORT_TYPE); | |
471 EXPECT_TRUE( | |
472 RemoteCandidate(ep2_ch1())->type() == cricket::LOCAL_PORT_TYPE || | |
473 RemoteCandidate(ep2_ch1())->type() == cricket::STUN_PORT_TYPE || | |
474 RemoteCandidate(ep2_ch1())->type() == cricket::PRFLX_PORT_TYPE); | |
475 } | |
476 } | |
477 | 515 |
478 converge_time = rtc::TimeSince(converge_start); | 516 converge_time = rtc::TimeSince(converge_start); |
479 if (converge_time < converge_wait) { | 517 if (converge_time < converge_wait) { |
480 LOG(LS_INFO) << "Converge time: " << converge_time << " ms"; | 518 LOG(LS_INFO) << "Converge time: " << converge_time << " ms"; |
481 } else { | 519 } else { |
482 LOG(LS_INFO) << "Converge time: " << "TIMEOUT (" | 520 LOG(LS_INFO) << "Converge time: " << "TIMEOUT (" |
483 << converge_wait << " ms)"; | 521 << converge_wait << " ms)"; |
484 } | 522 } |
485 } | 523 } |
486 // Try sending some data to other end. | 524 // Try sending some data to other end. |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
543 old_remote_candidate1->generation(), | 581 old_remote_candidate1->generation(), |
544 1000, 1000); | 582 1000, 1000); |
545 EXPECT_TRUE_WAIT_MARGIN(RemoteCandidate(ep2_ch1())->generation() != | 583 EXPECT_TRUE_WAIT_MARGIN(RemoteCandidate(ep2_ch1())->generation() != |
546 old_remote_candidate2->generation(), | 584 old_remote_candidate2->generation(), |
547 1000, 1000); | 585 1000, 1000); |
548 EXPECT_EQ(1u, RemoteCandidate(ep2_ch1())->generation()); | 586 EXPECT_EQ(1u, RemoteCandidate(ep2_ch1())->generation()); |
549 EXPECT_EQ(1u, RemoteCandidate(ep1_ch1())->generation()); | 587 EXPECT_EQ(1u, RemoteCandidate(ep1_ch1())->generation()); |
550 } | 588 } |
551 | 589 |
552 void TestSignalRoleConflict() { | 590 void TestSignalRoleConflict() { |
553 SetIceProtocol(0, cricket::ICEPROTO_RFC5245); | |
554 SetIceTiebreaker(0, kTiebreaker1); // Default EP1 is in controlling state. | 591 SetIceTiebreaker(0, kTiebreaker1); // Default EP1 is in controlling state. |
555 | 592 |
556 SetIceProtocol(1, cricket::ICEPROTO_RFC5245); | |
557 SetIceRole(1, cricket::ICEROLE_CONTROLLING); | 593 SetIceRole(1, cricket::ICEROLE_CONTROLLING); |
558 SetIceTiebreaker(1, kTiebreaker2); | 594 SetIceTiebreaker(1, kTiebreaker2); |
559 | 595 |
560 // Creating channels with both channels role set to CONTROLLING. | 596 // Creating channels with both channels role set to CONTROLLING. |
561 CreateChannels(1); | 597 CreateChannels(1); |
562 // Since both the channels initiated with controlling state and channel2 | 598 // Since both the channels initiated with controlling state and channel2 |
563 // has higher tiebreaker value, channel1 should receive SignalRoleConflict. | 599 // has higher tiebreaker value, channel1 should receive SignalRoleConflict. |
564 EXPECT_TRUE_WAIT(GetRoleConflict(0), 1000); | 600 EXPECT_TRUE_WAIT(GetRoleConflict(0), 1000); |
565 EXPECT_FALSE(GetRoleConflict(1)); | 601 EXPECT_FALSE(GetRoleConflict(1)); |
566 | 602 |
567 EXPECT_TRUE_WAIT(ep1_ch1()->readable() && | 603 EXPECT_TRUE_WAIT(ep1_ch1()->readable() && |
568 ep1_ch1()->writable() && | 604 ep1_ch1()->writable() && |
569 ep2_ch1()->readable() && | 605 ep2_ch1()->readable() && |
570 ep2_ch1()->writable(), | 606 ep2_ch1()->writable(), |
571 1000); | 607 1000); |
572 | 608 |
573 EXPECT_TRUE(ep1_ch1()->best_connection() && | 609 EXPECT_TRUE(ep1_ch1()->best_connection() && |
574 ep2_ch1()->best_connection()); | 610 ep2_ch1()->best_connection()); |
575 | 611 |
576 TestSendRecv(1); | 612 TestSendRecv(1); |
577 } | 613 } |
578 | 614 |
579 void TestHybridConnectivity(cricket::IceProtocolType proto) { | |
580 AddAddress(0, kPublicAddrs[0]); | |
581 AddAddress(1, kPublicAddrs[1]); | |
582 | |
583 SetAllocationStepDelay(0, kMinimumStepDelay); | |
584 SetAllocationStepDelay(1, kMinimumStepDelay); | |
585 | |
586 SetIceRole(0, cricket::ICEROLE_CONTROLLING); | |
587 SetIceProtocol(0, cricket::ICEPROTO_HYBRID); | |
588 SetIceTiebreaker(0, kTiebreaker1); | |
589 SetIceRole(1, cricket::ICEROLE_CONTROLLED); | |
590 SetIceProtocol(1, proto); | |
591 SetIceTiebreaker(1, kTiebreaker2); | |
592 | |
593 CreateChannels(1); | |
594 // When channel is in hybrid and it's controlling agent, channel will | |
595 // receive ping request from the remote. Hence connection is readable. | |
596 // Since channel is in hybrid, it will not send any pings, so no writable | |
597 // connection. Since channel2 is in controlled state, it will not have | |
598 // any connections which are readable or writable, as it didn't received | |
599 // pings (or none) with USE-CANDIDATE attribute. | |
600 EXPECT_TRUE_WAIT(ep1_ch1()->readable(), 1000); | |
601 | |
602 // Set real protocol type. | |
603 ep1_ch1()->SetIceProtocolType(proto); | |
604 | |
605 // Channel should able to send ping requests and connections become writable | |
606 // in both directions. | |
607 EXPECT_TRUE_WAIT(ep1_ch1()->readable() && ep1_ch1()->writable() && | |
608 ep2_ch1()->readable() && ep2_ch1()->writable(), | |
609 1000); | |
610 EXPECT_TRUE( | |
611 ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && | |
612 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && | |
613 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); | |
614 | |
615 TestSendRecv(1); | |
616 DestroyChannels(); | |
617 } | |
618 | |
619 void OnChannelRequestSignaling(cricket::TransportChannelImpl* channel) { | 615 void OnChannelRequestSignaling(cricket::TransportChannelImpl* channel) { |
620 channel->OnSignalingReady(); | 616 channel->OnSignalingReady(); |
621 } | 617 } |
622 // We pass the candidates directly to the other side. | 618 // We pass the candidates directly to the other side. |
623 void OnCandidate(cricket::TransportChannelImpl* ch, | 619 void OnCandidate(cricket::TransportChannelImpl* ch, |
624 const cricket::Candidate& c) { | 620 const cricket::Candidate& c) { |
625 if (force_relay_ && c.type() != cricket::RELAY_PORT_TYPE) | 621 if (force_relay_ && c.type() != cricket::RELAY_PORT_TYPE) |
626 return; | 622 return; |
627 | 623 |
628 if (GetEndpoint(ch)->save_candidates_) { | 624 if (GetEndpoint(ch)->save_candidates_) { |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
788 | 784 |
789 // Test the matrix of all the connectivity types we expect to see in the wild. | 785 // Test the matrix of all the connectivity types we expect to see in the wild. |
790 // Just test every combination of the configs in the Config enum. | 786 // Just test every combination of the configs in the Config enum. |
791 class P2PTransportChannelTest : public P2PTransportChannelTestBase { | 787 class P2PTransportChannelTest : public P2PTransportChannelTestBase { |
792 protected: | 788 protected: |
793 static const Result* kMatrix[NUM_CONFIGS][NUM_CONFIGS]; | 789 static const Result* kMatrix[NUM_CONFIGS][NUM_CONFIGS]; |
794 static const Result* kMatrixSharedUfrag[NUM_CONFIGS][NUM_CONFIGS]; | 790 static const Result* kMatrixSharedUfrag[NUM_CONFIGS][NUM_CONFIGS]; |
795 static const Result* kMatrixSharedSocketAsGice[NUM_CONFIGS][NUM_CONFIGS]; | 791 static const Result* kMatrixSharedSocketAsGice[NUM_CONFIGS][NUM_CONFIGS]; |
796 static const Result* kMatrixSharedSocketAsIce[NUM_CONFIGS][NUM_CONFIGS]; | 792 static const Result* kMatrixSharedSocketAsIce[NUM_CONFIGS][NUM_CONFIGS]; |
797 void ConfigureEndpoints(Config config1, Config config2, | 793 void ConfigureEndpoints(Config config1, Config config2, |
798 int allocator_flags1, int allocator_flags2, | 794 int allocator_flags1, int allocator_flags2) { |
799 int delay1, int delay2, | |
800 cricket::IceProtocolType type) { | |
801 // Ideally we want to use TURN server for both GICE and ICE, but in case | |
802 // of GICE, TURN server usage is not producing results reliabally. | |
803 // TODO(mallinath): Remove Relay and use TURN server for all tests. | |
804 ServerAddresses stun_servers; | 795 ServerAddresses stun_servers; |
805 stun_servers.insert(kStunAddr); | 796 stun_servers.insert(kStunAddr); |
806 GetEndpoint(0)->allocator_.reset( | 797 GetEndpoint(0)->allocator_.reset( |
807 new cricket::BasicPortAllocator(&(GetEndpoint(0)->network_manager_), | 798 new cricket::BasicPortAllocator(&(GetEndpoint(0)->network_manager_), |
808 stun_servers, | 799 stun_servers, |
809 rtc::SocketAddress(), rtc::SocketAddress(), | 800 rtc::SocketAddress(), rtc::SocketAddress(), |
810 rtc::SocketAddress())); | 801 rtc::SocketAddress())); |
811 GetEndpoint(1)->allocator_.reset( | 802 GetEndpoint(1)->allocator_.reset( |
812 new cricket::BasicPortAllocator(&(GetEndpoint(1)->network_manager_), | 803 new cricket::BasicPortAllocator(&(GetEndpoint(1)->network_manager_), |
813 stun_servers, | 804 stun_servers, |
814 rtc::SocketAddress(), rtc::SocketAddress(), | 805 rtc::SocketAddress(), rtc::SocketAddress(), |
815 rtc::SocketAddress())); | 806 rtc::SocketAddress())); |
816 | 807 |
817 cricket::RelayServerConfig relay_server(cricket::RELAY_GTURN); | 808 cricket::RelayServerConfig relay_server(cricket::RELAY_TURN); |
818 if (type == cricket::ICEPROTO_RFC5245) { | 809 relay_server.credentials = kRelayCredentials; |
819 relay_server.type = cricket::RELAY_TURN; | 810 relay_server.ports.push_back(cricket::ProtocolAddress( |
820 relay_server.credentials = kRelayCredentials; | 811 kTurnUdpIntAddr, cricket::PROTO_UDP, false)); |
821 relay_server.ports.push_back(cricket::ProtocolAddress( | |
822 kTurnUdpIntAddr, cricket::PROTO_UDP, false)); | |
823 } else { | |
824 relay_server.ports.push_back(cricket::ProtocolAddress( | |
825 kRelayUdpIntAddr, cricket::PROTO_UDP, false)); | |
826 relay_server.ports.push_back(cricket::ProtocolAddress( | |
827 kRelayTcpIntAddr, cricket::PROTO_TCP, false)); | |
828 relay_server.ports.push_back(cricket::ProtocolAddress( | |
829 kRelaySslTcpIntAddr, cricket::PROTO_SSLTCP, false)); | |
830 } | |
831 GetEndpoint(0)->allocator_->AddRelay(relay_server); | 812 GetEndpoint(0)->allocator_->AddRelay(relay_server); |
832 GetEndpoint(1)->allocator_->AddRelay(relay_server); | 813 GetEndpoint(1)->allocator_->AddRelay(relay_server); |
833 | 814 |
| 815 int delay = kMinimumStepDelay; |
834 ConfigureEndpoint(0, config1); | 816 ConfigureEndpoint(0, config1); |
835 SetIceProtocol(0, type); | |
836 SetAllocatorFlags(0, allocator_flags1); | 817 SetAllocatorFlags(0, allocator_flags1); |
837 SetAllocationStepDelay(0, delay1); | 818 SetAllocationStepDelay(0, delay); |
838 ConfigureEndpoint(1, config2); | 819 ConfigureEndpoint(1, config2); |
839 SetIceProtocol(1, type); | |
840 SetAllocatorFlags(1, allocator_flags2); | 820 SetAllocatorFlags(1, allocator_flags2); |
841 SetAllocationStepDelay(1, delay2); | 821 SetAllocationStepDelay(1, delay); |
842 | 822 |
843 if (type == cricket::ICEPROTO_RFC5245) { | 823 set_clear_remote_candidates_ufrag_pwd(true); |
844 set_clear_remote_candidates_ufrag_pwd(true); | |
845 } | |
846 } | 824 } |
847 void ConfigureEndpoint(int endpoint, Config config) { | 825 void ConfigureEndpoint(int endpoint, Config config) { |
848 switch (config) { | 826 switch (config) { |
849 case OPEN: | 827 case OPEN: |
850 AddAddress(endpoint, kPublicAddrs[endpoint]); | 828 AddAddress(endpoint, kPublicAddrs[endpoint]); |
851 break; | 829 break; |
852 case NAT_FULL_CONE: | 830 case NAT_FULL_CONE: |
853 case NAT_ADDR_RESTRICTED: | 831 case NAT_ADDR_RESTRICTED: |
854 case NAT_PORT_RESTRICTED: | 832 case NAT_PORT_RESTRICTED: |
855 case NAT_SYMMETRIC: | 833 case NAT_SYMMETRIC: |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1027 /*SC*/ {PULU, PUSU, PUSU, PURU, PURU, PUSU, PURU, NULL, NULL, LSRS, NULL, LTRT}, | 1005 /*SC*/ {PULU, PUSU, PUSU, PURU, PURU, PUSU, PURU, NULL, NULL, LSRS, NULL, LTRT}, |
1028 /*!U*/ {PTLT, NULL, NULL, NULL, NULL, NULL, NULL, PTLT, LTPT, LSRS, NULL, LTRT}, | 1006 /*!U*/ {PTLT, NULL, NULL, NULL, NULL, NULL, NULL, PTLT, LTPT, LSRS, NULL, LTRT}, |
1029 /*!T*/ {LTRT, NULL, NULL, NULL, NULL, NULL, NULL, PTLT, LTRT, LSRS, NULL, LTRT}, | 1007 /*!T*/ {LTRT, NULL, NULL, NULL, NULL, NULL, NULL, PTLT, LTRT, LSRS, NULL, LTRT}, |
1030 /*HT*/ {LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, NULL, LSRS}, | 1008 /*HT*/ {LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, NULL, LSRS}, |
1031 /*PR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, | 1009 /*PR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, |
1032 /*PR*/ {LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LSRS, NULL, LTRT}, | 1010 /*PR*/ {LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LSRS, NULL, LTRT}, |
1033 }; | 1011 }; |
1034 | 1012 |
1035 // The actual tests that exercise all the various configurations. | 1013 // The actual tests that exercise all the various configurations. |
1036 // Test names are of the form P2PTransportChannelTest_TestOPENToNAT_FULL_CONE | 1014 // Test names are of the form P2PTransportChannelTest_TestOPENToNAT_FULL_CONE |
1037 // Same test case is run in both GICE and ICE mode. | |
1038 // kDefaultStepDelay - is used for all Gice cases. | |
1039 // kMinimumStepDelay - is used when both end points have | |
1040 // PORTALLOCATOR_ENABLE_SHARED_UFRAG flag enabled. | |
1041 // Technically we should be able to use kMinimumStepDelay irrespective of | |
1042 // protocol type. But which might need modifications to current result matrices | |
1043 // for tests in this file. | |
1044 #define P2P_TEST_DECLARATION(x, y, z) \ | 1015 #define P2P_TEST_DECLARATION(x, y, z) \ |
1045 TEST_F(P2PTransportChannelTest, z##Test##x##To##y##AsGiceNoneSharedUfrag) { \ | 1016 TEST_F(P2PTransportChannelTest, z##Test##x##To##y) { \ |
1046 ConfigureEndpoints(x, y, kDefaultPortAllocatorFlags, \ | 1017 ConfigureEndpoints(x, y, \ |
1047 kDefaultPortAllocatorFlags, \ | |
1048 kDefaultStepDelay, kDefaultStepDelay, \ | |
1049 cricket::ICEPROTO_GOOGLE); \ | |
1050 if (kMatrix[x][y] != NULL) \ | |
1051 Test(*kMatrix[x][y]); \ | |
1052 else \ | |
1053 LOG(LS_WARNING) << "Not yet implemented"; \ | |
1054 } \ | |
1055 TEST_F(P2PTransportChannelTest, z##Test##x##To##y##AsGiceP0SharedUfrag) { \ | |
1056 ConfigureEndpoints(x, y, PORTALLOCATOR_ENABLE_SHARED_UFRAG, \ | |
1057 kDefaultPortAllocatorFlags, \ | |
1058 kDefaultStepDelay, kDefaultStepDelay, \ | |
1059 cricket::ICEPROTO_GOOGLE); \ | |
1060 if (kMatrix[x][y] != NULL) \ | |
1061 Test(*kMatrix[x][y]); \ | |
1062 else \ | |
1063 LOG(LS_WARNING) << "Not yet implemented"; \ | |
1064 } \ | |
1065 TEST_F(P2PTransportChannelTest, z##Test##x##To##y##AsGiceP1SharedUfrag) { \ | |
1066 ConfigureEndpoints(x, y, kDefaultPortAllocatorFlags, \ | |
1067 PORTALLOCATOR_ENABLE_SHARED_UFRAG, \ | |
1068 kDefaultStepDelay, kDefaultStepDelay, \ | |
1069 cricket::ICEPROTO_GOOGLE); \ | |
1070 if (kMatrixSharedUfrag[x][y] != NULL) \ | |
1071 Test(*kMatrixSharedUfrag[x][y]); \ | |
1072 else \ | |
1073 LOG(LS_WARNING) << "Not yet implemented"; \ | |
1074 } \ | |
1075 TEST_F(P2PTransportChannelTest, z##Test##x##To##y##AsGiceBothSharedUfrag) { \ | |
1076 ConfigureEndpoints(x, y, PORTALLOCATOR_ENABLE_SHARED_UFRAG, \ | |
1077 PORTALLOCATOR_ENABLE_SHARED_UFRAG, \ | |
1078 kDefaultStepDelay, kDefaultStepDelay, \ | |
1079 cricket::ICEPROTO_GOOGLE); \ | |
1080 if (kMatrixSharedUfrag[x][y] != NULL) \ | |
1081 Test(*kMatrixSharedUfrag[x][y]); \ | |
1082 else \ | |
1083 LOG(LS_WARNING) << "Not yet implemented"; \ | |
1084 } \ | |
1085 TEST_F(P2PTransportChannelTest, \ | |
1086 z##Test##x##To##y##AsGiceBothSharedUfragWithMinimumStepDelay) { \ | |
1087 ConfigureEndpoints(x, y, PORTALLOCATOR_ENABLE_SHARED_UFRAG, \ | |
1088 PORTALLOCATOR_ENABLE_SHARED_UFRAG, \ | |
1089 kMinimumStepDelay, kMinimumStepDelay, \ | |
1090 cricket::ICEPROTO_GOOGLE); \ | |
1091 if (kMatrixSharedUfrag[x][y] != NULL) \ | |
1092 Test(*kMatrixSharedUfrag[x][y]); \ | |
1093 else \ | |
1094 LOG(LS_WARNING) << "Not yet implemented"; \ | |
1095 } \ | |
1096 TEST_F(P2PTransportChannelTest, \ | |
1097 z##Test##x##To##y##AsGiceBothSharedUfragSocket) { \ | |
1098 ConfigureEndpoints(x, y, PORTALLOCATOR_ENABLE_SHARED_UFRAG | \ | |
1099 PORTALLOCATOR_ENABLE_SHARED_SOCKET, \ | 1018 PORTALLOCATOR_ENABLE_SHARED_SOCKET, \ |
1100 PORTALLOCATOR_ENABLE_SHARED_UFRAG | \ | 1019 PORTALLOCATOR_ENABLE_SHARED_SOCKET); \ |
1101 PORTALLOCATOR_ENABLE_SHARED_SOCKET, \ | |
1102 kMinimumStepDelay, kMinimumStepDelay, \ | |
1103 cricket::ICEPROTO_GOOGLE); \ | |
1104 if (kMatrixSharedSocketAsGice[x][y] != NULL) \ | |
1105 Test(*kMatrixSharedSocketAsGice[x][y]); \ | |
1106 else \ | |
1107 LOG(LS_WARNING) << "Not yet implemented"; \ | |
1108 } \ | |
1109 TEST_F(P2PTransportChannelTest, z##Test##x##To##y##AsIce) { \ | |
1110 ConfigureEndpoints(x, y, PORTALLOCATOR_ENABLE_SHARED_UFRAG | \ | |
1111 PORTALLOCATOR_ENABLE_SHARED_SOCKET, \ | |
1112 PORTALLOCATOR_ENABLE_SHARED_UFRAG | \ | |
1113 PORTALLOCATOR_ENABLE_SHARED_SOCKET, \ | |
1114 kMinimumStepDelay, kMinimumStepDelay, \ | |
1115 cricket::ICEPROTO_RFC5245); \ | |
1116 if (kMatrixSharedSocketAsIce[x][y] != NULL) \ | 1020 if (kMatrixSharedSocketAsIce[x][y] != NULL) \ |
1117 Test(*kMatrixSharedSocketAsIce[x][y]); \ | 1021 Test(*kMatrixSharedSocketAsIce[x][y]); \ |
1118 else \ | 1022 else \ |
1119 LOG(LS_WARNING) << "Not yet implemented"; \ | 1023 LOG(LS_WARNING) << "Not yet implemented"; \ |
1120 } | 1024 } |
1121 | 1025 |
1122 #define P2P_TEST(x, y) \ | 1026 #define P2P_TEST(x, y) \ |
1123 P2P_TEST_DECLARATION(x, y,) | 1027 P2P_TEST_DECLARATION(x, y,) |
1124 | 1028 |
1125 #define FLAKY_P2P_TEST(x, y) \ | 1029 #define FLAKY_P2P_TEST(x, y) \ |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1163 P2P_TEST_SET(NAT_DOUBLE_CONE) | 1067 P2P_TEST_SET(NAT_DOUBLE_CONE) |
1164 P2P_TEST_SET(NAT_SYMMETRIC_THEN_CONE) | 1068 P2P_TEST_SET(NAT_SYMMETRIC_THEN_CONE) |
1165 P2P_TEST_SET(BLOCK_UDP) | 1069 P2P_TEST_SET(BLOCK_UDP) |
1166 P2P_TEST_SET(BLOCK_UDP_AND_INCOMING_TCP) | 1070 P2P_TEST_SET(BLOCK_UDP_AND_INCOMING_TCP) |
1167 P2P_TEST_SET(BLOCK_ALL_BUT_OUTGOING_HTTP) | 1071 P2P_TEST_SET(BLOCK_ALL_BUT_OUTGOING_HTTP) |
1168 P2P_TEST_SET(PROXY_HTTPS) | 1072 P2P_TEST_SET(PROXY_HTTPS) |
1169 P2P_TEST_SET(PROXY_SOCKS) | 1073 P2P_TEST_SET(PROXY_SOCKS) |
1170 | 1074 |
1171 // Test that we restart candidate allocation when local ufrag&pwd changed. | 1075 // Test that we restart candidate allocation when local ufrag&pwd changed. |
1172 // Standard Ice protocol is used. | 1076 // Standard Ice protocol is used. |
1173 TEST_F(P2PTransportChannelTest, HandleUfragPwdChangeAsIce) { | 1077 TEST_F(P2PTransportChannelTest, HandleUfragPwdChange) { |
1174 ConfigureEndpoints(OPEN, OPEN, | 1078 ConfigureEndpoints(OPEN, OPEN, |
1175 PORTALLOCATOR_ENABLE_SHARED_UFRAG, | 1079 kDefaultPortAllocatorFlags, |
1176 PORTALLOCATOR_ENABLE_SHARED_UFRAG, | 1080 kDefaultPortAllocatorFlags); |
1177 kMinimumStepDelay, kMinimumStepDelay, | |
1178 cricket::ICEPROTO_RFC5245); | |
1179 CreateChannels(1); | 1081 CreateChannels(1); |
1180 TestHandleIceUfragPasswordChanged(); | 1082 TestHandleIceUfragPasswordChanged(); |
1181 DestroyChannels(); | 1083 DestroyChannels(); |
1182 } | |
1183 | |
1184 // Test that we restart candidate allocation when local ufrag&pwd changed. | |
1185 // Google Ice protocol is used. | |
1186 TEST_F(P2PTransportChannelTest, HandleUfragPwdChangeAsGice) { | |
1187 ConfigureEndpoints(OPEN, OPEN, | |
1188 PORTALLOCATOR_ENABLE_SHARED_UFRAG, | |
1189 PORTALLOCATOR_ENABLE_SHARED_UFRAG, | |
1190 kDefaultStepDelay, kDefaultStepDelay, | |
1191 cricket::ICEPROTO_GOOGLE); | |
1192 CreateChannels(1); | |
1193 TestHandleIceUfragPasswordChanged(); | |
1194 DestroyChannels(); | |
1195 } | 1084 } |
1196 | 1085 |
1197 // Test the operation of GetStats. | 1086 // Test the operation of GetStats. |
1198 TEST_F(P2PTransportChannelTest, GetStats) { | 1087 TEST_F(P2PTransportChannelTest, GetStats) { |
1199 ConfigureEndpoints(OPEN, OPEN, | 1088 ConfigureEndpoints(OPEN, OPEN, |
1200 kDefaultPortAllocatorFlags, | 1089 kDefaultPortAllocatorFlags, |
1201 kDefaultPortAllocatorFlags, | 1090 kDefaultPortAllocatorFlags); |
1202 kDefaultStepDelay, kDefaultStepDelay, | |
1203 cricket::ICEPROTO_GOOGLE); | |
1204 CreateChannels(1); | 1091 CreateChannels(1); |
1205 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->readable() && ep1_ch1()->writable() && | 1092 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->readable() && ep1_ch1()->writable() && |
1206 ep2_ch1()->readable() && ep2_ch1()->writable(), | 1093 ep2_ch1()->readable() && ep2_ch1()->writable(), |
1207 1000, 1000); | 1094 1000, 1000); |
1208 TestSendRecv(1); | 1095 TestSendRecv(1); |
1209 cricket::ConnectionInfos infos; | 1096 cricket::ConnectionInfos infos; |
1210 ASSERT_TRUE(ep1_ch1()->GetStats(&infos)); | 1097 ASSERT_TRUE(ep1_ch1()->GetStats(&infos)); |
1211 ASSERT_EQ(1U, infos.size()); | 1098 ASSERT_EQ(1U, infos.size()); |
1212 EXPECT_TRUE(infos[0].new_connection); | 1099 EXPECT_TRUE(infos[0].new_connection); |
1213 EXPECT_TRUE(infos[0].best_connection); | 1100 EXPECT_TRUE(infos[0].best_connection); |
1214 EXPECT_TRUE(infos[0].readable); | 1101 EXPECT_TRUE(infos[0].readable); |
1215 EXPECT_TRUE(infos[0].writable); | 1102 EXPECT_TRUE(infos[0].writable); |
1216 EXPECT_FALSE(infos[0].timeout); | 1103 EXPECT_FALSE(infos[0].timeout); |
1217 EXPECT_EQ(10U, infos[0].sent_total_packets); | 1104 EXPECT_EQ(10U, infos[0].sent_total_packets); |
1218 EXPECT_EQ(0U, infos[0].sent_discarded_packets); | 1105 EXPECT_EQ(0U, infos[0].sent_discarded_packets); |
1219 EXPECT_EQ(10 * 36U, infos[0].sent_total_bytes); | 1106 EXPECT_EQ(10 * 36U, infos[0].sent_total_bytes); |
1220 EXPECT_EQ(10 * 36U, infos[0].recv_total_bytes); | 1107 EXPECT_EQ(10 * 36U, infos[0].recv_total_bytes); |
1221 EXPECT_GT(infos[0].rtt, 0U); | 1108 EXPECT_GT(infos[0].rtt, 0U); |
1222 DestroyChannels(); | 1109 DestroyChannels(); |
1223 } | 1110 } |
1224 | 1111 |
1225 // Test that we properly create a connection on a STUN ping from unknown address | 1112 // Test that we properly create a connection on a STUN ping from unknown address |
1226 // when the signaling is slow. | 1113 // when the signaling is slow. |
1227 TEST_F(P2PTransportChannelTest, PeerReflexiveCandidateBeforeSignaling) { | 1114 TEST_F(P2PTransportChannelTest, PeerReflexiveCandidateBeforeSignaling) { |
1228 ConfigureEndpoints(OPEN, OPEN, | 1115 ConfigureEndpoints(OPEN, OPEN, |
1229 PORTALLOCATOR_ENABLE_SHARED_UFRAG, | 1116 kDefaultPortAllocatorFlags, |
1230 PORTALLOCATOR_ENABLE_SHARED_UFRAG, | 1117 kDefaultPortAllocatorFlags); |
1231 kDefaultStepDelay, kDefaultStepDelay, | |
1232 cricket::ICEPROTO_RFC5245); | |
1233 // Emulate no remote credentials coming in. | 1118 // Emulate no remote credentials coming in. |
1234 set_clear_remote_candidates_ufrag_pwd(false); | 1119 set_clear_remote_candidates_ufrag_pwd(false); |
1235 CreateChannels(1); | 1120 CreateChannels(1); |
1236 // Only have remote credentials come in for ep2, not ep1. | 1121 // Only have remote credentials come in for ep2, not ep1. |
1237 ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); | 1122 ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); |
1238 | 1123 |
1239 // Pause sending ep2's candidates to ep1 until ep1 receives the peer reflexive | 1124 // Pause sending ep2's candidates to ep1 until ep1 receives the peer reflexive |
1240 // candidate. | 1125 // candidate. |
1241 PauseCandidates(1); | 1126 PauseCandidates(1); |
1242 | 1127 |
(...skipping 23 matching lines...) Expand all Loading... |
1266 ep1_ch1()->best_connection()->remote_candidate().type(), | 1151 ep1_ch1()->best_connection()->remote_candidate().type(), |
1267 2000); | 1152 2000); |
1268 EXPECT_EQ(best_connection, ep1_ch1()->best_connection()); | 1153 EXPECT_EQ(best_connection, ep1_ch1()->best_connection()); |
1269 DestroyChannels(); | 1154 DestroyChannels(); |
1270 } | 1155 } |
1271 | 1156 |
1272 // Test that we properly create a connection on a STUN ping from unknown address | 1157 // Test that we properly create a connection on a STUN ping from unknown address |
1273 // when the signaling is slow and the end points are behind NAT. | 1158 // when the signaling is slow and the end points are behind NAT. |
1274 TEST_F(P2PTransportChannelTest, PeerReflexiveCandidateBeforeSignalingWithNAT) { | 1159 TEST_F(P2PTransportChannelTest, PeerReflexiveCandidateBeforeSignalingWithNAT) { |
1275 ConfigureEndpoints(OPEN, NAT_SYMMETRIC, | 1160 ConfigureEndpoints(OPEN, NAT_SYMMETRIC, |
1276 PORTALLOCATOR_ENABLE_SHARED_UFRAG, | 1161 kDefaultPortAllocatorFlags, |
1277 PORTALLOCATOR_ENABLE_SHARED_UFRAG, | 1162 kDefaultPortAllocatorFlags); |
1278 kDefaultStepDelay, kDefaultStepDelay, | |
1279 cricket::ICEPROTO_RFC5245); | |
1280 // Emulate no remote credentials coming in. | 1163 // Emulate no remote credentials coming in. |
1281 set_clear_remote_candidates_ufrag_pwd(false); | 1164 set_clear_remote_candidates_ufrag_pwd(false); |
1282 CreateChannels(1); | 1165 CreateChannels(1); |
1283 // Only have remote credentials come in for ep2, not ep1. | 1166 // Only have remote credentials come in for ep2, not ep1. |
1284 ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); | 1167 ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); |
1285 // Pause sending ep2's candidates to ep1 until ep1 receives the peer reflexive | 1168 // Pause sending ep2's candidates to ep1 until ep1 receives the peer reflexive |
1286 // candidate. | 1169 // candidate. |
1287 PauseCandidates(1); | 1170 PauseCandidates(1); |
1288 | 1171 |
1289 // The caller should have the best connection connected to the peer reflexive | 1172 // The caller should have the best connection connected to the peer reflexive |
(...skipping 21 matching lines...) Expand all Loading... |
1311 WAIT(ep1_ch1()->writable(), 2000); | 1194 WAIT(ep1_ch1()->writable(), 2000); |
1312 EXPECT_EQ(ep2_ch1()->best_connection(), best_connection); | 1195 EXPECT_EQ(ep2_ch1()->best_connection(), best_connection); |
1313 EXPECT_EQ("prflx", ep1_ch1()->best_connection()->remote_candidate().type()); | 1196 EXPECT_EQ("prflx", ep1_ch1()->best_connection()->remote_candidate().type()); |
1314 DestroyChannels(); | 1197 DestroyChannels(); |
1315 } | 1198 } |
1316 | 1199 |
1317 // Test that if remote candidates don't have ufrag and pwd, we still work. | 1200 // Test that if remote candidates don't have ufrag and pwd, we still work. |
1318 TEST_F(P2PTransportChannelTest, RemoteCandidatesWithoutUfragPwd) { | 1201 TEST_F(P2PTransportChannelTest, RemoteCandidatesWithoutUfragPwd) { |
1319 set_clear_remote_candidates_ufrag_pwd(true); | 1202 set_clear_remote_candidates_ufrag_pwd(true); |
1320 ConfigureEndpoints(OPEN, OPEN, | 1203 ConfigureEndpoints(OPEN, OPEN, |
1321 PORTALLOCATOR_ENABLE_SHARED_UFRAG, | 1204 kDefaultPortAllocatorFlags, |
1322 PORTALLOCATOR_ENABLE_SHARED_UFRAG, | 1205 kDefaultPortAllocatorFlags); |
1323 kMinimumStepDelay, kMinimumStepDelay, | |
1324 cricket::ICEPROTO_GOOGLE); | |
1325 CreateChannels(1); | 1206 CreateChannels(1); |
1326 const cricket::Connection* best_connection = NULL; | 1207 const cricket::Connection* best_connection = NULL; |
1327 // Wait until the callee's connections are created. | 1208 // Wait until the callee's connections are created. |
1328 WAIT((best_connection = ep2_ch1()->best_connection()) != NULL, 1000); | 1209 WAIT((best_connection = ep2_ch1()->best_connection()) != NULL, 1000); |
1329 // Wait to see if they get culled; they shouldn't. | 1210 // Wait to see if they get culled; they shouldn't. |
1330 WAIT(ep2_ch1()->best_connection() != best_connection, 1000); | 1211 WAIT(ep2_ch1()->best_connection() != best_connection, 1000); |
1331 EXPECT_TRUE(ep2_ch1()->best_connection() == best_connection); | 1212 EXPECT_TRUE(ep2_ch1()->best_connection() == best_connection); |
1332 DestroyChannels(); | 1213 DestroyChannels(); |
1333 } | 1214 } |
1334 | 1215 |
1335 // Test that a host behind NAT cannot be reached when incoming_only | 1216 // Test that a host behind NAT cannot be reached when incoming_only |
1336 // is set to true. | 1217 // is set to true. |
1337 TEST_F(P2PTransportChannelTest, IncomingOnlyBlocked) { | 1218 TEST_F(P2PTransportChannelTest, IncomingOnlyBlocked) { |
1338 ConfigureEndpoints(NAT_FULL_CONE, OPEN, | 1219 ConfigureEndpoints(NAT_FULL_CONE, OPEN, |
1339 kDefaultPortAllocatorFlags, | 1220 kDefaultPortAllocatorFlags, |
1340 kDefaultPortAllocatorFlags, | 1221 kDefaultPortAllocatorFlags); |
1341 kDefaultStepDelay, kDefaultStepDelay, | |
1342 cricket::ICEPROTO_GOOGLE); | |
1343 | 1222 |
1344 SetAllocatorFlags(0, kOnlyLocalPorts); | 1223 SetAllocatorFlags(0, kOnlyLocalPorts); |
1345 CreateChannels(1); | 1224 CreateChannels(1); |
1346 ep1_ch1()->set_incoming_only(true); | 1225 ep1_ch1()->set_incoming_only(true); |
1347 | 1226 |
1348 // Pump for 1 second and verify that the channels are not connected. | 1227 // Pump for 1 second and verify that the channels are not connected. |
1349 rtc::Thread::Current()->ProcessMessages(1000); | 1228 rtc::Thread::Current()->ProcessMessages(1000); |
1350 | 1229 |
1351 EXPECT_FALSE(ep1_ch1()->readable()); | 1230 EXPECT_FALSE(ep1_ch1()->readable()); |
1352 EXPECT_FALSE(ep1_ch1()->writable()); | 1231 EXPECT_FALSE(ep1_ch1()->writable()); |
1353 EXPECT_FALSE(ep2_ch1()->readable()); | 1232 EXPECT_FALSE(ep2_ch1()->readable()); |
1354 EXPECT_FALSE(ep2_ch1()->writable()); | 1233 EXPECT_FALSE(ep2_ch1()->writable()); |
1355 | 1234 |
1356 DestroyChannels(); | 1235 DestroyChannels(); |
1357 } | 1236 } |
1358 | 1237 |
1359 // Test that a peer behind NAT can connect to a peer that has | 1238 // Test that a peer behind NAT can connect to a peer that has |
1360 // incoming_only flag set. | 1239 // incoming_only flag set. |
1361 TEST_F(P2PTransportChannelTest, IncomingOnlyOpen) { | 1240 TEST_F(P2PTransportChannelTest, IncomingOnlyOpen) { |
1362 ConfigureEndpoints(OPEN, NAT_FULL_CONE, | 1241 ConfigureEndpoints(OPEN, NAT_FULL_CONE, |
1363 kDefaultPortAllocatorFlags, | 1242 kDefaultPortAllocatorFlags, |
1364 kDefaultPortAllocatorFlags, | 1243 kDefaultPortAllocatorFlags); |
1365 kDefaultStepDelay, kDefaultStepDelay, | |
1366 cricket::ICEPROTO_GOOGLE); | |
1367 | 1244 |
1368 SetAllocatorFlags(0, kOnlyLocalPorts); | 1245 SetAllocatorFlags(0, kOnlyLocalPorts); |
1369 CreateChannels(1); | 1246 CreateChannels(1); |
1370 ep1_ch1()->set_incoming_only(true); | 1247 ep1_ch1()->set_incoming_only(true); |
1371 | 1248 |
1372 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1() != NULL && ep2_ch1() != NULL && | 1249 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1() != NULL && ep2_ch1() != NULL && |
1373 ep1_ch1()->readable() && ep1_ch1()->writable() && | 1250 ep1_ch1()->readable() && ep1_ch1()->writable() && |
1374 ep2_ch1()->readable() && ep2_ch1()->writable(), | 1251 ep2_ch1()->readable() && ep2_ch1()->writable(), |
1375 1000, 1000); | 1252 1000, 1000); |
1376 | 1253 |
1377 DestroyChannels(); | 1254 DestroyChannels(); |
1378 } | 1255 } |
1379 | 1256 |
1380 TEST_F(P2PTransportChannelTest, TestTcpConnectionsFromActiveToPassive) { | 1257 TEST_F(P2PTransportChannelTest, TestTcpConnectionsFromActiveToPassive) { |
1381 AddAddress(0, kPublicAddrs[0]); | 1258 AddAddress(0, kPublicAddrs[0]); |
1382 AddAddress(1, kPublicAddrs[1]); | 1259 AddAddress(1, kPublicAddrs[1]); |
1383 | 1260 |
1384 SetAllocationStepDelay(0, kMinimumStepDelay); | 1261 SetAllocationStepDelay(0, kMinimumStepDelay); |
1385 SetAllocationStepDelay(1, kMinimumStepDelay); | 1262 SetAllocationStepDelay(1, kMinimumStepDelay); |
1386 | 1263 |
1387 int kOnlyLocalTcpPorts = cricket::PORTALLOCATOR_DISABLE_UDP | | 1264 int kOnlyLocalTcpPorts = cricket::PORTALLOCATOR_DISABLE_UDP | |
1388 cricket::PORTALLOCATOR_DISABLE_STUN | | 1265 cricket::PORTALLOCATOR_DISABLE_STUN | |
1389 cricket::PORTALLOCATOR_DISABLE_RELAY | | 1266 cricket::PORTALLOCATOR_DISABLE_RELAY; |
1390 cricket::PORTALLOCATOR_ENABLE_SHARED_UFRAG; | |
1391 // Disable all protocols except TCP. | 1267 // Disable all protocols except TCP. |
1392 SetAllocatorFlags(0, kOnlyLocalTcpPorts); | 1268 SetAllocatorFlags(0, kOnlyLocalTcpPorts); |
1393 SetAllocatorFlags(1, kOnlyLocalTcpPorts); | 1269 SetAllocatorFlags(1, kOnlyLocalTcpPorts); |
1394 | 1270 |
1395 SetAllowTcpListen(0, true); // actpass. | 1271 SetAllowTcpListen(0, true); // actpass. |
1396 SetAllowTcpListen(1, false); // active. | 1272 SetAllowTcpListen(1, false); // active. |
1397 | 1273 |
1398 CreateChannels(1); | 1274 CreateChannels(1); |
1399 | 1275 |
1400 EXPECT_TRUE_WAIT(ep1_ch1()->readable() && ep1_ch1()->writable() && | 1276 EXPECT_TRUE_WAIT(ep1_ch1()->readable() && ep1_ch1()->writable() && |
(...skipping 20 matching lines...) Expand all Loading... |
1421 TestSignalRoleConflict(); | 1297 TestSignalRoleConflict(); |
1422 } | 1298 } |
1423 | 1299 |
1424 // Tests that the ice configs (protocol, tiebreaker and role) can be passed | 1300 // Tests that the ice configs (protocol, tiebreaker and role) can be passed |
1425 // down to ports. | 1301 // down to ports. |
1426 TEST_F(P2PTransportChannelTest, TestIceConfigWillPassDownToPort) { | 1302 TEST_F(P2PTransportChannelTest, TestIceConfigWillPassDownToPort) { |
1427 AddAddress(0, kPublicAddrs[0]); | 1303 AddAddress(0, kPublicAddrs[0]); |
1428 AddAddress(1, kPublicAddrs[1]); | 1304 AddAddress(1, kPublicAddrs[1]); |
1429 | 1305 |
1430 SetIceRole(0, cricket::ICEROLE_CONTROLLING); | 1306 SetIceRole(0, cricket::ICEROLE_CONTROLLING); |
1431 SetIceProtocol(0, cricket::ICEPROTO_GOOGLE); | |
1432 SetIceTiebreaker(0, kTiebreaker1); | 1307 SetIceTiebreaker(0, kTiebreaker1); |
1433 SetIceRole(1, cricket::ICEROLE_CONTROLLING); | 1308 SetIceRole(1, cricket::ICEROLE_CONTROLLING); |
1434 SetIceProtocol(1, cricket::ICEPROTO_RFC5245); | |
1435 SetIceTiebreaker(1, kTiebreaker2); | 1309 SetIceTiebreaker(1, kTiebreaker2); |
1436 | 1310 |
1437 CreateChannels(1); | 1311 CreateChannels(1); |
1438 | 1312 |
1439 EXPECT_EQ_WAIT(2u, ep1_ch1()->ports().size(), 1000); | 1313 EXPECT_EQ_WAIT(2u, ep1_ch1()->ports().size(), 1000); |
1440 | 1314 |
1441 const std::vector<cricket::PortInterface *> ports_before = ep1_ch1()->ports(); | 1315 const std::vector<cricket::PortInterface *> ports_before = ep1_ch1()->ports(); |
1442 for (size_t i = 0; i < ports_before.size(); ++i) { | 1316 for (size_t i = 0; i < ports_before.size(); ++i) { |
1443 EXPECT_EQ(cricket::ICEROLE_CONTROLLING, ports_before[i]->GetIceRole()); | 1317 EXPECT_EQ(cricket::ICEROLE_CONTROLLING, ports_before[i]->GetIceRole()); |
1444 EXPECT_EQ(cricket::ICEPROTO_GOOGLE, ports_before[i]->IceProtocol()); | |
1445 EXPECT_EQ(kTiebreaker1, ports_before[i]->IceTiebreaker()); | 1318 EXPECT_EQ(kTiebreaker1, ports_before[i]->IceTiebreaker()); |
1446 } | 1319 } |
1447 | 1320 |
1448 ep1_ch1()->SetIceRole(cricket::ICEROLE_CONTROLLED); | 1321 ep1_ch1()->SetIceRole(cricket::ICEROLE_CONTROLLED); |
1449 ep1_ch1()->SetIceProtocolType(cricket::ICEPROTO_RFC5245); | |
1450 ep1_ch1()->SetIceTiebreaker(kTiebreaker2); | 1322 ep1_ch1()->SetIceTiebreaker(kTiebreaker2); |
1451 | 1323 |
1452 const std::vector<cricket::PortInterface *> ports_after = ep1_ch1()->ports(); | 1324 const std::vector<cricket::PortInterface *> ports_after = ep1_ch1()->ports(); |
1453 for (size_t i = 0; i < ports_after.size(); ++i) { | 1325 for (size_t i = 0; i < ports_after.size(); ++i) { |
1454 EXPECT_EQ(cricket::ICEROLE_CONTROLLED, ports_before[i]->GetIceRole()); | 1326 EXPECT_EQ(cricket::ICEROLE_CONTROLLED, ports_before[i]->GetIceRole()); |
1455 EXPECT_EQ(cricket::ICEPROTO_RFC5245, ports_before[i]->IceProtocol()); | |
1456 // SetIceTiebreaker after Connect() has been called will fail. So expect the | 1327 // SetIceTiebreaker after Connect() has been called will fail. So expect the |
1457 // original value. | 1328 // original value. |
1458 EXPECT_EQ(kTiebreaker1, ports_before[i]->IceTiebreaker()); | 1329 EXPECT_EQ(kTiebreaker1, ports_before[i]->IceTiebreaker()); |
1459 } | 1330 } |
1460 | 1331 |
1461 EXPECT_TRUE_WAIT(ep1_ch1()->readable() && | 1332 EXPECT_TRUE_WAIT(ep1_ch1()->readable() && |
1462 ep1_ch1()->writable() && | 1333 ep1_ch1()->writable() && |
1463 ep2_ch1()->readable() && | 1334 ep2_ch1()->readable() && |
1464 ep2_ch1()->writable(), | 1335 ep2_ch1()->writable(), |
1465 1000); | 1336 1000); |
1466 | 1337 |
1467 EXPECT_TRUE(ep1_ch1()->best_connection() && | 1338 EXPECT_TRUE(ep1_ch1()->best_connection() && |
1468 ep2_ch1()->best_connection()); | 1339 ep2_ch1()->best_connection()); |
1469 | 1340 |
1470 TestSendRecv(1); | 1341 TestSendRecv(1); |
1471 DestroyChannels(); | 1342 DestroyChannels(); |
1472 } | 1343 } |
1473 | 1344 |
1474 // This test verifies channel can handle ice messages when channel is in | |
1475 // hybrid mode. | |
1476 TEST_F(P2PTransportChannelTest, TestConnectivityBetweenHybridandIce) { | |
1477 TestHybridConnectivity(cricket::ICEPROTO_RFC5245); | |
1478 } | |
1479 | |
1480 // This test verifies channel can handle Gice messages when channel is in | |
1481 // hybrid mode. | |
1482 TEST_F(P2PTransportChannelTest, TestConnectivityBetweenHybridandGice) { | |
1483 TestHybridConnectivity(cricket::ICEPROTO_GOOGLE); | |
1484 } | |
1485 | |
1486 // Verify that we can set DSCP value and retrieve properly from P2PTC. | 1345 // Verify that we can set DSCP value and retrieve properly from P2PTC. |
1487 TEST_F(P2PTransportChannelTest, TestDefaultDscpValue) { | 1346 TEST_F(P2PTransportChannelTest, TestDefaultDscpValue) { |
1488 AddAddress(0, kPublicAddrs[0]); | 1347 AddAddress(0, kPublicAddrs[0]); |
1489 AddAddress(1, kPublicAddrs[1]); | 1348 AddAddress(1, kPublicAddrs[1]); |
1490 | 1349 |
1491 CreateChannels(1); | 1350 CreateChannels(1); |
1492 EXPECT_EQ(rtc::DSCP_NO_CHANGE, | 1351 EXPECT_EQ(rtc::DSCP_NO_CHANGE, |
1493 GetEndpoint(0)->cd1_.ch_->DefaultDscpValue()); | 1352 GetEndpoint(0)->cd1_.ch_->DefaultDscpValue()); |
1494 EXPECT_EQ(rtc::DSCP_NO_CHANGE, | 1353 EXPECT_EQ(rtc::DSCP_NO_CHANGE, |
1495 GetEndpoint(1)->cd1_.ch_->DefaultDscpValue()); | 1354 GetEndpoint(1)->cd1_.ch_->DefaultDscpValue()); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1536 RemoteCandidate(ep1_ch1())->address().EqualIPs(kIPv6PublicAddrs[1])); | 1395 RemoteCandidate(ep1_ch1())->address().EqualIPs(kIPv6PublicAddrs[1])); |
1537 | 1396 |
1538 TestSendRecv(1); | 1397 TestSendRecv(1); |
1539 DestroyChannels(); | 1398 DestroyChannels(); |
1540 } | 1399 } |
1541 | 1400 |
1542 // Testing forceful TURN connections. | 1401 // Testing forceful TURN connections. |
1543 TEST_F(P2PTransportChannelTest, TestForceTurn) { | 1402 TEST_F(P2PTransportChannelTest, TestForceTurn) { |
1544 ConfigureEndpoints(NAT_PORT_RESTRICTED, NAT_SYMMETRIC, | 1403 ConfigureEndpoints(NAT_PORT_RESTRICTED, NAT_SYMMETRIC, |
1545 kDefaultPortAllocatorFlags | | 1404 kDefaultPortAllocatorFlags | |
1546 cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET | | 1405 cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET, |
1547 cricket::PORTALLOCATOR_ENABLE_SHARED_UFRAG, | |
1548 kDefaultPortAllocatorFlags | | 1406 kDefaultPortAllocatorFlags | |
1549 cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET | | 1407 cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET); |
1550 cricket::PORTALLOCATOR_ENABLE_SHARED_UFRAG, | |
1551 kDefaultStepDelay, kDefaultStepDelay, | |
1552 cricket::ICEPROTO_RFC5245); | |
1553 set_force_relay(true); | 1408 set_force_relay(true); |
1554 | 1409 |
1555 SetAllocationStepDelay(0, kMinimumStepDelay); | 1410 SetAllocationStepDelay(0, kMinimumStepDelay); |
1556 SetAllocationStepDelay(1, kMinimumStepDelay); | 1411 SetAllocationStepDelay(1, kMinimumStepDelay); |
1557 | 1412 |
1558 CreateChannels(1); | 1413 CreateChannels(1); |
1559 | 1414 |
1560 EXPECT_TRUE_WAIT(ep1_ch1()->readable() && | 1415 EXPECT_TRUE_WAIT(ep1_ch1()->readable() && |
1561 ep1_ch1()->writable() && | 1416 ep1_ch1()->writable() && |
1562 ep2_ch1()->readable() && | 1417 ep2_ch1()->readable() && |
1563 ep2_ch1()->writable(), | 1418 ep2_ch1()->writable(), |
1564 1000); | 1419 2000); |
1565 | 1420 |
1566 EXPECT_TRUE(ep1_ch1()->best_connection() && | 1421 EXPECT_TRUE(ep1_ch1()->best_connection() && |
1567 ep2_ch1()->best_connection()); | 1422 ep2_ch1()->best_connection()); |
1568 | 1423 |
1569 EXPECT_EQ("relay", RemoteCandidate(ep1_ch1())->type()); | 1424 EXPECT_EQ("relay", RemoteCandidate(ep1_ch1())->type()); |
1570 EXPECT_EQ("relay", LocalCandidate(ep1_ch1())->type()); | 1425 EXPECT_EQ("relay", LocalCandidate(ep1_ch1())->type()); |
1571 EXPECT_EQ("relay", RemoteCandidate(ep2_ch1())->type()); | 1426 EXPECT_EQ("relay", RemoteCandidate(ep2_ch1())->type()); |
1572 EXPECT_EQ("relay", LocalCandidate(ep2_ch1())->type()); | 1427 EXPECT_EQ("relay", LocalCandidate(ep2_ch1())->type()); |
1573 | 1428 |
1574 TestSendRecv(1); | 1429 TestSendRecv(1); |
(...skipping 23 matching lines...) Expand all Loading... |
1598 AddAddress(endpoint, kCascadedPrivateAddrs[endpoint]); | 1453 AddAddress(endpoint, kCascadedPrivateAddrs[endpoint]); |
1599 nat->AddTranslator(kPrivateAddrs[endpoint], kCascadedNatAddrs[endpoint], | 1454 nat->AddTranslator(kPrivateAddrs[endpoint], kCascadedNatAddrs[endpoint], |
1600 static_cast<rtc::NATType>(config - NAT_FULL_CONE))->AddClient( | 1455 static_cast<rtc::NATType>(config - NAT_FULL_CONE))->AddClient( |
1601 kCascadedPrivateAddrs[endpoint]); | 1456 kCascadedPrivateAddrs[endpoint]); |
1602 } | 1457 } |
1603 } | 1458 } |
1604 }; | 1459 }; |
1605 | 1460 |
1606 TEST_F(P2PTransportChannelSameNatTest, TestConesBehindSameCone) { | 1461 TEST_F(P2PTransportChannelSameNatTest, TestConesBehindSameCone) { |
1607 ConfigureEndpoints(NAT_FULL_CONE, NAT_FULL_CONE, NAT_FULL_CONE); | 1462 ConfigureEndpoints(NAT_FULL_CONE, NAT_FULL_CONE, NAT_FULL_CONE); |
1608 Test(kLocalUdpToStunUdp); | 1463 Test(P2PTransportChannelTestBase::Result( |
| 1464 "prflx", "udp", "stun", "udp", |
| 1465 "stun", "udp", "prflx", "udp", 1000)); |
1609 } | 1466 } |
1610 | 1467 |
1611 // Test what happens when we have multiple available pathways. | 1468 // Test what happens when we have multiple available pathways. |
1612 // In the future we will try different RTTs and configs for the different | 1469 // In the future we will try different RTTs and configs for the different |
1613 // interfaces, so that we can simulate a user with Ethernet and VPN networks. | 1470 // interfaces, so that we can simulate a user with Ethernet and VPN networks. |
1614 class P2PTransportChannelMultihomedTest : public P2PTransportChannelTestBase { | 1471 class P2PTransportChannelMultihomedTest : public P2PTransportChannelTestBase { |
1615 }; | 1472 }; |
1616 | 1473 |
1617 // Test that we can establish connectivity when both peers are multihomed. | 1474 // Test that we can establish connectivity when both peers are multihomed. |
1618 TEST_F(P2PTransportChannelMultihomedTest, DISABLED_TestBasic) { | 1475 TEST_F(P2PTransportChannelMultihomedTest, DISABLED_TestBasic) { |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1657 // when we lose writability. | 1514 // when we lose writability. |
1658 EXPECT_TRUE_WAIT( | 1515 EXPECT_TRUE_WAIT( |
1659 ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && | 1516 ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && |
1660 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && | 1517 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && |
1661 RemoteCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[1]), | 1518 RemoteCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[1]), |
1662 3000); | 1519 3000); |
1663 | 1520 |
1664 DestroyChannels(); | 1521 DestroyChannels(); |
1665 } | 1522 } |
1666 | 1523 |
| 1524 /* |
| 1525 |
| 1526 TODO(pthatcher): Once have a way to handle network interfaces changes |
| 1527 without signalling an ICE restart, put a test like this back. In the |
| 1528 mean time, this test only worked for GICE. With ICE, it's currently |
| 1529 not possible without an ICE restart. |
| 1530 |
1667 // Test that we can switch links in a coordinated fashion. | 1531 // Test that we can switch links in a coordinated fashion. |
1668 TEST_F(P2PTransportChannelMultihomedTest, TestDrain) { | 1532 TEST_F(P2PTransportChannelMultihomedTest, TestDrain) { |
1669 AddAddress(0, kPublicAddrs[0]); | 1533 AddAddress(0, kPublicAddrs[0]); |
1670 AddAddress(1, kPublicAddrs[1]); | 1534 AddAddress(1, kPublicAddrs[1]); |
1671 // Use only local ports for simplicity. | 1535 // Use only local ports for simplicity. |
1672 SetAllocatorFlags(0, kOnlyLocalPorts); | 1536 SetAllocatorFlags(0, kOnlyLocalPorts); |
1673 SetAllocatorFlags(1, kOnlyLocalPorts); | 1537 SetAllocatorFlags(1, kOnlyLocalPorts); |
1674 | 1538 |
1675 // Create channels and let them go writable, as usual. | 1539 // Create channels and let them go writable, as usual. |
1676 CreateChannels(1); | 1540 CreateChannels(1); |
1677 EXPECT_TRUE_WAIT(ep1_ch1()->readable() && ep1_ch1()->writable() && | 1541 EXPECT_TRUE_WAIT(ep1_ch1()->readable() && ep1_ch1()->writable() && |
1678 ep2_ch1()->readable() && ep2_ch1()->writable(), | 1542 ep2_ch1()->readable() && ep2_ch1()->writable(), |
1679 1000); | 1543 1000); |
1680 EXPECT_TRUE( | 1544 EXPECT_TRUE( |
1681 ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && | 1545 ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && |
1682 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && | 1546 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && |
1683 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); | 1547 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); |
1684 | 1548 |
| 1549 |
1685 // Remove the public interface, add the alternate interface, and allocate | 1550 // Remove the public interface, add the alternate interface, and allocate |
1686 // a new generation of candidates for the new interface (via Connect()). | 1551 // a new generation of candidates for the new interface (via Connect()). |
1687 LOG(LS_INFO) << "Draining..."; | 1552 LOG(LS_INFO) << "Draining..."; |
1688 AddAddress(1, kAlternateAddrs[1]); | 1553 AddAddress(1, kAlternateAddrs[1]); |
1689 RemoveAddress(1, kPublicAddrs[1]); | 1554 RemoveAddress(1, kPublicAddrs[1]); |
1690 ep2_ch1()->Connect(); | 1555 ep2_ch1()->Connect(); |
1691 | 1556 |
1692 // We should switch over to use the alternate address after | 1557 // We should switch over to use the alternate address after |
1693 // an exchange of pings. | 1558 // an exchange of pings. |
1694 EXPECT_TRUE_WAIT( | 1559 EXPECT_TRUE_WAIT( |
1695 ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && | 1560 ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && |
1696 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && | 1561 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && |
1697 RemoteCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[1]), | 1562 RemoteCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[1]), |
1698 3000); | 1563 3000); |
1699 | 1564 |
1700 DestroyChannels(); | 1565 DestroyChannels(); |
1701 } | 1566 } |
1702 | 1567 |
| 1568 */ |
| 1569 |
1703 // A collection of tests which tests a single P2PTransportChannel by sending | 1570 // A collection of tests which tests a single P2PTransportChannel by sending |
1704 // pings. | 1571 // pings. |
1705 class P2PTransportChannelPingTest : public testing::Test, | 1572 class P2PTransportChannelPingTest : public testing::Test, |
1706 public sigslot::has_slots<> { | 1573 public sigslot::has_slots<> { |
1707 public: | 1574 public: |
1708 P2PTransportChannelPingTest() | 1575 P2PTransportChannelPingTest() |
1709 : pss_(new rtc::PhysicalSocketServer), | 1576 : pss_(new rtc::PhysicalSocketServer), |
1710 vss_(new rtc::VirtualSocketServer(pss_.get())), | 1577 vss_(new rtc::VirtualSocketServer(pss_.get())), |
1711 ss_scope_(vss_.get()) {} | 1578 ss_scope_(vss_.get()) {} |
1712 | 1579 |
1713 protected: | 1580 protected: |
1714 void PrepareChannel(cricket::P2PTransportChannel* ch) { | 1581 void PrepareChannel(cricket::P2PTransportChannel* ch) { |
1715 ch->SignalRequestSignaling.connect( | 1582 ch->SignalRequestSignaling.connect( |
1716 this, &P2PTransportChannelPingTest::OnChannelRequestSignaling); | 1583 this, &P2PTransportChannelPingTest::OnChannelRequestSignaling); |
1717 ch->SetIceProtocolType(cricket::ICEPROTO_RFC5245); | |
1718 ch->SetIceRole(cricket::ICEROLE_CONTROLLING); | 1584 ch->SetIceRole(cricket::ICEROLE_CONTROLLING); |
1719 ch->SetIceCredentials(kIceUfrag[0], kIcePwd[0]); | 1585 ch->SetIceCredentials(kIceUfrag[0], kIcePwd[0]); |
1720 ch->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]); | 1586 ch->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]); |
1721 } | 1587 } |
1722 | 1588 |
1723 void OnChannelRequestSignaling(cricket::TransportChannelImpl* channel) { | 1589 void OnChannelRequestSignaling(cricket::TransportChannelImpl* channel) { |
1724 channel->OnSignalingReady(); | 1590 channel->OnSignalingReady(); |
1725 } | 1591 } |
1726 | 1592 |
1727 cricket::Candidate CreateCandidate(const std::string& ip, | 1593 cricket::Candidate CreateCandidate(const std::string& ip, |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1877 ch.OnCandidate(CreateCandidate("1.1.1.1", 1, 1)); | 1743 ch.OnCandidate(CreateCandidate("1.1.1.1", 1, 1)); |
1878 cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 1744 cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); |
1879 ASSERT_TRUE(conn1 != nullptr); | 1745 ASSERT_TRUE(conn1 != nullptr); |
1880 | 1746 |
1881 conn1->ReceivedPing(); | 1747 conn1->ReceivedPing(); |
1882 conn1->OnReadPacket("ABC", 3, rtc::CreatePacketTime(0)); | 1748 conn1->OnReadPacket("ABC", 3, rtc::CreatePacketTime(0)); |
1883 EXPECT_TRUE_WAIT(ch.best_connection() != nullptr, 1000) | 1749 EXPECT_TRUE_WAIT(ch.best_connection() != nullptr, 1000) |
1884 EXPECT_TRUE_WAIT(ch.receiving(), 1000); | 1750 EXPECT_TRUE_WAIT(ch.receiving(), 1000); |
1885 EXPECT_TRUE_WAIT(!ch.receiving(), 1000); | 1751 EXPECT_TRUE_WAIT(!ch.receiving(), 1000); |
1886 } | 1752 } |
OLD | NEW |