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 23 matching lines...) Expand all Loading... |
34 #include "webrtc/base/thread.h" | 34 #include "webrtc/base/thread.h" |
35 #include "webrtc/base/virtualsocketserver.h" | 35 #include "webrtc/base/virtualsocketserver.h" |
36 | 36 |
37 namespace { | 37 namespace { |
38 | 38 |
39 using rtc::SocketAddress; | 39 using rtc::SocketAddress; |
40 | 40 |
41 // Default timeout for tests in this file. | 41 // Default timeout for tests in this file. |
42 // Should be large enough for slow buildbots to run the tests reliably. | 42 // Should be large enough for slow buildbots to run the tests reliably. |
43 static const int kDefaultTimeout = 10000; | 43 static const int kDefaultTimeout = 10000; |
| 44 static const int kMediumTimeout = 3000; |
| 45 static const int kShortTimeout = 1000; |
44 | 46 |
45 static const int kOnlyLocalPorts = cricket::PORTALLOCATOR_DISABLE_STUN | | 47 static const int kOnlyLocalPorts = cricket::PORTALLOCATOR_DISABLE_STUN | |
46 cricket::PORTALLOCATOR_DISABLE_RELAY | | 48 cricket::PORTALLOCATOR_DISABLE_RELAY | |
47 cricket::PORTALLOCATOR_DISABLE_TCP; | 49 cricket::PORTALLOCATOR_DISABLE_TCP; |
48 static const int LOW_RTT = 20; | 50 static const int LOW_RTT = 20; |
49 // Addresses on the public internet. | 51 // Addresses on the public internet. |
50 static const SocketAddress kPublicAddrs[2] = | 52 static const SocketAddress kPublicAddrs[2] = |
51 { SocketAddress("11.11.11.11", 0), SocketAddress("22.22.22.22", 0) }; | 53 { SocketAddress("11.11.11.11", 0), SocketAddress("22.22.22.22", 0) }; |
52 // IPv6 Addresses on the public internet. | 54 // IPv6 Addresses on the public internet. |
53 static const SocketAddress kIPv6PublicAddrs[2] = { | 55 static const SocketAddress kIPv6PublicAddrs[2] = { |
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
536 EXPECT_EQ(expected.controlled_protocol, local_protocol); | 538 EXPECT_EQ(expected.controlled_protocol, local_protocol); |
537 EXPECT_EQ(expected.controlling_protocol, remote_protocol); | 539 EXPECT_EQ(expected.controlling_protocol, remote_protocol); |
538 } | 540 } |
539 | 541 |
540 void Test(const Result& expected) { | 542 void Test(const Result& expected) { |
541 int64_t connect_start = rtc::TimeMillis(); | 543 int64_t connect_start = rtc::TimeMillis(); |
542 int64_t connect_time; | 544 int64_t connect_time; |
543 | 545 |
544 // Create the channels and wait for them to connect. | 546 // Create the channels and wait for them to connect. |
545 CreateChannels(); | 547 CreateChannels(); |
546 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1() != NULL && | 548 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1() != NULL && ep2_ch1() != NULL && |
547 ep2_ch1() != NULL && | 549 ep1_ch1()->receiving() && |
548 ep1_ch1()->receiving() && | 550 ep1_ch1()->writable() && |
549 ep1_ch1()->writable() && | 551 ep2_ch1()->receiving() && ep2_ch1()->writable(), |
550 ep2_ch1()->receiving() && | 552 expected.connect_wait, kShortTimeout); |
551 ep2_ch1()->writable(), | |
552 expected.connect_wait, | |
553 1000); | |
554 connect_time = rtc::TimeMillis() - connect_start; | 553 connect_time = rtc::TimeMillis() - connect_start; |
555 if (connect_time < expected.connect_wait) { | 554 if (connect_time < expected.connect_wait) { |
556 LOG(LS_INFO) << "Connect time: " << connect_time << " ms"; | 555 LOG(LS_INFO) << "Connect time: " << connect_time << " ms"; |
557 } else { | 556 } else { |
558 LOG(LS_INFO) << "Connect time: " << "TIMEOUT (" | 557 LOG(LS_INFO) << "Connect time: " << "TIMEOUT (" |
559 << expected.connect_wait << " ms)"; | 558 << expected.connect_wait << " ms)"; |
560 } | 559 } |
561 | 560 |
562 // Allow a few turns of the crank for the selected connections to emerge. | 561 // Allow a few turns of the crank for the selected connections to emerge. |
563 // This may take up to 2 seconds. | 562 // This may take up to 2 seconds. |
(...skipping 25 matching lines...) Expand all Loading... |
589 | 588 |
590 // Destroy the channels, and wait for them to be fully cleaned up. | 589 // Destroy the channels, and wait for them to be fully cleaned up. |
591 DestroyChannels(); | 590 DestroyChannels(); |
592 } | 591 } |
593 | 592 |
594 void TestSendRecv() { | 593 void TestSendRecv() { |
595 for (int i = 0; i < 10; ++i) { | 594 for (int i = 0; i < 10; ++i) { |
596 const char* data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; | 595 const char* data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; |
597 int len = static_cast<int>(strlen(data)); | 596 int len = static_cast<int>(strlen(data)); |
598 // local_channel1 <==> remote_channel1 | 597 // local_channel1 <==> remote_channel1 |
599 EXPECT_EQ_WAIT(len, SendData(ep1_ch1(), data, len), 1000); | 598 EXPECT_EQ_WAIT(len, SendData(ep1_ch1(), data, len), kMediumTimeout); |
600 EXPECT_TRUE_WAIT(CheckDataOnChannel(ep2_ch1(), data, len), 1000); | 599 EXPECT_TRUE_WAIT(CheckDataOnChannel(ep2_ch1(), data, len), |
601 EXPECT_EQ_WAIT(len, SendData(ep2_ch1(), data, len), 1000); | 600 kMediumTimeout); |
602 EXPECT_TRUE_WAIT(CheckDataOnChannel(ep1_ch1(), data, len), 1000); | 601 EXPECT_EQ_WAIT(len, SendData(ep2_ch1(), data, len), kMediumTimeout); |
| 602 EXPECT_TRUE_WAIT(CheckDataOnChannel(ep1_ch1(), data, len), |
| 603 kMediumTimeout); |
603 } | 604 } |
604 } | 605 } |
605 | 606 |
606 // This test waits for the transport to become receiving and writable on both | 607 // This test waits for the transport to become receiving and writable on both |
607 // end points. Once they are, the end points set new local ice parameters and | 608 // end points. Once they are, the end points set new local ice parameters and |
608 // restart the ice gathering. Finally it waits for the transport to select a | 609 // restart the ice gathering. Finally it waits for the transport to select a |
609 // new connection using the newly generated ice candidates. | 610 // new connection using the newly generated ice candidates. |
610 // Before calling this function the end points must be configured. | 611 // Before calling this function the end points must be configured. |
611 void TestHandleIceUfragPasswordChanged() { | 612 void TestHandleIceUfragPasswordChanged() { |
612 ep1_ch1()->SetRemoteIceParameters(kIceParams[1]); | 613 ep1_ch1()->SetRemoteIceParameters(kIceParams[1]); |
613 ep2_ch1()->SetRemoteIceParameters(kIceParams[0]); | 614 ep2_ch1()->SetRemoteIceParameters(kIceParams[0]); |
614 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 615 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && |
615 ep2_ch1()->receiving() && ep2_ch1()->writable(), | 616 ep2_ch1()->receiving() && ep2_ch1()->writable(), |
616 1000, 1000); | 617 kShortTimeout, kShortTimeout); |
617 | 618 |
618 const Candidate* old_local_candidate1 = LocalCandidate(ep1_ch1()); | 619 const Candidate* old_local_candidate1 = LocalCandidate(ep1_ch1()); |
619 const Candidate* old_local_candidate2 = LocalCandidate(ep2_ch1()); | 620 const Candidate* old_local_candidate2 = LocalCandidate(ep2_ch1()); |
620 const Candidate* old_remote_candidate1 = RemoteCandidate(ep1_ch1()); | 621 const Candidate* old_remote_candidate1 = RemoteCandidate(ep1_ch1()); |
621 const Candidate* old_remote_candidate2 = RemoteCandidate(ep2_ch1()); | 622 const Candidate* old_remote_candidate2 = RemoteCandidate(ep2_ch1()); |
622 | 623 |
623 ep1_ch1()->SetIceParameters(kIceParams[2]); | 624 ep1_ch1()->SetIceParameters(kIceParams[2]); |
624 ep1_ch1()->SetRemoteIceParameters(kIceParams[3]); | 625 ep1_ch1()->SetRemoteIceParameters(kIceParams[3]); |
625 ep1_ch1()->MaybeStartGathering(); | 626 ep1_ch1()->MaybeStartGathering(); |
626 ep2_ch1()->SetIceParameters(kIceParams[3]); | 627 ep2_ch1()->SetIceParameters(kIceParams[3]); |
627 | 628 |
628 ep2_ch1()->SetRemoteIceParameters(kIceParams[2]); | 629 ep2_ch1()->SetRemoteIceParameters(kIceParams[2]); |
629 ep2_ch1()->MaybeStartGathering(); | 630 ep2_ch1()->MaybeStartGathering(); |
630 | 631 |
631 EXPECT_TRUE_WAIT_MARGIN(LocalCandidate(ep1_ch1())->generation() != | 632 EXPECT_TRUE_WAIT_MARGIN(LocalCandidate(ep1_ch1())->generation() != |
632 old_local_candidate1->generation(), | 633 old_local_candidate1->generation(), |
633 1000, 1000); | 634 kShortTimeout, kShortTimeout); |
634 EXPECT_TRUE_WAIT_MARGIN(LocalCandidate(ep2_ch1())->generation() != | 635 EXPECT_TRUE_WAIT_MARGIN(LocalCandidate(ep2_ch1())->generation() != |
635 old_local_candidate2->generation(), | 636 old_local_candidate2->generation(), |
636 1000, 1000); | 637 kShortTimeout, kShortTimeout); |
637 EXPECT_TRUE_WAIT_MARGIN(RemoteCandidate(ep1_ch1())->generation() != | 638 EXPECT_TRUE_WAIT_MARGIN(RemoteCandidate(ep1_ch1())->generation() != |
638 old_remote_candidate1->generation(), | 639 old_remote_candidate1->generation(), |
639 1000, 1000); | 640 kShortTimeout, kShortTimeout); |
640 EXPECT_TRUE_WAIT_MARGIN(RemoteCandidate(ep2_ch1())->generation() != | 641 EXPECT_TRUE_WAIT_MARGIN(RemoteCandidate(ep2_ch1())->generation() != |
641 old_remote_candidate2->generation(), | 642 old_remote_candidate2->generation(), |
642 1000, 1000); | 643 kShortTimeout, kShortTimeout); |
643 EXPECT_EQ(1u, RemoteCandidate(ep2_ch1())->generation()); | 644 EXPECT_EQ(1u, RemoteCandidate(ep2_ch1())->generation()); |
644 EXPECT_EQ(1u, RemoteCandidate(ep1_ch1())->generation()); | 645 EXPECT_EQ(1u, RemoteCandidate(ep1_ch1())->generation()); |
645 } | 646 } |
646 | 647 |
647 void TestSignalRoleConflict() { | 648 void TestSignalRoleConflict() { |
648 SetIceTiebreaker(0, | 649 SetIceTiebreaker(0, |
649 kLowTiebreaker); // Default EP1 is in controlling state. | 650 kLowTiebreaker); // Default EP1 is in controlling state. |
650 | 651 |
651 SetIceRole(1, ICEROLE_CONTROLLING); | 652 SetIceRole(1, ICEROLE_CONTROLLING); |
652 SetIceTiebreaker(1, kHighTiebreaker); | 653 SetIceTiebreaker(1, kHighTiebreaker); |
653 | 654 |
654 // Creating channels with both channels role set to CONTROLLING. | 655 // Creating channels with both channels role set to CONTROLLING. |
655 CreateChannels(); | 656 CreateChannels(); |
656 // Since both the channels initiated with controlling state and channel2 | 657 // Since both the channels initiated with controlling state and channel2 |
657 // has higher tiebreaker value, channel1 should receive SignalRoleConflict. | 658 // has higher tiebreaker value, channel1 should receive SignalRoleConflict. |
658 EXPECT_TRUE_WAIT(GetRoleConflict(0), 1000); | 659 EXPECT_TRUE_WAIT(GetRoleConflict(0), kShortTimeout); |
659 EXPECT_FALSE(GetRoleConflict(1)); | 660 EXPECT_FALSE(GetRoleConflict(1)); |
660 | 661 |
661 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && | 662 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && |
662 ep1_ch1()->writable() && | 663 ep2_ch1()->receiving() && ep2_ch1()->writable(), |
663 ep2_ch1()->receiving() && | 664 kShortTimeout); |
664 ep2_ch1()->writable(), | |
665 1000); | |
666 | 665 |
667 EXPECT_TRUE(ep1_ch1()->selected_connection() && | 666 EXPECT_TRUE(ep1_ch1()->selected_connection() && |
668 ep2_ch1()->selected_connection()); | 667 ep2_ch1()->selected_connection()); |
669 | 668 |
670 TestSendRecv(); | 669 TestSendRecv(); |
671 } | 670 } |
672 | 671 |
673 void OnReadyToSend(TransportChannel* ch) { | 672 void OnReadyToSend(TransportChannel* ch) { |
674 GetEndpoint(ch)->ready_to_send_ = true; | 673 GetEndpoint(ch)->ready_to_send_ = true; |
675 } | 674 } |
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1153 TestHandleIceUfragPasswordChanged(); | 1152 TestHandleIceUfragPasswordChanged(); |
1154 DestroyChannels(); | 1153 DestroyChannels(); |
1155 } | 1154 } |
1156 | 1155 |
1157 // Test the operation of GetStats. | 1156 // Test the operation of GetStats. |
1158 TEST_F(P2PTransportChannelTest, GetStats) { | 1157 TEST_F(P2PTransportChannelTest, GetStats) { |
1159 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, | 1158 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, |
1160 kDefaultPortAllocatorFlags); | 1159 kDefaultPortAllocatorFlags); |
1161 CreateChannels(); | 1160 CreateChannels(); |
1162 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 1161 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && |
1163 ep2_ch1()->receiving() && ep2_ch1()->writable(), | 1162 ep2_ch1()->receiving() && ep2_ch1()->writable(), |
1164 1000, 1000); | 1163 kShortTimeout, kShortTimeout); |
1165 TestSendRecv(); | 1164 TestSendRecv(); |
1166 ConnectionInfos infos; | 1165 ConnectionInfos infos; |
1167 ASSERT_TRUE(ep1_ch1()->GetStats(&infos)); | 1166 ASSERT_TRUE(ep1_ch1()->GetStats(&infos)); |
1168 ASSERT_TRUE(infos.size() >= 1); | 1167 ASSERT_TRUE(infos.size() >= 1); |
1169 ConnectionInfo* best_conn_info = nullptr; | 1168 ConnectionInfo* best_conn_info = nullptr; |
1170 for (ConnectionInfo& info : infos) { | 1169 for (ConnectionInfo& info : infos) { |
1171 if (info.best_connection) { | 1170 if (info.best_connection) { |
1172 best_conn_info = &info; | 1171 best_conn_info = &info; |
1173 break; | 1172 break; |
1174 } | 1173 } |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1359 CreateChannels(); | 1358 CreateChannels(); |
1360 // Only have remote parameters come in for ep2, not ep1. | 1359 // Only have remote parameters come in for ep2, not ep1. |
1361 ep2_ch1()->SetRemoteIceParameters(kIceParams[0]); | 1360 ep2_ch1()->SetRemoteIceParameters(kIceParams[0]); |
1362 | 1361 |
1363 // Pause sending ep2's candidates to ep1 until ep1 receives the peer reflexive | 1362 // Pause sending ep2's candidates to ep1 until ep1 receives the peer reflexive |
1364 // candidate. | 1363 // candidate. |
1365 PauseCandidates(1); | 1364 PauseCandidates(1); |
1366 | 1365 |
1367 // Wait until the callee becomes writable to make sure that a ping request is | 1366 // Wait until the callee becomes writable to make sure that a ping request is |
1368 // received by the caller before his remote ICE credentials are set. | 1367 // received by the caller before his remote ICE credentials are set. |
1369 ASSERT_TRUE_WAIT(ep2_ch1()->selected_connection() != nullptr, 3000); | 1368 ASSERT_TRUE_WAIT(ep2_ch1()->selected_connection() != nullptr, kMediumTimeout); |
1370 // Add two sets of remote ICE credentials, so that the ones used by the | 1369 // Add two sets of remote ICE credentials, so that the ones used by the |
1371 // candidate will be generation 1 instead of 0. | 1370 // candidate will be generation 1 instead of 0. |
1372 ep1_ch1()->SetRemoteIceParameters(kIceParams[3]); | 1371 ep1_ch1()->SetRemoteIceParameters(kIceParams[3]); |
1373 ep1_ch1()->SetRemoteIceParameters(kIceParams[1]); | 1372 ep1_ch1()->SetRemoteIceParameters(kIceParams[1]); |
1374 // The caller should have the selected connection connected to the peer | 1373 // The caller should have the selected connection connected to the peer |
1375 // reflexive candidate. | 1374 // reflexive candidate. |
1376 const Connection* selected_connection = nullptr; | 1375 const Connection* selected_connection = nullptr; |
1377 ASSERT_TRUE_WAIT( | 1376 ASSERT_TRUE_WAIT( |
1378 (selected_connection = ep1_ch1()->selected_connection()) != nullptr, | 1377 (selected_connection = ep1_ch1()->selected_connection()) != nullptr, |
1379 2000); | 1378 kMediumTimeout); |
1380 EXPECT_EQ("prflx", selected_connection->remote_candidate().type()); | 1379 EXPECT_EQ("prflx", selected_connection->remote_candidate().type()); |
1381 EXPECT_EQ(kIceUfrag[1], selected_connection->remote_candidate().username()); | 1380 EXPECT_EQ(kIceUfrag[1], selected_connection->remote_candidate().username()); |
1382 EXPECT_EQ(kIcePwd[1], selected_connection->remote_candidate().password()); | 1381 EXPECT_EQ(kIcePwd[1], selected_connection->remote_candidate().password()); |
1383 EXPECT_EQ(1u, selected_connection->remote_candidate().generation()); | 1382 EXPECT_EQ(1u, selected_connection->remote_candidate().generation()); |
1384 | 1383 |
1385 ResumeCandidates(1); | 1384 ResumeCandidates(1); |
1386 // Verify ep1's selected connection is updated to use the 'local' candidate. | 1385 // Verify ep1's selected connection is updated to use the 'local' candidate. |
1387 EXPECT_EQ_WAIT("local", | 1386 EXPECT_EQ_WAIT("local", |
1388 ep1_ch1()->selected_connection()->remote_candidate().type(), | 1387 ep1_ch1()->selected_connection()->remote_candidate().type(), |
1389 2000); | 1388 kMediumTimeout); |
1390 EXPECT_EQ(selected_connection, ep1_ch1()->selected_connection()); | 1389 EXPECT_EQ(selected_connection, ep1_ch1()->selected_connection()); |
1391 DestroyChannels(); | 1390 DestroyChannels(); |
1392 } | 1391 } |
1393 | 1392 |
1394 // Test that we properly create a connection on a STUN ping from unknown address | 1393 // Test that we properly create a connection on a STUN ping from unknown address |
1395 // when the signaling is slow and the end points are behind NAT. | 1394 // when the signaling is slow and the end points are behind NAT. |
1396 TEST_F(P2PTransportChannelTest, PeerReflexiveCandidateBeforeSignalingWithNAT) { | 1395 TEST_F(P2PTransportChannelTest, PeerReflexiveCandidateBeforeSignalingWithNAT) { |
1397 ConfigureEndpoints(OPEN, NAT_SYMMETRIC, kDefaultPortAllocatorFlags, | 1396 ConfigureEndpoints(OPEN, NAT_SYMMETRIC, kDefaultPortAllocatorFlags, |
1398 kDefaultPortAllocatorFlags); | 1397 kDefaultPortAllocatorFlags); |
1399 // Emulate no remote parameters coming in. | 1398 // Emulate no remote parameters coming in. |
1400 set_remote_ice_parameter_source(FROM_CANDIDATE); | 1399 set_remote_ice_parameter_source(FROM_CANDIDATE); |
1401 CreateChannels(); | 1400 CreateChannels(); |
1402 // Only have remote parameters come in for ep2, not ep1. | 1401 // Only have remote parameters come in for ep2, not ep1. |
1403 ep2_ch1()->SetRemoteIceParameters(kIceParams[0]); | 1402 ep2_ch1()->SetRemoteIceParameters(kIceParams[0]); |
1404 // Pause sending ep2's candidates to ep1 until ep1 receives the peer reflexive | 1403 // Pause sending ep2's candidates to ep1 until ep1 receives the peer reflexive |
1405 // candidate. | 1404 // candidate. |
1406 PauseCandidates(1); | 1405 PauseCandidates(1); |
1407 | 1406 |
1408 // Wait until the callee becomes writable to make sure that a ping request is | 1407 // Wait until the callee becomes writable to make sure that a ping request is |
1409 // received by the caller before his remote ICE credentials are set. | 1408 // received by the caller before his remote ICE credentials are set. |
1410 ASSERT_TRUE_WAIT(ep2_ch1()->selected_connection() != nullptr, 3000); | 1409 ASSERT_TRUE_WAIT(ep2_ch1()->selected_connection() != nullptr, kMediumTimeout); |
1411 // Add two sets of remote ICE credentials, so that the ones used by the | 1410 // Add two sets of remote ICE credentials, so that the ones used by the |
1412 // candidate will be generation 1 instead of 0. | 1411 // candidate will be generation 1 instead of 0. |
1413 ep1_ch1()->SetRemoteIceParameters(kIceParams[3]); | 1412 ep1_ch1()->SetRemoteIceParameters(kIceParams[3]); |
1414 ep1_ch1()->SetRemoteIceParameters(kIceParams[1]); | 1413 ep1_ch1()->SetRemoteIceParameters(kIceParams[1]); |
1415 | 1414 |
1416 // The caller's selected connection should be connected to the peer reflexive | 1415 // The caller's selected connection should be connected to the peer reflexive |
1417 // candidate. | 1416 // candidate. |
1418 const Connection* selected_connection = nullptr; | 1417 const Connection* selected_connection = nullptr; |
1419 ASSERT_TRUE_WAIT( | 1418 ASSERT_TRUE_WAIT( |
1420 (selected_connection = ep1_ch1()->selected_connection()) != nullptr, | 1419 (selected_connection = ep1_ch1()->selected_connection()) != nullptr, |
1421 2000); | 1420 kMediumTimeout); |
1422 EXPECT_EQ("prflx", selected_connection->remote_candidate().type()); | 1421 EXPECT_EQ("prflx", selected_connection->remote_candidate().type()); |
1423 EXPECT_EQ(kIceUfrag[1], selected_connection->remote_candidate().username()); | 1422 EXPECT_EQ(kIceUfrag[1], selected_connection->remote_candidate().username()); |
1424 EXPECT_EQ(kIcePwd[1], selected_connection->remote_candidate().password()); | 1423 EXPECT_EQ(kIcePwd[1], selected_connection->remote_candidate().password()); |
1425 EXPECT_EQ(1u, selected_connection->remote_candidate().generation()); | 1424 EXPECT_EQ(1u, selected_connection->remote_candidate().generation()); |
1426 | 1425 |
1427 ResumeCandidates(1); | 1426 ResumeCandidates(1); |
1428 | 1427 |
1429 EXPECT_EQ_WAIT("prflx", | 1428 EXPECT_EQ_WAIT("prflx", |
1430 ep1_ch1()->selected_connection()->remote_candidate().type(), | 1429 ep1_ch1()->selected_connection()->remote_candidate().type(), |
1431 2000); | 1430 kMediumTimeout); |
1432 EXPECT_EQ(selected_connection, ep1_ch1()->selected_connection()); | 1431 EXPECT_EQ(selected_connection, ep1_ch1()->selected_connection()); |
1433 DestroyChannels(); | 1432 DestroyChannels(); |
1434 } | 1433 } |
1435 | 1434 |
1436 // Test that we properly create a connection on a STUN ping from unknown address | 1435 // Test that we properly create a connection on a STUN ping from unknown address |
1437 // when the signaling is slow, even if the new candidate is created due to the | 1436 // when the signaling is slow, even if the new candidate is created due to the |
1438 // remote peer doing an ICE restart, pairing this candidate across generations. | 1437 // remote peer doing an ICE restart, pairing this candidate across generations. |
1439 // | 1438 // |
1440 // Previously this wasn't working due to a bug where the peer reflexive | 1439 // Previously this wasn't working due to a bug where the peer reflexive |
1441 // candidate was only updated for the newest generation candidate pairs, and | 1440 // candidate was only updated for the newest generation candidate pairs, and |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1488 | 1487 |
1489 EXPECT_EQ_WAIT("relay", | 1488 EXPECT_EQ_WAIT("relay", |
1490 ep1_ch1()->selected_connection()->remote_candidate().type(), | 1489 ep1_ch1()->selected_connection()->remote_candidate().type(), |
1491 kDefaultTimeout); | 1490 kDefaultTimeout); |
1492 EXPECT_EQ(prflx_selected_connection, ep1_ch1()->selected_connection()); | 1491 EXPECT_EQ(prflx_selected_connection, ep1_ch1()->selected_connection()); |
1493 DestroyChannels(); | 1492 DestroyChannels(); |
1494 } | 1493 } |
1495 | 1494 |
1496 // Test that if remote candidates don't have ufrag and pwd, we still work. | 1495 // Test that if remote candidates don't have ufrag and pwd, we still work. |
1497 TEST_F(P2PTransportChannelTest, RemoteCandidatesWithoutUfragPwd) { | 1496 TEST_F(P2PTransportChannelTest, RemoteCandidatesWithoutUfragPwd) { |
| 1497 rtc::ScopedFakeClock clock; |
1498 set_remote_ice_parameter_source(FROM_SETICEPARAMETERS); | 1498 set_remote_ice_parameter_source(FROM_SETICEPARAMETERS); |
1499 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, | 1499 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, |
1500 kDefaultPortAllocatorFlags); | 1500 kDefaultPortAllocatorFlags); |
1501 CreateChannels(); | 1501 CreateChannels(); |
1502 const Connection* selected_connection = NULL; | 1502 const Connection* selected_connection = NULL; |
1503 // Wait until the callee's connections are created. | 1503 // Wait until the callee's connections are created. |
1504 WAIT((selected_connection = ep2_ch1()->selected_connection()) != NULL, 1000); | 1504 EXPECT_TRUE_SIMULATED_WAIT( |
1505 // Wait to see if they get culled; they shouldn't. | 1505 (selected_connection = ep2_ch1()->selected_connection()) != NULL, |
1506 WAIT(ep2_ch1()->selected_connection() != selected_connection, 1000); | 1506 kMediumTimeout, clock); |
| 1507 // Wait to make sure the selected connection is not changed. |
| 1508 SIMULATED_WAIT(ep2_ch1()->selected_connection() != selected_connection, |
| 1509 kShortTimeout, clock); |
1507 EXPECT_TRUE(ep2_ch1()->selected_connection() == selected_connection); | 1510 EXPECT_TRUE(ep2_ch1()->selected_connection() == selected_connection); |
1508 DestroyChannels(); | 1511 DestroyChannels(); |
1509 } | 1512 } |
1510 | 1513 |
1511 // Test that a host behind NAT cannot be reached when incoming_only | 1514 // Test that a host behind NAT cannot be reached when incoming_only |
1512 // is set to true. | 1515 // is set to true. |
1513 TEST_F(P2PTransportChannelTest, IncomingOnlyBlocked) { | 1516 TEST_F(P2PTransportChannelTest, IncomingOnlyBlocked) { |
1514 ConfigureEndpoints(NAT_FULL_CONE, OPEN, kDefaultPortAllocatorFlags, | 1517 ConfigureEndpoints(NAT_FULL_CONE, OPEN, kDefaultPortAllocatorFlags, |
1515 kDefaultPortAllocatorFlags); | 1518 kDefaultPortAllocatorFlags); |
1516 | 1519 |
1517 SetAllocatorFlags(0, kOnlyLocalPorts); | 1520 SetAllocatorFlags(0, kOnlyLocalPorts); |
1518 CreateChannels(); | 1521 CreateChannels(); |
1519 ep1_ch1()->set_incoming_only(true); | 1522 ep1_ch1()->set_incoming_only(true); |
1520 | 1523 |
1521 // Pump for 1 second and verify that the channels are not connected. | 1524 // Pump for 1 second and verify that the channels are not connected. |
1522 rtc::Thread::Current()->ProcessMessages(1000); | 1525 rtc::Thread::Current()->ProcessMessages(kShortTimeout); |
1523 | 1526 |
1524 EXPECT_FALSE(ep1_ch1()->receiving()); | 1527 EXPECT_FALSE(ep1_ch1()->receiving()); |
1525 EXPECT_FALSE(ep1_ch1()->writable()); | 1528 EXPECT_FALSE(ep1_ch1()->writable()); |
1526 EXPECT_FALSE(ep2_ch1()->receiving()); | 1529 EXPECT_FALSE(ep2_ch1()->receiving()); |
1527 EXPECT_FALSE(ep2_ch1()->writable()); | 1530 EXPECT_FALSE(ep2_ch1()->writable()); |
1528 | 1531 |
1529 DestroyChannels(); | 1532 DestroyChannels(); |
1530 } | 1533 } |
1531 | 1534 |
1532 // Test that a peer behind NAT can connect to a peer that has | 1535 // Test that a peer behind NAT can connect to a peer that has |
1533 // incoming_only flag set. | 1536 // incoming_only flag set. |
1534 TEST_F(P2PTransportChannelTest, IncomingOnlyOpen) { | 1537 TEST_F(P2PTransportChannelTest, IncomingOnlyOpen) { |
1535 ConfigureEndpoints(OPEN, NAT_FULL_CONE, kDefaultPortAllocatorFlags, | 1538 ConfigureEndpoints(OPEN, NAT_FULL_CONE, kDefaultPortAllocatorFlags, |
1536 kDefaultPortAllocatorFlags); | 1539 kDefaultPortAllocatorFlags); |
1537 | 1540 |
1538 SetAllocatorFlags(0, kOnlyLocalPorts); | 1541 SetAllocatorFlags(0, kOnlyLocalPorts); |
1539 CreateChannels(); | 1542 CreateChannels(); |
1540 ep1_ch1()->set_incoming_only(true); | 1543 ep1_ch1()->set_incoming_only(true); |
1541 | 1544 |
1542 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1() != NULL && ep2_ch1() != NULL && | 1545 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1() != NULL && ep2_ch1() != NULL && |
1543 ep1_ch1()->receiving() && ep1_ch1()->writable() && | 1546 ep1_ch1()->receiving() && ep1_ch1()->writable() && |
1544 ep2_ch1()->receiving() && ep2_ch1()->writable(), | 1547 ep2_ch1()->receiving() && ep2_ch1()->writable(), |
1545 1000, 1000); | 1548 kShortTimeout, kShortTimeout); |
1546 | 1549 |
1547 DestroyChannels(); | 1550 DestroyChannels(); |
1548 } | 1551 } |
1549 | 1552 |
1550 TEST_F(P2PTransportChannelTest, TestTcpConnectionsFromActiveToPassive) { | 1553 TEST_F(P2PTransportChannelTest, TestTcpConnectionsFromActiveToPassive) { |
1551 AddAddress(0, kPublicAddrs[0]); | 1554 AddAddress(0, kPublicAddrs[0]); |
1552 AddAddress(1, kPublicAddrs[1]); | 1555 AddAddress(1, kPublicAddrs[1]); |
1553 | 1556 |
1554 SetAllocationStepDelay(0, kMinimumStepDelay); | 1557 SetAllocationStepDelay(0, kMinimumStepDelay); |
1555 SetAllocationStepDelay(1, kMinimumStepDelay); | 1558 SetAllocationStepDelay(1, kMinimumStepDelay); |
(...skipping 20 matching lines...) Expand all Loading... |
1576 | 1579 |
1577 // Verify tcp candidates. | 1580 // Verify tcp candidates. |
1578 VerifySavedTcpCandidates(0, TCPTYPE_PASSIVE_STR); | 1581 VerifySavedTcpCandidates(0, TCPTYPE_PASSIVE_STR); |
1579 VerifySavedTcpCandidates(1, TCPTYPE_ACTIVE_STR); | 1582 VerifySavedTcpCandidates(1, TCPTYPE_ACTIVE_STR); |
1580 | 1583 |
1581 // Resume candidates. | 1584 // Resume candidates. |
1582 ResumeCandidates(0); | 1585 ResumeCandidates(0); |
1583 ResumeCandidates(1); | 1586 ResumeCandidates(1); |
1584 | 1587 |
1585 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 1588 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && |
1586 ep2_ch1()->receiving() && ep2_ch1()->writable(), | 1589 ep2_ch1()->receiving() && ep2_ch1()->writable(), |
1587 1000); | 1590 kShortTimeout); |
1588 EXPECT_TRUE(ep1_ch1()->selected_connection() && | 1591 EXPECT_TRUE(ep1_ch1()->selected_connection() && |
1589 ep2_ch1()->selected_connection() && | 1592 ep2_ch1()->selected_connection() && |
1590 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && | 1593 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && |
1591 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); | 1594 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); |
1592 | 1595 |
1593 TestSendRecv(); | 1596 TestSendRecv(); |
1594 DestroyChannels(); | 1597 DestroyChannels(); |
1595 } | 1598 } |
1596 | 1599 |
1597 TEST_F(P2PTransportChannelTest, TestIceRoleConflict) { | 1600 TEST_F(P2PTransportChannelTest, TestIceRoleConflict) { |
(...skipping 10 matching lines...) Expand all Loading... |
1608 | 1611 |
1609 // Give the first connection the higher tiebreaker so its role won't | 1612 // Give the first connection the higher tiebreaker so its role won't |
1610 // change unless we tell it to. | 1613 // change unless we tell it to. |
1611 SetIceRole(0, ICEROLE_CONTROLLING); | 1614 SetIceRole(0, ICEROLE_CONTROLLING); |
1612 SetIceTiebreaker(0, kHighTiebreaker); | 1615 SetIceTiebreaker(0, kHighTiebreaker); |
1613 SetIceRole(1, ICEROLE_CONTROLLING); | 1616 SetIceRole(1, ICEROLE_CONTROLLING); |
1614 SetIceTiebreaker(1, kLowTiebreaker); | 1617 SetIceTiebreaker(1, kLowTiebreaker); |
1615 | 1618 |
1616 CreateChannels(); | 1619 CreateChannels(); |
1617 | 1620 |
1618 EXPECT_EQ_WAIT(2u, ep1_ch1()->ports().size(), 1000); | 1621 EXPECT_EQ_WAIT(2u, ep1_ch1()->ports().size(), kShortTimeout); |
1619 | 1622 |
1620 const std::vector<PortInterface*> ports_before = ep1_ch1()->ports(); | 1623 const std::vector<PortInterface*> ports_before = ep1_ch1()->ports(); |
1621 for (size_t i = 0; i < ports_before.size(); ++i) { | 1624 for (size_t i = 0; i < ports_before.size(); ++i) { |
1622 EXPECT_EQ(ICEROLE_CONTROLLING, ports_before[i]->GetIceRole()); | 1625 EXPECT_EQ(ICEROLE_CONTROLLING, ports_before[i]->GetIceRole()); |
1623 EXPECT_EQ(kHighTiebreaker, ports_before[i]->IceTiebreaker()); | 1626 EXPECT_EQ(kHighTiebreaker, ports_before[i]->IceTiebreaker()); |
1624 } | 1627 } |
1625 | 1628 |
1626 ep1_ch1()->SetIceRole(ICEROLE_CONTROLLED); | 1629 ep1_ch1()->SetIceRole(ICEROLE_CONTROLLED); |
1627 ep1_ch1()->SetIceTiebreaker(kLowTiebreaker); | 1630 ep1_ch1()->SetIceTiebreaker(kLowTiebreaker); |
1628 | 1631 |
1629 const std::vector<PortInterface*> ports_after = ep1_ch1()->ports(); | 1632 const std::vector<PortInterface*> ports_after = ep1_ch1()->ports(); |
1630 for (size_t i = 0; i < ports_after.size(); ++i) { | 1633 for (size_t i = 0; i < ports_after.size(); ++i) { |
1631 EXPECT_EQ(ICEROLE_CONTROLLED, ports_before[i]->GetIceRole()); | 1634 EXPECT_EQ(ICEROLE_CONTROLLED, ports_before[i]->GetIceRole()); |
1632 // SetIceTiebreaker after ports have been created will fail. So expect the | 1635 // SetIceTiebreaker after ports have been created will fail. So expect the |
1633 // original value. | 1636 // original value. |
1634 EXPECT_EQ(kHighTiebreaker, ports_before[i]->IceTiebreaker()); | 1637 EXPECT_EQ(kHighTiebreaker, ports_before[i]->IceTiebreaker()); |
1635 } | 1638 } |
1636 | 1639 |
1637 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && | 1640 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && |
1638 ep1_ch1()->writable() && | 1641 ep2_ch1()->receiving() && ep2_ch1()->writable(), |
1639 ep2_ch1()->receiving() && | 1642 kShortTimeout); |
1640 ep2_ch1()->writable(), | |
1641 1000); | |
1642 | 1643 |
1643 EXPECT_TRUE(ep1_ch1()->selected_connection() && | 1644 EXPECT_TRUE(ep1_ch1()->selected_connection() && |
1644 ep2_ch1()->selected_connection()); | 1645 ep2_ch1()->selected_connection()); |
1645 | 1646 |
1646 TestSendRecv(); | 1647 TestSendRecv(); |
1647 DestroyChannels(); | 1648 DestroyChannels(); |
1648 } | 1649 } |
1649 | 1650 |
1650 // Verify that we can set DSCP value and retrieve properly from P2PTC. | 1651 // Verify that we can set DSCP value and retrieve properly from P2PTC. |
1651 TEST_F(P2PTransportChannelTest, TestDefaultDscpValue) { | 1652 TEST_F(P2PTransportChannelTest, TestDefaultDscpValue) { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1685 SetAllocationStepDelay(0, kMinimumStepDelay); | 1686 SetAllocationStepDelay(0, kMinimumStepDelay); |
1686 SetAllocationStepDelay(1, kMinimumStepDelay); | 1687 SetAllocationStepDelay(1, kMinimumStepDelay); |
1687 | 1688 |
1688 // Enable IPv6 | 1689 // Enable IPv6 |
1689 SetAllocatorFlags(0, PORTALLOCATOR_ENABLE_IPV6); | 1690 SetAllocatorFlags(0, PORTALLOCATOR_ENABLE_IPV6); |
1690 SetAllocatorFlags(1, PORTALLOCATOR_ENABLE_IPV6); | 1691 SetAllocatorFlags(1, PORTALLOCATOR_ENABLE_IPV6); |
1691 | 1692 |
1692 CreateChannels(); | 1693 CreateChannels(); |
1693 | 1694 |
1694 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 1695 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && |
1695 ep2_ch1()->receiving() && ep2_ch1()->writable(), | 1696 ep2_ch1()->receiving() && ep2_ch1()->writable(), |
1696 1000); | 1697 kShortTimeout); |
1697 EXPECT_TRUE( | 1698 EXPECT_TRUE( |
1698 ep1_ch1()->selected_connection() && ep2_ch1()->selected_connection() && | 1699 ep1_ch1()->selected_connection() && ep2_ch1()->selected_connection() && |
1699 LocalCandidate(ep1_ch1())->address().EqualIPs(kIPv6PublicAddrs[0]) && | 1700 LocalCandidate(ep1_ch1())->address().EqualIPs(kIPv6PublicAddrs[0]) && |
1700 RemoteCandidate(ep1_ch1())->address().EqualIPs(kIPv6PublicAddrs[1])); | 1701 RemoteCandidate(ep1_ch1())->address().EqualIPs(kIPv6PublicAddrs[1])); |
1701 | 1702 |
1702 TestSendRecv(); | 1703 TestSendRecv(); |
1703 DestroyChannels(); | 1704 DestroyChannels(); |
1704 } | 1705 } |
1705 | 1706 |
1706 // Testing forceful TURN connections. | 1707 // Testing forceful TURN connections. |
1707 TEST_F(P2PTransportChannelTest, TestForceTurn) { | 1708 TEST_F(P2PTransportChannelTest, TestForceTurn) { |
1708 ConfigureEndpoints( | 1709 ConfigureEndpoints( |
1709 NAT_PORT_RESTRICTED, NAT_SYMMETRIC, | 1710 NAT_PORT_RESTRICTED, NAT_SYMMETRIC, |
1710 kDefaultPortAllocatorFlags | PORTALLOCATOR_ENABLE_SHARED_SOCKET, | 1711 kDefaultPortAllocatorFlags | PORTALLOCATOR_ENABLE_SHARED_SOCKET, |
1711 kDefaultPortAllocatorFlags | PORTALLOCATOR_ENABLE_SHARED_SOCKET); | 1712 kDefaultPortAllocatorFlags | PORTALLOCATOR_ENABLE_SHARED_SOCKET); |
1712 set_force_relay(true); | 1713 set_force_relay(true); |
1713 | 1714 |
1714 SetAllocationStepDelay(0, kMinimumStepDelay); | 1715 SetAllocationStepDelay(0, kMinimumStepDelay); |
1715 SetAllocationStepDelay(1, kMinimumStepDelay); | 1716 SetAllocationStepDelay(1, kMinimumStepDelay); |
1716 | 1717 |
1717 CreateChannels(); | 1718 CreateChannels(); |
1718 | 1719 |
1719 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 1720 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && |
1720 ep2_ch1()->receiving() && ep2_ch1()->writable(), | 1721 ep2_ch1()->receiving() && ep2_ch1()->writable(), |
1721 2000); | 1722 kMediumTimeout); |
1722 | 1723 |
1723 EXPECT_TRUE(ep1_ch1()->selected_connection() && | 1724 EXPECT_TRUE(ep1_ch1()->selected_connection() && |
1724 ep2_ch1()->selected_connection()); | 1725 ep2_ch1()->selected_connection()); |
1725 | 1726 |
1726 EXPECT_EQ("relay", RemoteCandidate(ep1_ch1())->type()); | 1727 EXPECT_EQ("relay", RemoteCandidate(ep1_ch1())->type()); |
1727 EXPECT_EQ("relay", LocalCandidate(ep1_ch1())->type()); | 1728 EXPECT_EQ("relay", LocalCandidate(ep1_ch1())->type()); |
1728 EXPECT_EQ("relay", RemoteCandidate(ep2_ch1())->type()); | 1729 EXPECT_EQ("relay", RemoteCandidate(ep2_ch1())->type()); |
1729 EXPECT_EQ("relay", LocalCandidate(ep2_ch1())->type()); | 1730 EXPECT_EQ("relay", LocalCandidate(ep2_ch1())->type()); |
1730 | 1731 |
1731 TestSendRecv(); | 1732 TestSendRecv(); |
1732 DestroyChannels(); | 1733 DestroyChannels(); |
1733 } | 1734 } |
1734 | 1735 |
1735 // Test that if continual gathering is set to true, ICE gathering state will | 1736 // Test that if continual gathering is set to true, ICE gathering state will |
1736 // not change to "Complete", and vice versa. | 1737 // not change to "Complete", and vice versa. |
1737 TEST_F(P2PTransportChannelTest, TestContinualGathering) { | 1738 TEST_F(P2PTransportChannelTest, TestContinualGathering) { |
| 1739 rtc::ScopedFakeClock clock; |
1738 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, | 1740 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, |
1739 kDefaultPortAllocatorFlags); | 1741 kDefaultPortAllocatorFlags); |
1740 SetAllocationStepDelay(0, kDefaultStepDelay); | 1742 SetAllocationStepDelay(0, kDefaultStepDelay); |
1741 SetAllocationStepDelay(1, kDefaultStepDelay); | 1743 SetAllocationStepDelay(1, kDefaultStepDelay); |
1742 IceConfig continual_gathering_config = | 1744 IceConfig continual_gathering_config = |
1743 CreateIceConfig(1000, GATHER_CONTINUALLY); | 1745 CreateIceConfig(1000, GATHER_CONTINUALLY); |
1744 // By default, ep2 does not gather continually. | 1746 // By default, ep2 does not gather continually. |
1745 IceConfig default_config; | 1747 IceConfig default_config; |
1746 CreateChannels(continual_gathering_config, default_config); | 1748 CreateChannels(continual_gathering_config, default_config); |
1747 | 1749 |
1748 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1() != NULL && ep2_ch1() != NULL && | 1750 EXPECT_TRUE_SIMULATED_WAIT( |
1749 ep1_ch1()->receiving() && ep1_ch1()->writable() && | 1751 ep1_ch1() != NULL && ep2_ch1() != NULL && ep1_ch1()->receiving() && |
1750 ep2_ch1()->receiving() && ep2_ch1()->writable(), | 1752 ep1_ch1()->writable() && ep2_ch1()->receiving() && |
1751 1000, 1000); | 1753 ep2_ch1()->writable(), |
1752 WAIT(IceGatheringState::kIceGatheringComplete == ep1_ch1()->gathering_state(), | 1754 kMediumTimeout, clock); |
1753 1000); | 1755 SIMULATED_WAIT( |
| 1756 IceGatheringState::kIceGatheringComplete == ep1_ch1()->gathering_state(), |
| 1757 kShortTimeout, clock); |
1754 EXPECT_EQ(IceGatheringState::kIceGatheringGathering, | 1758 EXPECT_EQ(IceGatheringState::kIceGatheringGathering, |
1755 ep1_ch1()->gathering_state()); | 1759 ep1_ch1()->gathering_state()); |
1756 // By now, ep2 should have completed gathering. | 1760 // By now, ep2 should have completed gathering. |
1757 EXPECT_EQ(IceGatheringState::kIceGatheringComplete, | 1761 EXPECT_EQ(IceGatheringState::kIceGatheringComplete, |
1758 ep2_ch1()->gathering_state()); | 1762 ep2_ch1()->gathering_state()); |
1759 | 1763 |
1760 DestroyChannels(); | 1764 DestroyChannels(); |
1761 } | 1765 } |
1762 | 1766 |
1763 // Test that a connection succeeds when the P2PTransportChannel uses a pooled | 1767 // Test that a connection succeeds when the P2PTransportChannel uses a pooled |
1764 // PortAllocatorSession that has not yet finished gathering candidates. | 1768 // PortAllocatorSession that has not yet finished gathering candidates. |
1765 TEST_F(P2PTransportChannelTest, TestUsingPooledSessionBeforeDoneGathering) { | 1769 TEST_F(P2PTransportChannelTest, TestUsingPooledSessionBeforeDoneGathering) { |
| 1770 rtc::ScopedFakeClock clock; |
1766 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, | 1771 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, |
1767 kDefaultPortAllocatorFlags); | 1772 kDefaultPortAllocatorFlags); |
1768 // First create a pooled session for each endpoint. | 1773 // First create a pooled session for each endpoint. |
1769 auto& allocator_1 = GetEndpoint(0)->allocator_; | 1774 auto& allocator_1 = GetEndpoint(0)->allocator_; |
1770 auto& allocator_2 = GetEndpoint(1)->allocator_; | 1775 auto& allocator_2 = GetEndpoint(1)->allocator_; |
1771 int pool_size = 1; | 1776 int pool_size = 1; |
1772 allocator_1->SetConfiguration(allocator_1->stun_servers(), | 1777 allocator_1->SetConfiguration(allocator_1->stun_servers(), |
1773 allocator_1->turn_servers(), pool_size, false); | 1778 allocator_1->turn_servers(), pool_size, false); |
1774 allocator_2->SetConfiguration(allocator_2->stun_servers(), | 1779 allocator_2->SetConfiguration(allocator_2->stun_servers(), |
1775 allocator_2->turn_servers(), pool_size, false); | 1780 allocator_2->turn_servers(), pool_size, false); |
1776 const PortAllocatorSession* pooled_session_1 = | 1781 const PortAllocatorSession* pooled_session_1 = |
1777 allocator_1->GetPooledSession(); | 1782 allocator_1->GetPooledSession(); |
1778 const PortAllocatorSession* pooled_session_2 = | 1783 const PortAllocatorSession* pooled_session_2 = |
1779 allocator_2->GetPooledSession(); | 1784 allocator_2->GetPooledSession(); |
1780 ASSERT_NE(nullptr, pooled_session_1); | 1785 ASSERT_NE(nullptr, pooled_session_1); |
1781 ASSERT_NE(nullptr, pooled_session_2); | 1786 ASSERT_NE(nullptr, pooled_session_2); |
1782 // Sanity check that pooled sessions haven't gathered anything yet. | 1787 // Sanity check that pooled sessions haven't gathered anything yet. |
1783 EXPECT_TRUE(pooled_session_1->ReadyPorts().empty()); | 1788 EXPECT_TRUE(pooled_session_1->ReadyPorts().empty()); |
1784 EXPECT_TRUE(pooled_session_1->ReadyCandidates().empty()); | 1789 EXPECT_TRUE(pooled_session_1->ReadyCandidates().empty()); |
1785 EXPECT_TRUE(pooled_session_2->ReadyPorts().empty()); | 1790 EXPECT_TRUE(pooled_session_2->ReadyPorts().empty()); |
1786 EXPECT_TRUE(pooled_session_2->ReadyCandidates().empty()); | 1791 EXPECT_TRUE(pooled_session_2->ReadyCandidates().empty()); |
1787 // Now let the endpoints connect and try exchanging some data. | 1792 // Now let the endpoints connect and try exchanging some data. |
1788 CreateChannels(); | 1793 CreateChannels(); |
1789 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1() != NULL && ep2_ch1() != NULL && | 1794 EXPECT_TRUE_SIMULATED_WAIT( |
1790 ep1_ch1()->receiving() && ep1_ch1()->writable() && | 1795 ep1_ch1() != NULL && ep2_ch1() != NULL && ep1_ch1()->receiving() && |
1791 ep2_ch1()->receiving() && ep2_ch1()->writable(), | 1796 ep1_ch1()->writable() && ep2_ch1()->receiving() && |
1792 1000, 1000); | 1797 ep2_ch1()->writable(), |
| 1798 kMediumTimeout, clock); |
1793 TestSendRecv(); | 1799 TestSendRecv(); |
1794 // Make sure the P2PTransportChannels are actually using ports from the | 1800 // Make sure the P2PTransportChannels are actually using ports from the |
1795 // pooled sessions. | 1801 // pooled sessions. |
1796 auto pooled_ports_1 = pooled_session_1->ReadyPorts(); | 1802 auto pooled_ports_1 = pooled_session_1->ReadyPorts(); |
1797 auto pooled_ports_2 = pooled_session_2->ReadyPorts(); | 1803 auto pooled_ports_2 = pooled_session_2->ReadyPorts(); |
1798 EXPECT_NE(pooled_ports_1.end(), | 1804 EXPECT_NE(pooled_ports_1.end(), |
1799 std::find(pooled_ports_1.begin(), pooled_ports_1.end(), | 1805 std::find(pooled_ports_1.begin(), pooled_ports_1.end(), |
1800 ep1_ch1()->selected_connection()->port())); | 1806 ep1_ch1()->selected_connection()->port())); |
1801 EXPECT_NE(pooled_ports_2.end(), | 1807 EXPECT_NE(pooled_ports_2.end(), |
1802 std::find(pooled_ports_2.begin(), pooled_ports_2.end(), | 1808 std::find(pooled_ports_2.begin(), pooled_ports_2.end(), |
1803 ep2_ch1()->selected_connection()->port())); | 1809 ep2_ch1()->selected_connection()->port())); |
1804 } | 1810 } |
1805 | 1811 |
1806 // Test that a connection succeeds when the P2PTransportChannel uses a pooled | 1812 // Test that a connection succeeds when the P2PTransportChannel uses a pooled |
1807 // PortAllocatorSession that already finished gathering candidates. | 1813 // PortAllocatorSession that already finished gathering candidates. |
1808 TEST_F(P2PTransportChannelTest, TestUsingPooledSessionAfterDoneGathering) { | 1814 TEST_F(P2PTransportChannelTest, TestUsingPooledSessionAfterDoneGathering) { |
| 1815 rtc::ScopedFakeClock clock; |
1809 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, | 1816 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, |
1810 kDefaultPortAllocatorFlags); | 1817 kDefaultPortAllocatorFlags); |
1811 // First create a pooled session for each endpoint. | 1818 // First create a pooled session for each endpoint. |
1812 auto& allocator_1 = GetEndpoint(0)->allocator_; | 1819 auto& allocator_1 = GetEndpoint(0)->allocator_; |
1813 auto& allocator_2 = GetEndpoint(1)->allocator_; | 1820 auto& allocator_2 = GetEndpoint(1)->allocator_; |
1814 int pool_size = 1; | 1821 int pool_size = 1; |
1815 allocator_1->SetConfiguration(allocator_1->stun_servers(), | 1822 allocator_1->SetConfiguration(allocator_1->stun_servers(), |
1816 allocator_1->turn_servers(), pool_size, false); | 1823 allocator_1->turn_servers(), pool_size, false); |
1817 allocator_2->SetConfiguration(allocator_2->stun_servers(), | 1824 allocator_2->SetConfiguration(allocator_2->stun_servers(), |
1818 allocator_2->turn_servers(), pool_size, false); | 1825 allocator_2->turn_servers(), pool_size, false); |
1819 const PortAllocatorSession* pooled_session_1 = | 1826 const PortAllocatorSession* pooled_session_1 = |
1820 allocator_1->GetPooledSession(); | 1827 allocator_1->GetPooledSession(); |
1821 const PortAllocatorSession* pooled_session_2 = | 1828 const PortAllocatorSession* pooled_session_2 = |
1822 allocator_2->GetPooledSession(); | 1829 allocator_2->GetPooledSession(); |
1823 ASSERT_NE(nullptr, pooled_session_1); | 1830 ASSERT_NE(nullptr, pooled_session_1); |
1824 ASSERT_NE(nullptr, pooled_session_2); | 1831 ASSERT_NE(nullptr, pooled_session_2); |
1825 // Wait for the pooled sessions to finish gathering before the | 1832 // Wait for the pooled sessions to finish gathering before the |
1826 // P2PTransportChannels try to use them. | 1833 // P2PTransportChannels try to use them. |
1827 EXPECT_TRUE_WAIT(pooled_session_1->CandidatesAllocationDone() && | 1834 EXPECT_TRUE_SIMULATED_WAIT(pooled_session_1->CandidatesAllocationDone() && |
1828 pooled_session_2->CandidatesAllocationDone(), | 1835 pooled_session_2->CandidatesAllocationDone(), |
1829 kDefaultTimeout); | 1836 kDefaultTimeout, clock); |
1830 // Now let the endpoints connect and try exchanging some data. | 1837 // Now let the endpoints connect and try exchanging some data. |
1831 CreateChannels(); | 1838 CreateChannels(); |
1832 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1() != NULL && ep2_ch1() != NULL && | 1839 EXPECT_TRUE_SIMULATED_WAIT( |
1833 ep1_ch1()->receiving() && ep1_ch1()->writable() && | 1840 ep1_ch1() != NULL && ep2_ch1() != NULL && ep1_ch1()->receiving() && |
1834 ep2_ch1()->receiving() && ep2_ch1()->writable(), | 1841 ep1_ch1()->writable() && ep2_ch1()->receiving() && |
1835 1000, 1000); | 1842 ep2_ch1()->writable(), |
| 1843 kMediumTimeout, clock); |
1836 TestSendRecv(); | 1844 TestSendRecv(); |
1837 // Make sure the P2PTransportChannels are actually using ports from the | 1845 // Make sure the P2PTransportChannels are actually using ports from the |
1838 // pooled sessions. | 1846 // pooled sessions. |
1839 auto pooled_ports_1 = pooled_session_1->ReadyPorts(); | 1847 auto pooled_ports_1 = pooled_session_1->ReadyPorts(); |
1840 auto pooled_ports_2 = pooled_session_2->ReadyPorts(); | 1848 auto pooled_ports_2 = pooled_session_2->ReadyPorts(); |
1841 EXPECT_NE(pooled_ports_1.end(), | 1849 EXPECT_NE(pooled_ports_1.end(), |
1842 std::find(pooled_ports_1.begin(), pooled_ports_1.end(), | 1850 std::find(pooled_ports_1.begin(), pooled_ports_1.end(), |
1843 ep1_ch1()->selected_connection()->port())); | 1851 ep1_ch1()->selected_connection()->port())); |
1844 EXPECT_NE(pooled_ports_2.end(), | 1852 EXPECT_NE(pooled_ports_2.end(), |
1845 std::find(pooled_ports_2.begin(), pooled_ports_2.end(), | 1853 std::find(pooled_ports_2.begin(), pooled_ports_2.end(), |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1911 ep1_ch1()->SetIceConfig(config); | 1919 ep1_ch1()->SetIceConfig(config); |
1912 ep2_ch1()->SetIceConfig(config); | 1920 ep2_ch1()->SetIceConfig(config); |
1913 // Don't signal candidates from channel 2, so that channel 1 sees the TURN | 1921 // Don't signal candidates from channel 2, so that channel 1 sees the TURN |
1914 // candidate as peer reflexive. | 1922 // candidate as peer reflexive. |
1915 PauseCandidates(1); | 1923 PauseCandidates(1); |
1916 ep1_ch1()->MaybeStartGathering(); | 1924 ep1_ch1()->MaybeStartGathering(); |
1917 ep2_ch1()->MaybeStartGathering(); | 1925 ep2_ch1()->MaybeStartGathering(); |
1918 | 1926 |
1919 // Wait for the TURN<->prflx connection. | 1927 // Wait for the TURN<->prflx connection. |
1920 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable(), | 1928 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable(), |
1921 1000, fake_clock); | 1929 kShortTimeout, fake_clock); |
1922 ASSERT_NE(nullptr, ep1_ch1()->selected_connection()); | 1930 ASSERT_NE(nullptr, ep1_ch1()->selected_connection()); |
1923 EXPECT_EQ(RELAY_PORT_TYPE, LocalCandidate(ep1_ch1())->type()); | 1931 EXPECT_EQ(RELAY_PORT_TYPE, LocalCandidate(ep1_ch1())->type()); |
1924 EXPECT_EQ(PRFLX_PORT_TYPE, RemoteCandidate(ep1_ch1())->type()); | 1932 EXPECT_EQ(PRFLX_PORT_TYPE, RemoteCandidate(ep1_ch1())->type()); |
1925 // Make sure that at this point the connection is only presumed writable, | 1933 // Make sure that at this point the connection is only presumed writable, |
1926 // not fully writable. | 1934 // not fully writable. |
1927 EXPECT_FALSE(ep1_ch1()->selected_connection()->writable()); | 1935 EXPECT_FALSE(ep1_ch1()->selected_connection()->writable()); |
1928 | 1936 |
1929 // Now wait for it to actually become writable. | 1937 // Now wait for it to actually become writable. |
1930 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection()->writable(), 1000, | 1938 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection()->writable(), |
1931 fake_clock); | 1939 kShortTimeout, fake_clock); |
1932 | 1940 |
1933 // Explitly destroy channels, before fake clock is destroyed. | 1941 // Explitly destroy channels, before fake clock is destroyed. |
1934 DestroyChannels(); | 1942 DestroyChannels(); |
1935 } | 1943 } |
1936 | 1944 |
1937 // Test that a presumed-writable TURN<->TURN connection is preferred above an | 1945 // Test that a presumed-writable TURN<->TURN connection is preferred above an |
1938 // unreliable connection (one that has failed to be pinged for some time). | 1946 // unreliable connection (one that has failed to be pinged for some time). |
1939 TEST_F(P2PTransportChannelTest, PresumedWritablePreferredOverUnreliable) { | 1947 TEST_F(P2PTransportChannelTest, PresumedWritablePreferredOverUnreliable) { |
1940 rtc::ScopedFakeClock fake_clock; | 1948 rtc::ScopedFakeClock fake_clock; |
1941 | 1949 |
1942 ConfigureEndpoints(NAT_SYMMETRIC, NAT_SYMMETRIC, kDefaultPortAllocatorFlags, | 1950 ConfigureEndpoints(NAT_SYMMETRIC, NAT_SYMMETRIC, kDefaultPortAllocatorFlags, |
1943 kDefaultPortAllocatorFlags); | 1951 kDefaultPortAllocatorFlags); |
1944 IceConfig config; | 1952 IceConfig config; |
1945 config.presume_writable_when_fully_relayed = true; | 1953 config.presume_writable_when_fully_relayed = true; |
1946 GetEndpoint(0)->cd1_.ch_.reset(CreateChannel( | 1954 GetEndpoint(0)->cd1_.ch_.reset(CreateChannel( |
1947 0, ICE_CANDIDATE_COMPONENT_DEFAULT, kIceParams[0], kIceParams[1])); | 1955 0, ICE_CANDIDATE_COMPONENT_DEFAULT, kIceParams[0], kIceParams[1])); |
1948 GetEndpoint(1)->cd1_.ch_.reset(CreateChannel( | 1956 GetEndpoint(1)->cd1_.ch_.reset(CreateChannel( |
1949 1, ICE_CANDIDATE_COMPONENT_DEFAULT, kIceParams[1], kIceParams[0])); | 1957 1, ICE_CANDIDATE_COMPONENT_DEFAULT, kIceParams[1], kIceParams[0])); |
1950 ep1_ch1()->SetIceConfig(config); | 1958 ep1_ch1()->SetIceConfig(config); |
1951 ep2_ch1()->SetIceConfig(config); | 1959 ep2_ch1()->SetIceConfig(config); |
1952 ep1_ch1()->MaybeStartGathering(); | 1960 ep1_ch1()->MaybeStartGathering(); |
1953 ep2_ch1()->MaybeStartGathering(); | 1961 ep2_ch1()->MaybeStartGathering(); |
1954 // Wait for initial connection as usual. | 1962 // Wait for initial connection as usual. |
1955 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 1963 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && |
1956 ep1_ch1()->selected_connection()->writable() && | 1964 ep1_ch1()->selected_connection()->writable() && |
1957 ep2_ch1()->receiving() && | 1965 ep2_ch1()->receiving() && |
1958 ep2_ch1()->writable() && | 1966 ep2_ch1()->writable() && |
1959 ep2_ch1()->selected_connection()->writable(), | 1967 ep2_ch1()->selected_connection()->writable(), |
1960 1000, fake_clock); | 1968 kShortTimeout, fake_clock); |
1961 const Connection* old_selected_connection = ep1_ch1()->selected_connection(); | 1969 const Connection* old_selected_connection = ep1_ch1()->selected_connection(); |
1962 // Destroy the second channel and wait for the current connection on the | 1970 // Destroy the second channel and wait for the current connection on the |
1963 // first channel to become "unreliable", making it no longer writable. | 1971 // first channel to become "unreliable", making it no longer writable. |
1964 GetEndpoint(1)->cd1_.ch_.reset(); | 1972 GetEndpoint(1)->cd1_.ch_.reset(); |
1965 EXPECT_TRUE_SIMULATED_WAIT(!ep1_ch1()->writable(), 10000, fake_clock); | 1973 EXPECT_TRUE_SIMULATED_WAIT(!ep1_ch1()->writable(), kDefaultTimeout, |
| 1974 fake_clock); |
1966 EXPECT_NE(nullptr, ep1_ch1()->selected_connection()); | 1975 EXPECT_NE(nullptr, ep1_ch1()->selected_connection()); |
1967 // Add a remote TURN candidate. The first channel should still have a TURN | 1976 // Add a remote TURN candidate. The first channel should still have a TURN |
1968 // port available to make a TURN<->TURN pair that's presumed writable. | 1977 // port available to make a TURN<->TURN pair that's presumed writable. |
1969 ep1_ch1()->AddRemoteCandidate( | 1978 ep1_ch1()->AddRemoteCandidate( |
1970 CreateUdpCandidate(RELAY_PORT_TYPE, "2.2.2.2", 2, 0)); | 1979 CreateUdpCandidate(RELAY_PORT_TYPE, "2.2.2.2", 2, 0)); |
1971 EXPECT_EQ(RELAY_PORT_TYPE, LocalCandidate(ep1_ch1())->type()); | 1980 EXPECT_EQ(RELAY_PORT_TYPE, LocalCandidate(ep1_ch1())->type()); |
1972 EXPECT_EQ(RELAY_PORT_TYPE, RemoteCandidate(ep1_ch1())->type()); | 1981 EXPECT_EQ(RELAY_PORT_TYPE, RemoteCandidate(ep1_ch1())->type()); |
1973 EXPECT_TRUE(ep1_ch1()->writable()); | 1982 EXPECT_TRUE(ep1_ch1()->writable()); |
1974 EXPECT_TRUE(GetEndpoint(0)->ready_to_send_); | 1983 EXPECT_TRUE(GetEndpoint(0)->ready_to_send_); |
1975 EXPECT_NE(old_selected_connection, ep1_ch1()->selected_connection()); | 1984 EXPECT_NE(old_selected_connection, ep1_ch1()->selected_connection()); |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2110 SetAllocatorFlags(1, kOnlyLocalPorts); | 2119 SetAllocatorFlags(1, kOnlyLocalPorts); |
2111 | 2120 |
2112 // Make the receiving timeout shorter for testing. | 2121 // Make the receiving timeout shorter for testing. |
2113 IceConfig config = CreateIceConfig(1000, GATHER_ONCE); | 2122 IceConfig config = CreateIceConfig(1000, GATHER_ONCE); |
2114 // Create channels and let them go writable, as usual. | 2123 // Create channels and let them go writable, as usual. |
2115 CreateChannels(config, config); | 2124 CreateChannels(config, config); |
2116 | 2125 |
2117 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 2126 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && |
2118 ep2_ch1()->receiving() && | 2127 ep2_ch1()->receiving() && |
2119 ep2_ch1()->writable(), | 2128 ep2_ch1()->writable(), |
2120 3000, clock); | 2129 kMediumTimeout, clock); |
2121 EXPECT_TRUE(ep1_ch1()->selected_connection() && | 2130 EXPECT_TRUE(ep1_ch1()->selected_connection() && |
2122 ep2_ch1()->selected_connection() && | 2131 ep2_ch1()->selected_connection() && |
2123 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && | 2132 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && |
2124 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); | 2133 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); |
2125 | 2134 |
2126 // Blackhole any traffic to or from the public addrs. | 2135 // Blackhole any traffic to or from the public addrs. |
2127 LOG(LS_INFO) << "Failing over..."; | 2136 LOG(LS_INFO) << "Failing over..."; |
2128 fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[1]); | 2137 fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[1]); |
2129 // The selected connections may switch, so keep references to them. | 2138 // The selected connections may switch, so keep references to them. |
2130 const Connection* selected_connection1 = ep1_ch1()->selected_connection(); | 2139 const Connection* selected_connection1 = ep1_ch1()->selected_connection(); |
2131 const Connection* selected_connection2 = ep2_ch1()->selected_connection(); | 2140 const Connection* selected_connection2 = ep2_ch1()->selected_connection(); |
2132 // We should detect loss of receiving within 1 second or so. | 2141 // We should detect loss of receiving within 1 second or so. |
2133 EXPECT_TRUE_SIMULATED_WAIT( | 2142 EXPECT_TRUE_SIMULATED_WAIT( |
2134 !selected_connection1->receiving() && !selected_connection2->receiving(), | 2143 !selected_connection1->receiving() && !selected_connection2->receiving(), |
2135 3000, clock); | 2144 kMediumTimeout, clock); |
2136 | 2145 |
2137 // We should switch over to use the alternate addr on both sides | 2146 // We should switch over to use the alternate addr on both sides |
2138 // when we are not receiving. | 2147 // when we are not receiving. |
2139 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection()->receiving() && | 2148 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection()->receiving() && |
2140 ep2_ch1()->selected_connection()->receiving(), | 2149 ep2_ch1()->selected_connection()->receiving(), |
2141 3000, clock); | 2150 kMediumTimeout, clock); |
2142 EXPECT_TRUE(LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0])); | 2151 EXPECT_TRUE(LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0])); |
2143 EXPECT_TRUE( | 2152 EXPECT_TRUE( |
2144 RemoteCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[1])); | 2153 RemoteCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[1])); |
2145 EXPECT_TRUE( | 2154 EXPECT_TRUE( |
2146 LocalCandidate(ep2_ch1())->address().EqualIPs(kAlternateAddrs[1])); | 2155 LocalCandidate(ep2_ch1())->address().EqualIPs(kAlternateAddrs[1])); |
2147 | 2156 |
2148 DestroyChannels(); | 2157 DestroyChannels(); |
2149 } | 2158 } |
2150 | 2159 |
2151 // Test that we can quickly switch links if an interface goes down. | 2160 // Test that we can quickly switch links if an interface goes down. |
(...skipping 10 matching lines...) Expand all Loading... |
2162 SetAllocatorFlags(0, kOnlyLocalPorts); | 2171 SetAllocatorFlags(0, kOnlyLocalPorts); |
2163 SetAllocatorFlags(1, kOnlyLocalPorts); | 2172 SetAllocatorFlags(1, kOnlyLocalPorts); |
2164 | 2173 |
2165 // Make the receiving timeout shorter for testing. | 2174 // Make the receiving timeout shorter for testing. |
2166 IceConfig config = CreateIceConfig(1000, GATHER_ONCE); | 2175 IceConfig config = CreateIceConfig(1000, GATHER_ONCE); |
2167 // Create channels and let them go writable, as usual. | 2176 // Create channels and let them go writable, as usual. |
2168 CreateChannels(config, config); | 2177 CreateChannels(config, config); |
2169 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 2178 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && |
2170 ep2_ch1()->receiving() && | 2179 ep2_ch1()->receiving() && |
2171 ep2_ch1()->writable(), | 2180 ep2_ch1()->writable(), |
2172 3000, clock); | 2181 kMediumTimeout, clock); |
2173 EXPECT_TRUE(ep1_ch1()->selected_connection() && | 2182 EXPECT_TRUE(ep1_ch1()->selected_connection() && |
2174 ep2_ch1()->selected_connection() && | 2183 ep2_ch1()->selected_connection() && |
2175 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && | 2184 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && |
2176 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); | 2185 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); |
2177 | 2186 |
2178 // Blackhole any traffic to or from the public addrs. | 2187 // Blackhole any traffic to or from the public addrs. |
2179 LOG(LS_INFO) << "Failing over..."; | 2188 LOG(LS_INFO) << "Failing over..."; |
2180 fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[0]); | 2189 fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[0]); |
2181 // The selected connections will switch, so keep references to them. | 2190 // The selected connections will switch, so keep references to them. |
2182 const Connection* selected_connection1 = ep1_ch1()->selected_connection(); | 2191 const Connection* selected_connection1 = ep1_ch1()->selected_connection(); |
2183 const Connection* selected_connection2 = ep2_ch1()->selected_connection(); | 2192 const Connection* selected_connection2 = ep2_ch1()->selected_connection(); |
2184 // We should detect loss of receiving within 1 second or so. | 2193 // We should detect loss of receiving within 1 second or so. |
2185 EXPECT_TRUE_SIMULATED_WAIT( | 2194 EXPECT_TRUE_SIMULATED_WAIT( |
2186 !selected_connection1->receiving() && !selected_connection2->receiving(), | 2195 !selected_connection1->receiving() && !selected_connection2->receiving(), |
2187 3000, clock); | 2196 kMediumTimeout, clock); |
2188 | 2197 |
2189 // We should switch over to use the alternate addr on both sides | 2198 // We should switch over to use the alternate addr on both sides |
2190 // when we are not receiving. | 2199 // when we are not receiving. |
2191 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection()->receiving() && | 2200 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection()->receiving() && |
2192 ep2_ch1()->selected_connection()->receiving(), | 2201 ep2_ch1()->selected_connection()->receiving(), |
2193 3000, clock); | 2202 kMediumTimeout, clock); |
2194 EXPECT_TRUE( | 2203 EXPECT_TRUE( |
2195 LocalCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[0])); | 2204 LocalCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[0])); |
2196 EXPECT_TRUE(RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); | 2205 EXPECT_TRUE(RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); |
2197 EXPECT_TRUE( | 2206 EXPECT_TRUE( |
2198 RemoteCandidate(ep2_ch1())->address().EqualIPs(kAlternateAddrs[0])); | 2207 RemoteCandidate(ep2_ch1())->address().EqualIPs(kAlternateAddrs[0])); |
2199 | 2208 |
2200 DestroyChannels(); | 2209 DestroyChannels(); |
2201 } | 2210 } |
2202 | 2211 |
2203 // Test that when the controlling side switches the selected connection, | 2212 // Test that when the controlling side switches the selected connection, |
(...skipping 13 matching lines...) Expand all Loading... |
2217 | 2226 |
2218 // We want it to set the remote ICE parameters when creating channels. | 2227 // We want it to set the remote ICE parameters when creating channels. |
2219 set_remote_ice_parameter_source(FROM_SETICEPARAMETERS); | 2228 set_remote_ice_parameter_source(FROM_SETICEPARAMETERS); |
2220 // Make the receiving timeout shorter for testing. | 2229 // Make the receiving timeout shorter for testing. |
2221 IceConfig config = CreateIceConfig(1000, GATHER_ONCE); | 2230 IceConfig config = CreateIceConfig(1000, GATHER_ONCE); |
2222 // Create channels with ICE renomination and let them go writable as usual. | 2231 // Create channels with ICE renomination and let them go writable as usual. |
2223 CreateChannels(config, config, true); | 2232 CreateChannels(config, config, true); |
2224 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 2233 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && |
2225 ep2_ch1()->receiving() && | 2234 ep2_ch1()->receiving() && |
2226 ep2_ch1()->writable(), | 2235 ep2_ch1()->writable(), |
2227 3000, clock); | 2236 kMediumTimeout, clock); |
2228 EXPECT_TRUE_SIMULATED_WAIT( | 2237 EXPECT_TRUE_SIMULATED_WAIT( |
2229 ep2_ch1()->selected_connection()->remote_nomination() > 0 && | 2238 ep2_ch1()->selected_connection()->remote_nomination() > 0 && |
2230 ep1_ch1()->selected_connection()->acked_nomination() > 0, | 2239 ep1_ch1()->selected_connection()->acked_nomination() > 0, |
2231 kDefaultTimeout, clock); | 2240 kDefaultTimeout, clock); |
2232 const Connection* selected_connection1 = ep1_ch1()->selected_connection(); | 2241 const Connection* selected_connection1 = ep1_ch1()->selected_connection(); |
2233 Connection* selected_connection2 = | 2242 Connection* selected_connection2 = |
2234 const_cast<Connection*>(ep2_ch1()->selected_connection()); | 2243 const_cast<Connection*>(ep2_ch1()->selected_connection()); |
2235 uint32_t remote_nomination2 = selected_connection2->remote_nomination(); | 2244 uint32_t remote_nomination2 = selected_connection2->remote_nomination(); |
2236 // |selected_connection2| should not be nominated any more since the previous | 2245 // |selected_connection2| should not be nominated any more since the previous |
2237 // nomination has been acknowledged. | 2246 // nomination has been acknowledged. |
2238 ConnectSignalNominated(selected_connection2); | 2247 ConnectSignalNominated(selected_connection2); |
2239 SIMULATED_WAIT(nominated(), 3000, clock); | 2248 SIMULATED_WAIT(nominated(), kMediumTimeout, clock); |
2240 EXPECT_FALSE(nominated()); | 2249 EXPECT_FALSE(nominated()); |
2241 | 2250 |
2242 // Blackhole any traffic to or from the public addrs. | 2251 // Blackhole any traffic to or from the public addrs. |
2243 LOG(LS_INFO) << "Failing over..."; | 2252 LOG(LS_INFO) << "Failing over..."; |
2244 fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[0]); | 2253 fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[0]); |
2245 | 2254 |
2246 // The selected connection on the controlling side should switch. | 2255 // The selected connection on the controlling side should switch. |
2247 EXPECT_TRUE_SIMULATED_WAIT( | 2256 EXPECT_TRUE_SIMULATED_WAIT( |
2248 ep1_ch1()->selected_connection() != selected_connection1, 3000, clock); | 2257 ep1_ch1()->selected_connection() != selected_connection1, kMediumTimeout, |
| 2258 clock); |
2249 // The connection on the controlled side should be nominated again | 2259 // The connection on the controlled side should be nominated again |
2250 // and have an increased nomination. | 2260 // and have an increased nomination. |
2251 EXPECT_TRUE_SIMULATED_WAIT( | 2261 EXPECT_TRUE_SIMULATED_WAIT( |
2252 ep2_ch1()->selected_connection()->remote_nomination() > | 2262 ep2_ch1()->selected_connection()->remote_nomination() > |
2253 remote_nomination2, | 2263 remote_nomination2, |
2254 kDefaultTimeout, clock); | 2264 kDefaultTimeout, clock); |
2255 | 2265 |
2256 DestroyChannels(); | 2266 DestroyChannels(); |
2257 } | 2267 } |
2258 | 2268 |
(...skipping 14 matching lines...) Expand all Loading... |
2273 // Use only local ports for simplicity. | 2283 // Use only local ports for simplicity. |
2274 SetAllocatorFlags(0, kOnlyLocalPorts); | 2284 SetAllocatorFlags(0, kOnlyLocalPorts); |
2275 SetAllocatorFlags(1, kOnlyLocalPorts); | 2285 SetAllocatorFlags(1, kOnlyLocalPorts); |
2276 | 2286 |
2277 // Create channels and let them go writable, as usual. | 2287 // Create channels and let them go writable, as usual. |
2278 CreateChannels(); | 2288 CreateChannels(); |
2279 | 2289 |
2280 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 2290 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && |
2281 ep2_ch1()->receiving() && | 2291 ep2_ch1()->receiving() && |
2282 ep2_ch1()->writable(), | 2292 ep2_ch1()->writable(), |
2283 3000, clock); | 2293 kMediumTimeout, clock); |
2284 EXPECT_TRUE(ep1_ch1()->selected_connection() && | 2294 EXPECT_TRUE(ep1_ch1()->selected_connection() && |
2285 ep2_ch1()->selected_connection() && | 2295 ep2_ch1()->selected_connection() && |
2286 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && | 2296 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && |
2287 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); | 2297 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); |
2288 | 2298 |
2289 // Make the receiving timeout shorter for testing. | 2299 // Make the receiving timeout shorter for testing. |
2290 IceConfig config = CreateIceConfig(1000, GATHER_ONCE); | 2300 IceConfig config = CreateIceConfig(1000, GATHER_ONCE); |
2291 ep1_ch1()->SetIceConfig(config); | 2301 ep1_ch1()->SetIceConfig(config); |
2292 ep2_ch1()->SetIceConfig(config); | 2302 ep2_ch1()->SetIceConfig(config); |
2293 reset_selected_candidate_pair_switches(); | 2303 reset_selected_candidate_pair_switches(); |
2294 | 2304 |
2295 // Blackhole any traffic to or from the public addrs. | 2305 // Blackhole any traffic to or from the public addrs. |
2296 LOG(LS_INFO) << "Failing over..."; | 2306 LOG(LS_INFO) << "Failing over..."; |
2297 fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[1]); | 2307 fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[1]); |
2298 | 2308 |
2299 // The selected connections may switch, so keep references to them. | 2309 // The selected connections may switch, so keep references to them. |
2300 const Connection* selected_connection1 = ep1_ch1()->selected_connection(); | 2310 const Connection* selected_connection1 = ep1_ch1()->selected_connection(); |
2301 const Connection* selected_connection2 = ep2_ch1()->selected_connection(); | 2311 const Connection* selected_connection2 = ep2_ch1()->selected_connection(); |
2302 // We should detect loss of receiving within 1 second or so. | 2312 // We should detect loss of receiving within 1 second or so. |
2303 EXPECT_TRUE_SIMULATED_WAIT( | 2313 EXPECT_TRUE_SIMULATED_WAIT( |
2304 !selected_connection1->receiving() && !selected_connection2->receiving(), | 2314 !selected_connection1->receiving() && !selected_connection2->receiving(), |
2305 3000, clock); | 2315 kMediumTimeout, clock); |
2306 // After a short while, the link recovers itself. | 2316 // After a short while, the link recovers itself. |
2307 SIMULATED_WAIT(false, 10, clock); | 2317 SIMULATED_WAIT(false, 10, clock); |
2308 fw()->ClearRules(); | 2318 fw()->ClearRules(); |
2309 | 2319 |
2310 // We should remain on the public address on both sides and no connection | 2320 // We should remain on the public address on both sides and no connection |
2311 // switches should have happened. | 2321 // switches should have happened. |
2312 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection()->receiving() && | 2322 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection()->receiving() && |
2313 ep2_ch1()->selected_connection()->receiving(), | 2323 ep2_ch1()->selected_connection()->receiving(), |
2314 3000, clock); | 2324 kMediumTimeout, clock); |
2315 EXPECT_TRUE(RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); | 2325 EXPECT_TRUE(RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); |
2316 EXPECT_TRUE(LocalCandidate(ep2_ch1())->address().EqualIPs(kPublicAddrs[1])); | 2326 EXPECT_TRUE(LocalCandidate(ep2_ch1())->address().EqualIPs(kPublicAddrs[1])); |
2317 EXPECT_EQ(0, reset_selected_candidate_pair_switches()); | 2327 EXPECT_EQ(0, reset_selected_candidate_pair_switches()); |
2318 | 2328 |
2319 DestroyChannels(); | 2329 DestroyChannels(); |
2320 } | 2330 } |
2321 | 2331 |
2322 // Test that if an interface fails temporarily and then recovers quickly, | 2332 // Test that if an interface fails temporarily and then recovers quickly, |
2323 // the selected connection will not switch. | 2333 // the selected connection will not switch. |
2324 TEST_F(P2PTransportChannelMultihomedTest, | 2334 TEST_F(P2PTransportChannelMultihomedTest, |
2325 TestConnectionSwitchDampeningControllingSide) { | 2335 TestConnectionSwitchDampeningControllingSide) { |
2326 rtc::ScopedFakeClock clock; | 2336 rtc::ScopedFakeClock clock; |
2327 // Adding alternate address will make sure |kPublicAddrs| has the higher | 2337 // Adding alternate address will make sure |kPublicAddrs| has the higher |
2328 // priority than others. This is due to FakeNetwork::AddInterface method. | 2338 // priority than others. This is due to FakeNetwork::AddInterface method. |
2329 AddAddress(0, kAlternateAddrs[0]); | 2339 AddAddress(0, kAlternateAddrs[0]); |
2330 AddAddress(0, kPublicAddrs[0]); | 2340 AddAddress(0, kPublicAddrs[0]); |
2331 AddAddress(1, kPublicAddrs[1]); | 2341 AddAddress(1, kPublicAddrs[1]); |
2332 | 2342 |
2333 // Use only local ports for simplicity. | 2343 // Use only local ports for simplicity. |
2334 SetAllocatorFlags(0, kOnlyLocalPorts); | 2344 SetAllocatorFlags(0, kOnlyLocalPorts); |
2335 SetAllocatorFlags(1, kOnlyLocalPorts); | 2345 SetAllocatorFlags(1, kOnlyLocalPorts); |
2336 | 2346 |
2337 // Create channels and let them go writable, as usual. | 2347 // Create channels and let them go writable, as usual. |
2338 CreateChannels(); | 2348 CreateChannels(); |
2339 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 2349 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && |
2340 ep2_ch1()->receiving() && | 2350 ep2_ch1()->receiving() && |
2341 ep2_ch1()->writable(), | 2351 ep2_ch1()->writable(), |
2342 3000, clock); | 2352 kMediumTimeout, clock); |
2343 EXPECT_TRUE(ep1_ch1()->selected_connection() && | 2353 EXPECT_TRUE(ep1_ch1()->selected_connection() && |
2344 ep2_ch1()->selected_connection() && | 2354 ep2_ch1()->selected_connection() && |
2345 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && | 2355 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && |
2346 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); | 2356 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); |
2347 | 2357 |
2348 // Make the receiving timeout shorter for testing. | 2358 // Make the receiving timeout shorter for testing. |
2349 IceConfig config = CreateIceConfig(1000, GATHER_ONCE); | 2359 IceConfig config = CreateIceConfig(1000, GATHER_ONCE); |
2350 ep1_ch1()->SetIceConfig(config); | 2360 ep1_ch1()->SetIceConfig(config); |
2351 ep2_ch1()->SetIceConfig(config); | 2361 ep2_ch1()->SetIceConfig(config); |
2352 reset_selected_candidate_pair_switches(); | 2362 reset_selected_candidate_pair_switches(); |
2353 | 2363 |
2354 // Blackhole any traffic to or from the public addrs. | 2364 // Blackhole any traffic to or from the public addrs. |
2355 LOG(LS_INFO) << "Failing over..."; | 2365 LOG(LS_INFO) << "Failing over..."; |
2356 fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[0]); | 2366 fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[0]); |
2357 // The selected connections may switch, so keep references to them. | 2367 // The selected connections may switch, so keep references to them. |
2358 const Connection* selected_connection1 = ep1_ch1()->selected_connection(); | 2368 const Connection* selected_connection1 = ep1_ch1()->selected_connection(); |
2359 const Connection* selected_connection2 = ep2_ch1()->selected_connection(); | 2369 const Connection* selected_connection2 = ep2_ch1()->selected_connection(); |
2360 // We should detect loss of receiving within 1 second or so. | 2370 // We should detect loss of receiving within 1 second or so. |
2361 EXPECT_TRUE_SIMULATED_WAIT( | 2371 EXPECT_TRUE_SIMULATED_WAIT( |
2362 !selected_connection1->receiving() && !selected_connection2->receiving(), | 2372 !selected_connection1->receiving() && !selected_connection2->receiving(), |
2363 3000, clock); | 2373 kMediumTimeout, clock); |
2364 // The link recovers after a short while. | 2374 // The link recovers after a short while. |
2365 SIMULATED_WAIT(false, 10, clock); | 2375 SIMULATED_WAIT(false, 10, clock); |
2366 fw()->ClearRules(); | 2376 fw()->ClearRules(); |
2367 | 2377 |
2368 // We should not switch to the alternate addr on both sides because of the | 2378 // We should not switch to the alternate addr on both sides because of the |
2369 // dampening. | 2379 // dampening. |
2370 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection()->receiving() && | 2380 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection()->receiving() && |
2371 ep2_ch1()->selected_connection()->receiving(), | 2381 ep2_ch1()->selected_connection()->receiving(), |
2372 3000, clock); | 2382 kMediumTimeout, clock); |
2373 EXPECT_TRUE(LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0])); | 2383 EXPECT_TRUE(LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0])); |
2374 EXPECT_TRUE(RemoteCandidate(ep2_ch1())->address().EqualIPs(kPublicAddrs[0])); | 2384 EXPECT_TRUE(RemoteCandidate(ep2_ch1())->address().EqualIPs(kPublicAddrs[0])); |
2375 EXPECT_EQ(0, reset_selected_candidate_pair_switches()); | 2385 EXPECT_EQ(0, reset_selected_candidate_pair_switches()); |
2376 DestroyChannels(); | 2386 DestroyChannels(); |
2377 } | 2387 } |
2378 | 2388 |
2379 // Tests that if the remote side's network failed, it won't cause the local | 2389 // Tests that if the remote side's network failed, it won't cause the local |
2380 // side to switch connections and networks. | 2390 // side to switch connections and networks. |
2381 TEST_F(P2PTransportChannelMultihomedTest, TestRemoteFailover) { | 2391 TEST_F(P2PTransportChannelMultihomedTest, TestRemoteFailover) { |
2382 rtc::ScopedFakeClock clock; | 2392 rtc::ScopedFakeClock clock; |
(...skipping 14 matching lines...) Expand all Loading... |
2397 // Set the backup connection ping interval to 25s. | 2407 // Set the backup connection ping interval to 25s. |
2398 IceConfig config = CreateIceConfig(1000, GATHER_ONCE, 25000); | 2408 IceConfig config = CreateIceConfig(1000, GATHER_ONCE, 25000); |
2399 // Ping the best connection more frequently since we don't have traffic. | 2409 // Ping the best connection more frequently since we don't have traffic. |
2400 config.stable_writable_connection_ping_interval = 900; | 2410 config.stable_writable_connection_ping_interval = 900; |
2401 ep1_ch1()->SetIceConfig(config); | 2411 ep1_ch1()->SetIceConfig(config); |
2402 ep2_ch1()->SetIceConfig(config); | 2412 ep2_ch1()->SetIceConfig(config); |
2403 // Need to wait to make sure the connections on both networks are writable. | 2413 // Need to wait to make sure the connections on both networks are writable. |
2404 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 2414 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && |
2405 ep2_ch1()->receiving() && | 2415 ep2_ch1()->receiving() && |
2406 ep2_ch1()->writable(), | 2416 ep2_ch1()->writable(), |
2407 3000, clock); | 2417 kMediumTimeout, clock); |
2408 EXPECT_TRUE_SIMULATED_WAIT( | 2418 EXPECT_TRUE_SIMULATED_WAIT( |
2409 ep1_ch1()->selected_connection() && | 2419 ep1_ch1()->selected_connection() && |
2410 LocalCandidate(ep1_ch1())->address().EqualIPs(wifi[0]) && | 2420 LocalCandidate(ep1_ch1())->address().EqualIPs(wifi[0]) && |
2411 RemoteCandidate(ep1_ch1())->address().EqualIPs(wifi[1]), | 2421 RemoteCandidate(ep1_ch1())->address().EqualIPs(wifi[1]), |
2412 kDefaultTimeout, clock); | 2422 kDefaultTimeout, clock); |
2413 Connection* backup_conn = | 2423 Connection* backup_conn = |
2414 GetConnectionWithLocalAddress(ep1_ch1(), cellular[0]); | 2424 GetConnectionWithLocalAddress(ep1_ch1(), cellular[0]); |
2415 ASSERT_NE(nullptr, backup_conn); | 2425 ASSERT_NE(nullptr, backup_conn); |
2416 // After a short while, the backup connection will be writable but not | 2426 // After a short while, the backup connection will be writable but not |
2417 // receiving because backup connection is pinged at a slower rate. | 2427 // receiving because backup connection is pinged at a slower rate. |
2418 EXPECT_TRUE_SIMULATED_WAIT( | 2428 EXPECT_TRUE_SIMULATED_WAIT( |
2419 backup_conn->writable() && !backup_conn->receiving(), 5000, clock); | 2429 backup_conn->writable() && !backup_conn->receiving(), kDefaultTimeout, |
| 2430 clock); |
2420 reset_selected_candidate_pair_switches(); | 2431 reset_selected_candidate_pair_switches(); |
2421 // Blackhole any traffic to or from the remote WiFi networks. | 2432 // Blackhole any traffic to or from the remote WiFi networks. |
2422 LOG(LS_INFO) << "Failing over..."; | 2433 LOG(LS_INFO) << "Failing over..."; |
2423 fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, wifi[1]); | 2434 fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, wifi[1]); |
2424 | 2435 |
2425 int num_switches = 0; | 2436 int num_switches = 0; |
2426 SIMULATED_WAIT((num_switches = reset_selected_candidate_pair_switches()) > 0, | 2437 SIMULATED_WAIT((num_switches = reset_selected_candidate_pair_switches()) > 0, |
2427 20000, clock); | 2438 20000, clock); |
2428 EXPECT_EQ(0, num_switches); | 2439 EXPECT_EQ(0, num_switches); |
2429 DestroyChannels(); | 2440 DestroyChannels(); |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2513 1000, 1000); | 2524 1000, 1000); |
2514 int backup_ping_interval = 2000; | 2525 int backup_ping_interval = 2000; |
2515 ep2_ch1()->SetIceConfig( | 2526 ep2_ch1()->SetIceConfig( |
2516 CreateIceConfig(2000, GATHER_ONCE, backup_ping_interval)); | 2527 CreateIceConfig(2000, GATHER_ONCE, backup_ping_interval)); |
2517 // After the state becomes COMPLETED, the backup connection will be pinged | 2528 // After the state becomes COMPLETED, the backup connection will be pinged |
2518 // once every |backup_ping_interval| milliseconds. | 2529 // once every |backup_ping_interval| milliseconds. |
2519 ASSERT_TRUE_WAIT(ep2_ch1()->GetState() == STATE_COMPLETED, 1000); | 2530 ASSERT_TRUE_WAIT(ep2_ch1()->GetState() == STATE_COMPLETED, 1000); |
2520 const std::vector<Connection*>& connections = ep2_ch1()->connections(); | 2531 const std::vector<Connection*>& connections = ep2_ch1()->connections(); |
2521 ASSERT_EQ(2U, connections.size()); | 2532 ASSERT_EQ(2U, connections.size()); |
2522 Connection* backup_conn = connections[1]; | 2533 Connection* backup_conn = connections[1]; |
2523 EXPECT_TRUE_WAIT(backup_conn->writable(), 3000); | 2534 EXPECT_TRUE_WAIT(backup_conn->writable(), kMediumTimeout); |
2524 int64_t last_ping_response_ms = backup_conn->last_ping_response_received(); | 2535 int64_t last_ping_response_ms = backup_conn->last_ping_response_received(); |
2525 EXPECT_TRUE_WAIT( | 2536 EXPECT_TRUE_WAIT( |
2526 last_ping_response_ms < backup_conn->last_ping_response_received(), 5000); | 2537 last_ping_response_ms < backup_conn->last_ping_response_received(), |
| 2538 kDefaultTimeout); |
2527 int time_elapsed = | 2539 int time_elapsed = |
2528 backup_conn->last_ping_response_received() - last_ping_response_ms; | 2540 backup_conn->last_ping_response_received() - last_ping_response_ms; |
2529 LOG(LS_INFO) << "Time elapsed: " << time_elapsed; | 2541 LOG(LS_INFO) << "Time elapsed: " << time_elapsed; |
2530 EXPECT_GE(time_elapsed, backup_ping_interval); | 2542 EXPECT_GE(time_elapsed, backup_ping_interval); |
2531 | 2543 |
2532 DestroyChannels(); | 2544 DestroyChannels(); |
2533 } | 2545 } |
2534 | 2546 |
2535 TEST_F(P2PTransportChannelMultihomedTest, TestGetState) { | 2547 TEST_F(P2PTransportChannelMultihomedTest, TestGetState) { |
| 2548 rtc::ScopedFakeClock clock; |
2536 AddAddress(0, kAlternateAddrs[0]); | 2549 AddAddress(0, kAlternateAddrs[0]); |
2537 AddAddress(0, kPublicAddrs[0]); | 2550 AddAddress(0, kPublicAddrs[0]); |
2538 AddAddress(1, kPublicAddrs[1]); | 2551 AddAddress(1, kPublicAddrs[1]); |
2539 // Create channels and let them go writable, as usual. | 2552 // Create channels and let them go writable, as usual. |
2540 CreateChannels(); | 2553 CreateChannels(); |
2541 | 2554 |
2542 // Both transport channels will reach STATE_COMPLETED quickly. | 2555 // Both transport channels will reach STATE_COMPLETED quickly. |
2543 EXPECT_EQ_WAIT(TransportChannelState::STATE_COMPLETED, ep1_ch1()->GetState(), | 2556 EXPECT_EQ_SIMULATED_WAIT(TransportChannelState::STATE_COMPLETED, |
2544 1000); | 2557 ep1_ch1()->GetState(), kShortTimeout, clock); |
2545 EXPECT_EQ_WAIT(TransportChannelState::STATE_COMPLETED, ep2_ch1()->GetState(), | 2558 EXPECT_EQ_SIMULATED_WAIT(TransportChannelState::STATE_COMPLETED, |
2546 1000); | 2559 ep2_ch1()->GetState(), kShortTimeout, clock); |
2547 } | 2560 } |
2548 | 2561 |
2549 // Tests that when a network interface becomes inactive, if Continual Gathering | 2562 // Tests that when a network interface becomes inactive, if Continual Gathering |
2550 // policy is GATHER_CONTINUALLY, the ports associated with that network | 2563 // policy is GATHER_CONTINUALLY, the ports associated with that network |
2551 // will be removed from the port list of the channel, and the respective | 2564 // will be removed from the port list of the channel, and the respective |
2552 // remote candidates on the other participant will be removed eventually. | 2565 // remote candidates on the other participant will be removed eventually. |
2553 TEST_F(P2PTransportChannelMultihomedTest, TestNetworkBecomesInactive) { | 2566 TEST_F(P2PTransportChannelMultihomedTest, TestNetworkBecomesInactive) { |
2554 rtc::ScopedFakeClock clock; | 2567 rtc::ScopedFakeClock clock; |
2555 AddAddress(0, kPublicAddrs[0]); | 2568 AddAddress(0, kPublicAddrs[0]); |
2556 AddAddress(1, kPublicAddrs[1]); | 2569 AddAddress(1, kPublicAddrs[1]); |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2650 SetAllocatorFlags(1, kOnlyLocalPorts); | 2663 SetAllocatorFlags(1, kOnlyLocalPorts); |
2651 | 2664 |
2652 // Set continual gathering policy. | 2665 // Set continual gathering policy. |
2653 IceConfig continual_gathering_config = | 2666 IceConfig continual_gathering_config = |
2654 CreateIceConfig(1000, GATHER_CONTINUALLY); | 2667 CreateIceConfig(1000, GATHER_CONTINUALLY); |
2655 // Create channels and let them go writable, as usual. | 2668 // Create channels and let them go writable, as usual. |
2656 CreateChannels(continual_gathering_config, continual_gathering_config); | 2669 CreateChannels(continual_gathering_config, continual_gathering_config); |
2657 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 2670 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && |
2658 ep2_ch1()->receiving() && | 2671 ep2_ch1()->receiving() && |
2659 ep2_ch1()->writable(), | 2672 ep2_ch1()->writable(), |
2660 3000, clock); | 2673 kMediumTimeout, clock); |
2661 EXPECT_TRUE( | 2674 EXPECT_TRUE( |
2662 ep1_ch1()->selected_connection() && ep2_ch1()->selected_connection() && | 2675 ep1_ch1()->selected_connection() && ep2_ch1()->selected_connection() && |
2663 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && | 2676 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && |
2664 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); | 2677 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); |
2665 | 2678 |
2666 // Add the new address first and then remove the other one. | 2679 // Add the new address first and then remove the other one. |
2667 LOG(LS_INFO) << "Draining..."; | 2680 LOG(LS_INFO) << "Draining..."; |
2668 AddAddress(1, kAlternateAddrs[1]); | 2681 AddAddress(1, kAlternateAddrs[1]); |
2669 RemoveAddress(1, kPublicAddrs[1]); | 2682 RemoveAddress(1, kPublicAddrs[1]); |
2670 // We should switch to use the alternate address after an exchange of pings. | 2683 // We should switch to use the alternate address after an exchange of pings. |
2671 EXPECT_TRUE_SIMULATED_WAIT( | 2684 EXPECT_TRUE_SIMULATED_WAIT( |
2672 ep1_ch1()->selected_connection() && ep2_ch1()->selected_connection() && | 2685 ep1_ch1()->selected_connection() && ep2_ch1()->selected_connection() && |
2673 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && | 2686 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && |
2674 RemoteCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[1]), | 2687 RemoteCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[1]), |
2675 3000, clock); | 2688 kMediumTimeout, clock); |
2676 | 2689 |
2677 // Remove one address first and then add another address. | 2690 // Remove one address first and then add another address. |
2678 LOG(LS_INFO) << "Draining again..."; | 2691 LOG(LS_INFO) << "Draining again..."; |
2679 RemoveAddress(1, kAlternateAddrs[1]); | 2692 RemoveAddress(1, kAlternateAddrs[1]); |
2680 AddAddress(1, kAlternateAddrs[0]); | 2693 AddAddress(1, kAlternateAddrs[0]); |
2681 EXPECT_TRUE_SIMULATED_WAIT( | 2694 EXPECT_TRUE_SIMULATED_WAIT( |
2682 ep1_ch1()->selected_connection() && ep2_ch1()->selected_connection() && | 2695 ep1_ch1()->selected_connection() && ep2_ch1()->selected_connection() && |
2683 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && | 2696 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && |
2684 RemoteCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[0]), | 2697 RemoteCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[0]), |
2685 3000, clock); | 2698 kMediumTimeout, clock); |
2686 | 2699 |
2687 DestroyChannels(); | 2700 DestroyChannels(); |
2688 } | 2701 } |
2689 | 2702 |
2690 /* | 2703 /* |
2691 TODO(honghaiz) Once continual gathering fully supports | 2704 TODO(honghaiz) Once continual gathering fully supports |
2692 GATHER_CONTINUALLY_AND_RECOVER, put this test back. | 2705 GATHER_CONTINUALLY_AND_RECOVER, put this test back. |
2693 | 2706 |
2694 // Tests that if the backup connections are lost and then the interface with the | 2707 // Tests that if the backup connections are lost and then the interface with the |
2695 // selected connection is gone, continual gathering will restore the | 2708 // selected connection is gone, continual gathering will restore the |
(...skipping 10 matching lines...) Expand all Loading... |
2706 // Use only local ports for simplicity. | 2719 // Use only local ports for simplicity. |
2707 SetAllocatorFlags(0, kOnlyLocalPorts); | 2720 SetAllocatorFlags(0, kOnlyLocalPorts); |
2708 SetAllocatorFlags(1, kOnlyLocalPorts); | 2721 SetAllocatorFlags(1, kOnlyLocalPorts); |
2709 | 2722 |
2710 // Set continual gathering policy. | 2723 // Set continual gathering policy. |
2711 IceConfig config = CreateIceConfig(1000, GATHER_CONTINUALLY_AND_RECOVER); | 2724 IceConfig config = CreateIceConfig(1000, GATHER_CONTINUALLY_AND_RECOVER); |
2712 // Create channels and let them go writable, as usual. | 2725 // Create channels and let them go writable, as usual. |
2713 CreateChannels(config, config); | 2726 CreateChannels(config, config); |
2714 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 2727 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && |
2715 ep2_ch1()->receiving() && ep2_ch1()->writable(), | 2728 ep2_ch1()->receiving() && ep2_ch1()->writable(), |
2716 3000, clock); | 2729 kMediumTimeout, clock); |
2717 EXPECT_TRUE(ep1_ch1()->selected_connection() && | 2730 EXPECT_TRUE(ep1_ch1()->selected_connection() && |
2718 ep2_ch1()->selected_connection() && | 2731 ep2_ch1()->selected_connection() && |
2719 LocalCandidate(ep1_ch1())->address().EqualIPs(wifi[0]) && | 2732 LocalCandidate(ep1_ch1())->address().EqualIPs(wifi[0]) && |
2720 RemoteCandidate(ep1_ch1())->address().EqualIPs(wifi[1])); | 2733 RemoteCandidate(ep1_ch1())->address().EqualIPs(wifi[1])); |
2721 | 2734 |
2722 // First destroy all backup connection. | 2735 // First destroy all backup connection. |
2723 DestroyAllButBestConnection(ep1_ch1()); | 2736 DestroyAllButBestConnection(ep1_ch1()); |
2724 | 2737 |
2725 SIMULATED_WAIT(false, 10, clock); | 2738 SIMULATED_WAIT(false, 10, clock); |
2726 // Then the interface of the best connection goes away. | 2739 // Then the interface of the best connection goes away. |
2727 RemoveAddress(0, wifi[0]); | 2740 RemoveAddress(0, wifi[0]); |
2728 EXPECT_TRUE_SIMULATED_WAIT( | 2741 EXPECT_TRUE_SIMULATED_WAIT( |
2729 ep1_ch1()->selected_connection() && ep2_ch1()->selected_connection() && | 2742 ep1_ch1()->selected_connection() && ep2_ch1()->selected_connection() && |
2730 LocalCandidate(ep1_ch1())->address().EqualIPs(cellular[0]) && | 2743 LocalCandidate(ep1_ch1())->address().EqualIPs(cellular[0]) && |
2731 RemoteCandidate(ep1_ch1())->address().EqualIPs(wifi[1]), | 2744 RemoteCandidate(ep1_ch1())->address().EqualIPs(wifi[1]), |
2732 3000, clock); | 2745 kMediumTimeout, clock); |
2733 | 2746 |
2734 DestroyChannels(); | 2747 DestroyChannels(); |
2735 } | 2748 } |
2736 */ | 2749 */ |
2737 | 2750 |
2738 // Tests that the backup connection will be restored after it is destroyed. | 2751 // Tests that the backup connection will be restored after it is destroyed. |
2739 TEST_F(P2PTransportChannelMultihomedTest, TestRestoreBackupConnection) { | 2752 TEST_F(P2PTransportChannelMultihomedTest, TestRestoreBackupConnection) { |
2740 rtc::ScopedFakeClock clock; | 2753 rtc::ScopedFakeClock clock; |
2741 auto& wifi = kAlternateAddrs; | 2754 auto& wifi = kAlternateAddrs; |
2742 auto& cellular = kPublicAddrs; | 2755 auto& cellular = kPublicAddrs; |
2743 AddAddress(0, wifi[0], "test_wifi0", rtc::ADAPTER_TYPE_WIFI); | 2756 AddAddress(0, wifi[0], "test_wifi0", rtc::ADAPTER_TYPE_WIFI); |
2744 AddAddress(0, cellular[0], "test_cell0", rtc::ADAPTER_TYPE_CELLULAR); | 2757 AddAddress(0, cellular[0], "test_cell0", rtc::ADAPTER_TYPE_CELLULAR); |
2745 AddAddress(1, wifi[1], "test_wifi1", rtc::ADAPTER_TYPE_WIFI); | 2758 AddAddress(1, wifi[1], "test_wifi1", rtc::ADAPTER_TYPE_WIFI); |
2746 AddAddress(1, cellular[1], "test_cell1", rtc::ADAPTER_TYPE_CELLULAR); | 2759 AddAddress(1, cellular[1], "test_cell1", rtc::ADAPTER_TYPE_CELLULAR); |
2747 // Use only local ports for simplicity. | 2760 // Use only local ports for simplicity. |
2748 SetAllocatorFlags(0, kOnlyLocalPorts); | 2761 SetAllocatorFlags(0, kOnlyLocalPorts); |
2749 SetAllocatorFlags(1, kOnlyLocalPorts); | 2762 SetAllocatorFlags(1, kOnlyLocalPorts); |
2750 | 2763 |
2751 // Create channels and let them go writable, as usual. | 2764 // Create channels and let them go writable, as usual. |
2752 IceConfig config = CreateIceConfig(1000, GATHER_CONTINUALLY); | 2765 IceConfig config = CreateIceConfig(1000, GATHER_CONTINUALLY); |
2753 config.regather_on_failed_networks_interval = rtc::Optional<int>(2000); | 2766 config.regather_on_failed_networks_interval = rtc::Optional<int>(2000); |
2754 CreateChannels(config, config); | 2767 CreateChannels(config, config); |
2755 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 2768 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && |
2756 ep2_ch1()->receiving() && | 2769 ep2_ch1()->receiving() && |
2757 ep2_ch1()->writable(), | 2770 ep2_ch1()->writable(), |
2758 3000, clock); | 2771 kMediumTimeout, clock); |
2759 EXPECT_TRUE(ep1_ch1()->selected_connection() && | 2772 EXPECT_TRUE(ep1_ch1()->selected_connection() && |
2760 ep2_ch1()->selected_connection() && | 2773 ep2_ch1()->selected_connection() && |
2761 LocalCandidate(ep1_ch1())->address().EqualIPs(wifi[0]) && | 2774 LocalCandidate(ep1_ch1())->address().EqualIPs(wifi[0]) && |
2762 RemoteCandidate(ep1_ch1())->address().EqualIPs(wifi[1])); | 2775 RemoteCandidate(ep1_ch1())->address().EqualIPs(wifi[1])); |
2763 | 2776 |
2764 // Destroy all backup connections. | 2777 // Destroy all backup connections. |
2765 DestroyAllButBestConnection(ep1_ch1()); | 2778 DestroyAllButBestConnection(ep1_ch1()); |
2766 // Ensure the backup connection is removed first. | 2779 // Ensure the backup connection is removed first. |
2767 EXPECT_TRUE_SIMULATED_WAIT( | 2780 EXPECT_TRUE_SIMULATED_WAIT( |
2768 GetConnectionWithLocalAddress(ep1_ch1(), cellular[0]) == nullptr, | 2781 GetConnectionWithLocalAddress(ep1_ch1(), cellular[0]) == nullptr, |
2769 kDefaultTimeout, clock); | 2782 kDefaultTimeout, clock); |
2770 const cricket::Connection* conn; | 2783 const cricket::Connection* conn; |
2771 EXPECT_TRUE_SIMULATED_WAIT( | 2784 EXPECT_TRUE_SIMULATED_WAIT( |
2772 (conn = GetConnectionWithLocalAddress(ep1_ch1(), cellular[0])) != | 2785 (conn = GetConnectionWithLocalAddress(ep1_ch1(), cellular[0])) != |
2773 nullptr && | 2786 nullptr && |
2774 conn != ep1_ch1()->selected_connection() && conn->writable(), | 2787 conn != ep1_ch1()->selected_connection() && conn->writable(), |
2775 5000, clock); | 2788 kDefaultTimeout, clock); |
2776 | 2789 |
2777 DestroyChannels(); | 2790 DestroyChannels(); |
2778 } | 2791 } |
2779 | 2792 |
2780 // A collection of tests which tests a single P2PTransportChannel by sending | 2793 // A collection of tests which tests a single P2PTransportChannel by sending |
2781 // pings. | 2794 // pings. |
2782 class P2PTransportChannelPingTest : public testing::Test, | 2795 class P2PTransportChannelPingTest : public testing::Test, |
2783 public sigslot::has_slots<> { | 2796 public sigslot::has_slots<> { |
2784 public: | 2797 public: |
2785 P2PTransportChannelPingTest() | 2798 P2PTransportChannelPingTest() |
(...skipping 12 matching lines...) Expand all Loading... |
2798 &P2PTransportChannelPingTest::OnReadyToSend); | 2811 &P2PTransportChannelPingTest::OnReadyToSend); |
2799 ch->SignalStateChanged.connect( | 2812 ch->SignalStateChanged.connect( |
2800 this, &P2PTransportChannelPingTest::OnChannelStateChanged); | 2813 this, &P2PTransportChannelPingTest::OnChannelStateChanged); |
2801 } | 2814 } |
2802 | 2815 |
2803 Connection* WaitForConnectionTo(P2PTransportChannel* ch, | 2816 Connection* WaitForConnectionTo(P2PTransportChannel* ch, |
2804 const std::string& ip, | 2817 const std::string& ip, |
2805 int port_num, | 2818 int port_num, |
2806 rtc::FakeClock* clock = nullptr) { | 2819 rtc::FakeClock* clock = nullptr) { |
2807 if (clock == nullptr) { | 2820 if (clock == nullptr) { |
2808 EXPECT_TRUE_WAIT(GetConnectionTo(ch, ip, port_num) != nullptr, 3000); | 2821 EXPECT_TRUE_WAIT(GetConnectionTo(ch, ip, port_num) != nullptr, |
| 2822 kMediumTimeout); |
2809 } else { | 2823 } else { |
2810 EXPECT_TRUE_SIMULATED_WAIT(GetConnectionTo(ch, ip, port_num) != nullptr, | 2824 EXPECT_TRUE_SIMULATED_WAIT(GetConnectionTo(ch, ip, port_num) != nullptr, |
2811 3000, *clock); | 2825 kMediumTimeout, *clock); |
2812 } | 2826 } |
2813 return GetConnectionTo(ch, ip, port_num); | 2827 return GetConnectionTo(ch, ip, port_num); |
2814 } | 2828 } |
2815 | 2829 |
2816 Port* GetPort(P2PTransportChannel* ch) { | 2830 Port* GetPort(P2PTransportChannel* ch) { |
2817 if (ch->ports().empty()) { | 2831 if (ch->ports().empty()) { |
2818 return nullptr; | 2832 return nullptr; |
2819 } | 2833 } |
2820 return static_cast<Port*>(ch->ports()[0]); | 2834 return static_cast<Port*>(ch->ports()[0]); |
2821 } | 2835 } |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2856 | 2870 |
2857 Connection* CreateConnectionWithCandidate(P2PTransportChannel& channel, | 2871 Connection* CreateConnectionWithCandidate(P2PTransportChannel& channel, |
2858 rtc::ScopedFakeClock& clock, | 2872 rtc::ScopedFakeClock& clock, |
2859 const std::string& ip_addr, | 2873 const std::string& ip_addr, |
2860 int port, | 2874 int port, |
2861 int priority, | 2875 int priority, |
2862 bool writable) { | 2876 bool writable) { |
2863 channel.AddRemoteCandidate( | 2877 channel.AddRemoteCandidate( |
2864 CreateUdpCandidate(LOCAL_PORT_TYPE, ip_addr, port, priority)); | 2878 CreateUdpCandidate(LOCAL_PORT_TYPE, ip_addr, port, priority)); |
2865 EXPECT_TRUE_SIMULATED_WAIT( | 2879 EXPECT_TRUE_SIMULATED_WAIT( |
2866 GetConnectionTo(&channel, ip_addr, port) != nullptr, 3000, clock); | 2880 GetConnectionTo(&channel, ip_addr, port) != nullptr, kMediumTimeout, |
| 2881 clock); |
2867 Connection* conn = GetConnectionTo(&channel, ip_addr, port); | 2882 Connection* conn = GetConnectionTo(&channel, ip_addr, port); |
2868 | 2883 |
2869 if (conn && writable) { | 2884 if (conn && writable) { |
2870 conn->ReceivedPingResponse(LOW_RTT, "id"); // make it writable | 2885 conn->ReceivedPingResponse(LOW_RTT, "id"); // make it writable |
2871 } | 2886 } |
2872 return conn; | 2887 return conn; |
2873 } | 2888 } |
2874 | 2889 |
2875 void NominateConnection(Connection* conn, uint32_t remote_nomination = 1U) { | 2890 void NominateConnection(Connection* conn, uint32_t remote_nomination = 1U) { |
2876 conn->set_remote_nomination(remote_nomination); | 2891 conn->set_remote_nomination(remote_nomination); |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3013 (MIN_PINGS_AT_WEAK_PING_INTERVAL - 1); | 3028 (MIN_PINGS_AT_WEAK_PING_INTERVAL - 1); |
3014 EXPECT_EQ(ping_interval_ms, WEAK_PING_INTERVAL); | 3029 EXPECT_EQ(ping_interval_ms, WEAK_PING_INTERVAL); |
3015 | 3030 |
3016 // Stabilizing. | 3031 // Stabilizing. |
3017 | 3032 |
3018 conn->ReceivedPingResponse(LOW_RTT, "id"); | 3033 conn->ReceivedPingResponse(LOW_RTT, "id"); |
3019 int ping_sent_before = conn->num_pings_sent(); | 3034 int ping_sent_before = conn->num_pings_sent(); |
3020 start = clock.TimeNanos(); | 3035 start = clock.TimeNanos(); |
3021 // The connection becomes strong but not stable because we haven't been able | 3036 // The connection becomes strong but not stable because we haven't been able |
3022 // to converge the RTT. | 3037 // to converge the RTT. |
3023 SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, 3000, clock); | 3038 SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, kMediumTimeout, |
| 3039 clock); |
3024 ping_interval_ms = (clock.TimeNanos() - start) / rtc::kNumNanosecsPerMillisec; | 3040 ping_interval_ms = (clock.TimeNanos() - start) / rtc::kNumNanosecsPerMillisec; |
3025 EXPECT_GE(ping_interval_ms, STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL); | 3041 EXPECT_GE(ping_interval_ms, STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL); |
3026 EXPECT_LE(ping_interval_ms, | 3042 EXPECT_LE(ping_interval_ms, |
3027 STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL + SCHEDULING_RANGE); | 3043 STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL + SCHEDULING_RANGE); |
3028 | 3044 |
3029 // Stabilized. | 3045 // Stabilized. |
3030 | 3046 |
3031 // The connection becomes stable after receiving more than RTT_RATIO rtt | 3047 // The connection becomes stable after receiving more than RTT_RATIO rtt |
3032 // samples. | 3048 // samples. |
3033 for (int i = 0; i < RTT_RATIO; i++) { | 3049 for (int i = 0; i < RTT_RATIO; i++) { |
3034 conn->ReceivedPingResponse(LOW_RTT, "id"); | 3050 conn->ReceivedPingResponse(LOW_RTT, "id"); |
3035 } | 3051 } |
3036 ping_sent_before = conn->num_pings_sent(); | 3052 ping_sent_before = conn->num_pings_sent(); |
3037 start = clock.TimeNanos(); | 3053 start = clock.TimeNanos(); |
3038 SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, 3000, clock); | 3054 SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, kMediumTimeout, |
| 3055 clock); |
3039 ping_interval_ms = (clock.TimeNanos() - start) / rtc::kNumNanosecsPerMillisec; | 3056 ping_interval_ms = (clock.TimeNanos() - start) / rtc::kNumNanosecsPerMillisec; |
3040 EXPECT_GE(ping_interval_ms, STABLE_WRITABLE_CONNECTION_PING_INTERVAL); | 3057 EXPECT_GE(ping_interval_ms, STABLE_WRITABLE_CONNECTION_PING_INTERVAL); |
3041 EXPECT_LE(ping_interval_ms, | 3058 EXPECT_LE(ping_interval_ms, |
3042 STABLE_WRITABLE_CONNECTION_PING_INTERVAL + SCHEDULING_RANGE); | 3059 STABLE_WRITABLE_CONNECTION_PING_INTERVAL + SCHEDULING_RANGE); |
3043 | 3060 |
3044 // Destabilized. | 3061 // Destabilized. |
3045 | 3062 |
3046 conn->ReceivedPingResponse(LOW_RTT, "id"); | 3063 conn->ReceivedPingResponse(LOW_RTT, "id"); |
3047 // Create a in-flight ping. | 3064 // Create a in-flight ping. |
3048 conn->Ping(clock.TimeNanos() / rtc::kNumNanosecsPerMillisec); | 3065 conn->Ping(clock.TimeNanos() / rtc::kNumNanosecsPerMillisec); |
3049 start = clock.TimeNanos(); | 3066 start = clock.TimeNanos(); |
3050 // In-flight ping timeout and the connection will be unstable. | 3067 // In-flight ping timeout and the connection will be unstable. |
3051 SIMULATED_WAIT( | 3068 SIMULATED_WAIT( |
3052 !conn->stable(clock.TimeNanos() / rtc::kNumNanosecsPerMillisec), 3000, | 3069 !conn->stable(clock.TimeNanos() / rtc::kNumNanosecsPerMillisec), |
3053 clock); | 3070 kMediumTimeout, clock); |
3054 int64_t duration_ms = | 3071 int64_t duration_ms = |
3055 (clock.TimeNanos() - start) / rtc::kNumNanosecsPerMillisec; | 3072 (clock.TimeNanos() - start) / rtc::kNumNanosecsPerMillisec; |
3056 EXPECT_GE(duration_ms, 2 * conn->rtt() - RTT_RANGE); | 3073 EXPECT_GE(duration_ms, 2 * conn->rtt() - RTT_RANGE); |
3057 EXPECT_LE(duration_ms, 2 * conn->rtt() + RTT_RANGE); | 3074 EXPECT_LE(duration_ms, 2 * conn->rtt() + RTT_RANGE); |
3058 // The connection become unstable due to not receiving ping responses. | 3075 // The connection become unstable due to not receiving ping responses. |
3059 ping_sent_before = conn->num_pings_sent(); | 3076 ping_sent_before = conn->num_pings_sent(); |
3060 SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, 3000, clock); | 3077 SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, kMediumTimeout, |
| 3078 clock); |
3061 // The interval is expected to be | 3079 // The interval is expected to be |
3062 // STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL. | 3080 // STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL. |
3063 start = clock.TimeNanos(); | 3081 start = clock.TimeNanos(); |
3064 ping_sent_before = conn->num_pings_sent(); | 3082 ping_sent_before = conn->num_pings_sent(); |
3065 SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, 3000, clock); | 3083 SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, kMediumTimeout, |
| 3084 clock); |
3066 ping_interval_ms = (clock.TimeNanos() - start) / rtc::kNumNanosecsPerMillisec; | 3085 ping_interval_ms = (clock.TimeNanos() - start) / rtc::kNumNanosecsPerMillisec; |
3067 EXPECT_GE(ping_interval_ms, STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL); | 3086 EXPECT_GE(ping_interval_ms, STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL); |
3068 EXPECT_LE(ping_interval_ms, | 3087 EXPECT_LE(ping_interval_ms, |
3069 STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL + SCHEDULING_RANGE); | 3088 STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL + SCHEDULING_RANGE); |
3070 } | 3089 } |
3071 | 3090 |
3072 // Test that we start pinging as soon as we have a connection and remote ICE | 3091 // Test that we start pinging as soon as we have a connection and remote ICE |
3073 // parameters. | 3092 // parameters. |
3074 TEST_F(P2PTransportChannelPingTest, PingingStartedAsSoonAsPossible) { | 3093 TEST_F(P2PTransportChannelPingTest, PingingStartedAsSoonAsPossible) { |
3075 rtc::ScopedFakeClock clock; | 3094 rtc::ScopedFakeClock clock; |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3200 CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 2, kIceUfrag[1])); | 3219 CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 2, kIceUfrag[1])); |
3201 rtc::Thread::Current()->ProcessMessages(500); | 3220 rtc::Thread::Current()->ProcessMessages(500); |
3202 EXPECT_TRUE(GetConnectionTo(&ch, "2.2.2.2", 2) == nullptr); | 3221 EXPECT_TRUE(GetConnectionTo(&ch, "2.2.2.2", 2) == nullptr); |
3203 | 3222 |
3204 // Add a candidate with the current ufrag, its pwd and generation will be | 3223 // Add a candidate with the current ufrag, its pwd and generation will be |
3205 // assigned, even if the generation is not set. | 3224 // assigned, even if the generation is not set. |
3206 ch.AddRemoteCandidate( | 3225 ch.AddRemoteCandidate( |
3207 CreateUdpCandidate(LOCAL_PORT_TYPE, "3.3.3.3", 3, 0, kIceUfrag[2])); | 3226 CreateUdpCandidate(LOCAL_PORT_TYPE, "3.3.3.3", 3, 0, kIceUfrag[2])); |
3208 Connection* conn3 = nullptr; | 3227 Connection* conn3 = nullptr; |
3209 ASSERT_TRUE_WAIT((conn3 = GetConnectionTo(&ch, "3.3.3.3", 3)) != nullptr, | 3228 ASSERT_TRUE_WAIT((conn3 = GetConnectionTo(&ch, "3.3.3.3", 3)) != nullptr, |
3210 3000); | 3229 kMediumTimeout); |
3211 const Candidate& new_candidate = conn3->remote_candidate(); | 3230 const Candidate& new_candidate = conn3->remote_candidate(); |
3212 EXPECT_EQ(kIcePwd[2], new_candidate.password()); | 3231 EXPECT_EQ(kIcePwd[2], new_candidate.password()); |
3213 EXPECT_EQ(1U, new_candidate.generation()); | 3232 EXPECT_EQ(1U, new_candidate.generation()); |
3214 | 3233 |
3215 // Check that the pwd of all remote candidates are properly assigned. | 3234 // Check that the pwd of all remote candidates are properly assigned. |
3216 for (const RemoteCandidate& candidate : ch.remote_candidates()) { | 3235 for (const RemoteCandidate& candidate : ch.remote_candidates()) { |
3217 EXPECT_TRUE(candidate.username() == kIceUfrag[1] || | 3236 EXPECT_TRUE(candidate.username() == kIceUfrag[1] || |
3218 candidate.username() == kIceUfrag[2]); | 3237 candidate.username() == kIceUfrag[2]); |
3219 if (candidate.username() == kIceUfrag[1]) { | 3238 if (candidate.username() == kIceUfrag[1]) { |
3220 EXPECT_EQ(kIcePwd[1], candidate.password()); | 3239 EXPECT_EQ(kIcePwd[1], candidate.password()); |
(...skipping 17 matching lines...) Expand all Loading... |
3238 | 3257 |
3239 // Create a higher priority candidate and make the connection | 3258 // Create a higher priority candidate and make the connection |
3240 // receiving/writable. This will prune conn1. | 3259 // receiving/writable. This will prune conn1. |
3241 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 2)); | 3260 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 2)); |
3242 Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); | 3261 Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); |
3243 ASSERT_TRUE(conn2 != nullptr); | 3262 ASSERT_TRUE(conn2 != nullptr); |
3244 conn2->ReceivedPing(); | 3263 conn2->ReceivedPing(); |
3245 conn2->ReceivedPingResponse(LOW_RTT, "id"); | 3264 conn2->ReceivedPingResponse(LOW_RTT, "id"); |
3246 | 3265 |
3247 // Wait for conn1 to be pruned. | 3266 // Wait for conn1 to be pruned. |
3248 EXPECT_TRUE_WAIT(conn1->pruned(), 3000); | 3267 EXPECT_TRUE_WAIT(conn1->pruned(), kMediumTimeout); |
3249 // Destroy the connection to test SignalUnknownAddress. | 3268 // Destroy the connection to test SignalUnknownAddress. |
3250 conn1->Destroy(); | 3269 conn1->Destroy(); |
3251 EXPECT_TRUE_WAIT(GetConnectionTo(&ch, "1.1.1.1", 1) == nullptr, 1000); | 3270 EXPECT_TRUE_WAIT(GetConnectionTo(&ch, "1.1.1.1", 1) == nullptr, 1000); |
3252 | 3271 |
3253 // Create a minimal STUN message with prflx priority. | 3272 // Create a minimal STUN message with prflx priority. |
3254 IceMessage request; | 3273 IceMessage request; |
3255 request.SetType(STUN_BINDING_REQUEST); | 3274 request.SetType(STUN_BINDING_REQUEST); |
3256 request.AddAttribute( | 3275 request.AddAttribute( |
3257 new StunByteStringAttribute(STUN_ATTR_USERNAME, kIceUfrag[1])); | 3276 new StunByteStringAttribute(STUN_ATTR_USERNAME, kIceUfrag[1])); |
3258 uint32_t prflx_priority = ICE_TYPE_PREFERENCE_PRFLX << 24; | 3277 uint32_t prflx_priority = ICE_TYPE_PREFERENCE_PRFLX << 24; |
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3753 EXPECT_EQ(nullptr, ch.selected_connection()); | 3772 EXPECT_EQ(nullptr, ch.selected_connection()); |
3754 conn1->ReceivedPingResponse(LOW_RTT, "id"); // Becomes writable and receiving | 3773 conn1->ReceivedPingResponse(LOW_RTT, "id"); // Becomes writable and receiving |
3755 | 3774 |
3756 // When a higher-priority, nominated candidate comes in, the connections with | 3775 // When a higher-priority, nominated candidate comes in, the connections with |
3757 // lower-priority are pruned. | 3776 // lower-priority are pruned. |
3758 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 10)); | 3777 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 10)); |
3759 Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2, &clock); | 3778 Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2, &clock); |
3760 ASSERT_TRUE(conn2 != nullptr); | 3779 ASSERT_TRUE(conn2 != nullptr); |
3761 conn2->ReceivedPingResponse(LOW_RTT, "id"); // Becomes writable and receiving | 3780 conn2->ReceivedPingResponse(LOW_RTT, "id"); // Becomes writable and receiving |
3762 NominateConnection(conn2); | 3781 NominateConnection(conn2); |
3763 EXPECT_TRUE_SIMULATED_WAIT(conn1->pruned(), 3000, clock); | 3782 EXPECT_TRUE_SIMULATED_WAIT(conn1->pruned(), kMediumTimeout, clock); |
3764 | 3783 |
3765 ch.SetIceConfig(CreateIceConfig(500, GATHER_ONCE)); | 3784 ch.SetIceConfig(CreateIceConfig(500, GATHER_ONCE)); |
3766 // Wait until conn2 becomes not receiving. | 3785 // Wait until conn2 becomes not receiving. |
3767 EXPECT_TRUE_SIMULATED_WAIT(!conn2->receiving(), 3000, clock); | 3786 EXPECT_TRUE_SIMULATED_WAIT(!conn2->receiving(), kMediumTimeout, clock); |
3768 | 3787 |
3769 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "3.3.3.3", 3, 1)); | 3788 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "3.3.3.3", 3, 1)); |
3770 Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3, &clock); | 3789 Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3, &clock); |
3771 ASSERT_TRUE(conn3 != nullptr); | 3790 ASSERT_TRUE(conn3 != nullptr); |
3772 // The selected connection should still be conn2. Even through conn3 has lower | 3791 // The selected connection should still be conn2. Even through conn3 has lower |
3773 // priority and is not receiving/writable, it is not pruned because the | 3792 // priority and is not receiving/writable, it is not pruned because the |
3774 // selected connection is not receiving. | 3793 // selected connection is not receiving. |
3775 SIMULATED_WAIT(conn3->pruned(), 1000, clock); | 3794 SIMULATED_WAIT(conn3->pruned(), 1000, clock); |
3776 EXPECT_FALSE(conn3->pruned()); | 3795 EXPECT_FALSE(conn3->pruned()); |
3777 } | 3796 } |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3846 // receiving, |conn2| will start to ping and upon receiving the ping response, | 3865 // receiving, |conn2| will start to ping and upon receiving the ping response, |
3847 // it will become the selected connection. | 3866 // it will become the selected connection. |
3848 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 1)); | 3867 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 1)); |
3849 Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2, &clock); | 3868 Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2, &clock); |
3850 ASSERT_TRUE(conn2 != nullptr); | 3869 ASSERT_TRUE(conn2 != nullptr); |
3851 EXPECT_TRUE_SIMULATED_WAIT(!conn2->active(), kDefaultTimeout, clock); | 3870 EXPECT_TRUE_SIMULATED_WAIT(!conn2->active(), kDefaultTimeout, clock); |
3852 // |conn2| should not send a ping yet. | 3871 // |conn2| should not send a ping yet. |
3853 EXPECT_EQ(Connection::STATE_WAITING, conn2->state()); | 3872 EXPECT_EQ(Connection::STATE_WAITING, conn2->state()); |
3854 EXPECT_EQ(TransportChannelState::STATE_COMPLETED, ch.GetState()); | 3873 EXPECT_EQ(TransportChannelState::STATE_COMPLETED, ch.GetState()); |
3855 // Wait for |conn1| becoming not receiving. | 3874 // Wait for |conn1| becoming not receiving. |
3856 EXPECT_TRUE_SIMULATED_WAIT(!conn1->receiving(), 3000, clock); | 3875 EXPECT_TRUE_SIMULATED_WAIT(!conn1->receiving(), kMediumTimeout, clock); |
3857 // Make sure conn2 is not deleted. | 3876 // Make sure conn2 is not deleted. |
3858 conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2, &clock); | 3877 conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2, &clock); |
3859 ASSERT_TRUE(conn2 != nullptr); | 3878 ASSERT_TRUE(conn2 != nullptr); |
3860 EXPECT_EQ_SIMULATED_WAIT(Connection::STATE_INPROGRESS, conn2->state(), | 3879 EXPECT_EQ_SIMULATED_WAIT(Connection::STATE_INPROGRESS, conn2->state(), |
3861 kDefaultTimeout, clock); | 3880 kDefaultTimeout, clock); |
3862 conn2->ReceivedPingResponse(LOW_RTT, "id"); | 3881 conn2->ReceivedPingResponse(LOW_RTT, "id"); |
3863 EXPECT_EQ_SIMULATED_WAIT(conn2, ch.selected_connection(), kDefaultTimeout, | 3882 EXPECT_EQ_SIMULATED_WAIT(conn2, ch.selected_connection(), kDefaultTimeout, |
3864 clock); | 3883 clock); |
3865 EXPECT_EQ(TransportChannelState::STATE_CONNECTING, ch.GetState()); | 3884 EXPECT_EQ(TransportChannelState::STATE_CONNECTING, ch.GetState()); |
3866 | 3885 |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4069 std::unique_ptr<P2PTransportChannel> channel_; | 4088 std::unique_ptr<P2PTransportChannel> channel_; |
4070 }; | 4089 }; |
4071 | 4090 |
4072 // Test that Relay/Relay connections will be pinged first when no other | 4091 // Test that Relay/Relay connections will be pinged first when no other |
4073 // connections have been pinged yet, unless we need to ping a trigger check or | 4092 // connections have been pinged yet, unless we need to ping a trigger check or |
4074 // we have a selected connection. | 4093 // we have a selected connection. |
4075 TEST_F(P2PTransportChannelMostLikelyToWorkFirstTest, | 4094 TEST_F(P2PTransportChannelMostLikelyToWorkFirstTest, |
4076 TestRelayRelayFirstWhenNothingPingedYet) { | 4095 TestRelayRelayFirstWhenNothingPingedYet) { |
4077 const int max_strong_interval = 100; | 4096 const int max_strong_interval = 100; |
4078 P2PTransportChannel& ch = StartTransportChannel(true, max_strong_interval); | 4097 P2PTransportChannel& ch = StartTransportChannel(true, max_strong_interval); |
4079 EXPECT_TRUE_WAIT(ch.ports().size() == 2, 5000); | 4098 EXPECT_TRUE_WAIT(ch.ports().size() == 2, kDefaultTimeout); |
4080 EXPECT_EQ(ch.ports()[0]->Type(), LOCAL_PORT_TYPE); | 4099 EXPECT_EQ(ch.ports()[0]->Type(), LOCAL_PORT_TYPE); |
4081 EXPECT_EQ(ch.ports()[1]->Type(), RELAY_PORT_TYPE); | 4100 EXPECT_EQ(ch.ports()[1]->Type(), RELAY_PORT_TYPE); |
4082 | 4101 |
4083 ch.AddRemoteCandidate(CreateUdpCandidate(RELAY_PORT_TYPE, "1.1.1.1", 1, 1)); | 4102 ch.AddRemoteCandidate(CreateUdpCandidate(RELAY_PORT_TYPE, "1.1.1.1", 1, 1)); |
4084 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 2)); | 4103 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 2)); |
4085 | 4104 |
4086 EXPECT_TRUE_WAIT(ch.connections().size() == 4, 5000); | 4105 EXPECT_TRUE_WAIT(ch.connections().size() == 4, kDefaultTimeout); |
4087 | 4106 |
4088 // Relay/Relay should be the first pingable connection. | 4107 // Relay/Relay should be the first pingable connection. |
4089 Connection* conn = FindNextPingableConnectionAndPingIt(&ch); | 4108 Connection* conn = FindNextPingableConnectionAndPingIt(&ch); |
4090 EXPECT_EQ(conn->local_candidate().type(), RELAY_PORT_TYPE); | 4109 EXPECT_EQ(conn->local_candidate().type(), RELAY_PORT_TYPE); |
4091 EXPECT_EQ(conn->remote_candidate().type(), RELAY_PORT_TYPE); | 4110 EXPECT_EQ(conn->remote_candidate().type(), RELAY_PORT_TYPE); |
4092 | 4111 |
4093 // Unless that we have a trigger check waiting to be pinged. | 4112 // Unless that we have a trigger check waiting to be pinged. |
4094 Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); | 4113 Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); |
4095 EXPECT_EQ(conn2->local_candidate().type(), LOCAL_PORT_TYPE); | 4114 EXPECT_EQ(conn2->local_candidate().type(), LOCAL_PORT_TYPE); |
4096 EXPECT_EQ(conn2->remote_candidate().type(), LOCAL_PORT_TYPE); | 4115 EXPECT_EQ(conn2->remote_candidate().type(), LOCAL_PORT_TYPE); |
(...skipping 13 matching lines...) Expand all Loading... |
4110 TODO(honghaiz): Re-enable this once we use fake clock for this test to fix | 4129 TODO(honghaiz): Re-enable this once we use fake clock for this test to fix |
4111 the flakiness. The following test becomes flaky because we now ping the | 4130 the flakiness. The following test becomes flaky because we now ping the |
4112 connections with fast rates until every connection is pinged at least three | 4131 connections with fast rates until every connection is pinged at least three |
4113 times. The selected connection may have been pinged before | 4132 times. The selected connection may have been pinged before |
4114 |max_strong_interval|, so it may not be the next connection to be pinged as | 4133 |max_strong_interval|, so it may not be the next connection to be pinged as |
4115 expected in the test. | 4134 expected in the test. |
4116 | 4135 |
4117 // Verify that conn3 will be the "selected connection" since it is readable | 4136 // Verify that conn3 will be the "selected connection" since it is readable |
4118 // and writable. After |MAX_CURRENT_STRONG_INTERVAL|, it should be the next | 4137 // and writable. After |MAX_CURRENT_STRONG_INTERVAL|, it should be the next |
4119 // pingable connection. | 4138 // pingable connection. |
4120 EXPECT_TRUE_WAIT(conn3 == ch.selected_connection(), 5000); | 4139 EXPECT_TRUE_WAIT(conn3 == ch.selected_connection(), kDefaultTimeout); |
4121 WAIT(false, max_strong_interval + 100); | 4140 WAIT(false, max_strong_interval + 100); |
4122 conn3->ReceivedPingResponse(LOW_RTT, "id"); | 4141 conn3->ReceivedPingResponse(LOW_RTT, "id"); |
4123 ASSERT_TRUE(conn3->writable()); | 4142 ASSERT_TRUE(conn3->writable()); |
4124 EXPECT_EQ(conn3, FindNextPingableConnectionAndPingIt(&ch)); | 4143 EXPECT_EQ(conn3, FindNextPingableConnectionAndPingIt(&ch)); |
4125 | 4144 |
4126 */ | 4145 */ |
4127 } | 4146 } |
4128 | 4147 |
4129 // Test that Relay/Relay connections will be pinged first when everything has | 4148 // Test that Relay/Relay connections will be pinged first when everything has |
4130 // been pinged even if the Relay/Relay connection wasn't the first to be pinged | 4149 // been pinged even if the Relay/Relay connection wasn't the first to be pinged |
4131 // in the first round. | 4150 // in the first round. |
4132 TEST_F(P2PTransportChannelMostLikelyToWorkFirstTest, | 4151 TEST_F(P2PTransportChannelMostLikelyToWorkFirstTest, |
4133 TestRelayRelayFirstWhenEverythingPinged) { | 4152 TestRelayRelayFirstWhenEverythingPinged) { |
4134 P2PTransportChannel& ch = StartTransportChannel(true, 100); | 4153 P2PTransportChannel& ch = StartTransportChannel(true, 100); |
4135 EXPECT_TRUE_WAIT(ch.ports().size() == 2, 5000); | 4154 EXPECT_TRUE_WAIT(ch.ports().size() == 2, kDefaultTimeout); |
4136 EXPECT_EQ(ch.ports()[0]->Type(), LOCAL_PORT_TYPE); | 4155 EXPECT_EQ(ch.ports()[0]->Type(), LOCAL_PORT_TYPE); |
4137 EXPECT_EQ(ch.ports()[1]->Type(), RELAY_PORT_TYPE); | 4156 EXPECT_EQ(ch.ports()[1]->Type(), RELAY_PORT_TYPE); |
4138 | 4157 |
4139 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1)); | 4158 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1)); |
4140 EXPECT_TRUE_WAIT(ch.connections().size() == 2, 5000); | 4159 EXPECT_TRUE_WAIT(ch.connections().size() == 2, kDefaultTimeout); |
4141 | 4160 |
4142 // Initially, only have Local/Local and Local/Relay. | 4161 // Initially, only have Local/Local and Local/Relay. |
4143 VerifyNextPingableConnection(LOCAL_PORT_TYPE, LOCAL_PORT_TYPE); | 4162 VerifyNextPingableConnection(LOCAL_PORT_TYPE, LOCAL_PORT_TYPE); |
4144 VerifyNextPingableConnection(RELAY_PORT_TYPE, LOCAL_PORT_TYPE); | 4163 VerifyNextPingableConnection(RELAY_PORT_TYPE, LOCAL_PORT_TYPE); |
4145 | 4164 |
4146 // Remote Relay candidate arrives. | 4165 // Remote Relay candidate arrives. |
4147 ch.AddRemoteCandidate(CreateUdpCandidate(RELAY_PORT_TYPE, "2.2.2.2", 2, 2)); | 4166 ch.AddRemoteCandidate(CreateUdpCandidate(RELAY_PORT_TYPE, "2.2.2.2", 2, 2)); |
4148 EXPECT_TRUE_WAIT(ch.connections().size() == 4, 5000); | 4167 EXPECT_TRUE_WAIT(ch.connections().size() == 4, kDefaultTimeout); |
4149 | 4168 |
4150 // Relay/Relay should be the first since it hasn't been pinged before. | 4169 // Relay/Relay should be the first since it hasn't been pinged before. |
4151 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE); | 4170 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE); |
4152 | 4171 |
4153 // Local/Relay is the final one. | 4172 // Local/Relay is the final one. |
4154 VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE); | 4173 VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE); |
4155 | 4174 |
4156 // Now, every connection has been pinged once. The next one should be | 4175 // Now, every connection has been pinged once. The next one should be |
4157 // Relay/Relay. | 4176 // Relay/Relay. |
4158 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE); | 4177 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE); |
4159 } | 4178 } |
4160 | 4179 |
4161 // Test that when we receive a new remote candidate, they will be tried first | 4180 // Test that when we receive a new remote candidate, they will be tried first |
4162 // before we re-ping Relay/Relay connections again. | 4181 // before we re-ping Relay/Relay connections again. |
4163 TEST_F(P2PTransportChannelMostLikelyToWorkFirstTest, | 4182 TEST_F(P2PTransportChannelMostLikelyToWorkFirstTest, |
4164 TestNoStarvationOnNonRelayConnection) { | 4183 TestNoStarvationOnNonRelayConnection) { |
4165 P2PTransportChannel& ch = StartTransportChannel(true, 100); | 4184 P2PTransportChannel& ch = StartTransportChannel(true, 100); |
4166 EXPECT_TRUE_WAIT(ch.ports().size() == 2, 5000); | 4185 EXPECT_TRUE_WAIT(ch.ports().size() == 2, kDefaultTimeout); |
4167 EXPECT_EQ(ch.ports()[0]->Type(), LOCAL_PORT_TYPE); | 4186 EXPECT_EQ(ch.ports()[0]->Type(), LOCAL_PORT_TYPE); |
4168 EXPECT_EQ(ch.ports()[1]->Type(), RELAY_PORT_TYPE); | 4187 EXPECT_EQ(ch.ports()[1]->Type(), RELAY_PORT_TYPE); |
4169 | 4188 |
4170 ch.AddRemoteCandidate(CreateUdpCandidate(RELAY_PORT_TYPE, "1.1.1.1", 1, 1)); | 4189 ch.AddRemoteCandidate(CreateUdpCandidate(RELAY_PORT_TYPE, "1.1.1.1", 1, 1)); |
4171 EXPECT_TRUE_WAIT(ch.connections().size() == 2, 5000); | 4190 EXPECT_TRUE_WAIT(ch.connections().size() == 2, kDefaultTimeout); |
4172 | 4191 |
4173 // Initially, only have Relay/Relay and Local/Relay. Ping Relay/Relay first. | 4192 // Initially, only have Relay/Relay and Local/Relay. Ping Relay/Relay first. |
4174 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE); | 4193 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE); |
4175 | 4194 |
4176 // Next, ping Local/Relay. | 4195 // Next, ping Local/Relay. |
4177 VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE); | 4196 VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE); |
4178 | 4197 |
4179 // Remote Local candidate arrives. | 4198 // Remote Local candidate arrives. |
4180 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 2)); | 4199 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 2)); |
4181 EXPECT_TRUE_WAIT(ch.connections().size() == 4, 5000); | 4200 EXPECT_TRUE_WAIT(ch.connections().size() == 4, kDefaultTimeout); |
4182 | 4201 |
4183 // Local/Local should be the first since it hasn't been pinged before. | 4202 // Local/Local should be the first since it hasn't been pinged before. |
4184 VerifyNextPingableConnection(LOCAL_PORT_TYPE, LOCAL_PORT_TYPE); | 4203 VerifyNextPingableConnection(LOCAL_PORT_TYPE, LOCAL_PORT_TYPE); |
4185 | 4204 |
4186 // Relay/Local is the final one. | 4205 // Relay/Local is the final one. |
4187 VerifyNextPingableConnection(RELAY_PORT_TYPE, LOCAL_PORT_TYPE); | 4206 VerifyNextPingableConnection(RELAY_PORT_TYPE, LOCAL_PORT_TYPE); |
4188 | 4207 |
4189 // Now, every connection has been pinged once. The next one should be | 4208 // Now, every connection has been pinged once. The next one should be |
4190 // Relay/Relay. | 4209 // Relay/Relay. |
4191 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE); | 4210 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE); |
4192 } | 4211 } |
4193 | 4212 |
4194 // Test the ping sequence is UDP Relay/Relay followed by TCP Relay/Relay, | 4213 // Test the ping sequence is UDP Relay/Relay followed by TCP Relay/Relay, |
4195 // followed by the rest. | 4214 // followed by the rest. |
4196 TEST_F(P2PTransportChannelMostLikelyToWorkFirstTest, TestTcpTurn) { | 4215 TEST_F(P2PTransportChannelMostLikelyToWorkFirstTest, TestTcpTurn) { |
4197 // Add a Tcp Turn server. | 4216 // Add a Tcp Turn server. |
4198 turn_server()->AddInternalSocket(kTurnTcpIntAddr, PROTO_TCP); | 4217 turn_server()->AddInternalSocket(kTurnTcpIntAddr, PROTO_TCP); |
4199 RelayServerConfig config(RELAY_TURN); | 4218 RelayServerConfig config(RELAY_TURN); |
4200 config.credentials = kRelayCredentials; | 4219 config.credentials = kRelayCredentials; |
4201 config.ports.push_back(ProtocolAddress(kTurnTcpIntAddr, PROTO_TCP, false)); | 4220 config.ports.push_back(ProtocolAddress(kTurnTcpIntAddr, PROTO_TCP, false)); |
4202 allocator()->AddTurnServer(config); | 4221 allocator()->AddTurnServer(config); |
4203 | 4222 |
4204 P2PTransportChannel& ch = StartTransportChannel(true, 100); | 4223 P2PTransportChannel& ch = StartTransportChannel(true, 100); |
4205 EXPECT_TRUE_WAIT(ch.ports().size() == 3, 5000); | 4224 EXPECT_TRUE_WAIT(ch.ports().size() == 3, kDefaultTimeout); |
4206 EXPECT_EQ(ch.ports()[0]->Type(), LOCAL_PORT_TYPE); | 4225 EXPECT_EQ(ch.ports()[0]->Type(), LOCAL_PORT_TYPE); |
4207 EXPECT_EQ(ch.ports()[1]->Type(), RELAY_PORT_TYPE); | 4226 EXPECT_EQ(ch.ports()[1]->Type(), RELAY_PORT_TYPE); |
4208 EXPECT_EQ(ch.ports()[2]->Type(), RELAY_PORT_TYPE); | 4227 EXPECT_EQ(ch.ports()[2]->Type(), RELAY_PORT_TYPE); |
4209 | 4228 |
4210 // Remote Relay candidate arrives. | 4229 // Remote Relay candidate arrives. |
4211 ch.AddRemoteCandidate(CreateUdpCandidate(RELAY_PORT_TYPE, "1.1.1.1", 1, 1)); | 4230 ch.AddRemoteCandidate(CreateUdpCandidate(RELAY_PORT_TYPE, "1.1.1.1", 1, 1)); |
4212 EXPECT_TRUE_WAIT(ch.connections().size() == 3, 5000); | 4231 EXPECT_TRUE_WAIT(ch.connections().size() == 3, kDefaultTimeout); |
4213 | 4232 |
4214 // UDP Relay/Relay should be pinged first. | 4233 // UDP Relay/Relay should be pinged first. |
4215 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE); | 4234 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE); |
4216 | 4235 |
4217 // TCP Relay/Relay is the next. | 4236 // TCP Relay/Relay is the next. |
4218 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE, | 4237 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE, |
4219 TCP_PROTOCOL_NAME); | 4238 TCP_PROTOCOL_NAME); |
4220 | 4239 |
4221 // Finally, Local/Relay will be pinged. | 4240 // Finally, Local/Relay will be pinged. |
4222 VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE); | 4241 VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE); |
4223 } | 4242 } |
4224 | 4243 |
4225 } // namespace cricket { | 4244 } // namespace cricket { |
OLD | NEW |