diff --git a/spring-context/src/test/java/org/springframework/jmx/access/MBeanClientInterceptorTests.java b/spring-context/src/test/java/org/springframework/jmx/access/MBeanClientInterceptorTests.java index f98384c231..f9863819b4 100644 --- a/spring-context/src/test/java/org/springframework/jmx/access/MBeanClientInterceptorTests.java +++ b/spring-context/src/test/java/org/springframework/jmx/access/MBeanClientInterceptorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,7 +39,6 @@ import org.springframework.jmx.IJmxTestBean; import org.springframework.jmx.JmxTestBean; import org.springframework.jmx.export.MBeanExporter; import org.springframework.jmx.export.assembler.AbstractReflectiveMBeanInfoAssembler; -import org.springframework.util.SocketUtils; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; @@ -177,7 +176,8 @@ class MBeanClientInterceptorTests extends AbstractMBeanServerTests { void lazyConnectionToRemote() throws Exception { assumeTrue(runTests); - final int port = SocketUtils.findAvailableTcpPort(); + @SuppressWarnings("deprecation") + final int port = org.springframework.util.SocketUtils.findAvailableTcpPort(); JMXServiceURL url = new JMXServiceURL("service:jmx:jmxmp://localhost:" + port); JMXConnectorServer connector = JMXConnectorServerFactory.newJMXConnectorServer(url, null, getServer()); diff --git a/spring-context/src/test/java/org/springframework/jmx/access/RemoteMBeanClientInterceptorTests.java b/spring-context/src/test/java/org/springframework/jmx/access/RemoteMBeanClientInterceptorTests.java index 5c4c4a3c08..a617803188 100644 --- a/spring-context/src/test/java/org/springframework/jmx/access/RemoteMBeanClientInterceptorTests.java +++ b/spring-context/src/test/java/org/springframework/jmx/access/RemoteMBeanClientInterceptorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,8 +28,6 @@ import javax.management.remote.JMXServiceURL; import org.junit.jupiter.api.AfterEach; -import org.springframework.util.SocketUtils; - /** * @author Rob Harrop * @author Chris Beams @@ -37,7 +35,8 @@ import org.springframework.util.SocketUtils; */ class RemoteMBeanClientInterceptorTests extends MBeanClientInterceptorTests { - private final int servicePort = SocketUtils.findAvailableTcpPort(); + @SuppressWarnings("deprecation") + private final int servicePort = org.springframework.util.SocketUtils.findAvailableTcpPort(); private final String serviceUrl = "service:jmx:jmxmp://localhost:" + servicePort; diff --git a/spring-context/src/test/java/org/springframework/jmx/support/ConnectorServerFactoryBeanTests.java b/spring-context/src/test/java/org/springframework/jmx/support/ConnectorServerFactoryBeanTests.java index 111721d749..fad3ed40ec 100644 --- a/spring-context/src/test/java/org/springframework/jmx/support/ConnectorServerFactoryBeanTests.java +++ b/spring-context/src/test/java/org/springframework/jmx/support/ConnectorServerFactoryBeanTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,7 +31,6 @@ import javax.management.remote.JMXServiceURL; import org.junit.jupiter.api.Test; import org.springframework.jmx.AbstractMBeanServerTests; -import org.springframework.util.SocketUtils; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; @@ -47,7 +46,8 @@ class ConnectorServerFactoryBeanTests extends AbstractMBeanServerTests { private static final String OBJECT_NAME = "spring:type=connector,name=test"; - private final String serviceUrl = "service:jmx:jmxmp://localhost:" + SocketUtils.findAvailableTcpPort(); + @SuppressWarnings("deprecation") + private final String serviceUrl = "service:jmx:jmxmp://localhost:" + org.springframework.util.SocketUtils.findAvailableTcpPort(); @Test diff --git a/spring-context/src/test/java/org/springframework/jmx/support/MBeanServerConnectionFactoryBeanTests.java b/spring-context/src/test/java/org/springframework/jmx/support/MBeanServerConnectionFactoryBeanTests.java index faee0ae016..64159c6e51 100644 --- a/spring-context/src/test/java/org/springframework/jmx/support/MBeanServerConnectionFactoryBeanTests.java +++ b/spring-context/src/test/java/org/springframework/jmx/support/MBeanServerConnectionFactoryBeanTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,7 +25,6 @@ import org.junit.jupiter.api.Test; import org.springframework.aop.support.AopUtils; import org.springframework.jmx.AbstractMBeanServerTests; -import org.springframework.util.SocketUtils; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; @@ -39,7 +38,8 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException */ class MBeanServerConnectionFactoryBeanTests extends AbstractMBeanServerTests { - private final String serviceUrl = "service:jmx:jmxmp://localhost:" + SocketUtils.findAvailableTcpPort(); + @SuppressWarnings("deprecation") + private final String serviceUrl = "service:jmx:jmxmp://localhost:" + org.springframework.util.SocketUtils.findAvailableTcpPort(); @Test diff --git a/spring-core/src/main/java/org/springframework/util/SocketUtils.java b/spring-core/src/main/java/org/springframework/util/SocketUtils.java index 557173e7e5..a100bc6d86 100644 --- a/spring-core/src/main/java/org/springframework/util/SocketUtils.java +++ b/spring-core/src/main/java/org/springframework/util/SocketUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,13 +32,25 @@ import javax.net.ServerSocketFactory; *
Within this class, a TCP port refers to a port for a {@link ServerSocket}; * whereas, a UDP port refers to a port for a {@link DatagramSocket}. * + *
{@code SocketUtils} was introduced in Spring Framework 4.0, primarily to
+ * assist in writing integration tests which start an external server on an
+ * available random port. However, these utilities make no guarantee about the
+ * subsequent availability of a given port and are therefore unreliable. Instead
+ * of using {@code SocketUtils} to find an available local port for a server, it
+ * is recommended that you rely on a server's ability to start on a random port
+ * that it selects or is assigned by the operating system. To interact with that
+ * server, you should query the server for the port it is currently using.
+ *
* @author Sam Brannen
* @author Ben Hale
* @author Arjen Poutsma
* @author Gunnar Hillert
* @author Gary Russell
* @since 4.0
+ * @deprecated as of Spring Framework 5.3.16, to be removed in 6.0; see
+ * {@link SocketUtils class-level Javadoc} for details.
*/
+@Deprecated
public class SocketUtils {
/**
diff --git a/spring-core/src/test/java/org/springframework/util/SocketUtilsTests.java b/spring-core/src/test/java/org/springframework/util/SocketUtilsTests.java
index d13e78e6c6..c0f8748195 100644
--- a/spring-core/src/test/java/org/springframework/util/SocketUtilsTests.java
+++ b/spring-core/src/test/java/org/springframework/util/SocketUtilsTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2020 the original author or authors.
+ * Copyright 2002-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -28,8 +28,6 @@ import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
-import static org.springframework.util.SocketUtils.PORT_RANGE_MAX;
-import static org.springframework.util.SocketUtils.PORT_RANGE_MIN;
/**
* Unit tests for {@link SocketUtils}.
@@ -37,6 +35,7 @@ import static org.springframework.util.SocketUtils.PORT_RANGE_MIN;
* @author Sam Brannen
* @author Gary Russell
*/
+@SuppressWarnings("deprecation")
class SocketUtilsTests {
@Test
@@ -44,7 +43,7 @@ class SocketUtilsTests {
// Just making sure somebody doesn't try to make SocketUtils abstract,
// since that would be a breaking change due to the intentional public
// constructor.
- new SocketUtils();
+ new org.springframework.util.SocketUtils();
}
// TCP
@@ -52,36 +51,37 @@ class SocketUtilsTests {
@Test
void findAvailableTcpPortWithZeroMinPort() {
assertThatIllegalArgumentException().isThrownBy(() ->
- SocketUtils.findAvailableTcpPort(0));
+ org.springframework.util.SocketUtils.findAvailableTcpPort(0));
}
@Test
void findAvailableTcpPortWithNegativeMinPort() {
assertThatIllegalArgumentException().isThrownBy(() ->
- SocketUtils.findAvailableTcpPort(-500));
+ org.springframework.util.SocketUtils.findAvailableTcpPort(-500));
}
@Test
void findAvailableTcpPort() {
- int port = SocketUtils.findAvailableTcpPort();
- assertPortInRange(port, PORT_RANGE_MIN, PORT_RANGE_MAX);
+ int port = org.springframework.util.SocketUtils.findAvailableTcpPort();
+ assertPortInRange(port, org.springframework.util.SocketUtils.PORT_RANGE_MIN,
+ org.springframework.util.SocketUtils.PORT_RANGE_MAX);
}
@Test
void findAvailableTcpPortWithMinPortEqualToMaxPort() {
- int minMaxPort = SocketUtils.findAvailableTcpPort();
- int port = SocketUtils.findAvailableTcpPort(minMaxPort, minMaxPort);
+ int minMaxPort = org.springframework.util.SocketUtils.findAvailableTcpPort();
+ int port = org.springframework.util.SocketUtils.findAvailableTcpPort(minMaxPort, minMaxPort);
assertThat(port).isEqualTo(minMaxPort);
}
@Test
void findAvailableTcpPortWhenPortOnLoopbackInterfaceIsNotAvailable() throws Exception {
- int port = SocketUtils.findAvailableTcpPort();
+ int port = org.springframework.util.SocketUtils.findAvailableTcpPort();
try (ServerSocket socket = ServerSocketFactory.getDefault().createServerSocket(port, 1, InetAddress.getByName("localhost"))) {
assertThat(socket).isNotNull();
// will only look for the exact port
assertThatIllegalStateException().isThrownBy(() ->
- SocketUtils.findAvailableTcpPort(port, port))
+ org.springframework.util.SocketUtils.findAvailableTcpPort(port, port))
.withMessageStartingWith("Could not find an available TCP port")
.withMessageEndingWith("after 1 attempts");
}
@@ -89,15 +89,15 @@ class SocketUtilsTests {
@Test
void findAvailableTcpPortWithMin() {
- int port = SocketUtils.findAvailableTcpPort(50000);
- assertPortInRange(port, 50000, PORT_RANGE_MAX);
+ int port = org.springframework.util.SocketUtils.findAvailableTcpPort(50000);
+ assertPortInRange(port, 50000, org.springframework.util.SocketUtils.PORT_RANGE_MAX);
}
@Test
void findAvailableTcpPortInRange() {
int minPort = 20000;
int maxPort = minPort + 1000;
- int port = SocketUtils.findAvailableTcpPort(minPort, maxPort);
+ int port = org.springframework.util.SocketUtils.findAvailableTcpPort(minPort, maxPort);
assertPortInRange(port, minPort, maxPort);
}
@@ -133,29 +133,30 @@ class SocketUtilsTests {
@Test
void findAvailableUdpPortWithZeroMinPort() {
assertThatIllegalArgumentException().isThrownBy(() ->
- SocketUtils.findAvailableUdpPort(0));
+ org.springframework.util.SocketUtils.findAvailableUdpPort(0));
}
@Test
void findAvailableUdpPortWithNegativeMinPort() {
assertThatIllegalArgumentException().isThrownBy(() ->
- SocketUtils.findAvailableUdpPort(-500));
+ org.springframework.util.SocketUtils.findAvailableUdpPort(-500));
}
@Test
void findAvailableUdpPort() {
- int port = SocketUtils.findAvailableUdpPort();
- assertPortInRange(port, PORT_RANGE_MIN, PORT_RANGE_MAX);
+ int port = org.springframework.util.SocketUtils.findAvailableUdpPort();
+ assertPortInRange(port, org.springframework.util.SocketUtils.PORT_RANGE_MIN,
+ org.springframework.util.SocketUtils.PORT_RANGE_MAX);
}
@Test
void findAvailableUdpPortWhenPortOnLoopbackInterfaceIsNotAvailable() throws Exception {
- int port = SocketUtils.findAvailableUdpPort();
+ int port = org.springframework.util.SocketUtils.findAvailableUdpPort();
try (DatagramSocket socket = new DatagramSocket(port, InetAddress.getByName("localhost"))) {
assertThat(socket).isNotNull();
// will only look for the exact port
assertThatIllegalStateException().isThrownBy(() ->
- SocketUtils.findAvailableUdpPort(port, port))
+ org.springframework.util.SocketUtils.findAvailableUdpPort(port, port))
.withMessageStartingWith("Could not find an available UDP port")
.withMessageEndingWith("after 1 attempts");
}
@@ -163,15 +164,15 @@ class SocketUtilsTests {
@Test
void findAvailableUdpPortWithMin() {
- int port = SocketUtils.findAvailableUdpPort(50000);
- assertPortInRange(port, 50000, PORT_RANGE_MAX);
+ int port = org.springframework.util.SocketUtils.findAvailableUdpPort(50000);
+ assertPortInRange(port, 50000, org.springframework.util.SocketUtils.PORT_RANGE_MAX);
}
@Test
void findAvailableUdpPortInRange() {
int minPort = 20000;
int maxPort = minPort + 1000;
- int port = SocketUtils.findAvailableUdpPort(minPort, maxPort);
+ int port = org.springframework.util.SocketUtils.findAvailableUdpPort(minPort, maxPort);
assertPortInRange(port, minPort, maxPort);
}
@@ -205,22 +206,24 @@ class SocketUtilsTests {
// Helpers
private void findAvailableTcpPorts(int numRequested) {
- SortedSet