Merge branch '3.4.x' into 3.5.x

Closes gh-48058
This commit is contained in:
Andy Wilkinson
2025-11-11 16:09:14 +00:00
2 changed files with 13 additions and 2 deletions
@@ -117,7 +117,7 @@ public class NettyWebServer implements WebServer {
catch (Exception ex) {
PortInUseException.ifCausedBy(ex, ChannelBindException.class, (bindException) -> {
if (bindException.localPort() > 0 && !isPermissionDenied(bindException.getCause())) {
throw new PortInUseException(bindException.localPort(), ex);
PortInUseException.throwIfPortBindingException(bindException, bindException::localPort);
}
});
throw new WebServerException("Unable to start Netty", ex);
@@ -17,7 +17,9 @@
package org.springframework.boot.web.embedded.netty;
import java.net.ConnectException;
import java.net.InetAddress;
import java.net.SocketAddress;
import java.net.UnknownHostException;
import java.time.Duration;
import java.util.Arrays;
@@ -45,6 +47,7 @@ import org.springframework.boot.web.reactive.server.AbstractReactiveWebServerFac
import org.springframework.boot.web.server.PortInUseException;
import org.springframework.boot.web.server.Shutdown;
import org.springframework.boot.web.server.Ssl;
import org.springframework.boot.web.server.WebServerException;
import org.springframework.http.MediaType;
import org.springframework.http.client.ReactorResourceFactory;
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
@@ -70,7 +73,7 @@ import static org.mockito.Mockito.mock;
class NettyReactiveWebServerFactoryTests extends AbstractReactiveWebServerFactoryTests {
@Test
void exceptionIsThrownWhenPortIsAlreadyInUse() {
void portInUseExceptionIsThrownWhenPortIsAlreadyInUse() {
AbstractReactiveWebServerFactory factory = getFactory();
factory.setPort(0);
this.webServer = factory.getWebServer(new EchoHandler());
@@ -81,6 +84,14 @@ class NettyReactiveWebServerFactoryTests extends AbstractReactiveWebServerFactor
.withCauseInstanceOf(Throwable.class);
}
@Test
void webServerExceptionIsThrownWhenAddressCannotBeAssigned() throws UnknownHostException {
AbstractReactiveWebServerFactory factory = getFactory();
factory.setPort(8080);
factory.setAddress(InetAddress.getByName("1.2.3.4"));
assertThatExceptionOfType(WebServerException.class).isThrownBy(factory.getWebServer(new EchoHandler())::start);
}
@Test
void getPortWhenDisposableServerPortOperationIsUnsupportedReturnsMinusOne() {
NettyReactiveWebServerFactory factory = new NoPortNettyReactiveWebServerFactory(0);