From 7509917609578ef535311f5df6e1492a6357851b Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Wed, 21 Mar 2018 11:33:25 +0300 Subject: server: websocket unit testing --- .../server/configuration/ApiAppConfiguration.java | 2 +- .../java/com/juick/server/tests/ServerTests.java | 28 ++++++++++++ .../juick/server/tests/WebsocketClientConfig.java | 52 ++++++++++++++++++++++ .../juick/server/tests/WebsocketClientHandler.java | 18 ++++++++ 4 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 juick-server/src/test/java/com/juick/server/tests/WebsocketClientConfig.java create mode 100644 juick-server/src/test/java/com/juick/server/tests/WebsocketClientHandler.java diff --git a/juick-server/src/main/java/com/juick/server/configuration/ApiAppConfiguration.java b/juick-server/src/main/java/com/juick/server/configuration/ApiAppConfiguration.java index 77ceb9db..ec915066 100644 --- a/juick-server/src/main/java/com/juick/server/configuration/ApiAppConfiguration.java +++ b/juick-server/src/main/java/com/juick/server/configuration/ApiAppConfiguration.java @@ -108,7 +108,7 @@ public class ApiAppConfiguration implements WebMvcConfigurer, WebSocketConfigure @Override public void registerWebSocketHandlers(@Nonnull WebSocketHandlerRegistry registry) { - ((ServletWebSocketHandlerRegistry) registry).setOrder(Ordered.LOWEST_PRECEDENCE); + //((ServletWebSocketHandlerRegistry) registry).setOrder(Ordered.LOWEST_PRECEDENCE); registry.addHandler(wsHandler(), "/ws/**").setAllowedOrigins("*"); } diff --git a/juick-server/src/test/java/com/juick/server/tests/ServerTests.java b/juick-server/src/test/java/com/juick/server/tests/ServerTests.java index f831141b..fcc1a777 100644 --- a/juick-server/src/test/java/com/juick/server/tests/ServerTests.java +++ b/juick-server/src/test/java/com/juick/server/tests/ServerTests.java @@ -30,12 +30,23 @@ import com.juick.server.XMPPServer; import com.juick.server.helpers.TagStats; import com.juick.service.*; import com.juick.util.DateFormattersHolder; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; +import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; +import org.springframework.boot.web.servlet.server.ServletWebServerFactory; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.test.context.TestPropertySource; @@ -44,11 +55,16 @@ import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.client.WebSocketConnectionManager; +import org.springframework.web.socket.client.standard.StandardWebSocketClient; +import org.springframework.web.socket.handler.TextWebSocketHandler; import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; import rocks.xmpp.addr.Jid; import rocks.xmpp.core.stanza.model.Stanza; import rocks.xmpp.core.stanza.model.server.ServerMessage; +import sun.java2d.SurfaceDataProxy; import javax.inject.Inject; import java.lang.reflect.InvocationTargetException; @@ -57,6 +73,8 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Scanner; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import java.util.stream.IntStream; import static org.hamcrest.MatcherAssert.assertThat; @@ -493,4 +511,14 @@ public class ServerTests extends AbstractJUnit4SpringContextTests { mockMvc.perform(post("/mail").with(httpBasic(juickName, juickPassword)).content(mail)) .andExpect(status().isOk()); } + @Test + public void websocketsTest() throws Exception { + ConfigurableApplicationContext context = new SpringApplicationBuilder( + WebsocketClientConfig.class, PropertyPlaceholderAutoConfiguration.class) + .run("--spring.main.web_environment=false"); + long count = context.getBean(WebsocketClientConfig.class).getLatch().getCount(); + context.close(); + Assert.assertThat(count, equalTo(0L)); + mockMvc.perform(get("/ws/_all")).andExpect(status().isBadRequest()); + } } diff --git a/juick-server/src/test/java/com/juick/server/tests/WebsocketClientConfig.java b/juick-server/src/test/java/com/juick/server/tests/WebsocketClientConfig.java new file mode 100644 index 00000000..6be8e3c6 --- /dev/null +++ b/juick-server/src/test/java/com/juick/server/tests/WebsocketClientConfig.java @@ -0,0 +1,52 @@ +package com.juick.server.tests; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; +import org.springframework.boot.web.servlet.server.ServletWebServerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.client.WebSocketConnectionManager; +import org.springframework.web.socket.client.standard.StandardWebSocketClient; + +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +@Configuration +public class WebsocketClientConfig implements CommandLineRunner { + private static Logger logger = LoggerFactory.getLogger(ServerTests.class); + @Bean + public WebsocketClientHandler handler() { + return new WebsocketClientHandler(latch); + } + @Bean + ServletWebServerFactory servletWebServerFactory(){ + return new TomcatServletWebServerFactory(); + } + @Bean + public WebSocketConnectionManager connectionManager() { + WebSocketConnectionManager manager = new WebSocketConnectionManager(client(), + handler(), + "ws://localhost:8080/ws/"); + manager.setAutoStartup(true); + return manager; + } + + @Bean + public StandardWebSocketClient client() { + return new StandardWebSocketClient(); + } + private final CountDownLatch latch = new CountDownLatch(1); + + @Override + public void run(String... args) throws Exception { + if (latch.await(10, TimeUnit.SECONDS)) { + logger.info("client connected"); + } + } + + public CountDownLatch getLatch() { + return latch; + } +} diff --git a/juick-server/src/test/java/com/juick/server/tests/WebsocketClientHandler.java b/juick-server/src/test/java/com/juick/server/tests/WebsocketClientHandler.java new file mode 100644 index 00000000..7d896a04 --- /dev/null +++ b/juick-server/src/test/java/com/juick/server/tests/WebsocketClientHandler.java @@ -0,0 +1,18 @@ +package com.juick.server.tests; + +import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.handler.TextWebSocketHandler; + +import java.util.concurrent.CountDownLatch; + +class WebsocketClientHandler extends TextWebSocketHandler { + private final CountDownLatch latch; + public WebsocketClientHandler(CountDownLatch latch) { + this.latch = latch; + } + @Override + public void afterConnectionEstablished(WebSocketSession session) throws Exception { + super.afterConnectionEstablished(session); + latch.countDown(); + } +} -- cgit v1.2.3