From e813a0e64d9828f00643185d5232dacfdf452dc9 Mon Sep 17 00:00:00 2001 From: isaolmez Date: Tue, 19 Mar 2019 22:29:12 +0300 Subject: [PATCH] BAEL-2715: Modified tests and configurations --- ....java => CustomNettyWebServerFactory.java} | 35 ++++-------- .../{server => }/GreetingController.java | 2 +- .../{server => }/GreetingService.java | 2 +- .../NettyWebServerFactoryPortCustomizer.java | 30 ++++++++++ .../NettyWebServerFactorySslCustomizer.java | 2 +- .../serverconfig/ServerConfigApplication.java | 4 -- .../client/GreetingWebClient.java | 37 ------------ .../GreetingControllerIntegrationTest.java | 8 +-- .../serverconfig/GreetingLiveTest.java | 56 +++++++++++++++++++ .../GreetingSkipAutoConfigLiveTest.java | 8 +++ 10 files changed, 113 insertions(+), 71 deletions(-) rename spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/{server/NettyWebServerFactoryBootstrapCustomizer.java => CustomNettyWebServerFactory.java} (51%) rename spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/{server => }/GreetingController.java (94%) rename spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/{server => }/GreetingService.java (84%) create mode 100644 spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/NettyWebServerFactoryPortCustomizer.java rename spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/{server => }/NettyWebServerFactorySslCustomizer.java (96%) delete mode 100644 spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/client/GreetingWebClient.java rename spring-5-reactive-netty/src/test/java/com/baeldung/serverconfig/{server => }/GreetingControllerIntegrationTest.java (87%) create mode 100644 spring-5-reactive-netty/src/test/java/com/baeldung/serverconfig/GreetingLiveTest.java create mode 100644 spring-5-reactive-netty/src/test/java/com/baeldung/serverconfig/GreetingSkipAutoConfigLiveTest.java diff --git a/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/server/NettyWebServerFactoryBootstrapCustomizer.java b/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/CustomNettyWebServerFactory.java similarity index 51% rename from spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/server/NettyWebServerFactoryBootstrapCustomizer.java rename to spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/CustomNettyWebServerFactory.java index 05b2fbb7f7..32e57d2d98 100644 --- a/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/server/NettyWebServerFactoryBootstrapCustomizer.java +++ b/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/CustomNettyWebServerFactory.java @@ -1,35 +1,24 @@ -package com.baeldung.serverconfig.server; +package com.baeldung.serverconfig; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioServerSocketChannel; import org.springframework.boot.web.embedded.netty.NettyReactiveWebServerFactory; import org.springframework.boot.web.embedded.netty.NettyServerCustomizer; -import org.springframework.boot.web.server.WebServerFactoryCustomizer; -import org.springframework.stereotype.Component; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; import reactor.netty.http.server.HttpServer; -@Component -public class NettyWebServerFactoryBootstrapCustomizer implements WebServerFactoryCustomizer { +@Configuration +@Profile("skipAutoConfig") +public class CustomNettyWebServerFactory { - @Override - public void customize(NettyReactiveWebServerFactory serverFactory) { - serverFactory.addServerCustomizers(new PortCustomizer(8443)); - serverFactory.addServerCustomizers(new EventLoopNettyCustomizer()); - } - - private static class PortCustomizer implements NettyServerCustomizer { - - private final int port; - - private PortCustomizer(int port) { - this.port = port; - } - - @Override - public HttpServer apply(HttpServer httpServer) { - return httpServer.port(port); - } + @Bean + public NettyReactiveWebServerFactory nettyReactiveWebServerFactory() { + NettyReactiveWebServerFactory webServerFactory = new NettyReactiveWebServerFactory(); + webServerFactory.addServerCustomizers(new EventLoopNettyCustomizer()); + return webServerFactory; } private static class EventLoopNettyCustomizer implements NettyServerCustomizer { diff --git a/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/server/GreetingController.java b/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/GreetingController.java similarity index 94% rename from spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/server/GreetingController.java rename to spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/GreetingController.java index 275439a66f..9cb5b27ac5 100644 --- a/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/server/GreetingController.java +++ b/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/GreetingController.java @@ -1,4 +1,4 @@ -package com.baeldung.serverconfig.server; +package com.baeldung.serverconfig; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; diff --git a/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/server/GreetingService.java b/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/GreetingService.java similarity index 84% rename from spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/server/GreetingService.java rename to spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/GreetingService.java index 5b2b246531..5440f526aa 100644 --- a/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/server/GreetingService.java +++ b/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/GreetingService.java @@ -1,4 +1,4 @@ -package com.baeldung.serverconfig.server; +package com.baeldung.serverconfig; import org.springframework.stereotype.Service; import reactor.core.publisher.Mono; diff --git a/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/NettyWebServerFactoryPortCustomizer.java b/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/NettyWebServerFactoryPortCustomizer.java new file mode 100644 index 0000000000..152e1285aa --- /dev/null +++ b/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/NettyWebServerFactoryPortCustomizer.java @@ -0,0 +1,30 @@ +package com.baeldung.serverconfig; + +import org.springframework.boot.web.embedded.netty.NettyReactiveWebServerFactory; +import org.springframework.boot.web.embedded.netty.NettyServerCustomizer; +import org.springframework.boot.web.server.WebServerFactoryCustomizer; +import org.springframework.stereotype.Component; +import reactor.netty.http.server.HttpServer; + +@Component +public class NettyWebServerFactoryPortCustomizer implements WebServerFactoryCustomizer { + + @Override + public void customize(NettyReactiveWebServerFactory serverFactory) { + serverFactory.addServerCustomizers(new PortCustomizer(8443)); + } + + private static class PortCustomizer implements NettyServerCustomizer { + + private final int port; + + private PortCustomizer(int port) { + this.port = port; + } + + @Override + public HttpServer apply(HttpServer httpServer) { + return httpServer.port(port); + } + } +} diff --git a/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/server/NettyWebServerFactorySslCustomizer.java b/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/NettyWebServerFactorySslCustomizer.java similarity index 96% rename from spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/server/NettyWebServerFactorySslCustomizer.java rename to spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/NettyWebServerFactorySslCustomizer.java index d03c3a7f40..d0ad0dcac5 100644 --- a/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/server/NettyWebServerFactorySslCustomizer.java +++ b/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/NettyWebServerFactorySslCustomizer.java @@ -1,4 +1,4 @@ -package com.baeldung.serverconfig.server; +package com.baeldung.serverconfig; import org.springframework.boot.web.embedded.netty.NettyReactiveWebServerFactory; import org.springframework.boot.web.embedded.netty.SslServerCustomizer; diff --git a/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/ServerConfigApplication.java b/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/ServerConfigApplication.java index c4ff9c3930..9d420cc7da 100644 --- a/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/ServerConfigApplication.java +++ b/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/ServerConfigApplication.java @@ -1,6 +1,5 @@ package com.baeldung.serverconfig; -import com.baeldung.serverconfig.client.GreetingWebClient; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -9,8 +8,5 @@ public class ServerConfigApplication { public static void main(String[] args) { SpringApplication.run(ServerConfigApplication.class, args); - - GreetingWebClient webClient = new GreetingWebClient(); - webClient.getResult(); } } diff --git a/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/client/GreetingWebClient.java b/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/client/GreetingWebClient.java deleted file mode 100644 index 77dc98398b..0000000000 --- a/spring-5-reactive-netty/src/main/java/com/baeldung/serverconfig/client/GreetingWebClient.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.baeldung.serverconfig.client; - -import io.netty.handler.ssl.SslContext; -import io.netty.handler.ssl.SslContextBuilder; -import io.netty.handler.ssl.util.InsecureTrustManagerFactory; -import lombok.SneakyThrows; -import org.springframework.http.client.reactive.ReactorClientHttpConnector; -import org.springframework.web.reactive.function.client.WebClient; -import reactor.core.publisher.Mono; -import reactor.netty.http.client.HttpClient; - -public class GreetingWebClient { - - private WebClient client = getWebClient(); - - public void getResult() { - System.out.println("Mono"); - Mono greetingMono = client.get() - .uri("/greet/{name}", "baeldung") - .retrieve() - .bodyToMono(String.class); - - greetingMono.subscribe(System.out::println); - } - - @SneakyThrows - private WebClient getWebClient() { - SslContext sslContext = SslContextBuilder - .forClient() - .trustManager(InsecureTrustManagerFactory.INSTANCE) - .build(); - HttpClient httpClient = HttpClient.create().secure(t -> t.sslContext(sslContext)); - return WebClient.builder() - .baseUrl("https://localhost:8443") - .clientConnector(new ReactorClientHttpConnector(httpClient)).build(); - } -} diff --git a/spring-5-reactive-netty/src/test/java/com/baeldung/serverconfig/server/GreetingControllerIntegrationTest.java b/spring-5-reactive-netty/src/test/java/com/baeldung/serverconfig/GreetingControllerIntegrationTest.java similarity index 87% rename from spring-5-reactive-netty/src/test/java/com/baeldung/serverconfig/server/GreetingControllerIntegrationTest.java rename to spring-5-reactive-netty/src/test/java/com/baeldung/serverconfig/GreetingControllerIntegrationTest.java index f8e384fb6e..3c2c08321a 100644 --- a/spring-5-reactive-netty/src/test/java/com/baeldung/serverconfig/server/GreetingControllerIntegrationTest.java +++ b/spring-5-reactive-netty/src/test/java/com/baeldung/serverconfig/GreetingControllerIntegrationTest.java @@ -1,4 +1,4 @@ -package com.baeldung.serverconfig.server; +package com.baeldung.serverconfig; import static org.mockito.Mockito.when; @@ -22,11 +22,11 @@ public class GreetingControllerIntegrationTest { @MockBean private GreetingService greetingService; - private final String name = "baeldung"; + private final String name = "Baeldung"; @Before public void setUp() { - when(greetingService.greet(name)).thenReturn(Mono.just("Hello baeldung")); + when(greetingService.greet(name)).thenReturn(Mono.just("Greeting Baeldung")); } @Test @@ -36,6 +36,6 @@ public class GreetingControllerIntegrationTest { .expectStatus() .isOk() .expectBody(String.class) - .isEqualTo("Hello baeldung"); + .isEqualTo("Greeting Baeldung"); } } diff --git a/spring-5-reactive-netty/src/test/java/com/baeldung/serverconfig/GreetingLiveTest.java b/spring-5-reactive-netty/src/test/java/com/baeldung/serverconfig/GreetingLiveTest.java new file mode 100644 index 0000000000..7c4a37c890 --- /dev/null +++ b/spring-5-reactive-netty/src/test/java/com/baeldung/serverconfig/GreetingLiveTest.java @@ -0,0 +1,56 @@ +package com.baeldung.serverconfig; + +import io.netty.handler.ssl.SslContext; +import io.netty.handler.ssl.SslContextBuilder; +import io.netty.handler.ssl.util.InsecureTrustManagerFactory; +import javax.net.ssl.SSLException; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.http.client.reactive.ReactorClientHttpConnector; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.reactive.server.WebTestClient; +import org.springframework.test.web.reactive.server.WebTestClient.ResponseSpec; +import reactor.netty.http.client.HttpClient; + +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = WebEnvironment.DEFINED_PORT) +public class GreetingLiveTest { + + private static final String BASE_URL = "https://localhost:8443"; + + private WebTestClient webTestClient; + + @Before + public void setup() throws SSLException { + webTestClient = WebTestClient.bindToServer(getConnector()) + .baseUrl(BASE_URL) + .build(); + } + + @Test + public void shouldGreet() { + final String name = "Baeldung"; + + ResponseSpec response = webTestClient.get() + .uri("/greet/{name}", name) + .exchange(); + + response.expectStatus() + .isOk() + .expectBody(String.class) + .isEqualTo("Greeting Baeldung"); + } + + private ReactorClientHttpConnector getConnector() throws SSLException { + SslContext sslContext = SslContextBuilder + .forClient() + .trustManager(InsecureTrustManagerFactory.INSTANCE) + .build(); + HttpClient httpClient = HttpClient.create().secure(t -> t.sslContext(sslContext)); + return new ReactorClientHttpConnector(httpClient); + } +} diff --git a/spring-5-reactive-netty/src/test/java/com/baeldung/serverconfig/GreetingSkipAutoConfigLiveTest.java b/spring-5-reactive-netty/src/test/java/com/baeldung/serverconfig/GreetingSkipAutoConfigLiveTest.java new file mode 100644 index 0000000000..646742b3d7 --- /dev/null +++ b/spring-5-reactive-netty/src/test/java/com/baeldung/serverconfig/GreetingSkipAutoConfigLiveTest.java @@ -0,0 +1,8 @@ +package com.baeldung.serverconfig; + +import org.springframework.test.context.ActiveProfiles; + +@ActiveProfiles("skipAutoConfig") +public class GreetingSkipAutoConfigLiveTest extends GreetingLiveTest { + +}