| 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 853 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 864 EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, | 864 EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 865 kDefaultAllocationTimeout, fake_clock); | 865 kDefaultAllocationTimeout, fake_clock); |
| 866 EXPECT_EQ(1U, candidates_.size()); | 866 EXPECT_EQ(1U, candidates_.size()); |
| 867 } | 867 } |
| 868 | 868 |
| 869 // Tests that we can get all the desired addresses successfully. | 869 // Tests that we can get all the desired addresses successfully. |
| 870 TEST_F(BasicPortAllocatorTest, TestGetAllPortsWithMinimumStepDelay) { | 870 TEST_F(BasicPortAllocatorTest, TestGetAllPortsWithMinimumStepDelay) { |
| 871 AddInterface(kClientAddr); | 871 AddInterface(kClientAddr); |
| 872 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); | 872 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); |
| 873 session_->StartGettingPorts(); | 873 session_->StartGettingPorts(); |
| 874 ASSERT_EQ_SIMULATED_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout, | 874 ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 875 fake_clock); | 875 kDefaultAllocationTimeout, fake_clock); |
| 876 EXPECT_EQ(7U, candidates_.size()); |
| 876 EXPECT_EQ(4U, ports_.size()); | 877 EXPECT_EQ(4U, ports_.size()); |
| 877 EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr); | 878 EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr); |
| 878 EXPECT_PRED4(HasCandidate, candidates_, "stun", "udp", kClientAddr); | 879 EXPECT_PRED4(HasCandidate, candidates_, "stun", "udp", kClientAddr); |
| 879 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpIntAddr); | 880 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpIntAddr); |
| 880 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpExtAddr); | 881 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpExtAddr); |
| 881 EXPECT_PRED4(HasCandidate, candidates_, "relay", "tcp", kRelayTcpIntAddr); | 882 EXPECT_PRED4(HasCandidate, candidates_, "relay", "tcp", kRelayTcpIntAddr); |
| 882 EXPECT_PRED4(HasCandidate, candidates_, "local", "tcp", kClientAddr); | 883 EXPECT_PRED4(HasCandidate, candidates_, "local", "tcp", kClientAddr); |
| 883 EXPECT_PRED4(HasCandidate, candidates_, "relay", "ssltcp", | 884 EXPECT_PRED4(HasCandidate, candidates_, "relay", "ssltcp", |
| 884 kRelaySslTcpIntAddr); | 885 kRelaySslTcpIntAddr); |
| 885 EXPECT_TRUE(candidate_allocation_done_); | |
| 886 } | 886 } |
| 887 | 887 |
| 888 // Test that when the same network interface is brought down and up, the | 888 // Test that when the same network interface is brought down and up, the |
| 889 // port allocator session will restart a new allocation sequence if | 889 // port allocator session will restart a new allocation sequence if |
| 890 // it is not stopped. | 890 // it is not stopped. |
| 891 TEST_F(BasicPortAllocatorTest, TestSameNetworkDownAndUpWhenSessionNotStopped) { | 891 TEST_F(BasicPortAllocatorTest, TestSameNetworkDownAndUpWhenSessionNotStopped) { |
| 892 std::string if_name("test_net0"); | 892 std::string if_name("test_net0"); |
| 893 AddInterface(kClientAddr, if_name); | 893 AddInterface(kClientAddr, if_name); |
| 894 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); | 894 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); |
| 895 session_->StartGettingPorts(); | 895 session_->StartGettingPorts(); |
| 896 ASSERT_EQ_SIMULATED_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout, | 896 ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 897 fake_clock); | 897 kDefaultAllocationTimeout, fake_clock); |
| 898 EXPECT_EQ(7U, candidates_.size()); |
| 898 EXPECT_EQ(4U, ports_.size()); | 899 EXPECT_EQ(4U, ports_.size()); |
| 899 EXPECT_TRUE(candidate_allocation_done_); | |
| 900 candidate_allocation_done_ = false; | 900 candidate_allocation_done_ = false; |
| 901 candidates_.clear(); | 901 candidates_.clear(); |
| 902 ports_.clear(); | 902 ports_.clear(); |
| 903 | 903 |
| 904 // Disable socket creation to simulate the network interface being down. When |
| 905 // no network interfaces are available, BasicPortAllocator will fall back to |
| 906 // binding to the "ANY" address, so we need to make sure that fails too. |
| 907 fss_->set_tcp_sockets_enabled(false); |
| 908 fss_->set_udp_sockets_enabled(false); |
| 904 RemoveInterface(kClientAddr); | 909 RemoveInterface(kClientAddr); |
| 905 ASSERT_EQ_SIMULATED_WAIT(0U, candidates_.size(), kDefaultAllocationTimeout, | 910 SIMULATED_WAIT(false, 1000, fake_clock); |
| 906 fake_clock); | 911 EXPECT_EQ(0U, candidates_.size()); |
| 907 EXPECT_EQ(0U, ports_.size()); | 912 ports_.clear(); |
| 908 EXPECT_FALSE(candidate_allocation_done_); | |
| 909 | 913 |
| 910 // When the same interfaces are added again, new candidates/ports should be | 914 // When the same interfaces are added again, new candidates/ports should be |
| 911 // generated. | 915 // generated. |
| 916 fss_->set_tcp_sockets_enabled(true); |
| 917 fss_->set_udp_sockets_enabled(true); |
| 912 AddInterface(kClientAddr, if_name); | 918 AddInterface(kClientAddr, if_name); |
| 913 ASSERT_EQ_SIMULATED_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout, | 919 ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 914 fake_clock); | 920 kDefaultAllocationTimeout, fake_clock); |
| 921 EXPECT_EQ(7U, candidates_.size()); |
| 915 EXPECT_EQ(4U, ports_.size()); | 922 EXPECT_EQ(4U, ports_.size()); |
| 916 EXPECT_TRUE(candidate_allocation_done_); | |
| 917 } | 923 } |
| 918 | 924 |
| 919 // Test that when the same network interface is brought down and up, the | 925 // Test that when the same network interface is brought down and up, the |
| 920 // port allocator session will not restart a new allocation sequence if | 926 // port allocator session will not restart a new allocation sequence if |
| 921 // it is stopped. | 927 // it is stopped. |
| 922 TEST_F(BasicPortAllocatorTest, TestSameNetworkDownAndUpWhenSessionStopped) { | 928 TEST_F(BasicPortAllocatorTest, TestSameNetworkDownAndUpWhenSessionStopped) { |
| 923 std::string if_name("test_net0"); | 929 std::string if_name("test_net0"); |
| 924 AddInterface(kClientAddr, if_name); | 930 AddInterface(kClientAddr, if_name); |
| 925 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); | 931 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); |
| 926 session_->StartGettingPorts(); | 932 session_->StartGettingPorts(); |
| 927 ASSERT_EQ_SIMULATED_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout, | 933 ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 928 fake_clock); | 934 kDefaultAllocationTimeout, fake_clock); |
| 935 EXPECT_EQ(7U, candidates_.size()); |
| 929 EXPECT_EQ(4U, ports_.size()); | 936 EXPECT_EQ(4U, ports_.size()); |
| 930 EXPECT_TRUE(candidate_allocation_done_); | |
| 931 session_->StopGettingPorts(); | 937 session_->StopGettingPorts(); |
| 932 candidates_.clear(); | 938 candidates_.clear(); |
| 933 ports_.clear(); | 939 ports_.clear(); |
| 934 | 940 |
| 935 RemoveInterface(kClientAddr); | 941 RemoveInterface(kClientAddr); |
| 936 ASSERT_EQ_SIMULATED_WAIT(0U, candidates_.size(), kDefaultAllocationTimeout, | 942 // Wait one (simulated) second and then verify no new candidates have |
| 937 fake_clock); | 943 // appeared. |
| 944 SIMULATED_WAIT(false, 1000, fake_clock); |
| 945 EXPECT_EQ(0U, candidates_.size()); |
| 938 EXPECT_EQ(0U, ports_.size()); | 946 EXPECT_EQ(0U, ports_.size()); |
| 939 | 947 |
| 940 // When the same interfaces are added again, new candidates/ports should not | 948 // When the same interfaces are added again, new candidates/ports should not |
| 941 // be generated because the session has stopped. | 949 // be generated because the session has stopped. |
| 942 AddInterface(kClientAddr, if_name); | 950 AddInterface(kClientAddr, if_name); |
| 943 ASSERT_EQ_SIMULATED_WAIT(0U, candidates_.size(), kDefaultAllocationTimeout, | 951 SIMULATED_WAIT(false, 1000, fake_clock); |
| 944 fake_clock); | 952 EXPECT_EQ(0U, candidates_.size()); |
| 945 EXPECT_EQ(0U, ports_.size()); | 953 EXPECT_EQ(0U, ports_.size()); |
| 946 EXPECT_TRUE(candidate_allocation_done_); | |
| 947 } | 954 } |
| 948 | 955 |
| 949 // Verify candidates with default step delay of 1sec. | 956 // Verify candidates with default step delay of 1sec. |
| 950 TEST_F(BasicPortAllocatorTest, TestGetAllPortsWithOneSecondStepDelay) { | 957 TEST_F(BasicPortAllocatorTest, TestGetAllPortsWithOneSecondStepDelay) { |
| 951 AddInterface(kClientAddr); | 958 AddInterface(kClientAddr); |
| 952 allocator_->set_step_delay(kDefaultStepDelay); | 959 allocator_->set_step_delay(kDefaultStepDelay); |
| 953 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); | 960 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); |
| 954 session_->StartGettingPorts(); | 961 session_->StartGettingPorts(); |
| 955 ASSERT_EQ_SIMULATED_WAIT(2U, candidates_.size(), 1000, fake_clock); | 962 ASSERT_EQ_SIMULATED_WAIT(2U, candidates_.size(), 1000, fake_clock); |
| 956 EXPECT_EQ(2U, ports_.size()); | 963 EXPECT_EQ(2U, ports_.size()); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 968 EXPECT_EQ(4U, ports_.size()); | 975 EXPECT_EQ(4U, ports_.size()); |
| 969 EXPECT_TRUE(candidate_allocation_done_); | 976 EXPECT_TRUE(candidate_allocation_done_); |
| 970 // If we Stop gathering now, we shouldn't get a second "done" callback. | 977 // If we Stop gathering now, we shouldn't get a second "done" callback. |
| 971 session_->StopGettingPorts(); | 978 session_->StopGettingPorts(); |
| 972 } | 979 } |
| 973 | 980 |
| 974 TEST_F(BasicPortAllocatorTest, TestSetupVideoRtpPortsWithNormalSendBuffers) { | 981 TEST_F(BasicPortAllocatorTest, TestSetupVideoRtpPortsWithNormalSendBuffers) { |
| 975 AddInterface(kClientAddr); | 982 AddInterface(kClientAddr); |
| 976 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP, CN_VIDEO)); | 983 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP, CN_VIDEO)); |
| 977 session_->StartGettingPorts(); | 984 session_->StartGettingPorts(); |
| 978 ASSERT_EQ_SIMULATED_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout, | 985 ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 979 fake_clock); | 986 kDefaultAllocationTimeout, fake_clock); |
| 980 EXPECT_TRUE(candidate_allocation_done_); | 987 EXPECT_EQ(7U, candidates_.size()); |
| 981 // If we Stop gathering now, we shouldn't get a second "done" callback. | 988 // If we Stop gathering now, we shouldn't get a second "done" callback. |
| 982 session_->StopGettingPorts(); | 989 session_->StopGettingPorts(); |
| 983 | 990 |
| 984 // All ports should have unset send-buffer sizes. | 991 // All ports should have unset send-buffer sizes. |
| 985 CheckSendBufferSizesOfAllPorts(-1); | 992 CheckSendBufferSizesOfAllPorts(-1); |
| 986 } | 993 } |
| 987 | 994 |
| 988 // Tests that we can get callback after StopGetAllPorts. | 995 // Tests that we can get callback after StopGetAllPorts when called in the |
| 996 // middle of gathering. |
| 989 TEST_F(BasicPortAllocatorTest, TestStopGetAllPorts) { | 997 TEST_F(BasicPortAllocatorTest, TestStopGetAllPorts) { |
| 990 AddInterface(kClientAddr); | 998 AddInterface(kClientAddr); |
| 991 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); | 999 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); |
| 992 session_->StartGettingPorts(); | 1000 session_->StartGettingPorts(); |
| 993 ASSERT_EQ_WAIT(2U, candidates_.size(), kDefaultAllocationTimeout); | 1001 ASSERT_EQ_SIMULATED_WAIT(2U, candidates_.size(), kDefaultAllocationTimeout, |
| 1002 fake_clock); |
| 994 EXPECT_EQ(2U, ports_.size()); | 1003 EXPECT_EQ(2U, ports_.size()); |
| 995 session_->StopGettingPorts(); | 1004 session_->StopGettingPorts(); |
| 996 EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); | 1005 EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 1006 kDefaultAllocationTimeout, fake_clock); |
| 997 } | 1007 } |
| 998 | 1008 |
| 999 // Test that we restrict client ports appropriately when a port range is set. | 1009 // Test that we restrict client ports appropriately when a port range is set. |
| 1000 // We check the candidates for udp/stun/tcp ports, and the from address | 1010 // We check the candidates for udp/stun/tcp ports, and the from address |
| 1001 // for relay ports. | 1011 // for relay ports. |
| 1002 TEST_F(BasicPortAllocatorTest, TestGetAllPortsPortRange) { | 1012 TEST_F(BasicPortAllocatorTest, TestGetAllPortsPortRange) { |
| 1003 AddInterface(kClientAddr); | 1013 AddInterface(kClientAddr); |
| 1004 // Check that an invalid port range fails. | 1014 // Check that an invalid port range fails. |
| 1005 EXPECT_FALSE(SetPortRange(kMaxPort, kMinPort)); | 1015 EXPECT_FALSE(SetPortRange(kMaxPort, kMinPort)); |
| 1006 // Check that a null port range succeeds. | 1016 // Check that a null port range succeeds. |
| 1007 EXPECT_TRUE(SetPortRange(0, 0)); | 1017 EXPECT_TRUE(SetPortRange(0, 0)); |
| 1008 // Check that a valid port range succeeds. | 1018 // Check that a valid port range succeeds. |
| 1009 EXPECT_TRUE(SetPortRange(kMinPort, kMaxPort)); | 1019 EXPECT_TRUE(SetPortRange(kMinPort, kMaxPort)); |
| 1010 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); | 1020 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); |
| 1011 session_->StartGettingPorts(); | 1021 session_->StartGettingPorts(); |
| 1012 ASSERT_EQ_SIMULATED_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout, | 1022 ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 1013 fake_clock); | 1023 kDefaultAllocationTimeout, fake_clock); |
| 1024 EXPECT_EQ(7U, candidates_.size()); |
| 1014 EXPECT_EQ(4U, ports_.size()); | 1025 EXPECT_EQ(4U, ports_.size()); |
| 1015 | 1026 |
| 1016 int num_nonrelay_candidates = 0; | 1027 int num_nonrelay_candidates = 0; |
| 1017 for (const Candidate& candidate : candidates_) { | 1028 for (const Candidate& candidate : candidates_) { |
| 1018 // Check the port number for the UDP/STUN/TCP port objects. | 1029 // Check the port number for the UDP/STUN/TCP port objects. |
| 1019 if (candidate.type() != RELAY_PORT_TYPE) { | 1030 if (candidate.type() != RELAY_PORT_TYPE) { |
| 1020 EXPECT_PRED3(CheckPort, candidate.address(), kMinPort, kMaxPort); | 1031 EXPECT_PRED3(CheckPort, candidate.address(), kMinPort, kMaxPort); |
| 1021 ++num_nonrelay_candidates; | 1032 ++num_nonrelay_candidates; |
| 1022 } | 1033 } |
| 1023 } | 1034 } |
| 1024 EXPECT_EQ(3, num_nonrelay_candidates); | 1035 EXPECT_EQ(3, num_nonrelay_candidates); |
| 1025 // Check the port number used to connect to the relay server. | 1036 // Check the port number used to connect to the relay server. |
| 1026 EXPECT_PRED3(CheckPort, relay_server_.GetConnection(0).source(), kMinPort, | 1037 EXPECT_PRED3(CheckPort, relay_server_.GetConnection(0).source(), kMinPort, |
| 1027 kMaxPort); | 1038 kMaxPort); |
| 1028 EXPECT_TRUE(candidate_allocation_done_); | |
| 1029 } | 1039 } |
| 1030 | 1040 |
| 1031 // Test that if we have no network adapters, we bind to the ANY address and | 1041 // Test that if we have no network adapters, we bind to the ANY address and |
| 1032 // still get non-host candidates. | 1042 // still get non-host candidates. |
| 1033 TEST_F(BasicPortAllocatorTest, TestGetAllPortsNoAdapters) { | 1043 TEST_F(BasicPortAllocatorTest, TestGetAllPortsNoAdapters) { |
| 1034 // Default config uses GTURN and no NAT, so replace that with the | 1044 // Default config uses GTURN and no NAT, so replace that with the |
| 1035 // desired setup (NAT, STUN server, TURN server, UDP/TCP). | 1045 // desired setup (NAT, STUN server, TURN server, UDP/TCP). |
| 1036 ResetWithStunServerAndNat(kStunAddr); | 1046 ResetWithStunServerAndNat(kStunAddr); |
| 1037 turn_server_.AddInternalSocket(kTurnTcpIntAddr, PROTO_TCP); | 1047 turn_server_.AddInternalSocket(kTurnTcpIntAddr, PROTO_TCP); |
| 1038 AddTurnServers(kTurnUdpIntAddr, kTurnTcpIntAddr); | 1048 AddTurnServers(kTurnUdpIntAddr, kTurnTcpIntAddr); |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1211 EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, 1000, fake_clock); | 1221 EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, 1000, fake_clock); |
| 1212 EXPECT_EQ(0U, candidates_.size()); | 1222 EXPECT_EQ(0U, candidates_.size()); |
| 1213 } | 1223 } |
| 1214 | 1224 |
| 1215 // Test that we don't crash or malfunction if we can't create UDP sockets. | 1225 // Test that we don't crash or malfunction if we can't create UDP sockets. |
| 1216 TEST_F(BasicPortAllocatorTest, TestGetAllPortsNoUdpSockets) { | 1226 TEST_F(BasicPortAllocatorTest, TestGetAllPortsNoUdpSockets) { |
| 1217 AddInterface(kClientAddr); | 1227 AddInterface(kClientAddr); |
| 1218 fss_->set_udp_sockets_enabled(false); | 1228 fss_->set_udp_sockets_enabled(false); |
| 1219 EXPECT_TRUE(CreateSession(1)); | 1229 EXPECT_TRUE(CreateSession(1)); |
| 1220 session_->StartGettingPorts(); | 1230 session_->StartGettingPorts(); |
| 1221 ASSERT_EQ_SIMULATED_WAIT(5U, candidates_.size(), kDefaultAllocationTimeout, | 1231 ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 1222 fake_clock); | 1232 kDefaultAllocationTimeout, fake_clock); |
| 1233 EXPECT_EQ(5U, candidates_.size()); |
| 1223 EXPECT_EQ(2U, ports_.size()); | 1234 EXPECT_EQ(2U, ports_.size()); |
| 1224 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpIntAddr); | 1235 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpIntAddr); |
| 1225 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpExtAddr); | 1236 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpExtAddr); |
| 1226 EXPECT_PRED4(HasCandidate, candidates_, "relay", "tcp", kRelayTcpIntAddr); | 1237 EXPECT_PRED4(HasCandidate, candidates_, "relay", "tcp", kRelayTcpIntAddr); |
| 1227 EXPECT_PRED4(HasCandidate, candidates_, "local", "tcp", kClientAddr); | 1238 EXPECT_PRED4(HasCandidate, candidates_, "local", "tcp", kClientAddr); |
| 1228 EXPECT_PRED4(HasCandidate, candidates_, "relay", "ssltcp", | 1239 EXPECT_PRED4(HasCandidate, candidates_, "relay", "ssltcp", |
| 1229 kRelaySslTcpIntAddr); | 1240 kRelaySslTcpIntAddr); |
| 1230 EXPECT_TRUE(candidate_allocation_done_); | |
| 1231 } | 1241 } |
| 1232 | 1242 |
| 1233 #endif // if !defined(ADDRESS_SANITIZER) | 1243 #endif // if !defined(ADDRESS_SANITIZER) |
| 1234 | 1244 |
| 1235 // Test that we don't crash or malfunction if we can't create UDP sockets or | 1245 // Test that we don't crash or malfunction if we can't create UDP sockets or |
| 1236 // listen on TCP sockets. We still give out a local TCP address, since | 1246 // listen on TCP sockets. We still give out a local TCP address, since |
| 1237 // apparently this is needed for the remote side to accept our connection. | 1247 // apparently this is needed for the remote side to accept our connection. |
| 1238 TEST_F(BasicPortAllocatorTest, TestGetAllPortsNoUdpSocketsNoTcpListen) { | 1248 TEST_F(BasicPortAllocatorTest, TestGetAllPortsNoUdpSocketsNoTcpListen) { |
| 1239 AddInterface(kClientAddr); | 1249 AddInterface(kClientAddr); |
| 1240 fss_->set_udp_sockets_enabled(false); | 1250 fss_->set_udp_sockets_enabled(false); |
| 1241 fss_->set_tcp_listen_enabled(false); | 1251 fss_->set_tcp_listen_enabled(false); |
| 1242 EXPECT_TRUE(CreateSession(1)); | 1252 EXPECT_TRUE(CreateSession(1)); |
| 1243 session_->StartGettingPorts(); | 1253 session_->StartGettingPorts(); |
| 1244 ASSERT_EQ_SIMULATED_WAIT(5U, candidates_.size(), kDefaultAllocationTimeout, | 1254 ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 1245 fake_clock); | 1255 kDefaultAllocationTimeout, fake_clock); |
| 1256 EXPECT_EQ(5U, candidates_.size()); |
| 1246 EXPECT_EQ(2U, ports_.size()); | 1257 EXPECT_EQ(2U, ports_.size()); |
| 1247 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpIntAddr); | 1258 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpIntAddr); |
| 1248 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpExtAddr); | 1259 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", kRelayUdpExtAddr); |
| 1249 EXPECT_PRED4(HasCandidate, candidates_, "relay", "tcp", kRelayTcpIntAddr); | 1260 EXPECT_PRED4(HasCandidate, candidates_, "relay", "tcp", kRelayTcpIntAddr); |
| 1250 EXPECT_PRED4(HasCandidate, candidates_, "local", "tcp", kClientAddr); | 1261 EXPECT_PRED4(HasCandidate, candidates_, "local", "tcp", kClientAddr); |
| 1251 EXPECT_PRED4(HasCandidate, candidates_, "relay", "ssltcp", | 1262 EXPECT_PRED4(HasCandidate, candidates_, "relay", "ssltcp", |
| 1252 kRelaySslTcpIntAddr); | 1263 kRelaySslTcpIntAddr); |
| 1253 EXPECT_TRUE(candidate_allocation_done_); | |
| 1254 } | 1264 } |
| 1255 | 1265 |
| 1256 // Test that we don't crash or malfunction if we can't create any sockets. | 1266 // Test that we don't crash or malfunction if we can't create any sockets. |
| 1257 // TODO(deadbeef): Find a way to exit early here. | 1267 // TODO(deadbeef): Find a way to exit early here. |
| 1258 TEST_F(BasicPortAllocatorTest, TestGetAllPortsNoSockets) { | 1268 TEST_F(BasicPortAllocatorTest, TestGetAllPortsNoSockets) { |
| 1259 AddInterface(kClientAddr); | 1269 AddInterface(kClientAddr); |
| 1260 fss_->set_tcp_sockets_enabled(false); | 1270 fss_->set_tcp_sockets_enabled(false); |
| 1261 fss_->set_udp_sockets_enabled(false); | 1271 fss_->set_udp_sockets_enabled(false); |
| 1262 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); | 1272 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); |
| 1263 session_->StartGettingPorts(); | 1273 session_->StartGettingPorts(); |
| 1264 WAIT(candidates_.size() > 0, 2000); | 1274 SIMULATED_WAIT(candidates_.size() > 0, 2000, fake_clock); |
| 1265 // TODO(deadbeef): Check candidate_allocation_done signal. | 1275 // TODO(deadbeef): Check candidate_allocation_done signal. |
| 1266 // In case of Relay, ports creation will succeed but sockets will fail. | 1276 // In case of Relay, ports creation will succeed but sockets will fail. |
| 1267 // There is no error reporting from RelayEntry to handle this failure. | 1277 // There is no error reporting from RelayEntry to handle this failure. |
| 1268 } | 1278 } |
| 1269 | 1279 |
| 1270 // Testing STUN timeout. | 1280 // Testing STUN timeout. |
| 1271 TEST_F(BasicPortAllocatorTest, TestGetAllPortsNoUdpAllowed) { | 1281 TEST_F(BasicPortAllocatorTest, TestGetAllPortsNoUdpAllowed) { |
| 1272 fss_->AddRule(false, rtc::FP_UDP, rtc::FD_ANY, kClientAddr); | 1282 fss_->AddRule(false, rtc::FP_UDP, rtc::FD_ANY, kClientAddr); |
| 1273 AddInterface(kClientAddr); | 1283 AddInterface(kClientAddr); |
| 1274 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); | 1284 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1309 EXPECT_EQ(2U, ports_.size()); | 1319 EXPECT_EQ(2U, ports_.size()); |
| 1310 // Candidates priorities should be different. | 1320 // Candidates priorities should be different. |
| 1311 EXPECT_NE(candidates_[0].priority(), candidates_[1].priority()); | 1321 EXPECT_NE(candidates_[0].priority(), candidates_[1].priority()); |
| 1312 } | 1322 } |
| 1313 | 1323 |
| 1314 // Test to verify ICE restart process. | 1324 // Test to verify ICE restart process. |
| 1315 TEST_F(BasicPortAllocatorTest, TestGetAllPortsRestarts) { | 1325 TEST_F(BasicPortAllocatorTest, TestGetAllPortsRestarts) { |
| 1316 AddInterface(kClientAddr); | 1326 AddInterface(kClientAddr); |
| 1317 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); | 1327 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); |
| 1318 session_->StartGettingPorts(); | 1328 session_->StartGettingPorts(); |
| 1319 EXPECT_EQ_SIMULATED_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout, | 1329 EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 1320 fake_clock); | 1330 kDefaultAllocationTimeout, fake_clock); |
| 1331 EXPECT_EQ(7U, candidates_.size()); |
| 1321 EXPECT_EQ(4U, ports_.size()); | 1332 EXPECT_EQ(4U, ports_.size()); |
| 1322 EXPECT_TRUE(candidate_allocation_done_); | |
| 1323 // TODO(deadbeef): Extend this to verify ICE restart. | 1333 // TODO(deadbeef): Extend this to verify ICE restart. |
| 1324 } | 1334 } |
| 1325 | 1335 |
| 1326 // Test that the allocator session uses the candidate filter it's created with, | 1336 // Test that the allocator session uses the candidate filter it's created with, |
| 1327 // rather than the filter of its parent allocator. | 1337 // rather than the filter of its parent allocator. |
| 1328 // The filter of the allocator should only affect the next gathering phase, | 1338 // The filter of the allocator should only affect the next gathering phase, |
| 1329 // according to JSEP, which means the *next* allocator session returned. | 1339 // according to JSEP, which means the *next* allocator session returned. |
| 1330 TEST_F(BasicPortAllocatorTest, TestSessionUsesOwnCandidateFilter) { | 1340 TEST_F(BasicPortAllocatorTest, TestSessionUsesOwnCandidateFilter) { |
| 1331 AddInterface(kClientAddr); | 1341 AddInterface(kClientAddr); |
| 1332 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); | 1342 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); |
| 1333 // Set candidate filter *after* creating the session. Should have no effect. | 1343 // Set candidate filter *after* creating the session. Should have no effect. |
| 1334 allocator().set_candidate_filter(CF_RELAY); | 1344 allocator().set_candidate_filter(CF_RELAY); |
| 1335 session_->StartGettingPorts(); | 1345 session_->StartGettingPorts(); |
| 1336 // 7 candidates and 4 ports is what we would normally get (see the | 1346 // 7 candidates and 4 ports is what we would normally get (see the |
| 1337 // TestGetAllPorts* tests). | 1347 // TestGetAllPorts* tests). |
| 1338 EXPECT_EQ_SIMULATED_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout, | 1348 EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 1339 fake_clock); | 1349 kDefaultAllocationTimeout, fake_clock); |
| 1350 EXPECT_EQ(7U, candidates_.size()); |
| 1340 EXPECT_EQ(4U, ports_.size()); | 1351 EXPECT_EQ(4U, ports_.size()); |
| 1341 EXPECT_TRUE(candidate_allocation_done_); | |
| 1342 } | 1352 } |
| 1343 | 1353 |
| 1344 // Test ICE candidate filter mechanism with options Relay/Host/Reflexive. | 1354 // Test ICE candidate filter mechanism with options Relay/Host/Reflexive. |
| 1345 // This test also verifies that when the allocator is only allowed to use | 1355 // This test also verifies that when the allocator is only allowed to use |
| 1346 // relay (i.e. IceTransportsType is relay), the raddr is an empty | 1356 // relay (i.e. IceTransportsType is relay), the raddr is an empty |
| 1347 // address with the correct family. This is to prevent any local | 1357 // address with the correct family. This is to prevent any local |
| 1348 // reflective address leakage in the sdp line. | 1358 // reflective address leakage in the sdp line. |
| 1349 TEST_F(BasicPortAllocatorTest, TestCandidateFilterWithRelayOnly) { | 1359 TEST_F(BasicPortAllocatorTest, TestCandidateFilterWithRelayOnly) { |
| 1350 AddInterface(kClientAddr); | 1360 AddInterface(kClientAddr); |
| 1351 // GTURN is not configured here. | 1361 // GTURN is not configured here. |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1417 for (const Candidate& candidate : candidates_) { | 1427 for (const Candidate& candidate : candidates_) { |
| 1418 EXPECT_EQ(std::string(LOCAL_PORT_TYPE), candidate.type()); | 1428 EXPECT_EQ(std::string(LOCAL_PORT_TYPE), candidate.type()); |
| 1419 } | 1429 } |
| 1420 } | 1430 } |
| 1421 | 1431 |
| 1422 // Test that we get the same ufrag and pwd for all candidates. | 1432 // Test that we get the same ufrag and pwd for all candidates. |
| 1423 TEST_F(BasicPortAllocatorTest, TestEnableSharedUfrag) { | 1433 TEST_F(BasicPortAllocatorTest, TestEnableSharedUfrag) { |
| 1424 AddInterface(kClientAddr); | 1434 AddInterface(kClientAddr); |
| 1425 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); | 1435 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); |
| 1426 session_->StartGettingPorts(); | 1436 session_->StartGettingPorts(); |
| 1427 ASSERT_EQ_SIMULATED_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout, | 1437 ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 1428 fake_clock); | 1438 kDefaultAllocationTimeout, fake_clock); |
| 1439 EXPECT_EQ(7U, candidates_.size()); |
| 1429 EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr); | 1440 EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr); |
| 1430 EXPECT_PRED4(HasCandidate, candidates_, "stun", "udp", kClientAddr); | 1441 EXPECT_PRED4(HasCandidate, candidates_, "stun", "udp", kClientAddr); |
| 1431 EXPECT_PRED4(HasCandidate, candidates_, "local", "tcp", kClientAddr); | 1442 EXPECT_PRED4(HasCandidate, candidates_, "local", "tcp", kClientAddr); |
| 1432 EXPECT_EQ(4U, ports_.size()); | 1443 EXPECT_EQ(4U, ports_.size()); |
| 1433 for (const Candidate& candidate : candidates_) { | 1444 for (const Candidate& candidate : candidates_) { |
| 1434 EXPECT_EQ(kIceUfrag0, candidate.username()); | 1445 EXPECT_EQ(kIceUfrag0, candidate.username()); |
| 1435 EXPECT_EQ(kIcePwd0, candidate.password()); | 1446 EXPECT_EQ(kIcePwd0, candidate.password()); |
| 1436 } | 1447 } |
| 1437 EXPECT_TRUE(candidate_allocation_done_); | |
| 1438 } | 1448 } |
| 1439 | 1449 |
| 1440 // Test that when PORTALLOCATOR_ENABLE_SHARED_SOCKET is enabled only one port | 1450 // Test that when PORTALLOCATOR_ENABLE_SHARED_SOCKET is enabled only one port |
| 1441 // is allocated for udp and stun. Also verify there is only one candidate | 1451 // is allocated for udp and stun. Also verify there is only one candidate |
| 1442 // (local) if stun candidate is same as local candidate, which will be the case | 1452 // (local) if stun candidate is same as local candidate, which will be the case |
| 1443 // in a public network like the below test. | 1453 // in a public network like the below test. |
| 1444 TEST_F(BasicPortAllocatorTest, TestSharedSocketWithoutNat) { | 1454 TEST_F(BasicPortAllocatorTest, TestSharedSocketWithoutNat) { |
| 1445 AddInterface(kClientAddr); | 1455 AddInterface(kClientAddr); |
| 1446 allocator_->set_flags(allocator().flags() | | 1456 allocator_->set_flags(allocator().flags() | |
| 1447 PORTALLOCATOR_ENABLE_SHARED_SOCKET); | 1457 PORTALLOCATOR_ENABLE_SHARED_SOCKET); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1486 AddTurnServers(kTurnUdpIntAddr, kTurnTcpIntAddr); | 1496 AddTurnServers(kTurnUdpIntAddr, kTurnTcpIntAddr); |
| 1487 | 1497 |
| 1488 allocator_->set_step_delay(kMinimumStepDelay); | 1498 allocator_->set_step_delay(kMinimumStepDelay); |
| 1489 allocator_->set_flags(allocator().flags() | | 1499 allocator_->set_flags(allocator().flags() | |
| 1490 PORTALLOCATOR_ENABLE_SHARED_SOCKET | | 1500 PORTALLOCATOR_ENABLE_SHARED_SOCKET | |
| 1491 PORTALLOCATOR_DISABLE_TCP); | 1501 PORTALLOCATOR_DISABLE_TCP); |
| 1492 | 1502 |
| 1493 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); | 1503 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); |
| 1494 session_->StartGettingPorts(); | 1504 session_->StartGettingPorts(); |
| 1495 | 1505 |
| 1496 ASSERT_EQ_SIMULATED_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout, | 1506 ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 1497 fake_clock); | 1507 kDefaultAllocationTimeout, fake_clock); |
| 1508 ASSERT_EQ(3U, candidates_.size()); |
| 1498 ASSERT_EQ(3U, ports_.size()); | 1509 ASSERT_EQ(3U, ports_.size()); |
| 1499 EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr); | 1510 EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr); |
| 1500 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", | 1511 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", |
| 1501 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)); | 1512 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)); |
| 1502 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", | 1513 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", |
| 1503 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)); | 1514 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)); |
| 1504 EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, | |
| 1505 kDefaultAllocationTimeout, fake_clock); | |
| 1506 EXPECT_EQ(3U, candidates_.size()); | |
| 1507 } | 1515 } |
| 1508 | 1516 |
| 1509 // Test that if prune_turn_ports is set, TCP TURN port will not be used | 1517 // Test that if prune_turn_ports is set, TCP TURN port will not be used |
| 1510 // if UDP TurnPort is used, given that TCP TURN port becomes ready first. | 1518 // if UDP TurnPort is used, given that TCP TURN port becomes ready first. |
| 1511 TEST_F(BasicPortAllocatorTest, | 1519 TEST_F(BasicPortAllocatorTest, |
| 1512 TestUdpTurnPortPrunesTcpTurnPortWithTcpPortReadyFirst) { | 1520 TestUdpTurnPortPrunesTcpTurnPortWithTcpPortReadyFirst) { |
| 1513 // UDP has longer delay than TCP so that TCP TURN port becomes ready first. | 1521 // UDP has longer delay than TCP so that TCP TURN port becomes ready first. |
| 1514 virtual_socket_server()->SetDelayOnAddress(kTurnUdpIntAddr, 200); | 1522 virtual_socket_server()->SetDelayOnAddress(kTurnUdpIntAddr, 200); |
| 1515 virtual_socket_server()->SetDelayOnAddress(kTurnTcpIntAddr, 100); | 1523 virtual_socket_server()->SetDelayOnAddress(kTurnTcpIntAddr, 100); |
| 1516 | 1524 |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1615 | 1623 |
| 1616 AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress()); | 1624 AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress()); |
| 1617 | 1625 |
| 1618 allocator_->set_flags(allocator().flags() | | 1626 allocator_->set_flags(allocator().flags() | |
| 1619 PORTALLOCATOR_ENABLE_SHARED_SOCKET | | 1627 PORTALLOCATOR_ENABLE_SHARED_SOCKET | |
| 1620 PORTALLOCATOR_DISABLE_TCP); | 1628 PORTALLOCATOR_DISABLE_TCP); |
| 1621 | 1629 |
| 1622 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); | 1630 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); |
| 1623 session_->StartGettingPorts(); | 1631 session_->StartGettingPorts(); |
| 1624 | 1632 |
| 1625 ASSERT_EQ_SIMULATED_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout, | 1633 ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 1626 fake_clock); | 1634 kDefaultAllocationTimeout, fake_clock); |
| 1635 EXPECT_EQ(3U, candidates_.size()); |
| 1627 ASSERT_EQ(2U, ports_.size()); | 1636 ASSERT_EQ(2U, ports_.size()); |
| 1628 EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr); | 1637 EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr); |
| 1629 EXPECT_PRED4(HasCandidate, candidates_, "stun", "udp", | 1638 EXPECT_PRED4(HasCandidate, candidates_, "stun", "udp", |
| 1630 rtc::SocketAddress(kNatUdpAddr.ipaddr(), 0)); | 1639 rtc::SocketAddress(kNatUdpAddr.ipaddr(), 0)); |
| 1631 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", | 1640 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", |
| 1632 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)); | 1641 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)); |
| 1633 EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, | 1642 EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 1634 kDefaultAllocationTimeout, fake_clock); | 1643 kDefaultAllocationTimeout, fake_clock); |
| 1635 EXPECT_EQ(3U, candidates_.size()); | |
| 1636 // Local port will be created first and then TURN port. | 1644 // Local port will be created first and then TURN port. |
| 1645 // TODO(deadbeef): This isn't something the BasicPortAllocator API contract |
| 1646 // guarantees... |
| 1637 EXPECT_EQ(2U, ports_[0]->Candidates().size()); | 1647 EXPECT_EQ(2U, ports_[0]->Candidates().size()); |
| 1638 EXPECT_EQ(1U, ports_[1]->Candidates().size()); | 1648 EXPECT_EQ(1U, ports_[1]->Candidates().size()); |
| 1639 } | 1649 } |
| 1640 | 1650 |
| 1641 // Test that when PORTALLOCATOR_ENABLE_SHARED_SOCKET is enabled and the TURN | 1651 // Test that when PORTALLOCATOR_ENABLE_SHARED_SOCKET is enabled and the TURN |
| 1642 // server is also used as the STUN server, we should get 'local', 'stun', and | 1652 // server is also used as the STUN server, we should get 'local', 'stun', and |
| 1643 // 'relay' candidates. | 1653 // 'relay' candidates. |
| 1644 TEST_F(BasicPortAllocatorTest, TestSharedSocketWithNatUsingTurnAsStun) { | 1654 TEST_F(BasicPortAllocatorTest, TestSharedSocketWithNatUsingTurnAsStun) { |
| 1645 AddInterface(kClientAddr); | 1655 AddInterface(kClientAddr); |
| 1646 // Use an empty SocketAddress to add a NAT without STUN server. | 1656 // Use an empty SocketAddress to add a NAT without STUN server. |
| 1647 ResetWithStunServerAndNat(SocketAddress()); | 1657 ResetWithStunServerAndNat(SocketAddress()); |
| 1648 AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress()); | 1658 AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress()); |
| 1649 | 1659 |
| 1650 // Must set the step delay to 0 to make sure the relay allocation phase is | 1660 // Must set the step delay to 0 to make sure the relay allocation phase is |
| 1651 // started before the STUN candidates are obtained, so that the STUN binding | 1661 // started before the STUN candidates are obtained, so that the STUN binding |
| 1652 // response is processed when both StunPort and TurnPort exist to reproduce | 1662 // response is processed when both StunPort and TurnPort exist to reproduce |
| 1653 // webrtc issue 3537. | 1663 // webrtc issue 3537. |
| 1654 allocator_->set_step_delay(0); | 1664 allocator_->set_step_delay(0); |
| 1655 allocator_->set_flags(allocator().flags() | | 1665 allocator_->set_flags(allocator().flags() | |
| 1656 PORTALLOCATOR_ENABLE_SHARED_SOCKET | | 1666 PORTALLOCATOR_ENABLE_SHARED_SOCKET | |
| 1657 PORTALLOCATOR_DISABLE_TCP); | 1667 PORTALLOCATOR_DISABLE_TCP); |
| 1658 | 1668 |
| 1659 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); | 1669 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); |
| 1660 session_->StartGettingPorts(); | 1670 session_->StartGettingPorts(); |
| 1661 | 1671 |
| 1662 ASSERT_EQ_SIMULATED_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout, | 1672 ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 1663 fake_clock); | 1673 kDefaultAllocationTimeout, fake_clock); |
| 1674 EXPECT_EQ(3U, candidates_.size()); |
| 1664 EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr); | 1675 EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr); |
| 1665 Candidate stun_candidate; | 1676 Candidate stun_candidate; |
| 1666 EXPECT_PRED5(FindCandidate, candidates_, "stun", "udp", | 1677 EXPECT_PRED5(FindCandidate, candidates_, "stun", "udp", |
| 1667 rtc::SocketAddress(kNatUdpAddr.ipaddr(), 0), &stun_candidate); | 1678 rtc::SocketAddress(kNatUdpAddr.ipaddr(), 0), &stun_candidate); |
| 1668 EXPECT_PRED5(HasCandidateWithRelatedAddr, candidates_, "relay", "udp", | 1679 EXPECT_PRED5(HasCandidateWithRelatedAddr, candidates_, "relay", "udp", |
| 1669 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0), | 1680 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0), |
| 1670 stun_candidate.address()); | 1681 stun_candidate.address()); |
| 1671 | 1682 |
| 1672 EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, | |
| 1673 kDefaultAllocationTimeout, fake_clock); | |
| 1674 EXPECT_EQ(3U, candidates_.size()); | |
| 1675 // Local port will be created first and then TURN port. | 1683 // Local port will be created first and then TURN port. |
| 1684 // TODO(deadbeef): This isn't something the BasicPortAllocator API contract |
| 1685 // guarantees... |
| 1676 EXPECT_EQ(2U, ports_[0]->Candidates().size()); | 1686 EXPECT_EQ(2U, ports_[0]->Candidates().size()); |
| 1677 EXPECT_EQ(1U, ports_[1]->Candidates().size()); | 1687 EXPECT_EQ(1U, ports_[1]->Candidates().size()); |
| 1678 } | 1688 } |
| 1679 | 1689 |
| 1680 // Test that when only a TCP TURN server is available, we do NOT use it as | 1690 // Test that when only a TCP TURN server is available, we do NOT use it as |
| 1681 // a UDP STUN server, as this could leak our IP address. Thus we should only | 1691 // a UDP STUN server, as this could leak our IP address. Thus we should only |
| 1682 // expect two ports, a UDPPort and TurnPort. | 1692 // expect two ports, a UDPPort and TurnPort. |
| 1683 TEST_F(BasicPortAllocatorTest, TestSharedSocketWithNatUsingTurnTcpOnly) { | 1693 TEST_F(BasicPortAllocatorTest, TestSharedSocketWithNatUsingTurnTcpOnly) { |
| 1684 turn_server_.AddInternalSocket(kTurnTcpIntAddr, PROTO_TCP); | 1694 turn_server_.AddInternalSocket(kTurnTcpIntAddr, PROTO_TCP); |
| 1685 AddInterface(kClientAddr); | 1695 AddInterface(kClientAddr); |
| 1686 ResetWithStunServerAndNat(rtc::SocketAddress()); | 1696 ResetWithStunServerAndNat(rtc::SocketAddress()); |
| 1687 AddTurnServers(rtc::SocketAddress(), kTurnTcpIntAddr); | 1697 AddTurnServers(rtc::SocketAddress(), kTurnTcpIntAddr); |
| 1688 | 1698 |
| 1689 allocator_->set_flags(allocator().flags() | | 1699 allocator_->set_flags(allocator().flags() | |
| 1690 PORTALLOCATOR_ENABLE_SHARED_SOCKET | | 1700 PORTALLOCATOR_ENABLE_SHARED_SOCKET | |
| 1691 PORTALLOCATOR_DISABLE_TCP); | 1701 PORTALLOCATOR_DISABLE_TCP); |
| 1692 | 1702 |
| 1693 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); | 1703 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); |
| 1694 session_->StartGettingPorts(); | 1704 session_->StartGettingPorts(); |
| 1695 | 1705 |
| 1696 ASSERT_EQ_SIMULATED_WAIT(2U, candidates_.size(), kDefaultAllocationTimeout, | 1706 ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 1697 fake_clock); | 1707 kDefaultAllocationTimeout, fake_clock); |
| 1708 EXPECT_EQ(2U, candidates_.size()); |
| 1698 ASSERT_EQ(2U, ports_.size()); | 1709 ASSERT_EQ(2U, ports_.size()); |
| 1699 EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr); | 1710 EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr); |
| 1700 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", | 1711 EXPECT_PRED4(HasCandidate, candidates_, "relay", "udp", |
| 1701 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)); | 1712 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)); |
| 1702 EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, | |
| 1703 kDefaultAllocationTimeout, fake_clock); | |
| 1704 EXPECT_EQ(2U, candidates_.size()); | |
| 1705 EXPECT_EQ(1U, ports_[0]->Candidates().size()); | 1713 EXPECT_EQ(1U, ports_[0]->Candidates().size()); |
| 1706 EXPECT_EQ(1U, ports_[1]->Candidates().size()); | 1714 EXPECT_EQ(1U, ports_[1]->Candidates().size()); |
| 1707 } | 1715 } |
| 1708 | 1716 |
| 1709 // Test that even when PORTALLOCATOR_ENABLE_SHARED_SOCKET is NOT enabled, the | 1717 // Test that even when PORTALLOCATOR_ENABLE_SHARED_SOCKET is NOT enabled, the |
| 1710 // TURN server is used as the STUN server and we get 'local', 'stun', and | 1718 // TURN server is used as the STUN server and we get 'local', 'stun', and |
| 1711 // 'relay' candidates. | 1719 // 'relay' candidates. |
| 1712 // TODO(deadbeef): Remove this test when support for non-shared socket mode | 1720 // TODO(deadbeef): Remove this test when support for non-shared socket mode |
| 1713 // is removed. | 1721 // is removed. |
| 1714 TEST_F(BasicPortAllocatorTest, TestNonSharedSocketWithNatUsingTurnAsStun) { | 1722 TEST_F(BasicPortAllocatorTest, TestNonSharedSocketWithNatUsingTurnAsStun) { |
| 1715 AddInterface(kClientAddr); | 1723 AddInterface(kClientAddr); |
| 1716 // Use an empty SocketAddress to add a NAT without STUN server. | 1724 // Use an empty SocketAddress to add a NAT without STUN server. |
| 1717 ResetWithStunServerAndNat(SocketAddress()); | 1725 ResetWithStunServerAndNat(SocketAddress()); |
| 1718 AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress()); | 1726 AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress()); |
| 1719 | 1727 |
| 1720 allocator_->set_flags(allocator().flags() | PORTALLOCATOR_DISABLE_TCP); | 1728 allocator_->set_flags(allocator().flags() | PORTALLOCATOR_DISABLE_TCP); |
| 1721 | 1729 |
| 1722 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); | 1730 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); |
| 1723 session_->StartGettingPorts(); | 1731 session_->StartGettingPorts(); |
| 1724 | 1732 |
| 1725 ASSERT_EQ_SIMULATED_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout, | 1733 ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 1726 fake_clock); | 1734 kDefaultAllocationTimeout, fake_clock); |
| 1735 EXPECT_EQ(3U, candidates_.size()); |
| 1727 ASSERT_EQ(3U, ports_.size()); | 1736 ASSERT_EQ(3U, ports_.size()); |
| 1728 EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr); | 1737 EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr); |
| 1729 Candidate stun_candidate; | 1738 Candidate stun_candidate; |
| 1730 EXPECT_PRED5(FindCandidate, candidates_, "stun", "udp", | 1739 EXPECT_PRED5(FindCandidate, candidates_, "stun", "udp", |
| 1731 rtc::SocketAddress(kNatUdpAddr.ipaddr(), 0), &stun_candidate); | 1740 rtc::SocketAddress(kNatUdpAddr.ipaddr(), 0), &stun_candidate); |
| 1732 Candidate turn_candidate; | 1741 Candidate turn_candidate; |
| 1733 EXPECT_PRED5(FindCandidate, candidates_, "relay", "udp", | 1742 EXPECT_PRED5(FindCandidate, candidates_, "relay", "udp", |
| 1734 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0), | 1743 rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0), |
| 1735 &turn_candidate); | 1744 &turn_candidate); |
| 1736 // Not using shared socket, so the STUN request's server reflexive address | 1745 // Not using shared socket, so the STUN request's server reflexive address |
| 1737 // should be different than the TURN request's server reflexive address. | 1746 // should be different than the TURN request's server reflexive address. |
| 1738 EXPECT_NE(turn_candidate.related_address(), stun_candidate.address()); | 1747 EXPECT_NE(turn_candidate.related_address(), stun_candidate.address()); |
| 1739 | 1748 |
| 1740 EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, | |
| 1741 kDefaultAllocationTimeout, fake_clock); | |
| 1742 EXPECT_EQ(3U, candidates_.size()); | |
| 1743 EXPECT_EQ(1U, ports_[0]->Candidates().size()); | 1749 EXPECT_EQ(1U, ports_[0]->Candidates().size()); |
| 1744 EXPECT_EQ(1U, ports_[1]->Candidates().size()); | 1750 EXPECT_EQ(1U, ports_[1]->Candidates().size()); |
| 1745 EXPECT_EQ(1U, ports_[2]->Candidates().size()); | 1751 EXPECT_EQ(1U, ports_[2]->Candidates().size()); |
| 1746 } | 1752 } |
| 1747 | 1753 |
| 1748 // Test that even when both a STUN and TURN server are configured, the TURN | 1754 // Test that even when both a STUN and TURN server are configured, the TURN |
| 1749 // server is used as a STUN server and we get a 'stun' candidate. | 1755 // server is used as a STUN server and we get a 'stun' candidate. |
| 1750 TEST_F(BasicPortAllocatorTest, TestSharedSocketWithNatUsingTurnAndStun) { | 1756 TEST_F(BasicPortAllocatorTest, TestSharedSocketWithNatUsingTurnAndStun) { |
| 1751 AddInterface(kClientAddr); | 1757 AddInterface(kClientAddr); |
| 1752 // Configure with STUN server but destroy it, so we can ensure that it's | 1758 // Configure with STUN server but destroy it, so we can ensure that it's |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1823 // This test verifies allocator can use IPv6 addresses along with IPv4. | 1829 // This test verifies allocator can use IPv6 addresses along with IPv4. |
| 1824 TEST_F(BasicPortAllocatorTest, TestEnableIPv6Addresses) { | 1830 TEST_F(BasicPortAllocatorTest, TestEnableIPv6Addresses) { |
| 1825 allocator().set_flags(allocator().flags() | PORTALLOCATOR_DISABLE_RELAY | | 1831 allocator().set_flags(allocator().flags() | PORTALLOCATOR_DISABLE_RELAY | |
| 1826 PORTALLOCATOR_ENABLE_IPV6 | | 1832 PORTALLOCATOR_ENABLE_IPV6 | |
| 1827 PORTALLOCATOR_ENABLE_SHARED_SOCKET); | 1833 PORTALLOCATOR_ENABLE_SHARED_SOCKET); |
| 1828 AddInterface(kClientIPv6Addr); | 1834 AddInterface(kClientIPv6Addr); |
| 1829 AddInterface(kClientAddr); | 1835 AddInterface(kClientAddr); |
| 1830 allocator_->set_step_delay(kMinimumStepDelay); | 1836 allocator_->set_step_delay(kMinimumStepDelay); |
| 1831 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); | 1837 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); |
| 1832 session_->StartGettingPorts(); | 1838 session_->StartGettingPorts(); |
| 1833 ASSERT_EQ_SIMULATED_WAIT(4U, ports_.size(), kDefaultAllocationTimeout, | 1839 ASSERT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, |
| 1834 fake_clock); | 1840 kDefaultAllocationTimeout, fake_clock); |
| 1841 EXPECT_EQ(4U, ports_.size()); |
| 1835 EXPECT_EQ(4U, candidates_.size()); | 1842 EXPECT_EQ(4U, candidates_.size()); |
| 1836 EXPECT_TRUE_SIMULATED_WAIT(candidate_allocation_done_, | |
| 1837 kDefaultAllocationTimeout, fake_clock); | |
| 1838 EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientIPv6Addr); | 1843 EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientIPv6Addr); |
| 1839 EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr); | 1844 EXPECT_PRED4(HasCandidate, candidates_, "local", "udp", kClientAddr); |
| 1840 EXPECT_PRED4(HasCandidate, candidates_, "local", "tcp", kClientIPv6Addr); | 1845 EXPECT_PRED4(HasCandidate, candidates_, "local", "tcp", kClientIPv6Addr); |
| 1841 EXPECT_PRED4(HasCandidate, candidates_, "local", "tcp", kClientAddr); | 1846 EXPECT_PRED4(HasCandidate, candidates_, "local", "tcp", kClientAddr); |
| 1842 EXPECT_EQ(4U, candidates_.size()); | |
| 1843 } | 1847 } |
| 1844 | 1848 |
| 1845 TEST_F(BasicPortAllocatorTest, TestStopGettingPorts) { | 1849 TEST_F(BasicPortAllocatorTest, TestStopGettingPorts) { |
| 1846 AddInterface(kClientAddr); | 1850 AddInterface(kClientAddr); |
| 1847 allocator_->set_step_delay(kDefaultStepDelay); | 1851 allocator_->set_step_delay(kDefaultStepDelay); |
| 1848 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); | 1852 EXPECT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP)); |
| 1849 session_->StartGettingPorts(); | 1853 session_->StartGettingPorts(); |
| 1850 ASSERT_EQ_SIMULATED_WAIT(2U, candidates_.size(), 1000, fake_clock); | 1854 ASSERT_EQ_SIMULATED_WAIT(2U, candidates_.size(), 1000, fake_clock); |
| 1851 EXPECT_EQ(2U, ports_.size()); | 1855 EXPECT_EQ(2U, ports_.size()); |
| 1852 session_->StopGettingPorts(); | 1856 session_->StopGettingPorts(); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1954 for (const Candidate& candidate : candidates) { | 1958 for (const Candidate& candidate : candidates) { |
| 1955 // Expect only relay candidates now that the filter is applied. | 1959 // Expect only relay candidates now that the filter is applied. |
| 1956 EXPECT_EQ(std::string(RELAY_PORT_TYPE), candidate.type()); | 1960 EXPECT_EQ(std::string(RELAY_PORT_TYPE), candidate.type()); |
| 1957 // Expect that the raddr is emptied due to the CF_RELAY filter. | 1961 // Expect that the raddr is emptied due to the CF_RELAY filter. |
| 1958 EXPECT_EQ(candidate.related_address(), | 1962 EXPECT_EQ(candidate.related_address(), |
| 1959 rtc::EmptySocketAddressWithFamily(candidate.address().family())); | 1963 rtc::EmptySocketAddressWithFamily(candidate.address().family())); |
| 1960 } | 1964 } |
| 1961 } | 1965 } |
| 1962 | 1966 |
| 1963 } // namespace cricket | 1967 } // namespace cricket |
| OLD | NEW |