Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Side by Side Diff: webrtc/p2p/base/p2ptransportchannel_unittest.cc

Issue 2069493002: Do not switch best connection on the controlled side too frequently (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Updates a comment Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 511 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 connect_time = rtc::TimeMillis() - connect_start; 522 connect_time = rtc::TimeMillis() - connect_start;
523 if (connect_time < expected.connect_wait) { 523 if (connect_time < expected.connect_wait) {
524 LOG(LS_INFO) << "Connect time: " << connect_time << " ms"; 524 LOG(LS_INFO) << "Connect time: " << connect_time << " ms";
525 } else { 525 } else {
526 LOG(LS_INFO) << "Connect time: " << "TIMEOUT (" 526 LOG(LS_INFO) << "Connect time: " << "TIMEOUT ("
527 << expected.connect_wait << " ms)"; 527 << expected.connect_wait << " ms)";
528 } 528 }
529 529
530 // Allow a few turns of the crank for the best connections to emerge. 530 // Allow a few turns of the crank for the best connections to emerge.
531 // This may take up to 2 seconds. 531 // This may take up to 2 seconds.
532 if (ep1_ch1()->best_connection() && 532 if (ep1_ch1()->selected_connection() && ep2_ch1()->selected_connection()) {
533 ep2_ch1()->best_connection()) {
534 int64_t converge_start = rtc::TimeMillis(); 533 int64_t converge_start = rtc::TimeMillis();
535 int64_t converge_time; 534 int64_t converge_time;
536 int64_t converge_wait = 2000; 535 int64_t converge_wait = 2000;
537 // Verifying local and remote channel best connection information. This is 536 // Verifying local and remote channel best connection information. This is
538 // done only for the RFC 5245 as controlled agent will use USE-CANDIDATE 537 // done only for the RFC 5245 as controlled agent will use USE-CANDIDATE
539 // from controlling (ep1) agent. We can easily predict from EP1 result 538 // from controlling (ep1) agent. We can easily predict from EP1 result
540 // matrix. 539 // matrix.
541 EXPECT_TRUE_WAIT_MARGIN( 540 EXPECT_TRUE_WAIT_MARGIN(
542 CheckCandidate1(expected) && CheckCandidate2(expected), converge_wait, 541 CheckCandidate1(expected) && CheckCandidate2(expected), converge_wait,
543 converge_wait); 542 converge_wait);
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 // has higher tiebreaker value, channel1 should receive SignalRoleConflict. 632 // has higher tiebreaker value, channel1 should receive SignalRoleConflict.
634 EXPECT_TRUE_WAIT(GetRoleConflict(0), 1000); 633 EXPECT_TRUE_WAIT(GetRoleConflict(0), 1000);
635 EXPECT_FALSE(GetRoleConflict(1)); 634 EXPECT_FALSE(GetRoleConflict(1));
636 635
637 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && 636 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() &&
638 ep1_ch1()->writable() && 637 ep1_ch1()->writable() &&
639 ep2_ch1()->receiving() && 638 ep2_ch1()->receiving() &&
640 ep2_ch1()->writable(), 639 ep2_ch1()->writable(),
641 1000); 640 1000);
642 641
643 EXPECT_TRUE(ep1_ch1()->best_connection() && 642 EXPECT_TRUE(ep1_ch1()->selected_connection() &&
644 ep2_ch1()->best_connection()); 643 ep2_ch1()->selected_connection());
645 644
646 TestSendRecv(1); 645 TestSendRecv(1);
647 } 646 }
648 647
649 // We pass the candidates directly to the other side. 648 // We pass the candidates directly to the other side.
650 void OnCandidateGathered(cricket::TransportChannelImpl* ch, 649 void OnCandidateGathered(cricket::TransportChannelImpl* ch,
651 const cricket::Candidate& c) { 650 const cricket::Candidate& c) {
652 if (force_relay_ && c.type() != cricket::RELAY_PORT_TYPE) 651 if (force_relay_ && c.type() != cricket::RELAY_PORT_TYPE)
653 return; 652 return;
654 653
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
745 const char* data, size_t len) { 744 const char* data, size_t len) {
746 rtc::PacketOptions options; 745 rtc::PacketOptions options;
747 return channel->SendPacket(data, len, options, 0); 746 return channel->SendPacket(data, len, options, 0);
748 } 747 }
749 bool CheckDataOnChannel(cricket::TransportChannel* channel, 748 bool CheckDataOnChannel(cricket::TransportChannel* channel,
750 const char* data, int len) { 749 const char* data, int len) {
751 return GetChannelData(channel)->CheckData(data, len); 750 return GetChannelData(channel)->CheckData(data, len);
752 } 751 }
753 static const cricket::Candidate* LocalCandidate( 752 static const cricket::Candidate* LocalCandidate(
754 cricket::P2PTransportChannel* ch) { 753 cricket::P2PTransportChannel* ch) {
755 return (ch && ch->best_connection()) ? 754 return (ch && ch->selected_connection())
756 &ch->best_connection()->local_candidate() : NULL; 755 ? &ch->selected_connection()->local_candidate()
756 : NULL;
757 } 757 }
758 static const cricket::Candidate* RemoteCandidate( 758 static const cricket::Candidate* RemoteCandidate(
759 cricket::P2PTransportChannel* ch) { 759 cricket::P2PTransportChannel* ch) {
760 return (ch && ch->best_connection()) ? 760 return (ch && ch->selected_connection())
761 &ch->best_connection()->remote_candidate() : NULL; 761 ? &ch->selected_connection()->remote_candidate()
762 : NULL;
762 } 763 }
763 Endpoint* GetEndpoint(cricket::TransportChannel* ch) { 764 Endpoint* GetEndpoint(cricket::TransportChannel* ch) {
764 if (ep1_.HasChannel(ch)) { 765 if (ep1_.HasChannel(ch)) {
765 return &ep1_; 766 return &ep1_;
766 } else if (ep2_.HasChannel(ch)) { 767 } else if (ep2_.HasChannel(ch)) {
767 return &ep2_; 768 return &ep2_;
768 } else { 769 } else {
769 return NULL; 770 return NULL;
770 } 771 }
771 } 772 }
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
1107 // Emulate no remote credentials coming in. 1108 // Emulate no remote credentials coming in.
1108 set_clear_remote_candidates_ufrag_pwd(false); 1109 set_clear_remote_candidates_ufrag_pwd(false);
1109 CreateChannels(1); 1110 CreateChannels(1);
1110 // Only have remote credentials come in for ep2, not ep1. 1111 // Only have remote credentials come in for ep2, not ep1.
1111 ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[0], kIcePwd[0]); 1112 ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[0], kIcePwd[0]);
1112 1113
1113 // Pause sending ep2's candidates to ep1 until ep1 receives the peer reflexive 1114 // Pause sending ep2's candidates to ep1 until ep1 receives the peer reflexive
1114 // candidate. 1115 // candidate.
1115 PauseCandidates(1); 1116 PauseCandidates(1);
1116 1117
1117 // The caller should have the best connection connected to the peer reflexive 1118 // The caller should have the best connection connected to the peer reflexive
Taylor Brandstetter 2016/06/21 18:33:26 s/best connection/selected connnection/g
honghaiz3 2016/06/22 08:03:16 Done.
1118 // candidate. 1119 // candidate.
1119 const cricket::Connection* best_connection = NULL; 1120 const cricket::Connection* selected_connection = NULL;
1120 WAIT((best_connection = ep1_ch1()->best_connection()) != NULL, 2000); 1121 WAIT((selected_connection = ep1_ch1()->selected_connection()) != NULL, 2000);
1121 EXPECT_EQ("prflx", ep1_ch1()->best_connection()->remote_candidate().type()); 1122 EXPECT_EQ("prflx",
1123 ep1_ch1()->selected_connection()->remote_candidate().type());
1122 1124
1123 // Because we don't have a remote pwd, we don't ping yet. 1125 // Because we don't have a remote pwd, we don't ping yet.
1124 EXPECT_EQ(kIceUfrag[1], 1126 EXPECT_EQ(kIceUfrag[1],
1125 ep1_ch1()->best_connection()->remote_candidate().username()); 1127 ep1_ch1()->selected_connection()->remote_candidate().username());
1126 EXPECT_EQ("", ep1_ch1()->best_connection()->remote_candidate().password()); 1128 EXPECT_EQ("",
1129 ep1_ch1()->selected_connection()->remote_candidate().password());
1127 // Because we don't have ICE credentials yet, we don't know the generation. 1130 // Because we don't have ICE credentials yet, we don't know the generation.
1128 EXPECT_EQ(0u, ep1_ch1()->best_connection()->remote_candidate().generation()); 1131 EXPECT_EQ(0u,
1132 ep1_ch1()->selected_connection()->remote_candidate().generation());
1129 EXPECT_TRUE(nullptr == ep1_ch1()->FindNextPingableConnection()); 1133 EXPECT_TRUE(nullptr == ep1_ch1()->FindNextPingableConnection());
1130 1134
1131 // Add two sets of remote ICE credentials, so that the ones used by the 1135 // Add two sets of remote ICE credentials, so that the ones used by the
1132 // candidate will be generation 1 instead of 0. 1136 // candidate will be generation 1 instead of 0.
1133 ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); 1137 ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]);
1134 ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]); 1138 ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]);
1135 // After setting the remote ICE credentials, the password and generation 1139 // After setting the remote ICE credentials, the password and generation
1136 // of the peer reflexive candidate should be updated. 1140 // of the peer reflexive candidate should be updated.
1137 EXPECT_EQ(kIcePwd[1], 1141 EXPECT_EQ(kIcePwd[1],
1138 ep1_ch1()->best_connection()->remote_candidate().password()); 1142 ep1_ch1()->selected_connection()->remote_candidate().password());
1139 EXPECT_EQ(1u, ep1_ch1()->best_connection()->remote_candidate().generation()); 1143 EXPECT_EQ(1u,
1144 ep1_ch1()->selected_connection()->remote_candidate().generation());
1140 EXPECT_TRUE(nullptr != ep1_ch1()->FindNextPingableConnection()); 1145 EXPECT_TRUE(nullptr != ep1_ch1()->FindNextPingableConnection());
1141 1146
1142 ResumeCandidates(1); 1147 ResumeCandidates(1);
1143 1148
1144 WAIT(ep2_ch1()->best_connection() != NULL, 2000); 1149 WAIT(ep2_ch1()->selected_connection() != NULL, 2000);
1145 // Verify ep1's best connection is updated to use the 'local' candidate. 1150 // Verify ep1's best connection is updated to use the 'local' candidate.
1146 EXPECT_EQ_WAIT( 1151 EXPECT_EQ_WAIT("local",
1147 "local", 1152 ep1_ch1()->selected_connection()->remote_candidate().type(),
1148 ep1_ch1()->best_connection()->remote_candidate().type(), 1153 2000);
1149 2000); 1154 EXPECT_EQ(selected_connection, ep1_ch1()->selected_connection());
1150 EXPECT_EQ(best_connection, ep1_ch1()->best_connection());
1151 DestroyChannels(); 1155 DestroyChannels();
1152 } 1156 }
1153 1157
1154 // Test that we properly create a connection on a STUN ping from unknown address 1158 // Test that we properly create a connection on a STUN ping from unknown address
1155 // when the signaling is slow and the end points are behind NAT. 1159 // when the signaling is slow and the end points are behind NAT.
1156 TEST_F(P2PTransportChannelTest, PeerReflexiveCandidateBeforeSignalingWithNAT) { 1160 TEST_F(P2PTransportChannelTest, PeerReflexiveCandidateBeforeSignalingWithNAT) {
1157 ConfigureEndpoints(OPEN, NAT_SYMMETRIC, kDefaultPortAllocatorFlags, 1161 ConfigureEndpoints(OPEN, NAT_SYMMETRIC, kDefaultPortAllocatorFlags,
1158 kDefaultPortAllocatorFlags); 1162 kDefaultPortAllocatorFlags);
1159 // Emulate no remote credentials coming in. 1163 // Emulate no remote credentials coming in.
1160 set_clear_remote_candidates_ufrag_pwd(false); 1164 set_clear_remote_candidates_ufrag_pwd(false);
1161 CreateChannels(1); 1165 CreateChannels(1);
1162 // Only have remote credentials come in for ep2, not ep1. 1166 // Only have remote credentials come in for ep2, not ep1.
1163 ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[0], kIcePwd[0]); 1167 ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[0], kIcePwd[0]);
1164 // Pause sending ep2's candidates to ep1 until ep1 receives the peer reflexive 1168 // Pause sending ep2's candidates to ep1 until ep1 receives the peer reflexive
1165 // candidate. 1169 // candidate.
1166 PauseCandidates(1); 1170 PauseCandidates(1);
1167 1171
1168 // The caller should have the best connection connected to the peer reflexive 1172 // The caller should have the best connection connected to the peer reflexive
1169 // candidate. 1173 // candidate.
1170 WAIT(ep1_ch1()->best_connection() != NULL, 2000); 1174 WAIT(ep1_ch1()->selected_connection() != NULL, 2000);
1171 EXPECT_EQ("prflx", ep1_ch1()->best_connection()->remote_candidate().type()); 1175 EXPECT_EQ("prflx",
1176 ep1_ch1()->selected_connection()->remote_candidate().type());
1172 1177
1173 // Because we don't have a remote pwd, we don't ping yet. 1178 // Because we don't have a remote pwd, we don't ping yet.
1174 EXPECT_EQ(kIceUfrag[1], 1179 EXPECT_EQ(kIceUfrag[1],
1175 ep1_ch1()->best_connection()->remote_candidate().username()); 1180 ep1_ch1()->selected_connection()->remote_candidate().username());
1176 EXPECT_EQ("", ep1_ch1()->best_connection()->remote_candidate().password()); 1181 EXPECT_EQ("",
1182 ep1_ch1()->selected_connection()->remote_candidate().password());
1177 // Because we don't have ICE credentials yet, we don't know the generation. 1183 // Because we don't have ICE credentials yet, we don't know the generation.
1178 EXPECT_EQ(0u, ep1_ch1()->best_connection()->remote_candidate().generation()); 1184 EXPECT_EQ(0u,
1185 ep1_ch1()->selected_connection()->remote_candidate().generation());
1179 EXPECT_TRUE(nullptr == ep1_ch1()->FindNextPingableConnection()); 1186 EXPECT_TRUE(nullptr == ep1_ch1()->FindNextPingableConnection());
1180 1187
1181 // Add two sets of remote ICE credentials, so that the ones used by the 1188 // Add two sets of remote ICE credentials, so that the ones used by the
1182 // candidate will be generation 1 instead of 0. 1189 // candidate will be generation 1 instead of 0.
1183 ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); 1190 ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]);
1184 ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]); 1191 ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]);
1185 // After setting the remote ICE credentials, the password and generation 1192 // After setting the remote ICE credentials, the password and generation
1186 // of the peer reflexive candidate should be updated. 1193 // of the peer reflexive candidate should be updated.
1187 EXPECT_EQ(kIcePwd[1], 1194 EXPECT_EQ(kIcePwd[1],
1188 ep1_ch1()->best_connection()->remote_candidate().password()); 1195 ep1_ch1()->selected_connection()->remote_candidate().password());
1189 EXPECT_EQ(1u, ep1_ch1()->best_connection()->remote_candidate().generation()); 1196 EXPECT_EQ(1u,
1197 ep1_ch1()->selected_connection()->remote_candidate().generation());
1190 1198
1191 ResumeCandidates(1); 1199 ResumeCandidates(1);
1192 1200
1193 const cricket::Connection* best_connection = NULL; 1201 const cricket::Connection* selected_connection = NULL;
1194 WAIT((best_connection = ep2_ch1()->best_connection()) != NULL, 2000); 1202 WAIT((selected_connection = ep2_ch1()->selected_connection()) != NULL, 2000);
1195 1203
1196 // Wait to verify the connection is not culled. 1204 // Wait to verify the connection is not culled.
1197 WAIT(ep1_ch1()->writable(), 2000); 1205 WAIT(ep1_ch1()->writable(), 2000);
1198 EXPECT_EQ(ep2_ch1()->best_connection(), best_connection); 1206 EXPECT_EQ(ep2_ch1()->selected_connection(), selected_connection);
1199 EXPECT_EQ("prflx", ep1_ch1()->best_connection()->remote_candidate().type()); 1207 EXPECT_EQ("prflx",
1208 ep1_ch1()->selected_connection()->remote_candidate().type());
1200 DestroyChannels(); 1209 DestroyChannels();
1201 } 1210 }
1202 1211
1203 // Test that if remote candidates don't have ufrag and pwd, we still work. 1212 // Test that if remote candidates don't have ufrag and pwd, we still work.
1204 TEST_F(P2PTransportChannelTest, RemoteCandidatesWithoutUfragPwd) { 1213 TEST_F(P2PTransportChannelTest, RemoteCandidatesWithoutUfragPwd) {
1205 set_clear_remote_candidates_ufrag_pwd(true); 1214 set_clear_remote_candidates_ufrag_pwd(true);
1206 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, 1215 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags,
1207 kDefaultPortAllocatorFlags); 1216 kDefaultPortAllocatorFlags);
1208 CreateChannels(1); 1217 CreateChannels(1);
1209 const cricket::Connection* best_connection = NULL; 1218 const cricket::Connection* selected_connection = NULL;
1210 // Wait until the callee's connections are created. 1219 // Wait until the callee's connections are created.
1211 WAIT((best_connection = ep2_ch1()->best_connection()) != NULL, 1000); 1220 WAIT((selected_connection = ep2_ch1()->selected_connection()) != NULL, 1000);
1212 // Wait to see if they get culled; they shouldn't. 1221 // Wait to see if they get culled; they shouldn't.
1213 WAIT(ep2_ch1()->best_connection() != best_connection, 1000); 1222 WAIT(ep2_ch1()->selected_connection() != selected_connection, 1000);
1214 EXPECT_TRUE(ep2_ch1()->best_connection() == best_connection); 1223 EXPECT_TRUE(ep2_ch1()->selected_connection() == selected_connection);
1215 DestroyChannels(); 1224 DestroyChannels();
1216 } 1225 }
1217 1226
1218 // Test that a host behind NAT cannot be reached when incoming_only 1227 // Test that a host behind NAT cannot be reached when incoming_only
1219 // is set to true. 1228 // is set to true.
1220 TEST_F(P2PTransportChannelTest, IncomingOnlyBlocked) { 1229 TEST_F(P2PTransportChannelTest, IncomingOnlyBlocked) {
1221 ConfigureEndpoints(NAT_FULL_CONE, OPEN, kDefaultPortAllocatorFlags, 1230 ConfigureEndpoints(NAT_FULL_CONE, OPEN, kDefaultPortAllocatorFlags,
1222 kDefaultPortAllocatorFlags); 1231 kDefaultPortAllocatorFlags);
1223 1232
1224 SetAllocatorFlags(0, kOnlyLocalPorts); 1233 SetAllocatorFlags(0, kOnlyLocalPorts);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1280 VerifySavedTcpCandidates(0, cricket::TCPTYPE_PASSIVE_STR); 1289 VerifySavedTcpCandidates(0, cricket::TCPTYPE_PASSIVE_STR);
1281 VerifySavedTcpCandidates(1, cricket::TCPTYPE_ACTIVE_STR); 1290 VerifySavedTcpCandidates(1, cricket::TCPTYPE_ACTIVE_STR);
1282 1291
1283 // Resume candidates. 1292 // Resume candidates.
1284 ResumeCandidates(0); 1293 ResumeCandidates(0);
1285 ResumeCandidates(1); 1294 ResumeCandidates(1);
1286 1295
1287 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && 1296 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
1288 ep2_ch1()->receiving() && ep2_ch1()->writable(), 1297 ep2_ch1()->receiving() && ep2_ch1()->writable(),
1289 1000); 1298 1000);
1290 EXPECT_TRUE( 1299 EXPECT_TRUE(ep1_ch1()->selected_connection() &&
1291 ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && 1300 ep2_ch1()->selected_connection() &&
1292 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && 1301 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) &&
1293 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); 1302 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1]));
1294 1303
1295 TestSendRecv(1); 1304 TestSendRecv(1);
1296 DestroyChannels(); 1305 DestroyChannels();
1297 } 1306 }
1298 1307
1299 TEST_F(P2PTransportChannelTest, TestIceRoleConflict) { 1308 TEST_F(P2PTransportChannelTest, TestIceRoleConflict) {
1300 AddAddress(0, kPublicAddrs[0]); 1309 AddAddress(0, kPublicAddrs[0]);
1301 AddAddress(1, kPublicAddrs[1]); 1310 AddAddress(1, kPublicAddrs[1]);
1302 TestSignalRoleConflict(); 1311 TestSignalRoleConflict();
1303 } 1312 }
(...skipping 29 matching lines...) Expand all
1333 // original value. 1342 // original value.
1334 EXPECT_EQ(kTiebreaker1, ports_before[i]->IceTiebreaker()); 1343 EXPECT_EQ(kTiebreaker1, ports_before[i]->IceTiebreaker());
1335 } 1344 }
1336 1345
1337 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && 1346 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() &&
1338 ep1_ch1()->writable() && 1347 ep1_ch1()->writable() &&
1339 ep2_ch1()->receiving() && 1348 ep2_ch1()->receiving() &&
1340 ep2_ch1()->writable(), 1349 ep2_ch1()->writable(),
1341 1000); 1350 1000);
1342 1351
1343 EXPECT_TRUE(ep1_ch1()->best_connection() && 1352 EXPECT_TRUE(ep1_ch1()->selected_connection() &&
1344 ep2_ch1()->best_connection()); 1353 ep2_ch1()->selected_connection());
1345 1354
1346 TestSendRecv(1); 1355 TestSendRecv(1);
1347 DestroyChannels(); 1356 DestroyChannels();
1348 } 1357 }
1349 1358
1350 // Verify that we can set DSCP value and retrieve properly from P2PTC. 1359 // Verify that we can set DSCP value and retrieve properly from P2PTC.
1351 TEST_F(P2PTransportChannelTest, TestDefaultDscpValue) { 1360 TEST_F(P2PTransportChannelTest, TestDefaultDscpValue) {
1352 AddAddress(0, kPublicAddrs[0]); 1361 AddAddress(0, kPublicAddrs[0]);
1353 AddAddress(1, kPublicAddrs[1]); 1362 AddAddress(1, kPublicAddrs[1]);
1354 1363
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1388 // Enable IPv6 1397 // Enable IPv6
1389 SetAllocatorFlags(0, cricket::PORTALLOCATOR_ENABLE_IPV6); 1398 SetAllocatorFlags(0, cricket::PORTALLOCATOR_ENABLE_IPV6);
1390 SetAllocatorFlags(1, cricket::PORTALLOCATOR_ENABLE_IPV6); 1399 SetAllocatorFlags(1, cricket::PORTALLOCATOR_ENABLE_IPV6);
1391 1400
1392 CreateChannels(1); 1401 CreateChannels(1);
1393 1402
1394 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && 1403 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
1395 ep2_ch1()->receiving() && ep2_ch1()->writable(), 1404 ep2_ch1()->receiving() && ep2_ch1()->writable(),
1396 1000); 1405 1000);
1397 EXPECT_TRUE( 1406 EXPECT_TRUE(
1398 ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && 1407 ep1_ch1()->selected_connection() && ep2_ch1()->selected_connection() &&
1399 LocalCandidate(ep1_ch1())->address().EqualIPs(kIPv6PublicAddrs[0]) && 1408 LocalCandidate(ep1_ch1())->address().EqualIPs(kIPv6PublicAddrs[0]) &&
1400 RemoteCandidate(ep1_ch1())->address().EqualIPs(kIPv6PublicAddrs[1])); 1409 RemoteCandidate(ep1_ch1())->address().EqualIPs(kIPv6PublicAddrs[1]));
1401 1410
1402 TestSendRecv(1); 1411 TestSendRecv(1);
1403 DestroyChannels(); 1412 DestroyChannels();
1404 } 1413 }
1405 1414
1406 // Testing forceful TURN connections. 1415 // Testing forceful TURN connections.
1407 TEST_F(P2PTransportChannelTest, TestForceTurn) { 1416 TEST_F(P2PTransportChannelTest, TestForceTurn) {
1408 ConfigureEndpoints( 1417 ConfigureEndpoints(
1409 NAT_PORT_RESTRICTED, NAT_SYMMETRIC, 1418 NAT_PORT_RESTRICTED, NAT_SYMMETRIC,
1410 kDefaultPortAllocatorFlags | cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET, 1419 kDefaultPortAllocatorFlags | cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET,
1411 kDefaultPortAllocatorFlags | cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET); 1420 kDefaultPortAllocatorFlags | cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET);
1412 set_force_relay(true); 1421 set_force_relay(true);
1413 1422
1414 SetAllocationStepDelay(0, kMinimumStepDelay); 1423 SetAllocationStepDelay(0, kMinimumStepDelay);
1415 SetAllocationStepDelay(1, kMinimumStepDelay); 1424 SetAllocationStepDelay(1, kMinimumStepDelay);
1416 1425
1417 CreateChannels(1); 1426 CreateChannels(1);
1418 1427
1419 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && 1428 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
1420 ep2_ch1()->receiving() && ep2_ch1()->writable(), 1429 ep2_ch1()->receiving() && ep2_ch1()->writable(),
1421 2000); 1430 2000);
1422 1431
1423 EXPECT_TRUE(ep1_ch1()->best_connection() && 1432 EXPECT_TRUE(ep1_ch1()->selected_connection() &&
1424 ep2_ch1()->best_connection()); 1433 ep2_ch1()->selected_connection());
1425 1434
1426 EXPECT_EQ("relay", RemoteCandidate(ep1_ch1())->type()); 1435 EXPECT_EQ("relay", RemoteCandidate(ep1_ch1())->type());
1427 EXPECT_EQ("relay", LocalCandidate(ep1_ch1())->type()); 1436 EXPECT_EQ("relay", LocalCandidate(ep1_ch1())->type());
1428 EXPECT_EQ("relay", RemoteCandidate(ep2_ch1())->type()); 1437 EXPECT_EQ("relay", RemoteCandidate(ep2_ch1())->type());
1429 EXPECT_EQ("relay", LocalCandidate(ep2_ch1())->type()); 1438 EXPECT_EQ("relay", LocalCandidate(ep2_ch1())->type());
1430 1439
1431 TestSendRecv(1); 1440 TestSendRecv(1);
1432 DestroyChannels(); 1441 DestroyChannels();
1433 } 1442 }
1434 1443
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1490 ep1_ch1()->receiving() && ep1_ch1()->writable() && 1499 ep1_ch1()->receiving() && ep1_ch1()->writable() &&
1491 ep2_ch1()->receiving() && ep2_ch1()->writable(), 1500 ep2_ch1()->receiving() && ep2_ch1()->writable(),
1492 1000, 1000); 1501 1000, 1000);
1493 TestSendRecv(1); 1502 TestSendRecv(1);
1494 // Make sure the P2PTransportChannels are actually using ports from the 1503 // Make sure the P2PTransportChannels are actually using ports from the
1495 // pooled sessions. 1504 // pooled sessions.
1496 auto pooled_ports_1 = pooled_session_1->ReadyPorts(); 1505 auto pooled_ports_1 = pooled_session_1->ReadyPorts();
1497 auto pooled_ports_2 = pooled_session_2->ReadyPorts(); 1506 auto pooled_ports_2 = pooled_session_2->ReadyPorts();
1498 EXPECT_NE(pooled_ports_1.end(), 1507 EXPECT_NE(pooled_ports_1.end(),
1499 std::find(pooled_ports_1.begin(), pooled_ports_1.end(), 1508 std::find(pooled_ports_1.begin(), pooled_ports_1.end(),
1500 ep1_ch1()->best_connection()->port())); 1509 ep1_ch1()->selected_connection()->port()));
1501 EXPECT_NE(pooled_ports_2.end(), 1510 EXPECT_NE(pooled_ports_2.end(),
1502 std::find(pooled_ports_2.begin(), pooled_ports_2.end(), 1511 std::find(pooled_ports_2.begin(), pooled_ports_2.end(),
1503 ep2_ch1()->best_connection()->port())); 1512 ep2_ch1()->selected_connection()->port()));
1504 } 1513 }
1505 1514
1506 // Test that a connection succeeds when the P2PTransportChannel uses a pooled 1515 // Test that a connection succeeds when the P2PTransportChannel uses a pooled
1507 // PortAllocatorSession that already finished gathering candidates. 1516 // PortAllocatorSession that already finished gathering candidates.
1508 TEST_F(P2PTransportChannelTest, TestUsingPooledSessionAfterDoneGathering) { 1517 TEST_F(P2PTransportChannelTest, TestUsingPooledSessionAfterDoneGathering) {
1509 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, 1518 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags,
1510 kDefaultPortAllocatorFlags); 1519 kDefaultPortAllocatorFlags);
1511 // First create a pooled session for each endpoint. 1520 // First create a pooled session for each endpoint.
1512 auto& allocator_1 = GetEndpoint(0)->allocator_; 1521 auto& allocator_1 = GetEndpoint(0)->allocator_;
1513 auto& allocator_2 = GetEndpoint(1)->allocator_; 1522 auto& allocator_2 = GetEndpoint(1)->allocator_;
(...skipping 19 matching lines...) Expand all
1533 ep1_ch1()->receiving() && ep1_ch1()->writable() && 1542 ep1_ch1()->receiving() && ep1_ch1()->writable() &&
1534 ep2_ch1()->receiving() && ep2_ch1()->writable(), 1543 ep2_ch1()->receiving() && ep2_ch1()->writable(),
1535 1000, 1000); 1544 1000, 1000);
1536 TestSendRecv(1); 1545 TestSendRecv(1);
1537 // Make sure the P2PTransportChannels are actually using ports from the 1546 // Make sure the P2PTransportChannels are actually using ports from the
1538 // pooled sessions. 1547 // pooled sessions.
1539 auto pooled_ports_1 = pooled_session_1->ReadyPorts(); 1548 auto pooled_ports_1 = pooled_session_1->ReadyPorts();
1540 auto pooled_ports_2 = pooled_session_2->ReadyPorts(); 1549 auto pooled_ports_2 = pooled_session_2->ReadyPorts();
1541 EXPECT_NE(pooled_ports_1.end(), 1550 EXPECT_NE(pooled_ports_1.end(),
1542 std::find(pooled_ports_1.begin(), pooled_ports_1.end(), 1551 std::find(pooled_ports_1.begin(), pooled_ports_1.end(),
1543 ep1_ch1()->best_connection()->port())); 1552 ep1_ch1()->selected_connection()->port()));
1544 EXPECT_NE(pooled_ports_2.end(), 1553 EXPECT_NE(pooled_ports_2.end(),
1545 std::find(pooled_ports_2.begin(), pooled_ports_2.end(), 1554 std::find(pooled_ports_2.begin(), pooled_ports_2.end(),
1546 ep2_ch1()->best_connection()->port())); 1555 ep2_ch1()->selected_connection()->port()));
1547 } 1556 }
1548 1557
1549 // Test what happens when we have 2 users behind the same NAT. This can lead 1558 // Test what happens when we have 2 users behind the same NAT. This can lead
1550 // to interesting behavior because the STUN server will only give out the 1559 // to interesting behavior because the STUN server will only give out the
1551 // address of the outermost NAT. 1560 // address of the outermost NAT.
1552 class P2PTransportChannelSameNatTest : public P2PTransportChannelTestBase { 1561 class P2PTransportChannelSameNatTest : public P2PTransportChannelTestBase {
1553 protected: 1562 protected:
1554 void ConfigureEndpoints(Config nat_type, Config config1, Config config2) { 1563 void ConfigureEndpoints(Config nat_type, Config config1, Config config2) {
1555 ASSERT(nat_type >= NAT_FULL_CONE && nat_type <= NAT_SYMMETRIC); 1564 ASSERT(nat_type >= NAT_FULL_CONE && nat_type <= NAT_SYMMETRIC);
1556 rtc::NATSocketServer::Translator* outer_nat = 1565 rtc::NATSocketServer::Translator* outer_nat =
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1607 // Use only local ports for simplicity. 1616 // Use only local ports for simplicity.
1608 SetAllocatorFlags(0, kOnlyLocalPorts); 1617 SetAllocatorFlags(0, kOnlyLocalPorts);
1609 SetAllocatorFlags(1, kOnlyLocalPorts); 1618 SetAllocatorFlags(1, kOnlyLocalPorts);
1610 1619
1611 // Create channels and let them go writable, as usual. 1620 // Create channels and let them go writable, as usual.
1612 CreateChannels(1); 1621 CreateChannels(1);
1613 1622
1614 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && 1623 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
1615 ep2_ch1()->receiving() && ep2_ch1()->writable(), 1624 ep2_ch1()->receiving() && ep2_ch1()->writable(),
1616 1000, 1000); 1625 1000, 1000);
1617 EXPECT_TRUE( 1626 EXPECT_TRUE(ep1_ch1()->selected_connection() &&
1618 ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && 1627 ep2_ch1()->selected_connection() &&
1619 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && 1628 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) &&
1620 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); 1629 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1]));
1621 1630
1622 // Make the receiving timeout shorter for testing. 1631 // Make the receiving timeout shorter for testing.
1623 cricket::IceConfig config = CreateIceConfig(1000, false); 1632 cricket::IceConfig config = CreateIceConfig(1000, false);
1624 ep1_ch1()->SetIceConfig(config); 1633 ep1_ch1()->SetIceConfig(config);
1625 ep2_ch1()->SetIceConfig(config); 1634 ep2_ch1()->SetIceConfig(config);
1626 1635
1627 // Blackhole any traffic to or from the public addrs. 1636 // Blackhole any traffic to or from the public addrs.
1628 LOG(LS_INFO) << "Failing over..."; 1637 LOG(LS_INFO) << "Failing over...";
1629 fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[1]); 1638 fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[1]);
1630 // The best connections will switch, so keep references to them. 1639 // The best connections will switch, so keep references to them.
1631 const cricket::Connection* best_connection1 = ep1_ch1()->best_connection(); 1640 const cricket::Connection* selected_connection1 =
1632 const cricket::Connection* best_connection2 = ep2_ch1()->best_connection(); 1641 ep1_ch1()->selected_connection();
1642 const cricket::Connection* selected_connection2 =
1643 ep2_ch1()->selected_connection();
1633 // We should detect loss of receiving within 1 second or so. 1644 // We should detect loss of receiving within 1 second or so.
1634 EXPECT_TRUE_WAIT( 1645 EXPECT_TRUE_WAIT(
1635 !best_connection1->receiving() && !best_connection2->receiving(), 3000); 1646 !selected_connection1->receiving() && !selected_connection2->receiving(),
1647 3000);
1636 1648
1637 // We should switch over to use the alternate addr immediately on both sides 1649 // We should switch over to use the alternate addr immediately on both sides
1638 // when we are not receiving. 1650 // when we are not receiving.
1639 EXPECT_TRUE_WAIT( 1651 EXPECT_TRUE_WAIT(ep1_ch1()->selected_connection()->receiving() &&
1640 ep1_ch1()->best_connection()->receiving() && 1652 ep2_ch1()->selected_connection()->receiving(),
1641 ep2_ch1()->best_connection()->receiving(), 1000); 1653 1000);
1642 EXPECT_TRUE(LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0])); 1654 EXPECT_TRUE(LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]));
1643 EXPECT_TRUE( 1655 EXPECT_TRUE(
1644 RemoteCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[1])); 1656 RemoteCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[1]));
1645 EXPECT_TRUE( 1657 EXPECT_TRUE(
1646 LocalCandidate(ep2_ch1())->address().EqualIPs(kAlternateAddrs[1])); 1658 LocalCandidate(ep2_ch1())->address().EqualIPs(kAlternateAddrs[1]));
1647 1659
1648 DestroyChannels(); 1660 DestroyChannels();
1649 } 1661 }
1650 1662
1651 // Test that we can quickly switch links if an interface goes down. 1663 // Test that we can quickly switch links if an interface goes down.
1652 // The controlling side has two interfaces and one will die. 1664 // The controlling side has two interfaces and one will die.
1653 TEST_F(P2PTransportChannelMultihomedTest, TestFailoverControllingSide) { 1665 TEST_F(P2PTransportChannelMultihomedTest, TestFailoverControllingSide) {
1654 // Adding alternate address will make sure |kPublicAddrs| has the higher 1666 // Adding alternate address will make sure |kPublicAddrs| has the higher
1655 // priority than others. This is due to FakeNetwork::AddInterface method. 1667 // priority than others. This is due to FakeNetwork::AddInterface method.
1656 AddAddress(0, kAlternateAddrs[0]); 1668 AddAddress(0, kAlternateAddrs[0]);
1657 AddAddress(0, kPublicAddrs[0]); 1669 AddAddress(0, kPublicAddrs[0]);
1658 AddAddress(1, kPublicAddrs[1]); 1670 AddAddress(1, kPublicAddrs[1]);
1659 1671
1660 // Use only local ports for simplicity. 1672 // Use only local ports for simplicity.
1661 SetAllocatorFlags(0, kOnlyLocalPorts); 1673 SetAllocatorFlags(0, kOnlyLocalPorts);
1662 SetAllocatorFlags(1, kOnlyLocalPorts); 1674 SetAllocatorFlags(1, kOnlyLocalPorts);
1663 1675
1664 // Create channels and let them go writable, as usual. 1676 // Create channels and let them go writable, as usual.
1665 CreateChannels(1); 1677 CreateChannels(1);
1666 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && 1678 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
1667 ep2_ch1()->receiving() && ep2_ch1()->writable(), 1679 ep2_ch1()->receiving() && ep2_ch1()->writable(),
1668 1000, 1000); 1680 1000, 1000);
1669 EXPECT_TRUE( 1681 EXPECT_TRUE(ep1_ch1()->selected_connection() &&
1670 ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && 1682 ep2_ch1()->selected_connection() &&
1671 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && 1683 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) &&
1672 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); 1684 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1]));
1673 1685
1674 // Make the receiving timeout shorter for testing. 1686 // Make the receiving timeout shorter for testing.
1675 cricket::IceConfig config = CreateIceConfig(1000, false); 1687 cricket::IceConfig config = CreateIceConfig(1000, false);
1676 ep1_ch1()->SetIceConfig(config); 1688 ep1_ch1()->SetIceConfig(config);
1677 ep2_ch1()->SetIceConfig(config); 1689 ep2_ch1()->SetIceConfig(config);
1678 1690
1679 // Blackhole any traffic to or from the public addrs. 1691 // Blackhole any traffic to or from the public addrs.
1680 LOG(LS_INFO) << "Failing over..."; 1692 LOG(LS_INFO) << "Failing over...";
1681 fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[0]); 1693 fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[0]);
1682 // The best connections will switch, so keep references to them. 1694 // The best connections will switch, so keep references to them.
1683 const cricket::Connection* best_connection1 = ep1_ch1()->best_connection(); 1695 const cricket::Connection* selected_connection1 =
1684 const cricket::Connection* best_connection2 = ep2_ch1()->best_connection(); 1696 ep1_ch1()->selected_connection();
1697 const cricket::Connection* selected_connection2 =
1698 ep2_ch1()->selected_connection();
1685 // We should detect loss of receiving within 1 second or so. 1699 // We should detect loss of receiving within 1 second or so.
1686 EXPECT_TRUE_WAIT( 1700 EXPECT_TRUE_WAIT(
1687 !best_connection1->receiving() && !best_connection2->receiving(), 3000); 1701 !selected_connection1->receiving() && !selected_connection2->receiving(),
1702 3000);
1688 1703
1689 // We should switch over to use the alternate addr immediately on both sides 1704 // We should switch over to use the alternate addr immediately on both sides
1690 // when we are not receiving. 1705 // when we are not receiving.
1691 EXPECT_TRUE_WAIT( 1706 EXPECT_TRUE_WAIT(ep1_ch1()->selected_connection()->receiving() &&
1692 ep1_ch1()->best_connection()->receiving() && 1707 ep2_ch1()->selected_connection()->receiving(),
1693 ep2_ch1()->best_connection()->receiving(), 1000); 1708 1000);
1694 EXPECT_TRUE( 1709 EXPECT_TRUE(
1695 LocalCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[0])); 1710 LocalCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[0]));
1696 EXPECT_TRUE(RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); 1711 EXPECT_TRUE(RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1]));
1697 EXPECT_TRUE( 1712 EXPECT_TRUE(
1698 RemoteCandidate(ep2_ch1())->address().EqualIPs(kAlternateAddrs[0])); 1713 RemoteCandidate(ep2_ch1())->address().EqualIPs(kAlternateAddrs[0]));
1699 1714
1700 DestroyChannels(); 1715 DestroyChannels();
1701 } 1716 }
1702 1717
1703 // Tests that a Wifi-Wifi connection has the highest precedence. 1718 // Tests that a Wifi-Wifi connection has the highest precedence.
(...skipping 11 matching lines...) Expand all
1715 SetAllocatorFlags(0, kOnlyLocalPorts); 1730 SetAllocatorFlags(0, kOnlyLocalPorts);
1716 SetAllocatorFlags(1, kOnlyLocalPorts); 1731 SetAllocatorFlags(1, kOnlyLocalPorts);
1717 1732
1718 // Create channels and let them go writable, as usual. 1733 // Create channels and let them go writable, as usual.
1719 CreateChannels(1); 1734 CreateChannels(1);
1720 1735
1721 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && 1736 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
1722 ep2_ch1()->receiving() && ep2_ch1()->writable(), 1737 ep2_ch1()->receiving() && ep2_ch1()->writable(),
1723 1000, 1000); 1738 1000, 1000);
1724 // Need to wait to make sure the connections on both networks are writable. 1739 // Need to wait to make sure the connections on both networks are writable.
1725 EXPECT_TRUE_WAIT(ep1_ch1()->best_connection() && 1740 EXPECT_TRUE_WAIT(ep1_ch1()->selected_connection() &&
1726 LocalCandidate(ep1_ch1())->address().EqualIPs(wifi[0]) && 1741 LocalCandidate(ep1_ch1())->address().EqualIPs(wifi[0]) &&
1727 RemoteCandidate(ep1_ch1())->address().EqualIPs(wifi[1]), 1742 RemoteCandidate(ep1_ch1())->address().EqualIPs(wifi[1]),
1728 1000); 1743 1000);
1729 EXPECT_TRUE_WAIT(ep2_ch1()->best_connection() && 1744 EXPECT_TRUE_WAIT(ep2_ch1()->selected_connection() &&
1730 LocalCandidate(ep2_ch1())->address().EqualIPs(wifi[1]) && 1745 LocalCandidate(ep2_ch1())->address().EqualIPs(wifi[1]) &&
1731 RemoteCandidate(ep2_ch1())->address().EqualIPs(wifi[0]), 1746 RemoteCandidate(ep2_ch1())->address().EqualIPs(wifi[0]),
1732 1000); 1747 1000);
1733 } 1748 }
1734 1749
1735 // Tests that a Wifi-Cellular connection has higher precedence than 1750 // Tests that a Wifi-Cellular connection has higher precedence than
1736 // a Cellular-Cellular connection. 1751 // a Cellular-Cellular connection.
1737 TEST_F(P2PTransportChannelMultihomedTest, TestPreferWifiOverCellularNetwork) { 1752 TEST_F(P2PTransportChannelMultihomedTest, TestPreferWifiOverCellularNetwork) {
1738 // The interface names are chosen so that |cellular| would have higher 1753 // The interface names are chosen so that |cellular| would have higher
1739 // candidate priority if it is not for the network type. 1754 // candidate priority if it is not for the network type.
1740 auto& wifi = kAlternateAddrs; 1755 auto& wifi = kAlternateAddrs;
1741 auto& cellular = kPublicAddrs; 1756 auto& cellular = kPublicAddrs;
1742 AddAddress(0, cellular[0], "test1", rtc::ADAPTER_TYPE_CELLULAR); 1757 AddAddress(0, cellular[0], "test1", rtc::ADAPTER_TYPE_CELLULAR);
1743 AddAddress(1, wifi[1], "test0", rtc::ADAPTER_TYPE_WIFI); 1758 AddAddress(1, wifi[1], "test0", rtc::ADAPTER_TYPE_WIFI);
1744 AddAddress(1, cellular[1], "test1", rtc::ADAPTER_TYPE_CELLULAR); 1759 AddAddress(1, cellular[1], "test1", rtc::ADAPTER_TYPE_CELLULAR);
1745 1760
1746 // Use only local ports for simplicity. 1761 // Use only local ports for simplicity.
1747 SetAllocatorFlags(0, kOnlyLocalPorts); 1762 SetAllocatorFlags(0, kOnlyLocalPorts);
1748 SetAllocatorFlags(1, kOnlyLocalPorts); 1763 SetAllocatorFlags(1, kOnlyLocalPorts);
1749 1764
1750 // Create channels and let them go writable, as usual. 1765 // Create channels and let them go writable, as usual.
1751 CreateChannels(1); 1766 CreateChannels(1);
1752 1767
1753 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && 1768 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
1754 ep2_ch1()->receiving() && ep2_ch1()->writable(), 1769 ep2_ch1()->receiving() && ep2_ch1()->writable(),
1755 1000, 1000); 1770 1000, 1000);
1756 // Need to wait to make sure the connections on both networks are writable. 1771 // Need to wait to make sure the connections on both networks are writable.
1757 EXPECT_TRUE_WAIT(ep1_ch1()->best_connection() && 1772 EXPECT_TRUE_WAIT(ep1_ch1()->selected_connection() &&
1758 RemoteCandidate(ep1_ch1())->address().EqualIPs(wifi[1]), 1773 RemoteCandidate(ep1_ch1())->address().EqualIPs(wifi[1]),
1759 1000); 1774 1000);
1760 EXPECT_TRUE_WAIT(ep2_ch1()->best_connection() && 1775 EXPECT_TRUE_WAIT(ep2_ch1()->selected_connection() &&
1761 LocalCandidate(ep2_ch1())->address().EqualIPs(wifi[1]), 1776 LocalCandidate(ep2_ch1())->address().EqualIPs(wifi[1]),
1762 1000); 1777 1000);
1763 } 1778 }
1764 1779
1765 // Test that the backup connection is pinged at a rate no faster than 1780 // Test that the backup connection is pinged at a rate no faster than
1766 // what was configured. 1781 // what was configured.
1767 TEST_F(P2PTransportChannelMultihomedTest, TestPingBackupConnectionRate) { 1782 TEST_F(P2PTransportChannelMultihomedTest, TestPingBackupConnectionRate) {
1768 AddAddress(0, kPublicAddrs[0]); 1783 AddAddress(0, kPublicAddrs[0]);
1769 // Adding alternate address will make sure |kPublicAddrs| has the higher 1784 // Adding alternate address will make sure |kPublicAddrs| has the higher
1770 // priority than others. This is due to FakeNetwork::AddInterface method. 1785 // priority than others. This is due to FakeNetwork::AddInterface method.
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1865 // Use only local ports for simplicity. 1880 // Use only local ports for simplicity.
1866 SetAllocatorFlags(0, kOnlyLocalPorts); 1881 SetAllocatorFlags(0, kOnlyLocalPorts);
1867 SetAllocatorFlags(1, kOnlyLocalPorts); 1882 SetAllocatorFlags(1, kOnlyLocalPorts);
1868 1883
1869 // Create channels and let them go writable, as usual. 1884 // Create channels and let them go writable, as usual.
1870 CreateChannels(1); 1885 CreateChannels(1);
1871 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && 1886 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
1872 ep2_ch1()->receiving() && ep2_ch1()->writable(), 1887 ep2_ch1()->receiving() && ep2_ch1()->writable(),
1873 1000); 1888 1000);
1874 EXPECT_TRUE( 1889 EXPECT_TRUE(
1875 ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && 1890 ep1_ch1()->selected_connection() && ep2_ch1()->selected_connection() &&
1876 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && 1891 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) &&
1877 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); 1892 RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1]));
1878 1893
1879 1894
1880 // Remove the public interface, add the alternate interface, and allocate 1895 // Remove the public interface, add the alternate interface, and allocate
1881 // a new generation of candidates for the new interface (via 1896 // a new generation of candidates for the new interface (via
1882 // MaybeStartGathering()). 1897 // MaybeStartGathering()).
1883 LOG(LS_INFO) << "Draining..."; 1898 LOG(LS_INFO) << "Draining...";
1884 AddAddress(1, kAlternateAddrs[1]); 1899 AddAddress(1, kAlternateAddrs[1]);
1885 RemoveAddress(1, kPublicAddrs[1]); 1900 RemoveAddress(1, kPublicAddrs[1]);
1886 ep2_ch1()->MaybeStartGathering(); 1901 ep2_ch1()->MaybeStartGathering();
1887 1902
1888 // We should switch over to use the alternate address after 1903 // We should switch over to use the alternate address after
1889 // an exchange of pings. 1904 // an exchange of pings.
1890 EXPECT_TRUE_WAIT( 1905 EXPECT_TRUE_WAIT(
1891 ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && 1906 ep1_ch1()->selected_connection() && ep2_ch1()->selected_connection() &&
1892 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && 1907 LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) &&
1893 RemoteCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[1]), 1908 RemoteCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[1]),
1894 3000); 1909 3000);
1895 1910
1896 DestroyChannels(); 1911 DestroyChannels();
1897 } 1912 }
1898 1913
1899 */ 1914 */
1900 1915
1901 // A collection of tests which tests a single P2PTransportChannel by sending 1916 // A collection of tests which tests a single P2PTransportChannel by sending
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1970 1985
1971 int SendData(cricket::TransportChannel& channel, 1986 int SendData(cricket::TransportChannel& channel,
1972 const char* data, 1987 const char* data,
1973 size_t len, 1988 size_t len,
1974 int packet_id) { 1989 int packet_id) {
1975 rtc::PacketOptions options; 1990 rtc::PacketOptions options;
1976 options.packet_id = packet_id; 1991 options.packet_id = packet_id;
1977 return channel.SendPacket(data, len, options, 0); 1992 return channel.SendPacket(data, len, options, 0);
1978 } 1993 }
1979 1994
1995 cricket::Connection* CreateConnectionWithCandidate(
1996 cricket::P2PTransportChannel& channel,
1997 const std::string& ip_addr,
1998 int port,
1999 int priority,
2000 bool writable) {
2001 channel.AddRemoteCandidate(CreateHostCandidate(ip_addr, port, priority));
2002 cricket::Connection* conn = WaitForConnectionTo(&channel, ip_addr, port);
2003 if (conn && writable) {
2004 conn->ReceivedPingResponse(); // make it writable
2005 }
2006 return conn;
2007 }
2008
2009 void NominateConnection(cricket::Connection* conn) {
2010 conn->set_nominated(true);
2011 conn->SignalNominated(conn);
2012 }
2013
1980 void OnSelectedCandidatePairChanged( 2014 void OnSelectedCandidatePairChanged(
1981 cricket::TransportChannel* transport_channel, 2015 cricket::TransportChannel* transport_channel,
1982 cricket::CandidatePairInterface* selected_candidate_pair, 2016 cricket::CandidatePairInterface* selected_candidate_pair,
1983 int last_sent_packet_id) { 2017 int last_sent_packet_id) {
1984 last_selected_candidate_pair_ = selected_candidate_pair; 2018 last_selected_candidate_pair_ = selected_candidate_pair;
1985 last_sent_packet_id_ = last_sent_packet_id; 2019 last_sent_packet_id_ = last_sent_packet_id;
2020 ++selected_candidate_pair_switches_;
1986 } 2021 }
1987 2022
1988 void ReceivePingOnConnection(cricket::Connection* conn, 2023 void ReceivePingOnConnection(cricket::Connection* conn,
1989 const std::string& remote_ufrag, 2024 const std::string& remote_ufrag,
1990 int priority) { 2025 int priority) {
1991 cricket::IceMessage msg; 2026 cricket::IceMessage msg;
1992 msg.SetType(cricket::STUN_BINDING_REQUEST); 2027 msg.SetType(cricket::STUN_BINDING_REQUEST);
1993 msg.AddAttribute(new cricket::StunByteStringAttribute( 2028 msg.AddAttribute(new cricket::StunByteStringAttribute(
1994 cricket::STUN_ATTR_USERNAME, 2029 cricket::STUN_ATTR_USERNAME,
1995 conn->local_candidate().username() + ":" + remote_ufrag)); 2030 conn->local_candidate().username() + ":" + remote_ufrag));
(...skipping 15 matching lines...) Expand all
2011 channel_state_ = channel->GetState(); 2046 channel_state_ = channel->GetState();
2012 } 2047 }
2013 2048
2014 cricket::CandidatePairInterface* last_selected_candidate_pair() { 2049 cricket::CandidatePairInterface* last_selected_candidate_pair() {
2015 return last_selected_candidate_pair_; 2050 return last_selected_candidate_pair_;
2016 } 2051 }
2017 int last_sent_packet_id() { return last_sent_packet_id_; } 2052 int last_sent_packet_id() { return last_sent_packet_id_; }
2018 bool channel_ready_to_send() { return channel_ready_to_send_; } 2053 bool channel_ready_to_send() { return channel_ready_to_send_; }
2019 void reset_channel_ready_to_send() { channel_ready_to_send_ = false; } 2054 void reset_channel_ready_to_send() { channel_ready_to_send_ = false; }
2020 cricket::TransportChannelState channel_state() { return channel_state_; } 2055 cricket::TransportChannelState channel_state() { return channel_state_; }
2056 int get_and_reset_selected_candidate_pair_switches() {
2057 int switches = selected_candidate_pair_switches_;
2058 selected_candidate_pair_switches_ = 0;
2059 return switches;
2060 }
2021 2061
2022 private: 2062 private:
2023 std::unique_ptr<rtc::PhysicalSocketServer> pss_; 2063 std::unique_ptr<rtc::PhysicalSocketServer> pss_;
2024 std::unique_ptr<rtc::VirtualSocketServer> vss_; 2064 std::unique_ptr<rtc::VirtualSocketServer> vss_;
2025 rtc::SocketServerScope ss_scope_; 2065 rtc::SocketServerScope ss_scope_;
2026 cricket::CandidatePairInterface* last_selected_candidate_pair_ = nullptr; 2066 cricket::CandidatePairInterface* last_selected_candidate_pair_ = nullptr;
2067 int selected_candidate_pair_switches_ = 0;
2027 int last_sent_packet_id_ = -1; 2068 int last_sent_packet_id_ = -1;
2028 bool channel_ready_to_send_ = false; 2069 bool channel_ready_to_send_ = false;
2029 cricket::TransportChannelState channel_state_ = cricket::STATE_INIT; 2070 cricket::TransportChannelState channel_state_ = cricket::STATE_INIT;
2030 }; 2071 };
2031 2072
2032 TEST_F(P2PTransportChannelPingTest, TestTriggeredChecks) { 2073 TEST_F(P2PTransportChannelPingTest, TestTriggeredChecks) {
2033 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); 2074 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr);
2034 cricket::P2PTransportChannel ch("trigger checks", 1, &pa); 2075 cricket::P2PTransportChannel ch("trigger checks", 1, &pa);
2035 PrepareChannel(&ch); 2076 PrepareChannel(&ch);
2036 ch.Connect(); 2077 ch.Connect();
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
2239 EXPECT_EQ(500, ch.receiving_timeout()); 2280 EXPECT_EQ(500, ch.receiving_timeout());
2240 EXPECT_EQ(50, ch.check_receiving_interval()); 2281 EXPECT_EQ(50, ch.check_receiving_interval());
2241 ch.Connect(); 2282 ch.Connect();
2242 ch.MaybeStartGathering(); 2283 ch.MaybeStartGathering();
2243 ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); 2284 ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1));
2244 cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); 2285 cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1);
2245 ASSERT_TRUE(conn1 != nullptr); 2286 ASSERT_TRUE(conn1 != nullptr);
2246 2287
2247 conn1->ReceivedPing(); 2288 conn1->ReceivedPing();
2248 conn1->OnReadPacket("ABC", 3, rtc::CreatePacketTime(0)); 2289 conn1->OnReadPacket("ABC", 3, rtc::CreatePacketTime(0));
2249 EXPECT_TRUE_WAIT(ch.best_connection() != nullptr, 1000); 2290 EXPECT_TRUE_WAIT(ch.selected_connection() != nullptr, 1000);
2250 EXPECT_TRUE_WAIT(ch.receiving(), 1000); 2291 EXPECT_TRUE_WAIT(ch.receiving(), 1000);
2251 EXPECT_TRUE_WAIT(!ch.receiving(), 1000); 2292 EXPECT_TRUE_WAIT(!ch.receiving(), 1000);
2252 } 2293 }
2253 2294
2254 // The controlled side will select a connection as the "best connection" based 2295 // The controlled side will select a connection as the "best connection" based
2255 // on priority until the controlling side nominates a connection, at which 2296 // on priority until the controlling side nominates a connection, at which
2256 // point the controlled side will select that connection as the 2297 // point the controlled side will select that connection as the
2257 // "best connection". Plus, SignalSelectedCandidatePair will be fired if the 2298 // "best connection". Plus, SignalSelectedCandidatePair will be fired if the
2258 // best connection changes and SignalReadyToSend will be fired if the new best 2299 // best connection changes and SignalReadyToSend will be fired if the new best
2259 // connection is writable. 2300 // connection is writable.
2260 TEST_F(P2PTransportChannelPingTest, TestSelectConnectionBeforeNomination) { 2301 TEST_F(P2PTransportChannelPingTest, TestSelectConnectionBeforeNomination) {
2261 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); 2302 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr);
2262 cricket::P2PTransportChannel ch("receiving state change", 1, &pa); 2303 cricket::P2PTransportChannel ch("receiving state change", 1, &pa);
2263 PrepareChannel(&ch); 2304 PrepareChannel(&ch);
2264 ch.SetIceRole(cricket::ICEROLE_CONTROLLED); 2305 ch.SetIceRole(cricket::ICEROLE_CONTROLLED);
2265 ch.Connect(); 2306 ch.Connect();
2266 ch.MaybeStartGathering(); 2307 ch.MaybeStartGathering();
2267 ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); 2308 ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1));
2268 cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); 2309 cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1);
2269 ASSERT_TRUE(conn1 != nullptr); 2310 ASSERT_TRUE(conn1 != nullptr);
2270 EXPECT_EQ(conn1, ch.best_connection()); 2311 EXPECT_EQ(conn1, ch.selected_connection());
2271 EXPECT_EQ(conn1, last_selected_candidate_pair()); 2312 EXPECT_EQ(conn1, last_selected_candidate_pair());
2272 EXPECT_EQ(-1, last_sent_packet_id()); 2313 EXPECT_EQ(-1, last_sent_packet_id());
2273 // Channel is not ready to send because it is not writable. 2314 // Channel is not ready to send because it is not writable.
2274 EXPECT_FALSE(channel_ready_to_send()); 2315 EXPECT_FALSE(channel_ready_to_send());
2275 2316
2276 int last_packet_id = 0; 2317 int last_packet_id = 0;
2277 const char* data = "ABCDEFGH"; 2318 const char* data = "ABCDEFGH";
2278 int len = static_cast<int>(strlen(data)); 2319 int len = static_cast<int>(strlen(data));
2279 SendData(ch, data, len, ++last_packet_id); 2320 SendData(ch, data, len, ++last_packet_id);
2280 // When a higher priority candidate comes in, the new connection is chosen 2321 // When a higher priority candidate comes in, the new connection is chosen
2281 // as the best connection. 2322 // as the best connection.
2282 ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 10)); 2323 ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 10));
2283 cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); 2324 cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2);
2284 ASSERT_TRUE(conn2 != nullptr); 2325 ASSERT_TRUE(conn2 != nullptr);
2285 EXPECT_EQ(conn2, ch.best_connection()); 2326 EXPECT_EQ(conn2, ch.selected_connection());
2286 EXPECT_EQ(conn2, last_selected_candidate_pair()); 2327 EXPECT_EQ(conn2, last_selected_candidate_pair());
2287 EXPECT_EQ(last_packet_id, last_sent_packet_id()); 2328 EXPECT_EQ(last_packet_id, last_sent_packet_id());
2288 EXPECT_FALSE(channel_ready_to_send()); 2329 EXPECT_FALSE(channel_ready_to_send());
2289 2330
2290 // If a stun request with use-candidate attribute arrives, the receiving 2331 // If a stun request with use-candidate attribute arrives, the receiving
2291 // connection will be set as the best connection, even though 2332 // connection will be set as the best connection, even though
2292 // its priority is lower. 2333 // its priority is lower.
2293 SendData(ch, data, len, ++last_packet_id); 2334 SendData(ch, data, len, ++last_packet_id);
2294 ch.AddRemoteCandidate(CreateHostCandidate("3.3.3.3", 3, 1)); 2335 ch.AddRemoteCandidate(CreateHostCandidate("3.3.3.3", 3, 1));
2295 cricket::Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3); 2336 cricket::Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3);
2296 ASSERT_TRUE(conn3 != nullptr); 2337 ASSERT_TRUE(conn3 != nullptr);
2297 // Because it has a lower priority, the best connection is still conn2. 2338 // Because it has a lower priority, the best connection is still conn2.
2298 EXPECT_EQ(conn2, ch.best_connection()); 2339 EXPECT_EQ(conn2, ch.selected_connection());
2299 conn3->ReceivedPingResponse(); // Become writable. 2340 conn3->ReceivedPingResponse(); // Become writable.
2300 // But if it is nominated via use_candidate, it is chosen as the best 2341 // But if it is nominated via use_candidate, it is chosen as the best
2301 // connection. 2342 // connection.
2302 conn3->set_nominated(true); 2343 conn3->set_nominated(true);
2303 conn3->SignalNominated(conn3); 2344 conn3->SignalNominated(conn3);
2304 EXPECT_EQ(conn3, ch.best_connection()); 2345 EXPECT_EQ(conn3, ch.selected_connection());
2305 EXPECT_EQ(conn3, last_selected_candidate_pair()); 2346 EXPECT_EQ(conn3, last_selected_candidate_pair());
2306 EXPECT_EQ(last_packet_id, last_sent_packet_id()); 2347 EXPECT_EQ(last_packet_id, last_sent_packet_id());
2307 EXPECT_TRUE(channel_ready_to_send()); 2348 EXPECT_TRUE(channel_ready_to_send());
2308 2349
2309 // Even if another higher priority candidate arrives, 2350 // Even if another higher priority candidate arrives,
2310 // it will not be set as the best connection because the best connection 2351 // it will not be set as the best connection because the best connection
2311 // is nominated by the controlling side. 2352 // is nominated by the controlling side.
2312 SendData(ch, data, len, ++last_packet_id); 2353 SendData(ch, data, len, ++last_packet_id);
2313 ch.AddRemoteCandidate(CreateHostCandidate("4.4.4.4", 4, 100)); 2354 ch.AddRemoteCandidate(CreateHostCandidate("4.4.4.4", 4, 100));
2314 cricket::Connection* conn4 = WaitForConnectionTo(&ch, "4.4.4.4", 4); 2355 cricket::Connection* conn4 = WaitForConnectionTo(&ch, "4.4.4.4", 4);
2315 ASSERT_TRUE(conn4 != nullptr); 2356 ASSERT_TRUE(conn4 != nullptr);
2316 EXPECT_EQ(conn3, ch.best_connection()); 2357 EXPECT_EQ(conn3, ch.selected_connection());
2317 // But if it is nominated via use_candidate and writable, it will be set as 2358 // But if it is nominated via use_candidate and writable, it will be set as
2318 // the best connection. 2359 // the best connection.
2319 conn4->set_nominated(true); 2360 conn4->set_nominated(true);
2320 conn4->SignalNominated(conn4); 2361 conn4->SignalNominated(conn4);
2321 // Not switched yet because conn4 is not writable. 2362 // Not switched yet because conn4 is not writable.
2322 EXPECT_EQ(conn3, ch.best_connection()); 2363 EXPECT_EQ(conn3, ch.selected_connection());
2323 reset_channel_ready_to_send(); 2364 reset_channel_ready_to_send();
2324 // The best connection switches after conn4 becomes writable. 2365 // The best connection switches after conn4 becomes writable.
2325 conn4->ReceivedPingResponse(); 2366 conn4->ReceivedPingResponse();
2326 EXPECT_EQ(conn4, ch.best_connection()); 2367 EXPECT_EQ_WAIT(conn4, ch.selected_connection(), kDefaultTimeout);
2327 EXPECT_EQ(conn4, last_selected_candidate_pair()); 2368 EXPECT_EQ(conn4, last_selected_candidate_pair());
2328 EXPECT_EQ(last_packet_id, last_sent_packet_id()); 2369 EXPECT_EQ(last_packet_id, last_sent_packet_id());
2329 // SignalReadyToSend is fired again because conn4 is writable. 2370 // SignalReadyToSend is fired again because conn4 is writable.
2330 EXPECT_TRUE(channel_ready_to_send()); 2371 EXPECT_TRUE(channel_ready_to_send());
2331 } 2372 }
2332 2373
2333 // The controlled side will select a connection as the "best connection" based 2374 // The controlled side will select a connection as the "best connection" based
2334 // on requests from an unknown address before the controlling side nominates 2375 // on requests from an unknown address before the controlling side nominates
2335 // a connection, and will nominate a connection from an unknown address if the 2376 // a connection, and will nominate a connection from an unknown address if the
2336 // request contains the use_candidate attribute. Plus, it will also sends back 2377 // request contains the use_candidate attribute. Plus, it will also sends back
(...skipping 12 matching lines...) Expand all
2349 cricket::STUN_ATTR_USERNAME, kIceUfrag[1])); 2390 cricket::STUN_ATTR_USERNAME, kIceUfrag[1]));
2350 uint32_t prflx_priority = cricket::ICE_TYPE_PREFERENCE_PRFLX << 24; 2391 uint32_t prflx_priority = cricket::ICE_TYPE_PREFERENCE_PRFLX << 24;
2351 request.AddAttribute(new cricket::StunUInt32Attribute( 2392 request.AddAttribute(new cricket::StunUInt32Attribute(
2352 cricket::STUN_ATTR_PRIORITY, prflx_priority)); 2393 cricket::STUN_ATTR_PRIORITY, prflx_priority));
2353 cricket::TestUDPPort* port = static_cast<cricket::TestUDPPort*>(GetPort(&ch)); 2394 cricket::TestUDPPort* port = static_cast<cricket::TestUDPPort*>(GetPort(&ch));
2354 port->SignalUnknownAddress(port, rtc::SocketAddress("1.1.1.1", 1), 2395 port->SignalUnknownAddress(port, rtc::SocketAddress("1.1.1.1", 1),
2355 cricket::PROTO_UDP, &request, kIceUfrag[1], false); 2396 cricket::PROTO_UDP, &request, kIceUfrag[1], false);
2356 cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); 2397 cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1);
2357 ASSERT_TRUE(conn1 != nullptr); 2398 ASSERT_TRUE(conn1 != nullptr);
2358 EXPECT_TRUE(port->sent_binding_response()); 2399 EXPECT_TRUE(port->sent_binding_response());
2359 EXPECT_EQ(conn1, ch.best_connection()); 2400 EXPECT_EQ(conn1, ch.selected_connection());
2360 conn1->ReceivedPingResponse(); 2401 conn1->ReceivedPingResponse();
2361 EXPECT_EQ(conn1, ch.best_connection()); 2402 EXPECT_EQ(conn1, ch.selected_connection());
2362 port->set_sent_binding_response(false); 2403 port->set_sent_binding_response(false);
2363 2404
2364 // Another connection is nominated via use_candidate. 2405 // Another connection is nominated via use_candidate.
2365 ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 1)); 2406 ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 1));
2366 cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); 2407 cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2);
2367 ASSERT_TRUE(conn2 != nullptr); 2408 ASSERT_TRUE(conn2 != nullptr);
2368 // Because it has a lower priority, the best connection is still conn1. 2409 // Because it has a lower priority, the best connection is still conn1.
2369 EXPECT_EQ(conn1, ch.best_connection()); 2410 EXPECT_EQ(conn1, ch.selected_connection());
2370 // When it is nominated via use_candidate and writable, it is chosen as the 2411 // When it is nominated via use_candidate and writable, it is chosen as the
2371 // best connection. 2412 // best connection.
2372 conn2->ReceivedPingResponse(); // Become writable. 2413 conn2->ReceivedPingResponse(); // Become writable.
2373 conn2->set_nominated(true); 2414 conn2->set_nominated(true);
2374 conn2->SignalNominated(conn2); 2415 conn2->SignalNominated(conn2);
2375 EXPECT_EQ(conn2, ch.best_connection()); 2416 EXPECT_EQ(conn2, ch.selected_connection());
2376 2417
2377 // Another request with unknown address, it will not be set as the best 2418 // Another request with unknown address, it will not be set as the best
2378 // connection because the best connection was nominated by the controlling 2419 // connection because the best connection was nominated by the controlling
2379 // side. 2420 // side.
2380 port->SignalUnknownAddress(port, rtc::SocketAddress("3.3.3.3", 3), 2421 port->SignalUnknownAddress(port, rtc::SocketAddress("3.3.3.3", 3),
2381 cricket::PROTO_UDP, &request, kIceUfrag[1], false); 2422 cricket::PROTO_UDP, &request, kIceUfrag[1], false);
2382 cricket::Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3); 2423 cricket::Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3);
2383 ASSERT_TRUE(conn3 != nullptr); 2424 ASSERT_TRUE(conn3 != nullptr);
2384 EXPECT_TRUE(port->sent_binding_response()); 2425 EXPECT_TRUE(port->sent_binding_response());
2385 conn3->ReceivedPingResponse(); // Become writable. 2426 conn3->ReceivedPingResponse(); // Become writable.
2386 EXPECT_EQ(conn2, ch.best_connection()); 2427 EXPECT_EQ(conn2, ch.selected_connection());
2387 port->set_sent_binding_response(false); 2428 port->set_sent_binding_response(false);
2388 2429
2389 // However if the request contains use_candidate attribute, it will be 2430 // However if the request contains use_candidate attribute, it will be
2390 // selected as the best connection. 2431 // selected as the best connection.
2391 request.AddAttribute( 2432 request.AddAttribute(
2392 new cricket::StunByteStringAttribute(cricket::STUN_ATTR_USE_CANDIDATE)); 2433 new cricket::StunByteStringAttribute(cricket::STUN_ATTR_USE_CANDIDATE));
2393 port->SignalUnknownAddress(port, rtc::SocketAddress("4.4.4.4", 4), 2434 port->SignalUnknownAddress(port, rtc::SocketAddress("4.4.4.4", 4),
2394 cricket::PROTO_UDP, &request, kIceUfrag[1], false); 2435 cricket::PROTO_UDP, &request, kIceUfrag[1], false);
2395 cricket::Connection* conn4 = WaitForConnectionTo(&ch, "4.4.4.4", 4); 2436 cricket::Connection* conn4 = WaitForConnectionTo(&ch, "4.4.4.4", 4);
2396 ASSERT_TRUE(conn4 != nullptr); 2437 ASSERT_TRUE(conn4 != nullptr);
2397 EXPECT_TRUE(port->sent_binding_response()); 2438 EXPECT_TRUE(port->sent_binding_response());
2398 // conn4 is not the best connection yet because it is not writable. 2439 // conn4 is not the best connection yet because it is not writable.
2399 EXPECT_EQ(conn2, ch.best_connection()); 2440 EXPECT_EQ(conn2, ch.selected_connection());
2400 conn4->ReceivedPingResponse(); // Become writable. 2441 conn4->ReceivedPingResponse(); // Become writable.
2401 EXPECT_EQ(conn4, ch.best_connection()); 2442 EXPECT_EQ_WAIT(conn4, ch.selected_connection(), kDefaultTimeout);
2402 2443
2403 // Test that the request from an unknown address contains a ufrag from an old 2444 // Test that the request from an unknown address contains a ufrag from an old
2404 // generation. 2445 // generation.
2405 port->set_sent_binding_response(false); 2446 port->set_sent_binding_response(false);
2406 ch.SetRemoteIceCredentials(kIceUfrag[2], kIcePwd[2]); 2447 ch.SetRemoteIceCredentials(kIceUfrag[2], kIcePwd[2]);
2407 ch.SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); 2448 ch.SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]);
2408 port->SignalUnknownAddress(port, rtc::SocketAddress("5.5.5.5", 5), 2449 port->SignalUnknownAddress(port, rtc::SocketAddress("5.5.5.5", 5),
2409 cricket::PROTO_UDP, &request, kIceUfrag[2], false); 2450 cricket::PROTO_UDP, &request, kIceUfrag[2], false);
2410 cricket::Connection* conn5 = WaitForConnectionTo(&ch, "5.5.5.5", 5); 2451 cricket::Connection* conn5 = WaitForConnectionTo(&ch, "5.5.5.5", 5);
2411 ASSERT_TRUE(conn5 != nullptr); 2452 ASSERT_TRUE(conn5 != nullptr);
2412 EXPECT_TRUE(port->sent_binding_response()); 2453 EXPECT_TRUE(port->sent_binding_response());
2413 EXPECT_EQ(kIcePwd[2], conn5->remote_candidate().password()); 2454 EXPECT_EQ(kIcePwd[2], conn5->remote_candidate().password());
2414 } 2455 }
2415 2456
2416 // The controlled side will select a connection as the "best connection" 2457 // The controlled side will select a connection as the "best connection"
2417 // based on media received until the controlling side nominates a connection, 2458 // based on media received until the controlling side nominates a connection,
2418 // at which point the controlled side will select that connection as 2459 // at which point the controlled side will select that connection as
2419 // the "best connection". 2460 // the "best connection".
2420 TEST_F(P2PTransportChannelPingTest, TestSelectConnectionBasedOnMediaReceived) { 2461 TEST_F(P2PTransportChannelPingTest, TestSelectConnectionBasedOnMediaReceived) {
2421 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); 2462 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr);
2422 cricket::P2PTransportChannel ch("receiving state change", 1, &pa); 2463 cricket::P2PTransportChannel ch("receiving state change", 1, &pa);
2423 PrepareChannel(&ch); 2464 PrepareChannel(&ch);
2424 ch.SetIceRole(cricket::ICEROLE_CONTROLLED); 2465 ch.SetIceRole(cricket::ICEROLE_CONTROLLED);
2425 ch.Connect(); 2466 ch.Connect();
2426 ch.MaybeStartGathering(); 2467 ch.MaybeStartGathering();
2427 ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 10)); 2468 ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 10));
2428 cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); 2469 cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1);
2429 ASSERT_TRUE(conn1 != nullptr); 2470 ASSERT_TRUE(conn1 != nullptr);
2430 EXPECT_EQ(conn1, ch.best_connection()); 2471 EXPECT_EQ(conn1, ch.selected_connection());
2431 2472
2432 // If a data packet is received on conn2, the best connection should 2473 // If a data packet is received on conn2, the best connection should
2433 // switch to conn2 because the controlled side must mirror the media path 2474 // switch to conn2 because the controlled side must mirror the media path
2434 // chosen by the controlling side. 2475 // chosen by the controlling side.
2435 ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 1)); 2476 ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 1));
2436 cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); 2477 cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2);
2437 ASSERT_TRUE(conn2 != nullptr); 2478 ASSERT_TRUE(conn2 != nullptr);
2438 conn2->ReceivedPing(); // Start receiving. 2479 conn2->ReceivedPing(); // Start receiving.
2439 // Do not switch because it is not writable.
2440 conn2->OnReadPacket("ABC", 3, rtc::CreatePacketTime(0)); 2480 conn2->OnReadPacket("ABC", 3, rtc::CreatePacketTime(0));
2441 EXPECT_EQ(conn1, ch.best_connection()); 2481 EXPECT_EQ(conn2, ch.selected_connection());
2442 2482 conn2->ReceivedPingResponse(); // Make it writable.
2443 conn2->ReceivedPingResponse(); // Become writable.
2444 // Switch because it is writable.
2445 conn2->OnReadPacket("DEF", 3, rtc::CreatePacketTime(0));
2446 EXPECT_EQ(conn2, ch.best_connection());
2447 2483
2448 // Now another STUN message with an unknown address and use_candidate will 2484 // Now another STUN message with an unknown address and use_candidate will
2449 // nominate the best connection. 2485 // nominate the best connection.
2450 cricket::IceMessage request; 2486 cricket::IceMessage request;
2451 request.SetType(cricket::STUN_BINDING_REQUEST); 2487 request.SetType(cricket::STUN_BINDING_REQUEST);
2452 request.AddAttribute(new cricket::StunByteStringAttribute( 2488 request.AddAttribute(new cricket::StunByteStringAttribute(
2453 cricket::STUN_ATTR_USERNAME, kIceUfrag[1])); 2489 cricket::STUN_ATTR_USERNAME, kIceUfrag[1]));
2454 uint32_t prflx_priority = cricket::ICE_TYPE_PREFERENCE_PRFLX << 24; 2490 uint32_t prflx_priority = cricket::ICE_TYPE_PREFERENCE_PRFLX << 24;
2455 request.AddAttribute(new cricket::StunUInt32Attribute( 2491 request.AddAttribute(new cricket::StunUInt32Attribute(
2456 cricket::STUN_ATTR_PRIORITY, prflx_priority)); 2492 cricket::STUN_ATTR_PRIORITY, prflx_priority));
2457 request.AddAttribute( 2493 request.AddAttribute(
2458 new cricket::StunByteStringAttribute(cricket::STUN_ATTR_USE_CANDIDATE)); 2494 new cricket::StunByteStringAttribute(cricket::STUN_ATTR_USE_CANDIDATE));
2459 cricket::Port* port = GetPort(&ch); 2495 cricket::Port* port = GetPort(&ch);
2460 port->SignalUnknownAddress(port, rtc::SocketAddress("3.3.3.3", 3), 2496 port->SignalUnknownAddress(port, rtc::SocketAddress("3.3.3.3", 3),
2461 cricket::PROTO_UDP, &request, kIceUfrag[1], false); 2497 cricket::PROTO_UDP, &request, kIceUfrag[1], false);
2462 cricket::Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3); 2498 cricket::Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3);
2463 ASSERT_TRUE(conn3 != nullptr); 2499 ASSERT_TRUE(conn3 != nullptr);
2464 EXPECT_EQ(conn2, ch.best_connection()); // Not writable yet. 2500 EXPECT_EQ(conn2, ch.selected_connection()); // Not writable yet.
2465 conn3->ReceivedPingResponse(); // Become writable. 2501 conn3->ReceivedPingResponse(); // Become writable.
2466 EXPECT_EQ(conn3, ch.best_connection()); 2502 EXPECT_EQ_WAIT(conn3, ch.selected_connection(), kDefaultTimeout);
2467 2503
2468 // Now another data packet will not switch the best connection because the 2504 // Now another data packet will not switch the best connection because the
2469 // best connection was nominated by the controlling side. 2505 // best connection was nominated by the controlling side.
2470 conn2->ReceivedPing(); 2506 conn2->ReceivedPing();
2471 conn2->ReceivedPingResponse(); 2507 conn2->ReceivedPingResponse();
2472 conn2->OnReadPacket("XYZ", 3, rtc::CreatePacketTime(0)); 2508 conn2->OnReadPacket("XYZ", 3, rtc::CreatePacketTime(0));
2473 EXPECT_EQ(conn3, ch.best_connection()); 2509 EXPECT_EQ_WAIT(conn3, ch.selected_connection(), kDefaultTimeout);
2510 }
2511
2512 TEST_F(P2PTransportChannelPingTest, TestDonotSwitchConnectionTooFrequently) {
Taylor Brandstetter 2016/06/21 18:33:26 Rename test to ControlledAgentDoesntSwitchConnecti
honghaiz3 2016/06/22 08:03:16 Done.
2513 rtc::ScopedFakeClock clock;
2514
2515 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr);
2516 cricket::P2PTransportChannel ch("receiving state change", 1, &pa);
2517 PrepareChannel(&ch);
2518 ch.SetIceRole(cricket::ICEROLE_CONTROLLED);
2519 ch.Connect();
2520 ch.MaybeStartGathering();
2521 // The connections have decreasing priority.
2522 cricket::Connection* conn1 =
2523 CreateConnectionWithCandidate(ch, "1.1.1.1", 1, 10, true);
2524 ASSERT_TRUE(conn1 != nullptr);
2525 cricket::Connection* conn2 =
2526 CreateConnectionWithCandidate(ch, "2.2.2.2", 2, 9, true);
2527 ASSERT_TRUE(conn2 != nullptr);
2528 cricket::Connection* conn3 =
2529 CreateConnectionWithCandidate(ch, "3.3.3.3", 3, 8, false);
2530 ASSERT_TRUE(conn3 != nullptr);
2531
2532 // Simulate aggressive nomination on the controlling side.
2533 get_and_reset_selected_candidate_pair_switches();
2534 NominateConnection(conn2);
2535 EXPECT_EQ(1, get_and_reset_selected_candidate_pair_switches());
2536 EXPECT_EQ(conn2, last_selected_candidate_pair());
2537
2538 // Selected candidate pair will switch because conn1 has higher priority.
2539 NominateConnection(conn1);
2540 EXPECT_EQ(1, get_and_reset_selected_candidate_pair_switches());
2541 EXPECT_EQ(conn1, last_selected_candidate_pair());
2542
2543 // Advance the clock by 1ms so that the last data receiving timestamp of
2544 // conn2 is larger.
2545 SIMULATED_WAIT(false, 1, clock);
2546 // Selected candidate pair won't switch until conn2 receives data and becomes
2547 // writable again because conn2 has lower priority and may have been pruned.
2548 NominateConnection(conn2);
2549 conn2->ReceivedPingResponse();
2550 EXPECT_EQ(0, get_and_reset_selected_candidate_pair_switches());
2551 // Will switch if conn2 receives data.
2552 conn2->OnReadPacket("XYZ", 3, rtc::CreatePacketTime(0));
2553 EXPECT_EQ(1, get_and_reset_selected_candidate_pair_switches());
2554 EXPECT_EQ(conn2, last_selected_candidate_pair());
2555
2556 // Advance the clock by 1ms so that the last data receiving timestamp of
2557 // conn3 is larger.
2558 SIMULATED_WAIT(false, 1, clock);
2559 // Selected candidate pair won't switch even if it is nominated and
2560 // received data because it is not writable.
2561 NominateConnection(conn3);
2562 conn3->OnReadPacket("XYZ", 3, rtc::CreatePacketTime(0));
2563 EXPECT_EQ(0, get_and_reset_selected_candidate_pair_switches());
2564 // It will switch if it becomes writable
2565 conn3->ReceivedPingResponse();
2566 EXPECT_EQ_SIMULATED_WAIT(1, get_and_reset_selected_candidate_pair_switches(),
2567 kDefaultTimeout, clock);
2568 EXPECT_EQ(conn3, last_selected_candidate_pair());
2569
2570 // Make sure sorting won't reselect candidate pair.
2571 SIMULATED_WAIT(false, 10, clock);
2572 EXPECT_EQ(0, get_and_reset_selected_candidate_pair_switches());
2474 } 2573 }
Taylor Brandstetter 2016/06/21 18:33:26 This test's expectations are good but it's testing
honghaiz3 2016/06/22 08:03:16 I break this into three, making each of them small
2475 2574
2476 // Test that if a new remote candidate has the same address and port with 2575 // Test that if a new remote candidate has the same address and port with
2477 // an old one, it will be used to create a new connection. 2576 // an old one, it will be used to create a new connection.
2478 TEST_F(P2PTransportChannelPingTest, TestAddRemoteCandidateWithAddressReuse) { 2577 TEST_F(P2PTransportChannelPingTest, TestAddRemoteCandidateWithAddressReuse) {
2479 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); 2578 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr);
2480 cricket::P2PTransportChannel ch("candidate reuse", 1, &pa); 2579 cricket::P2PTransportChannel ch("candidate reuse", 1, &pa);
2481 PrepareChannel(&ch); 2580 PrepareChannel(&ch);
2482 ch.Connect(); 2581 ch.Connect();
2483 ch.MaybeStartGathering(); 2582 ch.MaybeStartGathering();
2484 const std::string host_address = "1.1.1.1"; 2583 const std::string host_address = "1.1.1.1";
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2517 TEST_F(P2PTransportChannelPingTest, TestDontPruneWhenWeak) { 2616 TEST_F(P2PTransportChannelPingTest, TestDontPruneWhenWeak) {
2518 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); 2617 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr);
2519 cricket::P2PTransportChannel ch("test channel", 1, &pa); 2618 cricket::P2PTransportChannel ch("test channel", 1, &pa);
2520 PrepareChannel(&ch); 2619 PrepareChannel(&ch);
2521 ch.SetIceRole(cricket::ICEROLE_CONTROLLED); 2620 ch.SetIceRole(cricket::ICEROLE_CONTROLLED);
2522 ch.Connect(); 2621 ch.Connect();
2523 ch.MaybeStartGathering(); 2622 ch.MaybeStartGathering();
2524 ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); 2623 ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1));
2525 cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); 2624 cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1);
2526 ASSERT_TRUE(conn1 != nullptr); 2625 ASSERT_TRUE(conn1 != nullptr);
2527 EXPECT_EQ(conn1, ch.best_connection()); 2626 EXPECT_EQ(conn1, ch.selected_connection());
2528 conn1->ReceivedPingResponse(); // Becomes writable and receiving 2627 conn1->ReceivedPingResponse(); // Becomes writable and receiving
2529 2628
2530 // When a higher-priority, nominated candidate comes in, the connections with 2629 // When a higher-priority, nominated candidate comes in, the connections with
2531 // lower-priority are pruned. 2630 // lower-priority are pruned.
2532 ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 10)); 2631 ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 10));
2533 cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); 2632 cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2);
2534 ASSERT_TRUE(conn2 != nullptr); 2633 ASSERT_TRUE(conn2 != nullptr);
2535 conn2->ReceivedPingResponse(); // Becomes writable and receiving 2634 conn2->ReceivedPingResponse(); // Becomes writable and receiving
2536 conn2->set_nominated(true); 2635 conn2->set_nominated(true);
2537 conn2->SignalNominated(conn2); 2636 conn2->SignalNominated(conn2);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2582 TEST_F(P2PTransportChannelPingTest, TestConnectionPrunedAgain) { 2681 TEST_F(P2PTransportChannelPingTest, TestConnectionPrunedAgain) {
2583 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); 2682 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr);
2584 cricket::P2PTransportChannel ch("test channel", 1, &pa); 2683 cricket::P2PTransportChannel ch("test channel", 1, &pa);
2585 PrepareChannel(&ch); 2684 PrepareChannel(&ch);
2586 ch.SetIceConfig(CreateIceConfig(1000, false)); 2685 ch.SetIceConfig(CreateIceConfig(1000, false));
2587 ch.Connect(); 2686 ch.Connect();
2588 ch.MaybeStartGathering(); 2687 ch.MaybeStartGathering();
2589 ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 100)); 2688 ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 100));
2590 cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); 2689 cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1);
2591 ASSERT_TRUE(conn1 != nullptr); 2690 ASSERT_TRUE(conn1 != nullptr);
2592 EXPECT_EQ(conn1, ch.best_connection()); 2691 EXPECT_EQ(conn1, ch.selected_connection());
2593 conn1->ReceivedPingResponse(); // Becomes writable and receiving 2692 conn1->ReceivedPingResponse(); // Becomes writable and receiving
2594 2693
2595 // Add a low-priority connection |conn2|, which will be pruned, but it will 2694 // Add a low-priority connection |conn2|, which will be pruned, but it will
2596 // not be deleted right away. Once the current best connection becomes not 2695 // not be deleted right away. Once the current best connection becomes not
2597 // receiving, |conn2| will start to ping and upon receiving the ping response, 2696 // receiving, |conn2| will start to ping and upon receiving the ping response,
2598 // it will become the best connection. 2697 // it will become the best connection.
2599 ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 1)); 2698 ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 1));
2600 cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); 2699 cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2);
2601 ASSERT_TRUE(conn2 != nullptr); 2700 ASSERT_TRUE(conn2 != nullptr);
2602 EXPECT_TRUE_WAIT(!conn2->active(), 1000); 2701 EXPECT_TRUE_WAIT(!conn2->active(), 1000);
2603 // |conn2| should not send a ping yet. 2702 // |conn2| should not send a ping yet.
2604 EXPECT_EQ(cricket::Connection::STATE_WAITING, conn2->state()); 2703 EXPECT_EQ(cricket::Connection::STATE_WAITING, conn2->state());
2605 EXPECT_EQ(cricket::TransportChannelState::STATE_COMPLETED, ch.GetState()); 2704 EXPECT_EQ(cricket::TransportChannelState::STATE_COMPLETED, ch.GetState());
2606 // Wait for |conn1| becoming not receiving. 2705 // Wait for |conn1| becoming not receiving.
2607 EXPECT_TRUE_WAIT(!conn1->receiving(), 3000); 2706 EXPECT_TRUE_WAIT(!conn1->receiving(), 3000);
2608 // Make sure conn2 is not deleted. 2707 // Make sure conn2 is not deleted.
2609 conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); 2708 conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2);
2610 ASSERT_TRUE(conn2 != nullptr); 2709 ASSERT_TRUE(conn2 != nullptr);
2611 EXPECT_EQ_WAIT(cricket::Connection::STATE_INPROGRESS, conn2->state(), 1000); 2710 EXPECT_EQ_WAIT(cricket::Connection::STATE_INPROGRESS, conn2->state(), 1000);
2612 conn2->ReceivedPingResponse(); 2711 conn2->ReceivedPingResponse();
2613 EXPECT_EQ_WAIT(conn2, ch.best_connection(), 1000); 2712 EXPECT_EQ_WAIT(conn2, ch.selected_connection(), 1000);
2614 EXPECT_EQ(cricket::TransportChannelState::STATE_CONNECTING, ch.GetState()); 2713 EXPECT_EQ(cricket::TransportChannelState::STATE_CONNECTING, ch.GetState());
2615 2714
2616 // When |conn1| comes back again, |conn2| will be pruned again. 2715 // When |conn1| comes back again, |conn2| will be pruned again.
2617 conn1->ReceivedPingResponse(); 2716 conn1->ReceivedPingResponse();
2618 EXPECT_EQ_WAIT(conn1, ch.best_connection(), 1000); 2717 EXPECT_EQ_WAIT(conn1, ch.selected_connection(), 1000);
2619 EXPECT_TRUE_WAIT(!conn2->active(), 1000); 2718 EXPECT_TRUE_WAIT(!conn2->active(), 1000);
2620 EXPECT_EQ(cricket::TransportChannelState::STATE_COMPLETED, ch.GetState()); 2719 EXPECT_EQ(cricket::TransportChannelState::STATE_COMPLETED, ch.GetState());
2621 } 2720 }
2622 2721
2623 // Test that if all connections in a channel has timed out on writing, they 2722 // Test that if all connections in a channel has timed out on writing, they
2624 // will all be deleted. We use Prune to simulate write_time_out. 2723 // will all be deleted. We use Prune to simulate write_time_out.
2625 TEST_F(P2PTransportChannelPingTest, TestDeleteConnectionsIfAllWriteTimedout) { 2724 TEST_F(P2PTransportChannelPingTest, TestDeleteConnectionsIfAllWriteTimedout) {
2626 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); 2725 cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr);
2627 cricket::P2PTransportChannel ch("test channel", 1, &pa); 2726 cricket::P2PTransportChannel ch("test channel", 1, &pa);
2628 PrepareChannel(&ch); 2727 PrepareChannel(&ch);
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
2798 2897
2799 TODO(honghaiz): Re-enable this once we use fake clock for this test to fix 2898 TODO(honghaiz): Re-enable this once we use fake clock for this test to fix
2800 the flakiness. The following test becomes flaky because we now ping the 2899 the flakiness. The following test becomes flaky because we now ping the
2801 connections with fast rates until every connection is pinged at least three 2900 connections with fast rates until every connection is pinged at least three
2802 times. The best connection may have been pinged before |max_strong_interval|, 2901 times. The best connection may have been pinged before |max_strong_interval|,
2803 so it may not be the next connection to be pinged as expected in the test. 2902 so it may not be the next connection to be pinged as expected in the test.
2804 2903
2805 // Verify that conn3 will be the "best connection" since it is readable and 2904 // Verify that conn3 will be the "best connection" since it is readable and
2806 // writable. After |MAX_CURRENT_STRONG_INTERVAL|, it should be the next 2905 // writable. After |MAX_CURRENT_STRONG_INTERVAL|, it should be the next
2807 // pingable connection. 2906 // pingable connection.
2808 EXPECT_TRUE_WAIT(conn3 == ch.best_connection(), 5000); 2907 EXPECT_TRUE_WAIT(conn3 == ch.selected_connection(), 5000);
2809 WAIT(false, max_strong_interval + 100); 2908 WAIT(false, max_strong_interval + 100);
2810 conn3->ReceivedPingResponse(); 2909 conn3->ReceivedPingResponse();
2811 ASSERT_TRUE(conn3->writable()); 2910 ASSERT_TRUE(conn3->writable());
2812 EXPECT_EQ(conn3, FindNextPingableConnectionAndPingIt(&ch)); 2911 EXPECT_EQ(conn3, FindNextPingableConnectionAndPingIt(&ch));
2813 2912
2814 */ 2913 */
2815 } 2914 }
2816 2915
2817 // Test that Relay/Relay connections will be pinged first when everything has 2916 // Test that Relay/Relay connections will be pinged first when everything has
2818 // been pinged even if the Relay/Relay connection wasn't the first to be pinged 2917 // been pinged even if the Relay/Relay connection wasn't the first to be pinged
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
2916 3015
2917 // TCP Relay/Relay is the next. 3016 // TCP Relay/Relay is the next.
2918 VerifyNextPingableConnection(cricket::RELAY_PORT_TYPE, 3017 VerifyNextPingableConnection(cricket::RELAY_PORT_TYPE,
2919 cricket::RELAY_PORT_TYPE, 3018 cricket::RELAY_PORT_TYPE,
2920 cricket::TCP_PROTOCOL_NAME); 3019 cricket::TCP_PROTOCOL_NAME);
2921 3020
2922 // Finally, Local/Relay will be pinged. 3021 // Finally, Local/Relay will be pinged.
2923 VerifyNextPingableConnection(cricket::LOCAL_PORT_TYPE, 3022 VerifyNextPingableConnection(cricket::LOCAL_PORT_TYPE,
2924 cricket::RELAY_PORT_TYPE); 3023 cricket::RELAY_PORT_TYPE);
2925 } 3024 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698