OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2009 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2009 The WebRTC Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 // form of connectivity to the other side. The test checks that the P2P | 175 // form of connectivity to the other side. The test checks that the P2P |
176 // negotiation successfully establishes connectivity within a certain time, | 176 // negotiation successfully establishes connectivity within a certain time, |
177 // and that the result is what we expect. | 177 // and that the result is what we expect. |
178 // Note that this class is a base class for use by other tests, who will provide | 178 // Note that this class is a base class for use by other tests, who will provide |
179 // specialized test behavior. | 179 // specialized test behavior. |
180 class P2PTransportChannelTestBase : public testing::Test, | 180 class P2PTransportChannelTestBase : public testing::Test, |
181 public rtc::MessageHandler, | 181 public rtc::MessageHandler, |
182 public sigslot::has_slots<> { | 182 public sigslot::has_slots<> { |
183 public: | 183 public: |
184 P2PTransportChannelTestBase() | 184 P2PTransportChannelTestBase() |
185 : main_(rtc::Thread::Current()), | 185 : pss_(new rtc::PhysicalSocketServer), |
186 pss_(new rtc::PhysicalSocketServer), | |
187 vss_(new rtc::VirtualSocketServer(pss_.get())), | 186 vss_(new rtc::VirtualSocketServer(pss_.get())), |
188 nss_(new rtc::NATSocketServer(vss_.get())), | 187 nss_(new rtc::NATSocketServer(vss_.get())), |
189 ss_(new rtc::FirewallSocketServer(nss_.get())), | 188 ss_(new rtc::FirewallSocketServer(nss_.get())), |
190 ss_scope_(ss_.get()), | 189 main_(ss_.get()), |
191 stun_server_(TestStunServer::Create(main_, kStunAddr)), | 190 stun_server_(TestStunServer::Create(&main_, kStunAddr)), |
192 turn_server_(main_, kTurnUdpIntAddr, kTurnUdpExtAddr), | 191 turn_server_(&main_, kTurnUdpIntAddr, kTurnUdpExtAddr), |
193 socks_server1_(ss_.get(), | 192 socks_server1_(ss_.get(), |
194 kSocksProxyAddrs[0], | 193 kSocksProxyAddrs[0], |
195 ss_.get(), | 194 ss_.get(), |
196 kSocksProxyAddrs[0]), | 195 kSocksProxyAddrs[0]), |
197 socks_server2_(ss_.get(), | 196 socks_server2_(ss_.get(), |
198 kSocksProxyAddrs[1], | 197 kSocksProxyAddrs[1], |
199 ss_.get(), | 198 ss_.get(), |
200 kSocksProxyAddrs[1]), | 199 kSocksProxyAddrs[1]), |
201 force_relay_(false) { | 200 force_relay_(false) { |
202 ep1_.role_ = ICEROLE_CONTROLLING; | 201 ep1_.role_ = ICEROLE_CONTROLLING; |
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
689 | 688 |
690 // We pass the candidates directly to the other side. | 689 // We pass the candidates directly to the other side. |
691 void OnCandidateGathered(IceTransportInternal* ch, const Candidate& c) { | 690 void OnCandidateGathered(IceTransportInternal* ch, const Candidate& c) { |
692 if (force_relay_ && c.type() != RELAY_PORT_TYPE) | 691 if (force_relay_ && c.type() != RELAY_PORT_TYPE) |
693 return; | 692 return; |
694 | 693 |
695 if (GetEndpoint(ch)->save_candidates_) { | 694 if (GetEndpoint(ch)->save_candidates_) { |
696 GetEndpoint(ch)->saved_candidates_.push_back( | 695 GetEndpoint(ch)->saved_candidates_.push_back( |
697 std::unique_ptr<CandidatesData>(new CandidatesData(ch, c))); | 696 std::unique_ptr<CandidatesData>(new CandidatesData(ch, c))); |
698 } else { | 697 } else { |
699 main_->Post(RTC_FROM_HERE, this, MSG_ADD_CANDIDATES, | 698 main_.Post(RTC_FROM_HERE, this, MSG_ADD_CANDIDATES, |
700 new CandidatesData(ch, c)); | 699 new CandidatesData(ch, c)); |
701 } | 700 } |
702 } | 701 } |
703 void OnSelectedCandidatePairChanged( | 702 void OnSelectedCandidatePairChanged( |
704 IceTransportInternal* transport_channel, | 703 IceTransportInternal* transport_channel, |
705 CandidatePairInterface* selected_candidate_pair, | 704 CandidatePairInterface* selected_candidate_pair, |
706 int last_sent_packet_id, | 705 int last_sent_packet_id, |
707 bool ready_to_send) { | 706 bool ready_to_send) { |
708 // Do not count if it switches to nullptr. This may happen if all | 707 // Do not count if it switches to nullptr. This may happen if all |
709 // connections timed out. | 708 // connections timed out. |
710 if (selected_candidate_pair != nullptr) { | 709 if (selected_candidate_pair != nullptr) { |
711 ++selected_candidate_pair_switches_; | 710 ++selected_candidate_pair_switches_; |
712 } | 711 } |
713 } | 712 } |
714 | 713 |
715 int reset_selected_candidate_pair_switches() { | 714 int reset_selected_candidate_pair_switches() { |
716 int switches = selected_candidate_pair_switches_; | 715 int switches = selected_candidate_pair_switches_; |
717 selected_candidate_pair_switches_ = 0; | 716 selected_candidate_pair_switches_ = 0; |
718 return switches; | 717 return switches; |
719 } | 718 } |
720 | 719 |
721 void PauseCandidates(int endpoint) { | 720 void PauseCandidates(int endpoint) { |
722 GetEndpoint(endpoint)->save_candidates_ = true; | 721 GetEndpoint(endpoint)->save_candidates_ = true; |
723 } | 722 } |
724 | 723 |
725 void OnCandidatesRemoved(IceTransportInternal* ch, | 724 void OnCandidatesRemoved(IceTransportInternal* ch, |
726 const std::vector<Candidate>& candidates) { | 725 const std::vector<Candidate>& candidates) { |
727 // Candidate removals are not paused. | 726 // Candidate removals are not paused. |
728 CandidatesData* candidates_data = new CandidatesData(ch, candidates); | 727 CandidatesData* candidates_data = new CandidatesData(ch, candidates); |
729 main_->Post(RTC_FROM_HERE, this, MSG_REMOVE_CANDIDATES, candidates_data); | 728 main_.Post(RTC_FROM_HERE, this, MSG_REMOVE_CANDIDATES, candidates_data); |
730 } | 729 } |
731 | 730 |
732 // Tcp candidate verification has to be done when they are generated. | 731 // Tcp candidate verification has to be done when they are generated. |
733 void VerifySavedTcpCandidates(int endpoint, const std::string& tcptype) { | 732 void VerifySavedTcpCandidates(int endpoint, const std::string& tcptype) { |
734 for (auto& data : GetEndpoint(endpoint)->saved_candidates_) { | 733 for (auto& data : GetEndpoint(endpoint)->saved_candidates_) { |
735 for (auto& candidate : data->candidates) { | 734 for (auto& candidate : data->candidates) { |
736 EXPECT_EQ(candidate.protocol(), TCP_PROTOCOL_NAME); | 735 EXPECT_EQ(candidate.protocol(), TCP_PROTOCOL_NAME); |
737 EXPECT_EQ(candidate.tcptype(), tcptype); | 736 EXPECT_EQ(candidate.tcptype(), tcptype); |
738 if (candidate.tcptype() == TCPTYPE_ACTIVE_STR) { | 737 if (candidate.tcptype() == TCPTYPE_ACTIVE_STR) { |
739 EXPECT_EQ(candidate.address().port(), DISCARD_PORT); | 738 EXPECT_EQ(candidate.address().port(), DISCARD_PORT); |
740 } else if (candidate.tcptype() == TCPTYPE_PASSIVE_STR) { | 739 } else if (candidate.tcptype() == TCPTYPE_PASSIVE_STR) { |
741 EXPECT_NE(candidate.address().port(), DISCARD_PORT); | 740 EXPECT_NE(candidate.address().port(), DISCARD_PORT); |
742 } else { | 741 } else { |
743 FAIL() << "Unknown tcptype: " << candidate.tcptype(); | 742 FAIL() << "Unknown tcptype: " << candidate.tcptype(); |
744 } | 743 } |
745 } | 744 } |
746 } | 745 } |
747 } | 746 } |
748 | 747 |
749 void ResumeCandidates(int endpoint) { | 748 void ResumeCandidates(int endpoint) { |
750 Endpoint* ed = GetEndpoint(endpoint); | 749 Endpoint* ed = GetEndpoint(endpoint); |
751 for (auto& candidate : ed->saved_candidates_) { | 750 for (auto& candidate : ed->saved_candidates_) { |
752 main_->Post(RTC_FROM_HERE, this, MSG_ADD_CANDIDATES, candidate.release()); | 751 main_.Post(RTC_FROM_HERE, this, MSG_ADD_CANDIDATES, candidate.release()); |
753 } | 752 } |
754 ed->saved_candidates_.clear(); | 753 ed->saved_candidates_.clear(); |
755 ed->save_candidates_ = false; | 754 ed->save_candidates_ = false; |
756 } | 755 } |
757 | 756 |
758 void OnMessage(rtc::Message* msg) { | 757 void OnMessage(rtc::Message* msg) { |
759 switch (msg->message_id) { | 758 switch (msg->message_id) { |
760 case MSG_ADD_CANDIDATES: { | 759 case MSG_ADD_CANDIDATES: { |
761 std::unique_ptr<CandidatesData> data( | 760 std::unique_ptr<CandidatesData> data( |
762 static_cast<CandidatesData*>(msg->pdata)); | 761 static_cast<CandidatesData*>(msg->pdata)); |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
868 | 867 |
869 void ConnectSignalNominated(Connection* conn) { | 868 void ConnectSignalNominated(Connection* conn) { |
870 conn->SignalNominated.connect(this, | 869 conn->SignalNominated.connect(this, |
871 &P2PTransportChannelTestBase::OnNominated); | 870 &P2PTransportChannelTestBase::OnNominated); |
872 } | 871 } |
873 | 872 |
874 void OnNominated(Connection* conn) { nominated_ = true; } | 873 void OnNominated(Connection* conn) { nominated_ = true; } |
875 bool nominated() { return nominated_; } | 874 bool nominated() { return nominated_; } |
876 | 875 |
877 private: | 876 private: |
878 rtc::Thread* main_; | |
879 std::unique_ptr<rtc::PhysicalSocketServer> pss_; | 877 std::unique_ptr<rtc::PhysicalSocketServer> pss_; |
880 std::unique_ptr<rtc::VirtualSocketServer> vss_; | 878 std::unique_ptr<rtc::VirtualSocketServer> vss_; |
881 std::unique_ptr<rtc::NATSocketServer> nss_; | 879 std::unique_ptr<rtc::NATSocketServer> nss_; |
882 std::unique_ptr<rtc::FirewallSocketServer> ss_; | 880 std::unique_ptr<rtc::FirewallSocketServer> ss_; |
883 rtc::SocketServerScope ss_scope_; | 881 rtc::AutoSocketServerThread main_; |
884 std::unique_ptr<TestStunServer> stun_server_; | 882 std::unique_ptr<TestStunServer> stun_server_; |
885 TestTurnServer turn_server_; | 883 TestTurnServer turn_server_; |
886 rtc::SocksProxyServer socks_server1_; | 884 rtc::SocksProxyServer socks_server1_; |
887 rtc::SocksProxyServer socks_server2_; | 885 rtc::SocksProxyServer socks_server2_; |
888 Endpoint ep1_; | 886 Endpoint ep1_; |
889 Endpoint ep2_; | 887 Endpoint ep2_; |
890 RemoteIceParameterSource remote_ice_parameter_source_ = FROM_CANDIDATE; | 888 RemoteIceParameterSource remote_ice_parameter_source_ = FROM_CANDIDATE; |
891 bool force_relay_; | 889 bool force_relay_; |
892 int selected_candidate_pair_switches_ = 0; | 890 int selected_candidate_pair_switches_ = 0; |
893 | 891 |
(...skipping 2033 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2927 } | 2925 } |
2928 | 2926 |
2929 // A collection of tests which tests a single P2PTransportChannel by sending | 2927 // A collection of tests which tests a single P2PTransportChannel by sending |
2930 // pings. | 2928 // pings. |
2931 class P2PTransportChannelPingTest : public testing::Test, | 2929 class P2PTransportChannelPingTest : public testing::Test, |
2932 public sigslot::has_slots<> { | 2930 public sigslot::has_slots<> { |
2933 public: | 2931 public: |
2934 P2PTransportChannelPingTest() | 2932 P2PTransportChannelPingTest() |
2935 : pss_(new rtc::PhysicalSocketServer), | 2933 : pss_(new rtc::PhysicalSocketServer), |
2936 vss_(new rtc::VirtualSocketServer(pss_.get())), | 2934 vss_(new rtc::VirtualSocketServer(pss_.get())), |
2937 ss_scope_(vss_.get()) {} | 2935 thread_(vss_.get()) {} |
2938 | 2936 |
2939 protected: | 2937 protected: |
2940 void PrepareChannel(P2PTransportChannel* ch) { | 2938 void PrepareChannel(P2PTransportChannel* ch) { |
2941 ch->SetIceRole(ICEROLE_CONTROLLING); | 2939 ch->SetIceRole(ICEROLE_CONTROLLING); |
2942 ch->SetIceParameters(kIceParams[0]); | 2940 ch->SetIceParameters(kIceParams[0]); |
2943 ch->SetRemoteIceParameters(kIceParams[1]); | 2941 ch->SetRemoteIceParameters(kIceParams[1]); |
2944 ch->SignalSelectedCandidatePairChanged.connect( | 2942 ch->SignalSelectedCandidatePairChanged.connect( |
2945 this, &P2PTransportChannelPingTest::OnSelectedCandidatePairChanged); | 2943 this, &P2PTransportChannelPingTest::OnSelectedCandidatePairChanged); |
2946 ch->SignalReadyToSend.connect(this, | 2944 ch->SignalReadyToSend.connect(this, |
2947 &P2PTransportChannelPingTest::OnReadyToSend); | 2945 &P2PTransportChannelPingTest::OnReadyToSend); |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3077 IceTransportState channel_state() { return channel_state_; } | 3075 IceTransportState channel_state() { return channel_state_; } |
3078 int reset_selected_candidate_pair_switches() { | 3076 int reset_selected_candidate_pair_switches() { |
3079 int switches = selected_candidate_pair_switches_; | 3077 int switches = selected_candidate_pair_switches_; |
3080 selected_candidate_pair_switches_ = 0; | 3078 selected_candidate_pair_switches_ = 0; |
3081 return switches; | 3079 return switches; |
3082 } | 3080 } |
3083 | 3081 |
3084 private: | 3082 private: |
3085 std::unique_ptr<rtc::PhysicalSocketServer> pss_; | 3083 std::unique_ptr<rtc::PhysicalSocketServer> pss_; |
3086 std::unique_ptr<rtc::VirtualSocketServer> vss_; | 3084 std::unique_ptr<rtc::VirtualSocketServer> vss_; |
3087 rtc::SocketServerScope ss_scope_; | 3085 rtc::AutoSocketServerThread thread_; |
3088 CandidatePairInterface* last_selected_candidate_pair_ = nullptr; | 3086 CandidatePairInterface* last_selected_candidate_pair_ = nullptr; |
3089 int selected_candidate_pair_switches_ = 0; | 3087 int selected_candidate_pair_switches_ = 0; |
3090 int last_sent_packet_id_ = -1; | 3088 int last_sent_packet_id_ = -1; |
3091 bool channel_ready_to_send_ = false; | 3089 bool channel_ready_to_send_ = false; |
3092 IceTransportState channel_state_ = IceTransportState::STATE_INIT; | 3090 IceTransportState channel_state_ = IceTransportState::STATE_INIT; |
3093 }; | 3091 }; |
3094 | 3092 |
3095 TEST_F(P2PTransportChannelPingTest, TestTriggeredChecks) { | 3093 TEST_F(P2PTransportChannelPingTest, TestTriggeredChecks) { |
3096 FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 3094 FakePortAllocator pa(rtc::Thread::Current(), nullptr); |
3097 P2PTransportChannel ch("trigger checks", 1, &pa); | 3095 P2PTransportChannel ch("trigger checks", 1, &pa); |
(...skipping 1297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4395 | 4393 |
4396 // TCP Relay/Relay is the next. | 4394 // TCP Relay/Relay is the next. |
4397 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE, | 4395 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE, |
4398 TCP_PROTOCOL_NAME); | 4396 TCP_PROTOCOL_NAME); |
4399 | 4397 |
4400 // Finally, Local/Relay will be pinged. | 4398 // Finally, Local/Relay will be pinged. |
4401 VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE); | 4399 VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE); |
4402 } | 4400 } |
4403 | 4401 |
4404 } // namespace cricket { | 4402 } // namespace cricket { |
OLD | NEW |