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