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

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

Issue 2224563004: Add signaling to support ICE renomination. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Update comments and merge Created 4 years, 4 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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 static const SocketAddress kRelaySslTcpExtAddr("99.99.99.3", 5005); 85 static const SocketAddress kRelaySslTcpExtAddr("99.99.99.3", 5005);
86 // The addresses for the public turn server. 86 // The addresses for the public turn server.
87 static const SocketAddress kTurnUdpIntAddr("99.99.99.4", 87 static const SocketAddress kTurnUdpIntAddr("99.99.99.4",
88 cricket::STUN_SERVER_PORT); 88 cricket::STUN_SERVER_PORT);
89 static const SocketAddress kTurnTcpIntAddr("99.99.99.4", 89 static const SocketAddress kTurnTcpIntAddr("99.99.99.4",
90 cricket::STUN_SERVER_PORT + 1); 90 cricket::STUN_SERVER_PORT + 1);
91 static const SocketAddress kTurnUdpExtAddr("99.99.99.5", 0); 91 static const SocketAddress kTurnUdpExtAddr("99.99.99.5", 0);
92 static const cricket::RelayCredentials kRelayCredentials("test", "test"); 92 static const cricket::RelayCredentials kRelayCredentials("test", "test");
93 93
94 // Based on ICE_UFRAG_LENGTH 94 // Based on ICE_UFRAG_LENGTH
95 static const char* kIceUfrag[4] = {"UF00", "UF01", 95 const char* kIceUfrag[4] = {"UF00", "UF01", "UF02", "UF03"};
96 "UF02", "UF03"};
97 // Based on ICE_PWD_LENGTH 96 // Based on ICE_PWD_LENGTH
98 static const char* kIcePwd[4] = {"TESTICEPWD00000000000000", 97 const char* kIcePwd[4] = {
99 "TESTICEPWD00000000000001", 98 "TESTICEPWD00000000000000", "TESTICEPWD00000000000001",
100 "TESTICEPWD00000000000002", 99 "TESTICEPWD00000000000002", "TESTICEPWD00000000000003"};
101 "TESTICEPWD00000000000003"}; 100 const cricket::IceParameters kIceParams[4] = {
101 {kIceUfrag[0], kIcePwd[0], false},
102 {kIceUfrag[1], kIcePwd[1], false},
103 {kIceUfrag[2], kIcePwd[2], false},
104 {kIceUfrag[3], kIcePwd[3], false}};
102 105
103 static const uint64_t kLowTiebreaker = 11111; 106 const uint64_t kLowTiebreaker = 11111;
104 static const uint64_t kHighTiebreaker = 22222; 107 const uint64_t kHighTiebreaker = 22222;
105 108
106 enum { MSG_ADD_CANDIDATES, MSG_REMOVE_CANDIDATES }; 109 enum { MSG_ADD_CANDIDATES, MSG_REMOVE_CANDIDATES };
107 110
108 cricket::IceConfig CreateIceConfig( 111 cricket::IceConfig CreateIceConfig(
109 int receiving_timeout, 112 int receiving_timeout,
110 cricket::ContinualGatheringPolicy continual_gathering_policy, 113 cricket::ContinualGatheringPolicy continual_gathering_policy,
111 int backup_ping_interval = -1) { 114 int backup_ping_interval = -1) {
112 cricket::IceConfig config; 115 cricket::IceConfig config;
113 config.receiving_timeout = receiving_timeout; 116 config.receiving_timeout = receiving_timeout;
114 config.continual_gathering_policy = continual_gathering_policy; 117 config.continual_gathering_policy = continual_gathering_policy;
115 config.backup_connection_ping_interval = backup_ping_interval; 118 config.backup_connection_ping_interval = backup_ping_interval;
116 return config; 119 return config;
117 } 120 }
118 121
119 cricket::Candidate CreateUdpCandidate(const std::string& type, 122 cricket::Candidate CreateUdpCandidate(const std::string& type,
120 const std::string& ip, 123 const std::string& ip,
121 int port, 124 int port,
122 int priority, 125 int priority,
123 const std::string& ufrag = "") { 126 const std::string& ufrag = "") {
124 cricket::Candidate c; 127 cricket::Candidate c;
125 c.set_address(rtc::SocketAddress(ip, port)); 128 c.set_address(rtc::SocketAddress(ip, port));
126 c.set_component(cricket::ICE_CANDIDATE_COMPONENT_DEFAULT); 129 c.set_component(cricket::ICE_CANDIDATE_COMPONENT_DEFAULT);
127 c.set_protocol(cricket::UDP_PROTOCOL_NAME); 130 c.set_protocol(cricket::UDP_PROTOCOL_NAME);
128 c.set_priority(priority); 131 c.set_priority(priority);
129 c.set_username(ufrag); 132 c.set_username(ufrag);
130 c.set_type(type); 133 c.set_type(type);
131 return c; 134 return c;
132 } 135 }
133 136
134 } // namespace { 137 } // namespace
135 138
136 namespace cricket { 139 namespace cricket {
137 140
138 // This test simulates 2 P2P endpoints that want to establish connectivity 141 // This test simulates 2 P2P endpoints that want to establish connectivity
139 // with each other over various network topologies and conditions, which can be 142 // with each other over various network topologies and conditions, which can be
140 // specified in each individial test. 143 // specified in each individial test.
141 // A virtual network (via VirtualSocketServer) along with virtual firewalls and 144 // A virtual network (via VirtualSocketServer) along with virtual firewalls and
142 // NATs (via Firewall/NATSocketServer) are used to simulate the various network 145 // NATs (via Firewall/NATSocketServer) are used to simulate the various network
143 // conditions. We can configure the IP addresses of the endpoints, 146 // conditions. We can configure the IP addresses of the endpoints,
144 // block various types of connectivity, or add arbitrary levels of NAT. 147 // block various types of connectivity, or add arbitrary levels of NAT.
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 bool ready_to_send_ = false; 301 bool ready_to_send_ = false;
299 }; 302 };
300 303
301 ChannelData* GetChannelData(TransportChannel* channel) { 304 ChannelData* GetChannelData(TransportChannel* channel) {
302 if (ep1_.HasChannel(channel)) 305 if (ep1_.HasChannel(channel))
303 return ep1_.GetChannelData(channel); 306 return ep1_.GetChannelData(channel);
304 else 307 else
305 return ep2_.GetChannelData(channel); 308 return ep2_.GetChannelData(channel);
306 } 309 }
307 310
308 void CreateChannels(int num) { 311 IceParameters IceParamsWithRenomination(const IceParameters& ice,
309 std::string ice_ufrag_ep1_cd1_ch = kIceUfrag[0]; 312 bool renomination) {
310 std::string ice_pwd_ep1_cd1_ch = kIcePwd[0]; 313 IceParameters new_ice = ice;
311 std::string ice_ufrag_ep2_cd1_ch = kIceUfrag[1]; 314 new_ice.renomination = renomination;
312 std::string ice_pwd_ep2_cd1_ch = kIcePwd[1]; 315 return new_ice;
313 ep1_.cd1_.ch_.reset(CreateChannel( 316 }
314 0, ICE_CANDIDATE_COMPONENT_DEFAULT, ice_ufrag_ep1_cd1_ch, 317
315 ice_pwd_ep1_cd1_ch, ice_ufrag_ep2_cd1_ch, ice_pwd_ep2_cd1_ch)); 318 void CreateChannels(int num, bool renomination = false) {
Taylor Brandstetter 2016/08/17 22:02:00 nit: Similar to my last comment, I'd prefer to hav
honghaiz3 2016/08/19 18:42:01 I would argue for using a single method with a ren
Taylor Brandstetter 2016/08/20 00:52:13 I do agree there should be a renomination argument
honghaiz3 2016/08/22 18:46:44 Done.
316 ep2_.cd1_.ch_.reset(CreateChannel( 319 IceParameters ice_ep1_cd1_ch =
317 1, ICE_CANDIDATE_COMPONENT_DEFAULT, ice_ufrag_ep2_cd1_ch, 320 IceParamsWithRenomination(kIceParams[0], renomination);
318 ice_pwd_ep2_cd1_ch, ice_ufrag_ep1_cd1_ch, ice_pwd_ep1_cd1_ch)); 321 IceParameters ice_ep2_cd1_ch =
322 IceParamsWithRenomination(kIceParams[1], renomination);
323 ep1_.cd1_.ch_.reset(CreateChannel(0, ICE_CANDIDATE_COMPONENT_DEFAULT,
324 ice_ep1_cd1_ch, ice_ep2_cd1_ch));
325 ep2_.cd1_.ch_.reset(CreateChannel(1, ICE_CANDIDATE_COMPONENT_DEFAULT,
326 ice_ep2_cd1_ch, ice_ep1_cd1_ch));
319 ep1_.cd1_.ch_->MaybeStartGathering(); 327 ep1_.cd1_.ch_->MaybeStartGathering();
320 ep2_.cd1_.ch_->MaybeStartGathering(); 328 ep2_.cd1_.ch_->MaybeStartGathering();
321 if (num == 2) { 329 if (num == 2) {
322 std::string ice_ufrag_ep1_cd2_ch = kIceUfrag[2]; 330 IceParameters ice_ep1_cd2_ch =
323 std::string ice_pwd_ep1_cd2_ch = kIcePwd[2]; 331 IceParamsWithRenomination(kIceParams[2], renomination);
324 std::string ice_ufrag_ep2_cd2_ch = kIceUfrag[3]; 332 IceParameters ice_ep2_cd2_ch =
325 std::string ice_pwd_ep2_cd2_ch = kIcePwd[3]; 333 IceParamsWithRenomination(kIceParams[3], renomination);
326 ep1_.cd2_.ch_.reset(CreateChannel( 334 ep1_.cd2_.ch_.reset(CreateChannel(0, ICE_CANDIDATE_COMPONENT_DEFAULT,
327 0, ICE_CANDIDATE_COMPONENT_DEFAULT, ice_ufrag_ep1_cd2_ch, 335 ice_ep1_cd2_ch, ice_ep2_cd2_ch));
328 ice_pwd_ep1_cd2_ch, ice_ufrag_ep2_cd2_ch, ice_pwd_ep2_cd2_ch)); 336 ep2_.cd2_.ch_.reset(CreateChannel(1, ICE_CANDIDATE_COMPONENT_DEFAULT,
329 ep2_.cd2_.ch_.reset(CreateChannel( 337 ice_ep2_cd2_ch, ice_ep1_cd2_ch));
330 1, ICE_CANDIDATE_COMPONENT_DEFAULT, ice_ufrag_ep2_cd2_ch,
331 ice_pwd_ep2_cd2_ch, ice_ufrag_ep1_cd2_ch, ice_pwd_ep1_cd2_ch));
332 ep1_.cd2_.ch_->MaybeStartGathering(); 338 ep1_.cd2_.ch_->MaybeStartGathering();
333 ep2_.cd2_.ch_->MaybeStartGathering(); 339 ep2_.cd2_.ch_->MaybeStartGathering();
334 } 340 }
335 } 341 }
336 P2PTransportChannel* CreateChannel(int endpoint, 342 P2PTransportChannel* CreateChannel(int endpoint,
337 int component, 343 int component,
338 const std::string& local_ice_ufrag, 344 const IceParameters& local_ice,
339 const std::string& local_ice_pwd, 345 const IceParameters& remote_ice) {
340 const std::string& remote_ice_ufrag,
341 const std::string& remote_ice_pwd) {
342 P2PTransportChannel* channel = new P2PTransportChannel( 346 P2PTransportChannel* channel = new P2PTransportChannel(
343 "test content name", component, GetAllocator(endpoint)); 347 "test content name", component, GetAllocator(endpoint));
344 channel->SignalReadyToSend.connect( 348 channel->SignalReadyToSend.connect(
345 this, &P2PTransportChannelTestBase::OnReadyToSend); 349 this, &P2PTransportChannelTestBase::OnReadyToSend);
346 channel->SignalCandidateGathered.connect( 350 channel->SignalCandidateGathered.connect(
347 this, &P2PTransportChannelTestBase::OnCandidateGathered); 351 this, &P2PTransportChannelTestBase::OnCandidateGathered);
348 channel->SignalCandidatesRemoved.connect( 352 channel->SignalCandidatesRemoved.connect(
349 this, &P2PTransportChannelTestBase::OnCandidatesRemoved); 353 this, &P2PTransportChannelTestBase::OnCandidatesRemoved);
350 channel->SignalReadPacket.connect( 354 channel->SignalReadPacket.connect(
351 this, &P2PTransportChannelTestBase::OnReadPacket); 355 this, &P2PTransportChannelTestBase::OnReadPacket);
352 channel->SignalRoleConflict.connect( 356 channel->SignalRoleConflict.connect(
353 this, &P2PTransportChannelTestBase::OnRoleConflict); 357 this, &P2PTransportChannelTestBase::OnRoleConflict);
354 channel->SignalSelectedCandidatePairChanged.connect( 358 channel->SignalSelectedCandidatePairChanged.connect(
355 this, &P2PTransportChannelTestBase::OnSelectedCandidatePairChanged); 359 this, &P2PTransportChannelTestBase::OnSelectedCandidatePairChanged);
356 channel->SetIceCredentials(local_ice_ufrag, local_ice_pwd); 360 channel->SetIceParameters(local_ice);
357 if (remote_ice_credential_source_ == FROM_SETICECREDENTIALS) { 361 if (remote_ice_parameter_source_ == FROM_SETICEPARAMETERS) {
358 channel->SetRemoteIceCredentials(remote_ice_ufrag, remote_ice_pwd); 362 channel->SetRemoteIceParameters(remote_ice);
359 } 363 }
360 channel->SetIceRole(GetEndpoint(endpoint)->ice_role()); 364 channel->SetIceRole(GetEndpoint(endpoint)->ice_role());
361 channel->SetIceTiebreaker(GetEndpoint(endpoint)->GetIceTiebreaker()); 365 channel->SetIceTiebreaker(GetEndpoint(endpoint)->GetIceTiebreaker());
362 return channel; 366 return channel;
363 } 367 }
364 void DestroyChannels() { 368 void DestroyChannels() {
365 ep1_.cd1_.ch_.reset(); 369 ep1_.cd1_.ch_.reset();
366 ep2_.cd1_.ch_.reset(); 370 ep2_.cd1_.ch_.reset();
367 ep1_.cd2_.ch_.reset(); 371 ep1_.cd2_.ch_.reset();
368 ep2_.cd2_.ch_.reset(); 372 ep2_.cd2_.ch_.reset();
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
579 // local_channel2 <==> remote_channel2 583 // local_channel2 <==> remote_channel2
580 EXPECT_EQ_WAIT(len, SendData(ep1_ch2(), data, len), 1000); 584 EXPECT_EQ_WAIT(len, SendData(ep1_ch2(), data, len), 1000);
581 EXPECT_TRUE_WAIT(CheckDataOnChannel(ep2_ch2(), data, len), 1000); 585 EXPECT_TRUE_WAIT(CheckDataOnChannel(ep2_ch2(), data, len), 1000);
582 EXPECT_EQ_WAIT(len, SendData(ep2_ch2(), data, len), 1000); 586 EXPECT_EQ_WAIT(len, SendData(ep2_ch2(), data, len), 1000);
583 EXPECT_TRUE_WAIT(CheckDataOnChannel(ep1_ch2(), data, len), 1000); 587 EXPECT_TRUE_WAIT(CheckDataOnChannel(ep1_ch2(), data, len), 1000);
584 } 588 }
585 } 589 }
586 } 590 }
587 591
588 // This test waits for the transport to become receiving and writable on both 592 // This test waits for the transport to become receiving and writable on both
589 // end points. Once they are, the end points set new local ice credentials and 593 // end points. Once they are, the end points set new local ice parameters and
590 // restart the ice gathering. Finally it waits for the transport to select a 594 // restart the ice gathering. Finally it waits for the transport to select a
591 // new connection using the newly generated ice candidates. 595 // new connection using the newly generated ice candidates.
592 // Before calling this function the end points must be configured. 596 // Before calling this function the end points must be configured.
593 void TestHandleIceUfragPasswordChanged() { 597 void TestHandleIceUfragPasswordChanged() {
594 ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]); 598 ep1_ch1()->SetRemoteIceParameters(kIceParams[1]);
595 ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[0], kIcePwd[0]); 599 ep2_ch1()->SetRemoteIceParameters(kIceParams[0]);
596 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && 600 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
597 ep2_ch1()->receiving() && ep2_ch1()->writable(), 601 ep2_ch1()->receiving() && ep2_ch1()->writable(),
598 1000, 1000); 602 1000, 1000);
599 603
600 const Candidate* old_local_candidate1 = LocalCandidate(ep1_ch1()); 604 const Candidate* old_local_candidate1 = LocalCandidate(ep1_ch1());
601 const Candidate* old_local_candidate2 = LocalCandidate(ep2_ch1()); 605 const Candidate* old_local_candidate2 = LocalCandidate(ep2_ch1());
602 const Candidate* old_remote_candidate1 = RemoteCandidate(ep1_ch1()); 606 const Candidate* old_remote_candidate1 = RemoteCandidate(ep1_ch1());
603 const Candidate* old_remote_candidate2 = RemoteCandidate(ep2_ch1()); 607 const Candidate* old_remote_candidate2 = RemoteCandidate(ep2_ch1());
604 608
605 ep1_ch1()->SetIceCredentials(kIceUfrag[2], kIcePwd[2]); 609 ep1_ch1()->SetIceParameters(kIceParams[2]);
606 ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); 610 ep1_ch1()->SetRemoteIceParameters(kIceParams[3]);
607 ep1_ch1()->MaybeStartGathering(); 611 ep1_ch1()->MaybeStartGathering();
608 ep2_ch1()->SetIceCredentials(kIceUfrag[3], kIcePwd[3]); 612 ep2_ch1()->SetIceParameters(kIceParams[3]);
609 ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[2], kIcePwd[2]); 613
614 ep2_ch1()->SetRemoteIceParameters(kIceParams[2]);
610 ep2_ch1()->MaybeStartGathering(); 615 ep2_ch1()->MaybeStartGathering();
611 616
612 EXPECT_TRUE_WAIT_MARGIN(LocalCandidate(ep1_ch1())->generation() != 617 EXPECT_TRUE_WAIT_MARGIN(LocalCandidate(ep1_ch1())->generation() !=
613 old_local_candidate1->generation(), 618 old_local_candidate1->generation(),
614 1000, 1000); 619 1000, 1000);
615 EXPECT_TRUE_WAIT_MARGIN(LocalCandidate(ep2_ch1())->generation() != 620 EXPECT_TRUE_WAIT_MARGIN(LocalCandidate(ep2_ch1())->generation() !=
616 old_local_candidate2->generation(), 621 old_local_candidate2->generation(),
617 1000, 1000); 622 1000, 1000);
618 EXPECT_TRUE_WAIT_MARGIN(RemoteCandidate(ep1_ch1())->generation() != 623 EXPECT_TRUE_WAIT_MARGIN(RemoteCandidate(ep1_ch1())->generation() !=
619 old_remote_candidate1->generation(), 624 old_remote_candidate1->generation(),
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
722 void OnMessage(rtc::Message* msg) { 727 void OnMessage(rtc::Message* msg) {
723 switch (msg->message_id) { 728 switch (msg->message_id) {
724 case MSG_ADD_CANDIDATES: { 729 case MSG_ADD_CANDIDATES: {
725 std::unique_ptr<CandidatesData> data( 730 std::unique_ptr<CandidatesData> data(
726 static_cast<CandidatesData*>(msg->pdata)); 731 static_cast<CandidatesData*>(msg->pdata));
727 P2PTransportChannel* rch = GetRemoteChannel(data->channel); 732 P2PTransportChannel* rch = GetRemoteChannel(data->channel);
728 if (!rch) { 733 if (!rch) {
729 return; 734 return;
730 } 735 }
731 for (auto& c : data->candidates) { 736 for (auto& c : data->candidates) {
732 if (remote_ice_credential_source_ != FROM_CANDIDATE) { 737 if (remote_ice_parameter_source_ != FROM_CANDIDATE) {
733 c.set_username(""); 738 c.set_username("");
734 c.set_password(""); 739 c.set_password("");
735 } 740 }
736 LOG(LS_INFO) << "Candidate(" << data->channel->component() << "->" 741 LOG(LS_INFO) << "Candidate(" << data->channel->component() << "->"
737 << rch->component() << "): " << c.ToString(); 742 << rch->component() << "): " << c.ToString();
738 rch->AddRemoteCandidate(c); 743 rch->AddRemoteCandidate(c);
739 } 744 }
740 break; 745 break;
741 } 746 }
742 case MSG_REMOVE_CANDIDATES: { 747 case MSG_REMOVE_CANDIDATES: {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
807 return ep1_ch1(); 812 return ep1_ch1();
808 else if (ch == ep2_ch2()) 813 else if (ch == ep2_ch2())
809 return ep1_ch2(); 814 return ep1_ch2();
810 else 815 else
811 return NULL; 816 return NULL;
812 } 817 }
813 std::list<std::string>& GetPacketList(TransportChannel* ch) { 818 std::list<std::string>& GetPacketList(TransportChannel* ch) {
814 return GetChannelData(ch)->ch_packets_; 819 return GetChannelData(ch)->ch_packets_;
815 } 820 }
816 821
817 enum RemoteIceCredentialSource { FROM_CANDIDATE, FROM_SETICECREDENTIALS }; 822 enum RemoteIceParameterSource { FROM_CANDIDATE, FROM_SETICEPARAMETERS };
818 823
819 // How does the test pass ICE credentials to the P2PTransportChannel? 824 // How does the test pass ICE parameters to the P2PTransportChannel?
820 // On the candidate itself, or through SetIceCredentials? 825 // On the candidate itself, or through SetRemoteIceParameters?
821 // Goes through the candidate itself by default. 826 // Goes through the candidate itself by default.
822 void set_remote_ice_credential_source(RemoteIceCredentialSource source) { 827 void set_remote_ice_parameter_source(RemoteIceParameterSource source) {
823 remote_ice_credential_source_ = source; 828 remote_ice_parameter_source_ = source;
824 } 829 }
825 830
826 void set_force_relay(bool relay) { 831 void set_force_relay(bool relay) {
827 force_relay_ = relay; 832 force_relay_ = relay;
828 } 833 }
829 834
830 void ConnectSignalNominated(Connection* conn) { 835 void ConnectSignalNominated(Connection* conn) {
831 conn->SignalNominated.connect(this, 836 conn->SignalNominated.connect(this,
832 &P2PTransportChannelTestBase::OnNominated); 837 &P2PTransportChannelTestBase::OnNominated);
833 } 838 }
834 839
835 void OnNominated(Connection* conn) { nominated_ = true; } 840 void OnNominated(Connection* conn) { nominated_ = true; }
836 bool nominated() { return nominated_; } 841 bool nominated() { return nominated_; }
837 842
838 private: 843 private:
839 rtc::Thread* main_; 844 rtc::Thread* main_;
840 std::unique_ptr<rtc::PhysicalSocketServer> pss_; 845 std::unique_ptr<rtc::PhysicalSocketServer> pss_;
841 std::unique_ptr<rtc::VirtualSocketServer> vss_; 846 std::unique_ptr<rtc::VirtualSocketServer> vss_;
842 std::unique_ptr<rtc::NATSocketServer> nss_; 847 std::unique_ptr<rtc::NATSocketServer> nss_;
843 std::unique_ptr<rtc::FirewallSocketServer> ss_; 848 std::unique_ptr<rtc::FirewallSocketServer> ss_;
844 rtc::SocketServerScope ss_scope_; 849 rtc::SocketServerScope ss_scope_;
845 std::unique_ptr<TestStunServer> stun_server_; 850 std::unique_ptr<TestStunServer> stun_server_;
846 TestTurnServer turn_server_; 851 TestTurnServer turn_server_;
847 TestRelayServer relay_server_; 852 TestRelayServer relay_server_;
848 rtc::SocksProxyServer socks_server1_; 853 rtc::SocksProxyServer socks_server1_;
849 rtc::SocksProxyServer socks_server2_; 854 rtc::SocksProxyServer socks_server2_;
850 Endpoint ep1_; 855 Endpoint ep1_;
851 Endpoint ep2_; 856 Endpoint ep2_;
852 RemoteIceCredentialSource remote_ice_credential_source_ = FROM_CANDIDATE; 857 RemoteIceParameterSource remote_ice_parameter_source_ = FROM_CANDIDATE;
853 bool force_relay_; 858 bool force_relay_;
854 int selected_candidate_pair_switches_ = 0; 859 int selected_candidate_pair_switches_ = 0;
855 860
856 bool nominated_ = false; 861 bool nominated_ = false;
857 }; 862 };
858 863
859 // The tests have only a few outcomes, which we predefine. 864 // The tests have only a few outcomes, which we predefine.
860 const P2PTransportChannelTestBase::Result 865 const P2PTransportChannelTestBase::Result
861 P2PTransportChannelTestBase::kLocalUdpToLocalUdp("local", 866 P2PTransportChannelTestBase::kLocalUdpToLocalUdp("local",
862 "udp", 867 "udp",
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
968 GetEndpoint(1)->allocator_->AddTurnServer(turn_server); 973 GetEndpoint(1)->allocator_->AddTurnServer(turn_server);
969 974
970 int delay = kMinimumStepDelay; 975 int delay = kMinimumStepDelay;
971 ConfigureEndpoint(0, config1); 976 ConfigureEndpoint(0, config1);
972 SetAllocatorFlags(0, allocator_flags1); 977 SetAllocatorFlags(0, allocator_flags1);
973 SetAllocationStepDelay(0, delay); 978 SetAllocationStepDelay(0, delay);
974 ConfigureEndpoint(1, config2); 979 ConfigureEndpoint(1, config2);
975 SetAllocatorFlags(1, allocator_flags2); 980 SetAllocatorFlags(1, allocator_flags2);
976 SetAllocationStepDelay(1, delay); 981 SetAllocationStepDelay(1, delay);
977 982
978 set_remote_ice_credential_source(FROM_SETICECREDENTIALS); 983 set_remote_ice_parameter_source(FROM_SETICEPARAMETERS);
979 } 984 }
980 void ConfigureEndpoint(int endpoint, Config config) { 985 void ConfigureEndpoint(int endpoint, Config config) {
981 switch (config) { 986 switch (config) {
982 case OPEN: 987 case OPEN:
983 AddAddress(endpoint, kPublicAddrs[endpoint]); 988 AddAddress(endpoint, kPublicAddrs[endpoint]);
984 break; 989 break;
985 case NAT_FULL_CONE: 990 case NAT_FULL_CONE:
986 case NAT_ADDR_RESTRICTED: 991 case NAT_ADDR_RESTRICTED:
987 case NAT_PORT_RESTRICTED: 992 case NAT_PORT_RESTRICTED:
988 case NAT_SYMMETRIC: 993 case NAT_SYMMETRIC:
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
1179 EXPECT_EQ(10 * 36U, best_conn_info->recv_total_bytes); 1184 EXPECT_EQ(10 * 36U, best_conn_info->recv_total_bytes);
1180 EXPECT_GT(best_conn_info->rtt, 0U); 1185 EXPECT_GT(best_conn_info->rtt, 0U);
1181 DestroyChannels(); 1186 DestroyChannels();
1182 } 1187 }
1183 1188
1184 // Test that we properly create a connection on a STUN ping from unknown address 1189 // Test that we properly create a connection on a STUN ping from unknown address
1185 // when the signaling is slow. 1190 // when the signaling is slow.
1186 TEST_F(P2PTransportChannelTest, PeerReflexiveCandidateBeforeSignaling) { 1191 TEST_F(P2PTransportChannelTest, PeerReflexiveCandidateBeforeSignaling) {
1187 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, 1192 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags,
1188 kDefaultPortAllocatorFlags); 1193 kDefaultPortAllocatorFlags);
1189 // Emulate no remote credentials coming in. 1194 // Emulate no remote parameters coming in.
1190 set_remote_ice_credential_source(FROM_CANDIDATE); 1195 set_remote_ice_parameter_source(FROM_CANDIDATE);
1191 CreateChannels(1); 1196 CreateChannels(1);
1192 // Only have remote credentials come in for ep2, not ep1. 1197 // Only have remote parameters come in for ep2, not ep1.
1193 ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[0], kIcePwd[0]); 1198 ep2_ch1()->SetRemoteIceParameters(kIceParams[0]);
1194 1199
1195 // Pause sending ep2's candidates to ep1 until ep1 receives the peer reflexive 1200 // Pause sending ep2's candidates to ep1 until ep1 receives the peer reflexive
1196 // candidate. 1201 // candidate.
1197 PauseCandidates(1); 1202 PauseCandidates(1);
1198 1203
1199 // Wait until the callee becomes writable to make sure that a ping request is 1204 // Wait until the callee becomes writable to make sure that a ping request is
1200 // received by the caller before his remote ICE credentials are set. 1205 // received by the caller before his remote ICE credentials are set.
1201 ASSERT_TRUE_WAIT(ep2_ch1()->selected_connection() != nullptr, 3000); 1206 ASSERT_TRUE_WAIT(ep2_ch1()->selected_connection() != nullptr, 3000);
1202 // Add two sets of remote ICE credentials, so that the ones used by the 1207 // Add two sets of remote ICE credentials, so that the ones used by the
1203 // candidate will be generation 1 instead of 0. 1208 // candidate will be generation 1 instead of 0.
1204 ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); 1209 ep1_ch1()->SetRemoteIceParameters(kIceParams[3]);
1205 ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]); 1210 ep1_ch1()->SetRemoteIceParameters(kIceParams[1]);
1206 // The caller should have the selected connection connected to the peer 1211 // The caller should have the selected connection connected to the peer
1207 // reflexive candidate. 1212 // reflexive candidate.
1208 const Connection* selected_connection = nullptr; 1213 const Connection* selected_connection = nullptr;
1209 ASSERT_TRUE_WAIT( 1214 ASSERT_TRUE_WAIT(
1210 (selected_connection = ep1_ch1()->selected_connection()) != nullptr, 1215 (selected_connection = ep1_ch1()->selected_connection()) != nullptr,
1211 2000); 1216 2000);
1212 EXPECT_EQ("prflx", selected_connection->remote_candidate().type()); 1217 EXPECT_EQ("prflx", selected_connection->remote_candidate().type());
1213 EXPECT_EQ(kIceUfrag[1], selected_connection->remote_candidate().username()); 1218 EXPECT_EQ(kIceUfrag[1], selected_connection->remote_candidate().username());
1214 EXPECT_EQ(kIcePwd[1], selected_connection->remote_candidate().password()); 1219 EXPECT_EQ(kIcePwd[1], selected_connection->remote_candidate().password());
1215 EXPECT_EQ(1u, selected_connection->remote_candidate().generation()); 1220 EXPECT_EQ(1u, selected_connection->remote_candidate().generation());
1216 1221
1217 ResumeCandidates(1); 1222 ResumeCandidates(1);
1218 // Verify ep1's selected connection is updated to use the 'local' candidate. 1223 // Verify ep1's selected connection is updated to use the 'local' candidate.
1219 EXPECT_EQ_WAIT("local", 1224 EXPECT_EQ_WAIT("local",
1220 ep1_ch1()->selected_connection()->remote_candidate().type(), 1225 ep1_ch1()->selected_connection()->remote_candidate().type(),
1221 2000); 1226 2000);
1222 EXPECT_EQ(selected_connection, ep1_ch1()->selected_connection()); 1227 EXPECT_EQ(selected_connection, ep1_ch1()->selected_connection());
1223 DestroyChannels(); 1228 DestroyChannels();
1224 } 1229 }
1225 1230
1226 // Test that we properly create a connection on a STUN ping from unknown address 1231 // Test that we properly create a connection on a STUN ping from unknown address
1227 // when the signaling is slow and the end points are behind NAT. 1232 // when the signaling is slow and the end points are behind NAT.
1228 TEST_F(P2PTransportChannelTest, PeerReflexiveCandidateBeforeSignalingWithNAT) { 1233 TEST_F(P2PTransportChannelTest, PeerReflexiveCandidateBeforeSignalingWithNAT) {
1229 ConfigureEndpoints(OPEN, NAT_SYMMETRIC, kDefaultPortAllocatorFlags, 1234 ConfigureEndpoints(OPEN, NAT_SYMMETRIC, kDefaultPortAllocatorFlags,
1230 kDefaultPortAllocatorFlags); 1235 kDefaultPortAllocatorFlags);
1231 // Emulate no remote credentials coming in. 1236 // Emulate no remote parameters coming in.
1232 set_remote_ice_credential_source(FROM_CANDIDATE); 1237 set_remote_ice_parameter_source(FROM_CANDIDATE);
1233 CreateChannels(1); 1238 CreateChannels(1);
1234 // Only have remote credentials come in for ep2, not ep1. 1239 // Only have remote parameters come in for ep2, not ep1.
1235 ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[0], kIcePwd[0]); 1240 ep2_ch1()->SetRemoteIceParameters(kIceParams[0]);
1236 // Pause sending ep2's candidates to ep1 until ep1 receives the peer reflexive 1241 // Pause sending ep2's candidates to ep1 until ep1 receives the peer reflexive
1237 // candidate. 1242 // candidate.
1238 PauseCandidates(1); 1243 PauseCandidates(1);
1239 1244
1240 // Wait until the callee becomes writable to make sure that a ping request is 1245 // Wait until the callee becomes writable to make sure that a ping request is
1241 // received by the caller before his remote ICE credentials are set. 1246 // received by the caller before his remote ICE credentials are set.
1242 ASSERT_TRUE_WAIT(ep2_ch1()->selected_connection() != nullptr, 3000); 1247 ASSERT_TRUE_WAIT(ep2_ch1()->selected_connection() != nullptr, 3000);
1243 // Add two sets of remote ICE credentials, so that the ones used by the 1248 // Add two sets of remote ICE credentials, so that the ones used by the
1244 // candidate will be generation 1 instead of 0. 1249 // candidate will be generation 1 instead of 0.
1245 ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); 1250 ep1_ch1()->SetRemoteIceParameters(kIceParams[3]);
1246 ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]); 1251 ep1_ch1()->SetRemoteIceParameters(kIceParams[1]);
1247 1252
1248 // The caller's selected connection should be connected to the peer reflexive 1253 // The caller's selected connection should be connected to the peer reflexive
1249 // candidate. 1254 // candidate.
1250 const Connection* selected_connection = nullptr; 1255 const Connection* selected_connection = nullptr;
1251 ASSERT_TRUE_WAIT( 1256 ASSERT_TRUE_WAIT(
1252 (selected_connection = ep1_ch1()->selected_connection()) != nullptr, 1257 (selected_connection = ep1_ch1()->selected_connection()) != nullptr,
1253 2000); 1258 2000);
1254 EXPECT_EQ("prflx", selected_connection->remote_candidate().type()); 1259 EXPECT_EQ("prflx", selected_connection->remote_candidate().type());
1255 EXPECT_EQ(kIceUfrag[1], selected_connection->remote_candidate().username()); 1260 EXPECT_EQ(kIceUfrag[1], selected_connection->remote_candidate().username());
1256 EXPECT_EQ(kIcePwd[1], selected_connection->remote_candidate().password()); 1261 EXPECT_EQ(kIcePwd[1], selected_connection->remote_candidate().password());
(...skipping 18 matching lines...) Expand all
1275 // generations. This resulted in the old-generation prflx candidate being 1280 // generations. This resulted in the old-generation prflx candidate being
1276 // prioritized above new-generation candidate pairs. 1281 // prioritized above new-generation candidate pairs.
1277 TEST_F(P2PTransportChannelTest, 1282 TEST_F(P2PTransportChannelTest,
1278 PeerReflexiveCandidateBeforeSignalingWithIceRestart) { 1283 PeerReflexiveCandidateBeforeSignalingWithIceRestart) {
1279 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, 1284 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags,
1280 kDefaultPortAllocatorFlags); 1285 kDefaultPortAllocatorFlags);
1281 // Only gather relay candidates, so that when the prflx candidate arrives 1286 // Only gather relay candidates, so that when the prflx candidate arrives
1282 // it's prioritized above the current candidate pair. 1287 // it's prioritized above the current candidate pair.
1283 GetEndpoint(0)->allocator_->set_candidate_filter(CF_RELAY); 1288 GetEndpoint(0)->allocator_->set_candidate_filter(CF_RELAY);
1284 GetEndpoint(1)->allocator_->set_candidate_filter(CF_RELAY); 1289 GetEndpoint(1)->allocator_->set_candidate_filter(CF_RELAY);
1285 // Setting this allows us to control when SetRemoteIceCredentials is called. 1290 // Setting this allows us to control when SetRemoteIceParameters is called.
1286 set_remote_ice_credential_source(FROM_CANDIDATE); 1291 set_remote_ice_parameter_source(FROM_CANDIDATE);
1287 CreateChannels(1); 1292 CreateChannels(1);
1288 // Wait for the initial connection to be made. 1293 // Wait for the initial connection to be made.
1289 ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]); 1294 ep1_ch1()->SetRemoteIceParameters(kIceParams[1]);
1290 ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[0], kIcePwd[0]); 1295 ep2_ch1()->SetRemoteIceParameters(kIceParams[0]);
1291 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && 1296 EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
1292 ep2_ch1()->receiving() && ep2_ch1()->writable(), 1297 ep2_ch1()->receiving() && ep2_ch1()->writable(),
1293 kDefaultTimeout); 1298 kDefaultTimeout);
1294 1299
1295 // Simulate an ICE restart on ep2, but don't signal the candidate or new 1300 // Simulate an ICE restart on ep2, but don't signal the candidate or new
1296 // ICE credentials until after a prflx connection has been made. 1301 // ICE parameters until after a prflx connection has been made.
1297 PauseCandidates(1); 1302 PauseCandidates(1);
1298 ep2_ch1()->SetIceCredentials(kIceUfrag[3], kIcePwd[3]); 1303 ep2_ch1()->SetIceParameters(kIceParams[3]);
1299 ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); 1304
1305 ep1_ch1()->SetRemoteIceParameters(kIceParams[3]);
1300 ep2_ch1()->MaybeStartGathering(); 1306 ep2_ch1()->MaybeStartGathering();
1301 1307
1302 // The caller should have the selected connection connected to the peer 1308 // The caller should have the selected connection connected to the peer
1303 // reflexive candidate. 1309 // reflexive candidate.
1304 EXPECT_EQ_WAIT("prflx", 1310 EXPECT_EQ_WAIT("prflx",
1305 ep1_ch1()->selected_connection()->remote_candidate().type(), 1311 ep1_ch1()->selected_connection()->remote_candidate().type(),
1306 kDefaultTimeout); 1312 kDefaultTimeout);
1307 const Connection* prflx_selected_connection = 1313 const Connection* prflx_selected_connection =
1308 ep1_ch1()->selected_connection(); 1314 ep1_ch1()->selected_connection();
1309 1315
1310 // Now simulate the ICE restart on ep1. 1316 // Now simulate the ICE restart on ep1.
1311 ep1_ch1()->SetIceCredentials(kIceUfrag[2], kIcePwd[2]); 1317 ep1_ch1()->SetIceParameters(kIceParams[2]);
1312 ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[2], kIcePwd[2]); 1318
1319 ep2_ch1()->SetRemoteIceParameters(kIceParams[2]);
1313 ep1_ch1()->MaybeStartGathering(); 1320 ep1_ch1()->MaybeStartGathering();
1314 1321
1315 // Finally send the candidates from ep2's ICE restart and verify that ep1 uses 1322 // Finally send the candidates from ep2's ICE restart and verify that ep1 uses
1316 // their information to update the peer reflexive candidate. 1323 // their information to update the peer reflexive candidate.
1317 ResumeCandidates(1); 1324 ResumeCandidates(1);
1318 1325
1319 EXPECT_EQ_WAIT("relay", 1326 EXPECT_EQ_WAIT("relay",
1320 ep1_ch1()->selected_connection()->remote_candidate().type(), 1327 ep1_ch1()->selected_connection()->remote_candidate().type(),
1321 kDefaultTimeout); 1328 kDefaultTimeout);
1322 EXPECT_EQ(prflx_selected_connection, ep1_ch1()->selected_connection()); 1329 EXPECT_EQ(prflx_selected_connection, ep1_ch1()->selected_connection());
1323 DestroyChannels(); 1330 DestroyChannels();
1324 } 1331 }
1325 1332
1326 // Test that if remote candidates don't have ufrag and pwd, we still work. 1333 // Test that if remote candidates don't have ufrag and pwd, we still work.
1327 TEST_F(P2PTransportChannelTest, RemoteCandidatesWithoutUfragPwd) { 1334 TEST_F(P2PTransportChannelTest, RemoteCandidatesWithoutUfragPwd) {
1328 set_remote_ice_credential_source(FROM_SETICECREDENTIALS); 1335 set_remote_ice_parameter_source(FROM_SETICEPARAMETERS);
1329 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, 1336 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags,
1330 kDefaultPortAllocatorFlags); 1337 kDefaultPortAllocatorFlags);
1331 CreateChannels(1); 1338 CreateChannels(1);
1332 const Connection* selected_connection = NULL; 1339 const Connection* selected_connection = NULL;
1333 // Wait until the callee's connections are created. 1340 // Wait until the callee's connections are created.
1334 WAIT((selected_connection = ep2_ch1()->selected_connection()) != NULL, 1000); 1341 WAIT((selected_connection = ep2_ch1()->selected_connection()) != NULL, 1000);
1335 // Wait to see if they get culled; they shouldn't. 1342 // Wait to see if they get culled; they shouldn't.
1336 WAIT(ep2_ch1()->selected_connection() != selected_connection, 1000); 1343 WAIT(ep2_ch1()->selected_connection() != selected_connection, 1000);
1337 EXPECT_TRUE(ep2_ch1()->selected_connection() == selected_connection); 1344 EXPECT_TRUE(ep2_ch1()->selected_connection() == selected_connection);
1338 DestroyChannels(); 1345 DestroyChannels();
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1387 int kOnlyLocalTcpPorts = PORTALLOCATOR_DISABLE_UDP | 1394 int kOnlyLocalTcpPorts = PORTALLOCATOR_DISABLE_UDP |
1388 PORTALLOCATOR_DISABLE_STUN | 1395 PORTALLOCATOR_DISABLE_STUN |
1389 PORTALLOCATOR_DISABLE_RELAY; 1396 PORTALLOCATOR_DISABLE_RELAY;
1390 // Disable all protocols except TCP. 1397 // Disable all protocols except TCP.
1391 SetAllocatorFlags(0, kOnlyLocalTcpPorts); 1398 SetAllocatorFlags(0, kOnlyLocalTcpPorts);
1392 SetAllocatorFlags(1, kOnlyLocalTcpPorts); 1399 SetAllocatorFlags(1, kOnlyLocalTcpPorts);
1393 1400
1394 SetAllowTcpListen(0, true); // actpass. 1401 SetAllowTcpListen(0, true); // actpass.
1395 SetAllowTcpListen(1, false); // active. 1402 SetAllowTcpListen(1, false); // active.
1396 1403
1397 // We want SetRemoteIceCredentials to be called as it normally would. 1404 // We want SetRemoteIceParameters to be called as it normally would.
1398 // Otherwise we won't know what credentials to use for the expected 1405 // Otherwise we won't know what parameters to use for the expected
1399 // prflx TCP candidates. 1406 // prflx TCP candidates.
1400 set_remote_ice_credential_source(FROM_SETICECREDENTIALS); 1407 set_remote_ice_parameter_source(FROM_SETICEPARAMETERS);
1401 1408
1402 // Pause candidate so we could verify the candidate properties. 1409 // Pause candidate so we could verify the candidate properties.
1403 PauseCandidates(0); 1410 PauseCandidates(0);
1404 PauseCandidates(1); 1411 PauseCandidates(1);
1405 CreateChannels(1); 1412 CreateChannels(1);
1406 1413
1407 // Verify tcp candidates. 1414 // Verify tcp candidates.
1408 VerifySavedTcpCandidates(0, TCPTYPE_PASSIVE_STR); 1415 VerifySavedTcpCandidates(0, TCPTYPE_PASSIVE_STR);
1409 VerifySavedTcpCandidates(1, TCPTYPE_ACTIVE_STR); 1416 VerifySavedTcpCandidates(1, TCPTYPE_ACTIVE_STR);
1410 1417
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
1676 } 1683 }
1677 1684
1678 // Test that when the "presume_writable_when_fully_relayed" flag is set to 1685 // Test that when the "presume_writable_when_fully_relayed" flag is set to
1679 // true and there's a TURN-TURN candidate pair, it's presumed to be writable 1686 // true and there's a TURN-TURN candidate pair, it's presumed to be writable
1680 // as soon as it's created. 1687 // as soon as it's created.
1681 TEST_F(P2PTransportChannelTest, TurnToTurnPresumedWritable) { 1688 TEST_F(P2PTransportChannelTest, TurnToTurnPresumedWritable) {
1682 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, 1689 ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags,
1683 kDefaultPortAllocatorFlags); 1690 kDefaultPortAllocatorFlags);
1684 // Only configure one channel so we can control when the remote candidate 1691 // Only configure one channel so we can control when the remote candidate
1685 // is added. 1692 // is added.
1686 GetEndpoint(0)->cd1_.ch_.reset( 1693 GetEndpoint(0)->cd1_.ch_.reset(CreateChannel(
1687 CreateChannel(0, ICE_CANDIDATE_COMPONENT_DEFAULT, kIceUfrag[0], 1694 0, ICE_CANDIDATE_COMPONENT_DEFAULT, kIceParams[0], kIceParams[1]));
1688 kIcePwd[0], kIceUfrag[1], kIcePwd[1]));
1689 IceConfig config; 1695 IceConfig config;
1690 config.presume_writable_when_fully_relayed = true; 1696 config.presume_writable_when_fully_relayed = true;
1691 ep1_ch1()->SetIceConfig(config); 1697 ep1_ch1()->SetIceConfig(config);
1692 ep1_ch1()->MaybeStartGathering(); 1698 ep1_ch1()->MaybeStartGathering();
1693 EXPECT_EQ_WAIT(IceGatheringState::kIceGatheringComplete, 1699 EXPECT_EQ_WAIT(IceGatheringState::kIceGatheringComplete,
1694 ep1_ch1()->gathering_state(), kDefaultTimeout); 1700 ep1_ch1()->gathering_state(), kDefaultTimeout);
1695 // Add two remote candidates; a host candidate (with higher priority) 1701 // Add two remote candidates; a host candidate (with higher priority)
1696 // and TURN candidate. 1702 // and TURN candidate.
1697 ep1_ch1()->AddRemoteCandidate( 1703 ep1_ch1()->AddRemoteCandidate(
1698 CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 100)); 1704 CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 100));
(...skipping 25 matching lines...) Expand all
1724 virtual_socket_server()->UpdateDelayDistribution(); 1730 virtual_socket_server()->UpdateDelayDistribution();
1725 1731
1726 ConfigureEndpoints(NAT_SYMMETRIC, NAT_SYMMETRIC, kDefaultPortAllocatorFlags, 1732 ConfigureEndpoints(NAT_SYMMETRIC, NAT_SYMMETRIC, kDefaultPortAllocatorFlags,
1727 kDefaultPortAllocatorFlags); 1733 kDefaultPortAllocatorFlags);
1728 // We want the remote TURN candidate to show up as prflx. To do this we need 1734 // We want the remote TURN candidate to show up as prflx. To do this we need
1729 // to configure the server to accept packets from an address we haven't 1735 // to configure the server to accept packets from an address we haven't
1730 // explicitly installed permission for. 1736 // explicitly installed permission for.
1731 test_turn_server()->set_enable_permission_checks(false); 1737 test_turn_server()->set_enable_permission_checks(false);
1732 IceConfig config; 1738 IceConfig config;
1733 config.presume_writable_when_fully_relayed = true; 1739 config.presume_writable_when_fully_relayed = true;
1734 GetEndpoint(0)->cd1_.ch_.reset( 1740 GetEndpoint(0)->cd1_.ch_.reset(CreateChannel(
1735 CreateChannel(0, ICE_CANDIDATE_COMPONENT_DEFAULT, kIceUfrag[0], 1741 0, ICE_CANDIDATE_COMPONENT_DEFAULT, kIceParams[0], kIceParams[1]));
1736 kIcePwd[0], kIceUfrag[1], kIcePwd[1])); 1742 GetEndpoint(1)->cd1_.ch_.reset(CreateChannel(
1737 GetEndpoint(1)->cd1_.ch_.reset( 1743 1, ICE_CANDIDATE_COMPONENT_DEFAULT, kIceParams[1], kIceParams[0]));
1738 CreateChannel(1, ICE_CANDIDATE_COMPONENT_DEFAULT, kIceUfrag[1],
1739 kIcePwd[1], kIceUfrag[0], kIcePwd[0]));
1740 ep1_ch1()->SetIceConfig(config); 1744 ep1_ch1()->SetIceConfig(config);
1741 ep2_ch1()->SetIceConfig(config); 1745 ep2_ch1()->SetIceConfig(config);
1742 // Don't signal candidates from channel 2, so that channel 1 sees the TURN 1746 // Don't signal candidates from channel 2, so that channel 1 sees the TURN
1743 // candidate as peer reflexive. 1747 // candidate as peer reflexive.
1744 PauseCandidates(1); 1748 PauseCandidates(1);
1745 ep1_ch1()->MaybeStartGathering(); 1749 ep1_ch1()->MaybeStartGathering();
1746 ep2_ch1()->MaybeStartGathering(); 1750 ep2_ch1()->MaybeStartGathering();
1747 1751
1748 // Wait for the TURN<->prflx connection. 1752 // Wait for the TURN<->prflx connection.
1749 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable(), 1753 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable(),
(...skipping 15 matching lines...) Expand all
1765 1769
1766 // Test that a presumed-writable TURN<->TURN connection is preferred above an 1770 // Test that a presumed-writable TURN<->TURN connection is preferred above an
1767 // unreliable connection (one that has failed to be pinged for some time). 1771 // unreliable connection (one that has failed to be pinged for some time).
1768 TEST_F(P2PTransportChannelTest, PresumedWritablePreferredOverUnreliable) { 1772 TEST_F(P2PTransportChannelTest, PresumedWritablePreferredOverUnreliable) {
1769 rtc::ScopedFakeClock fake_clock; 1773 rtc::ScopedFakeClock fake_clock;
1770 1774
1771 ConfigureEndpoints(NAT_SYMMETRIC, NAT_SYMMETRIC, kDefaultPortAllocatorFlags, 1775 ConfigureEndpoints(NAT_SYMMETRIC, NAT_SYMMETRIC, kDefaultPortAllocatorFlags,
1772 kDefaultPortAllocatorFlags); 1776 kDefaultPortAllocatorFlags);
1773 IceConfig config; 1777 IceConfig config;
1774 config.presume_writable_when_fully_relayed = true; 1778 config.presume_writable_when_fully_relayed = true;
1775 GetEndpoint(0)->cd1_.ch_.reset( 1779 GetEndpoint(0)->cd1_.ch_.reset(CreateChannel(
1776 CreateChannel(0, ICE_CANDIDATE_COMPONENT_DEFAULT, kIceUfrag[0], 1780 0, ICE_CANDIDATE_COMPONENT_DEFAULT, kIceParams[0], kIceParams[1]));
1777 kIcePwd[0], kIceUfrag[1], kIcePwd[1])); 1781 GetEndpoint(1)->cd1_.ch_.reset(CreateChannel(
1778 GetEndpoint(1)->cd1_.ch_.reset( 1782 1, ICE_CANDIDATE_COMPONENT_DEFAULT, kIceParams[1], kIceParams[0]));
1779 CreateChannel(1, ICE_CANDIDATE_COMPONENT_DEFAULT, kIceUfrag[1],
1780 kIcePwd[1], kIceUfrag[0], kIcePwd[0]));
1781 ep1_ch1()->SetIceConfig(config); 1783 ep1_ch1()->SetIceConfig(config);
1782 ep2_ch1()->SetIceConfig(config); 1784 ep2_ch1()->SetIceConfig(config);
1783 ep1_ch1()->MaybeStartGathering(); 1785 ep1_ch1()->MaybeStartGathering();
1784 ep2_ch1()->MaybeStartGathering(); 1786 ep2_ch1()->MaybeStartGathering();
1785 // Wait for initial connection as usual. 1787 // Wait for initial connection as usual.
1786 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && 1788 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
1787 ep1_ch1()->selected_connection()->writable() && 1789 ep1_ch1()->selected_connection()->writable() &&
1788 ep2_ch1()->receiving() && 1790 ep2_ch1()->receiving() &&
1789 ep2_ch1()->writable() && 1791 ep2_ch1()->writable() &&
1790 ep2_ch1()->selected_connection()->writable(), 1792 ep2_ch1()->selected_connection()->writable(),
(...skipping 22 matching lines...) Expand all
1813 // address of the outermost NAT. 1815 // address of the outermost NAT.
1814 class P2PTransportChannelSameNatTest : public P2PTransportChannelTestBase { 1816 class P2PTransportChannelSameNatTest : public P2PTransportChannelTestBase {
1815 protected: 1817 protected:
1816 void ConfigureEndpoints(Config nat_type, Config config1, Config config2) { 1818 void ConfigureEndpoints(Config nat_type, Config config1, Config config2) {
1817 ASSERT(nat_type >= NAT_FULL_CONE && nat_type <= NAT_SYMMETRIC); 1819 ASSERT(nat_type >= NAT_FULL_CONE && nat_type <= NAT_SYMMETRIC);
1818 rtc::NATSocketServer::Translator* outer_nat = 1820 rtc::NATSocketServer::Translator* outer_nat =
1819 nat()->AddTranslator(kPublicAddrs[0], kNatAddrs[0], 1821 nat()->AddTranslator(kPublicAddrs[0], kNatAddrs[0],
1820 static_cast<rtc::NATType>(nat_type - NAT_FULL_CONE)); 1822 static_cast<rtc::NATType>(nat_type - NAT_FULL_CONE));
1821 ConfigureEndpoint(outer_nat, 0, config1); 1823 ConfigureEndpoint(outer_nat, 0, config1);
1822 ConfigureEndpoint(outer_nat, 1, config2); 1824 ConfigureEndpoint(outer_nat, 1, config2);
1823 set_remote_ice_credential_source(FROM_SETICECREDENTIALS); 1825 set_remote_ice_parameter_source(FROM_SETICEPARAMETERS);
1824 } 1826 }
1825 void ConfigureEndpoint(rtc::NATSocketServer::Translator* nat, 1827 void ConfigureEndpoint(rtc::NATSocketServer::Translator* nat,
1826 int endpoint, Config config) { 1828 int endpoint, Config config) {
1827 ASSERT(config <= NAT_SYMMETRIC); 1829 ASSERT(config <= NAT_SYMMETRIC);
1828 if (config == OPEN) { 1830 if (config == OPEN) {
1829 AddAddress(endpoint, kPrivateAddrs[endpoint]); 1831 AddAddress(endpoint, kPrivateAddrs[endpoint]);
1830 nat->AddClient(kPrivateAddrs[endpoint]); 1832 nat->AddClient(kPrivateAddrs[endpoint]);
1831 } else { 1833 } else {
1832 AddAddress(endpoint, kCascadedPrivateAddrs[endpoint]); 1834 AddAddress(endpoint, kCascadedPrivateAddrs[endpoint]);
1833 nat->AddTranslator(kPrivateAddrs[endpoint], kCascadedNatAddrs[endpoint], 1835 nat->AddTranslator(kPrivateAddrs[endpoint], kCascadedNatAddrs[endpoint],
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
2009 // Adding alternate address will make sure |kPublicAddrs| has the higher 2011 // Adding alternate address will make sure |kPublicAddrs| has the higher
2010 // priority than others. This is due to FakeNetwork::AddInterface method. 2012 // priority than others. This is due to FakeNetwork::AddInterface method.
2011 AddAddress(0, kAlternateAddrs[0]); 2013 AddAddress(0, kAlternateAddrs[0]);
2012 AddAddress(0, kPublicAddrs[0]); 2014 AddAddress(0, kPublicAddrs[0]);
2013 AddAddress(1, kPublicAddrs[1]); 2015 AddAddress(1, kPublicAddrs[1]);
2014 2016
2015 // Use only local ports for simplicity. 2017 // Use only local ports for simplicity.
2016 SetAllocatorFlags(0, kOnlyLocalPorts); 2018 SetAllocatorFlags(0, kOnlyLocalPorts);
2017 SetAllocatorFlags(1, kOnlyLocalPorts); 2019 SetAllocatorFlags(1, kOnlyLocalPorts);
2018 2020
2019 // Create channels and let them go writable, as usual. 2021 // We want it to set the remote ICE parameters when creating channels.
2020 CreateChannels(1); 2022 set_remote_ice_parameter_source(FROM_SETICEPARAMETERS);
2021 ep1_ch1()->set_remote_supports_renomination(true); 2023 // Create channels with renomination enabled.
2024 CreateChannels(1, true);
2022 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && 2025 EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
2023 ep2_ch1()->receiving() && 2026 ep2_ch1()->receiving() &&
2024 ep2_ch1()->writable(), 2027 ep2_ch1()->writable(),
2025 3000, clock); 2028 3000, clock);
2026 EXPECT_TRUE_SIMULATED_WAIT( 2029 EXPECT_TRUE_SIMULATED_WAIT(
2027 ep2_ch1()->selected_connection()->remote_nomination() > 0 && 2030 ep2_ch1()->selected_connection()->remote_nomination() > 0 &&
2028 ep1_ch1()->selected_connection()->acked_nomination() > 0, 2031 ep1_ch1()->selected_connection()->acked_nomination() > 0,
2029 kDefaultTimeout, clock); 2032 kDefaultTimeout, clock);
2030 const Connection* selected_connection1 = ep1_ch1()->selected_connection(); 2033 const Connection* selected_connection1 = ep1_ch1()->selected_connection();
2031 Connection* selected_connection2 = 2034 Connection* selected_connection2 =
(...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after
2537 public sigslot::has_slots<> { 2540 public sigslot::has_slots<> {
2538 public: 2541 public:
2539 P2PTransportChannelPingTest() 2542 P2PTransportChannelPingTest()
2540 : pss_(new rtc::PhysicalSocketServer), 2543 : pss_(new rtc::PhysicalSocketServer),
2541 vss_(new rtc::VirtualSocketServer(pss_.get())), 2544 vss_(new rtc::VirtualSocketServer(pss_.get())),
2542 ss_scope_(vss_.get()) {} 2545 ss_scope_(vss_.get()) {}
2543 2546
2544 protected: 2547 protected:
2545 void PrepareChannel(P2PTransportChannel* ch) { 2548 void PrepareChannel(P2PTransportChannel* ch) {
2546 ch->SetIceRole(ICEROLE_CONTROLLING); 2549 ch->SetIceRole(ICEROLE_CONTROLLING);
2547 ch->SetIceCredentials(kIceUfrag[0], kIcePwd[0]); 2550 ch->SetIceParameters(kIceParams[0]);
2548 ch->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]); 2551 ch->SetRemoteIceParameters(kIceParams[1]);
2549 ch->SignalSelectedCandidatePairChanged.connect( 2552 ch->SignalSelectedCandidatePairChanged.connect(
2550 this, &P2PTransportChannelPingTest::OnSelectedCandidatePairChanged); 2553 this, &P2PTransportChannelPingTest::OnSelectedCandidatePairChanged);
2551 ch->SignalReadyToSend.connect(this, 2554 ch->SignalReadyToSend.connect(this,
2552 &P2PTransportChannelPingTest::OnReadyToSend); 2555 &P2PTransportChannelPingTest::OnReadyToSend);
2553 ch->SignalStateChanged.connect( 2556 ch->SignalStateChanged.connect(
2554 this, &P2PTransportChannelPingTest::OnChannelStateChanged); 2557 this, &P2PTransportChannelPingTest::OnChannelStateChanged);
2555 } 2558 }
2556 2559
2557 Connection* WaitForConnectionTo(P2PTransportChannel* ch, 2560 Connection* WaitForConnectionTo(P2PTransportChannel* ch,
2558 const std::string& ip, 2561 const std::string& ip,
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
2817 start = clock.TimeNanos(); 2820 start = clock.TimeNanos();
2818 ping_sent_before = conn->num_pings_sent(); 2821 ping_sent_before = conn->num_pings_sent();
2819 SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, 3000, clock); 2822 SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, 3000, clock);
2820 ping_interval_ms = (clock.TimeNanos() - start) / rtc::kNumNanosecsPerMillisec; 2823 ping_interval_ms = (clock.TimeNanos() - start) / rtc::kNumNanosecsPerMillisec;
2821 EXPECT_GE(ping_interval_ms, STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL); 2824 EXPECT_GE(ping_interval_ms, STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL);
2822 EXPECT_LE(ping_interval_ms, 2825 EXPECT_LE(ping_interval_ms,
2823 STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL + SCHEDULING_RANGE); 2826 STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL + SCHEDULING_RANGE);
2824 } 2827 }
2825 2828
2826 // Test that we start pinging as soon as we have a connection and remote ICE 2829 // Test that we start pinging as soon as we have a connection and remote ICE
2827 // credentials. 2830 // parameters.
2828 TEST_F(P2PTransportChannelPingTest, PingingStartedAsSoonAsPossible) { 2831 TEST_F(P2PTransportChannelPingTest, PingingStartedAsSoonAsPossible) {
2829 rtc::ScopedFakeClock clock; 2832 rtc::ScopedFakeClock clock;
2830 2833
2831 FakePortAllocator pa(rtc::Thread::Current(), nullptr); 2834 FakePortAllocator pa(rtc::Thread::Current(), nullptr);
2832 P2PTransportChannel ch("TestChannel", 1, &pa); 2835 P2PTransportChannel ch("TestChannel", 1, &pa);
2833 ch.SetIceRole(ICEROLE_CONTROLLING); 2836 ch.SetIceRole(ICEROLE_CONTROLLING);
2834 ch.SetIceCredentials(kIceUfrag[0], kIcePwd[0]); 2837 ch.SetIceParameters(kIceParams[0]);
2835 ch.MaybeStartGathering(); 2838 ch.MaybeStartGathering();
2836 EXPECT_EQ_WAIT(IceGatheringState::kIceGatheringComplete, ch.gathering_state(), 2839 EXPECT_EQ_WAIT(IceGatheringState::kIceGatheringComplete, ch.gathering_state(),
2837 kDefaultTimeout); 2840 kDefaultTimeout);
2838 2841
2839 // Simulate a binding request being received, creating a peer reflexive 2842 // Simulate a binding request being received, creating a peer reflexive
2840 // candidate pair while we still don't have remote ICE credentials. 2843 // candidate pair while we still don't have remote ICE parameters.
2841 IceMessage request; 2844 IceMessage request;
2842 request.SetType(STUN_BINDING_REQUEST); 2845 request.SetType(STUN_BINDING_REQUEST);
2843 request.AddAttribute( 2846 request.AddAttribute(
2844 new StunByteStringAttribute(STUN_ATTR_USERNAME, kIceUfrag[1])); 2847 new StunByteStringAttribute(STUN_ATTR_USERNAME, kIceUfrag[1]));
2845 uint32_t prflx_priority = ICE_TYPE_PREFERENCE_PRFLX << 24; 2848 uint32_t prflx_priority = ICE_TYPE_PREFERENCE_PRFLX << 24;
2846 request.AddAttribute( 2849 request.AddAttribute(
2847 new StunUInt32Attribute(STUN_ATTR_PRIORITY, prflx_priority)); 2850 new StunUInt32Attribute(STUN_ATTR_PRIORITY, prflx_priority));
2848 Port* port = GetPort(&ch); 2851 Port* port = GetPort(&ch);
2849 ASSERT_NE(nullptr, port); 2852 ASSERT_NE(nullptr, port);
2850 port->SignalUnknownAddress(port, rtc::SocketAddress("1.1.1.1", 1), PROTO_UDP, 2853 port->SignalUnknownAddress(port, rtc::SocketAddress("1.1.1.1", 1), PROTO_UDP,
2851 &request, kIceUfrag[1], false); 2854 &request, kIceUfrag[1], false);
2852 Connection* conn = GetConnectionTo(&ch, "1.1.1.1", 1); 2855 Connection* conn = GetConnectionTo(&ch, "1.1.1.1", 1);
2853 ASSERT_NE(nullptr, conn); 2856 ASSERT_NE(nullptr, conn);
2854 2857
2855 // Simulate waiting for a second (and change) and verify that no pings were 2858 // Simulate waiting for a second (and change) and verify that no pings were
2856 // sent, since we don't yet have remote ICE credentials. 2859 // sent, since we don't yet have remote ICE parameters.
2857 SIMULATED_WAIT(conn->num_pings_sent() > 0, 1025, clock); 2860 SIMULATED_WAIT(conn->num_pings_sent() > 0, 1025, clock);
2858 EXPECT_EQ(0, conn->num_pings_sent()); 2861 EXPECT_EQ(0, conn->num_pings_sent());
2859 2862
2860 // Set remote ICE credentials. Now we should be able to ping. Ensure that 2863 // Set remote ICE parameters. Now we should be able to ping. Ensure that
2861 // the first ping is sent as soon as possible, within one simulated clock 2864 // the first ping is sent as soon as possible, within one simulated clock
2862 // tick. 2865 // tick.
2863 ch.SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]); 2866 ch.SetRemoteIceParameters(kIceParams[1]);
2864 EXPECT_TRUE_SIMULATED_WAIT(conn->num_pings_sent() > 0, 1, clock); 2867 EXPECT_TRUE_SIMULATED_WAIT(conn->num_pings_sent() > 0, 1, clock);
2865 } 2868 }
2866 2869
2867 TEST_F(P2PTransportChannelPingTest, TestNoTriggeredChecksWhenWritable) { 2870 TEST_F(P2PTransportChannelPingTest, TestNoTriggeredChecksWhenWritable) {
2868 FakePortAllocator pa(rtc::Thread::Current(), nullptr); 2871 FakePortAllocator pa(rtc::Thread::Current(), nullptr);
2869 P2PTransportChannel ch("trigger checks", 1, &pa); 2872 P2PTransportChannel ch("trigger checks", 1, &pa);
2870 PrepareChannel(&ch); 2873 PrepareChannel(&ch);
2871 ch.MaybeStartGathering(); 2874 ch.MaybeStartGathering();
2872 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1)); 2875 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1));
2873 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 2)); 2876 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 2));
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
2917 // Pruning the connection reduces the set of active connections and changes 2920 // Pruning the connection reduces the set of active connections and changes
2918 // the channel state. 2921 // the channel state.
2919 conn1->Prune(); 2922 conn1->Prune();
2920 EXPECT_EQ_WAIT(STATE_FAILED, channel_state(), kDefaultTimeout); 2923 EXPECT_EQ_WAIT(STATE_FAILED, channel_state(), kDefaultTimeout);
2921 } 2924 }
2922 2925
2923 // Test adding remote candidates with different ufrags. If a remote candidate 2926 // Test adding remote candidates with different ufrags. If a remote candidate
2924 // is added with an old ufrag, it will be discarded. If it is added with a 2927 // is added with an old ufrag, it will be discarded. If it is added with a
2925 // ufrag that was not seen before, it will be used to create connections 2928 // ufrag that was not seen before, it will be used to create connections
2926 // although the ICE pwd in the remote candidate will be set when the ICE 2929 // although the ICE pwd in the remote candidate will be set when the ICE
2927 // credentials arrive. If a remote candidate is added with the current ICE 2930 // parameters arrive. If a remote candidate is added with the current ICE
2928 // ufrag, its pwd and generation will be set properly. 2931 // ufrag, its pwd and generation will be set properly.
2929 TEST_F(P2PTransportChannelPingTest, TestAddRemoteCandidateWithVariousUfrags) { 2932 TEST_F(P2PTransportChannelPingTest, TestAddRemoteCandidateWithVariousUfrags) {
2930 FakePortAllocator pa(rtc::Thread::Current(), nullptr); 2933 FakePortAllocator pa(rtc::Thread::Current(), nullptr);
2931 P2PTransportChannel ch("add candidate", 1, &pa); 2934 P2PTransportChannel ch("add candidate", 1, &pa);
2932 PrepareChannel(&ch); 2935 PrepareChannel(&ch);
2933 ch.MaybeStartGathering(); 2936 ch.MaybeStartGathering();
2934 // Add a candidate with a future ufrag. 2937 // Add a candidate with a future ufrag.
2935 ch.AddRemoteCandidate( 2938 ch.AddRemoteCandidate(
2936 CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1, kIceUfrag[2])); 2939 CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1, kIceUfrag[2]));
2937 Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); 2940 Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1);
2938 ASSERT_TRUE(conn1 != nullptr); 2941 ASSERT_TRUE(conn1 != nullptr);
2939 const Candidate& candidate = conn1->remote_candidate(); 2942 const Candidate& candidate = conn1->remote_candidate();
2940 EXPECT_EQ(kIceUfrag[2], candidate.username()); 2943 EXPECT_EQ(kIceUfrag[2], candidate.username());
2941 EXPECT_TRUE(candidate.password().empty()); 2944 EXPECT_TRUE(candidate.password().empty());
2942 EXPECT_TRUE(FindNextPingableConnectionAndPingIt(&ch) == nullptr); 2945 EXPECT_TRUE(FindNextPingableConnectionAndPingIt(&ch) == nullptr);
2943 2946
2944 // Set the remote credentials with the "future" ufrag. 2947 // Set the remote ICE parameters with the "future" ufrag.
2945 // This should set the ICE pwd in the remote candidate of |conn1|, making 2948 // This should set the ICE pwd in the remote candidate of |conn1|, making
2946 // it pingable. 2949 // it pingable.
2947 ch.SetRemoteIceCredentials(kIceUfrag[2], kIcePwd[2]); 2950 ch.SetRemoteIceParameters(kIceParams[2]);
2948 EXPECT_EQ(kIceUfrag[2], candidate.username()); 2951 EXPECT_EQ(kIceUfrag[2], candidate.username());
2949 EXPECT_EQ(kIcePwd[2], candidate.password()); 2952 EXPECT_EQ(kIcePwd[2], candidate.password());
2950 EXPECT_EQ(conn1, FindNextPingableConnectionAndPingIt(&ch)); 2953 EXPECT_EQ(conn1, FindNextPingableConnectionAndPingIt(&ch));
2951 2954
2952 // Add a candidate with an old ufrag. No connection will be created. 2955 // Add a candidate with an old ufrag. No connection will be created.
2953 ch.AddRemoteCandidate( 2956 ch.AddRemoteCandidate(
2954 CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 2, kIceUfrag[1])); 2957 CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 2, kIceUfrag[1]));
2955 rtc::Thread::Current()->ProcessMessages(500); 2958 rtc::Thread::Current()->ProcessMessages(500);
2956 EXPECT_TRUE(GetConnectionTo(&ch, "2.2.2.2", 2) == nullptr); 2959 EXPECT_TRUE(GetConnectionTo(&ch, "2.2.2.2", 2) == nullptr);
2957 2960
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
3197 ASSERT_TRUE(conn4 != nullptr); 3200 ASSERT_TRUE(conn4 != nullptr);
3198 EXPECT_TRUE(port->sent_binding_response()); 3201 EXPECT_TRUE(port->sent_binding_response());
3199 // conn4 is not the selected connection yet because it is not writable. 3202 // conn4 is not the selected connection yet because it is not writable.
3200 EXPECT_EQ(conn2, ch.selected_connection()); 3203 EXPECT_EQ(conn2, ch.selected_connection());
3201 conn4->ReceivedPingResponse(LOW_RTT, "id"); // Become writable. 3204 conn4->ReceivedPingResponse(LOW_RTT, "id"); // Become writable.
3202 EXPECT_EQ_WAIT(conn4, ch.selected_connection(), kDefaultTimeout); 3205 EXPECT_EQ_WAIT(conn4, ch.selected_connection(), kDefaultTimeout);
3203 3206
3204 // Test that the request from an unknown address contains a ufrag from an old 3207 // Test that the request from an unknown address contains a ufrag from an old
3205 // generation. 3208 // generation.
3206 port->set_sent_binding_response(false); 3209 port->set_sent_binding_response(false);
3207 ch.SetRemoteIceCredentials(kIceUfrag[2], kIcePwd[2]); 3210 ch.SetRemoteIceParameters(kIceParams[2]);
3208 ch.SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); 3211 ch.SetRemoteIceParameters(kIceParams[3]);
3209 port->SignalUnknownAddress(port, rtc::SocketAddress("5.5.5.5", 5), PROTO_UDP, 3212 port->SignalUnknownAddress(port, rtc::SocketAddress("5.5.5.5", 5), PROTO_UDP,
3210 &request, kIceUfrag[2], false); 3213 &request, kIceUfrag[2], false);
3211 Connection* conn5 = WaitForConnectionTo(&ch, "5.5.5.5", 5); 3214 Connection* conn5 = WaitForConnectionTo(&ch, "5.5.5.5", 5);
3212 ASSERT_TRUE(conn5 != nullptr); 3215 ASSERT_TRUE(conn5 != nullptr);
3213 EXPECT_TRUE(port->sent_binding_response()); 3216 EXPECT_TRUE(port->sent_binding_response());
3214 EXPECT_EQ(kIcePwd[2], conn5->remote_candidate().password()); 3217 EXPECT_EQ(kIcePwd[2], conn5->remote_candidate().password());
3215 } 3218 }
3216 3219
3217 // The controlled side will select a connection as the "selected connection" 3220 // The controlled side will select a connection as the "selected connection"
3218 // based on media received until the controlling side nominates a connection, 3221 // based on media received until the controlling side nominates a connection,
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after
3668 ch.MaybeStartGathering(); 3671 ch.MaybeStartGathering();
3669 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 100)); 3672 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 100));
3670 Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); 3673 Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1);
3671 ASSERT_TRUE(conn1 != nullptr); 3674 ASSERT_TRUE(conn1 != nullptr);
3672 conn1->ReceivedPingResponse(LOW_RTT, "id"); // Becomes writable and receiving 3675 conn1->ReceivedPingResponse(LOW_RTT, "id"); // Becomes writable and receiving
3673 EXPECT_TRUE(!ch.allocator_session()->IsGettingPorts()); 3676 EXPECT_TRUE(!ch.allocator_session()->IsGettingPorts());
3674 3677
3675 // Start a new session. Even though conn1, which belongs to an older 3678 // Start a new session. Even though conn1, which belongs to an older
3676 // session, becomes unwritable and writable again, it should not stop the 3679 // session, becomes unwritable and writable again, it should not stop the
3677 // current session. 3680 // current session.
3678 ch.SetIceCredentials(kIceUfrag[1], kIcePwd[1]); 3681 ch.SetIceParameters(kIceParams[1]);
3679 ch.MaybeStartGathering(); 3682 ch.MaybeStartGathering();
3680 conn1->Prune(); 3683 conn1->Prune();
3681 conn1->ReceivedPingResponse(LOW_RTT, "id"); 3684 conn1->ReceivedPingResponse(LOW_RTT, "id");
3682 EXPECT_TRUE(ch.allocator_session()->IsGettingPorts()); 3685 EXPECT_TRUE(ch.allocator_session()->IsGettingPorts());
3683 3686
3684 // But if a new connection created from the new session becomes writable, 3687 // But if a new connection created from the new session becomes writable,
3685 // it will stop the current session. 3688 // it will stop the current session.
3686 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 100)); 3689 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 100));
3687 Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); 3690 Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2);
3688 ASSERT_TRUE(conn2 != nullptr); 3691 ASSERT_TRUE(conn2 != nullptr);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
3724 // Starts with ICEROLE_CONTROLLING. 3727 // Starts with ICEROLE_CONTROLLING.
3725 PrepareChannel(&ch); 3728 PrepareChannel(&ch);
3726 ch.MaybeStartGathering(); 3729 ch.MaybeStartGathering();
3727 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1)); 3730 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1));
3728 3731
3729 Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1); 3732 Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1);
3730 ASSERT_TRUE(conn != nullptr); 3733 ASSERT_TRUE(conn != nullptr);
3731 3734
3732 // Do an ICE restart, change the role, and expect the old port to have its 3735 // Do an ICE restart, change the role, and expect the old port to have its
3733 // role updated. 3736 // role updated.
3734 ch.SetIceCredentials(kIceUfrag[1], kIcePwd[1]); 3737 ch.SetIceParameters(kIceParams[1]);
3735 ch.MaybeStartGathering(); 3738 ch.MaybeStartGathering();
3736 ch.SetIceRole(ICEROLE_CONTROLLED); 3739 ch.SetIceRole(ICEROLE_CONTROLLED);
3737 EXPECT_EQ(ICEROLE_CONTROLLED, conn->port()->GetIceRole()); 3740 EXPECT_EQ(ICEROLE_CONTROLLED, conn->port()->GetIceRole());
3738 } 3741 }
3739 3742
3740 // Test that after some amount of time without receiving data, the connection 3743 // Test that after some amount of time without receiving data, the connection
3741 // will be destroyed. The port will only be destroyed after it is marked as 3744 // will be destroyed. The port will only be destroyed after it is marked as
3742 // "pruned." 3745 // "pruned."
3743 TEST_F(P2PTransportChannelPingTest, TestPortDestroyedAfterTimeoutAndPruned) { 3746 TEST_F(P2PTransportChannelPingTest, TestPortDestroyedAfterTimeoutAndPruned) {
3744 rtc::ScopedFakeClock fake_clock; 3747 rtc::ScopedFakeClock fake_clock;
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
3974 3977
3975 // TCP Relay/Relay is the next. 3978 // TCP Relay/Relay is the next.
3976 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE, 3979 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE,
3977 TCP_PROTOCOL_NAME); 3980 TCP_PROTOCOL_NAME);
3978 3981
3979 // Finally, Local/Relay will be pinged. 3982 // Finally, Local/Relay will be pinged.
3980 VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE); 3983 VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE);
3981 } 3984 }
3982 3985
3983 } // namespace cricket { 3986 } // namespace cricket {
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698