diff --git a/pom.xml b/pom.xml index e20e68ea..cb4dbb03 100644 --- a/pom.xml +++ b/pom.xml @@ -82,6 +82,13 @@ pom import + + org.junit + junit-bom + ${junit-jupiter.version} + import + pom + org.springframework.cloud spring-cloud-starter-netflix-ribbon @@ -140,6 +147,11 @@ blockhound-junit-platform ${blockhound.version} + + io.projectreactor.tools + blockhound-junit-platform + ${blockhound.version} + diff --git a/spring-cloud-gateway-core/pom.xml b/spring-cloud-gateway-core/pom.xml index 3578423b..bf02afe7 100644 --- a/spring-cloud-gateway-core/pom.xml +++ b/spring-cloud-gateway-core/pom.xml @@ -102,6 +102,26 @@ spring-boot-starter-test test + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.junit.platform + junit-platform-launcher + test + + + org.junit.vintage + junit-vintage-engine + test + org.springframework.cloud spring-cloud-test-support diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java index e087c063..b4281dd8 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java @@ -215,6 +215,7 @@ public class GatewayAutoConfiguration { @Bean @Primary + @ConditionalOnMissingBean(name = "cachedCompositeRouteLocator") // TODO: property to disable composite? public RouteLocator cachedCompositeRouteLocator(List routeLocators) { return new CachingRouteLocator( diff --git a/spring-cloud-gateway-core/src/test/java/reactor/blockhound/integration/CustomBlockHoundIntegration.java b/spring-cloud-gateway-core/src/test/java/reactor/blockhound/integration/CustomBlockHoundIntegration.java index e8352af7..1a05bd1d 100644 --- a/spring-cloud-gateway-core/src/test/java/reactor/blockhound/integration/CustomBlockHoundIntegration.java +++ b/spring-cloud-gateway-core/src/test/java/reactor/blockhound/integration/CustomBlockHoundIntegration.java @@ -42,11 +42,32 @@ public class CustomBlockHoundIntegration implements BlockHoundIntegration { builder.allowBlockingCallsInside("org.springframework.util.MimeTypeUtils", "generateMultipartBoundary"); + // SPRING DATA REDIS RELATED + + // Uses Unsafe#park + builder.allowBlockingCallsInside( + "org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory", + "getReactiveConnection"); + + // NETTY RELATED + + // Uses Thread#sleep + builder.allowBlockingCallsInside("io.netty.channel.nio.NioEventLoop", + "handleLoopException"); + builder.allowBlockingCallsInside( + "io.netty.util.concurrent.SingleThreadEventExecutor", "confirmShutdown"); + + // Uses Unsafe#park + builder.allowBlockingCallsInside("io.netty.util.concurrent.GlobalEventExecutor", + "execute"); + // SECURITY RELATED // For HTTPS traffic builder.allowBlockingCallsInside("io.netty.handler.ssl.SslHandler", "channelActive"); + builder.allowBlockingCallsInside("io.netty.handler.ssl.SslHandler", + "channelInactive"); builder.allowBlockingCallsInside("io.netty.handler.ssl.SslHandler", "unwrap"); builder.allowBlockingCallsInside("io.netty.handler.ssl.SslContext", "newClientContextInternal");