This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch sa in repository https://gitbox.apache.org/repos/asf/camel.git
commit b5a13b54fbd79555bddf74a9afbb0490e0e964c5 Author: Claus Ibsen <[email protected]> AuthorDate: Thu Oct 23 18:30:21 2025 +0200 Speedup test for camel-atmosphere-websocket. Move tests to individual classes to avoid setting up too many atmosphere that are not used anyway in a test method. --- ...cketRouteTest.java => WebsocketRoute1Test.java} | 88 +----------- .../WebsocketRoute1WithInitParamTest.java | 103 ++++++++++++++ ...cketRouteTest.java => WebsocketRoute2Test.java} | 88 +----------- .../WebsocketRoute2WithInitParamTest.java | 157 +++++++++++++++++++++ ...cketRouteTest.java => WebsocketRoute3Test.java} | 88 +----------- ....java => WebsocketRoute3WithInitParamTest.java} | 148 +------------------ ...cketRouteTest.java => WebsocketRoute4Test.java} | 109 +------------- 7 files changed, 267 insertions(+), 514 deletions(-) diff --git a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteTest.java b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute1Test.java similarity index 60% copy from components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteTest.java copy to components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute1Test.java index 85c718da08e3..d7c9fbd5d519 100644 --- a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteTest.java +++ b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute1Test.java @@ -31,10 +31,9 @@ import org.apache.camel.util.IOHelper; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -public class WebsocketRouteTest extends WebsocketCamelRouterTestSupport { +public class WebsocketRoute1Test extends WebsocketCamelRouterTestSupport { private static final String RESPONSE_GREETING = "Hola "; private static final byte[] RESPONSE_GREETING_BYTES = { 0x48, 0x6f, 0x6c, 0x61, 0x20 }; @@ -66,70 +65,6 @@ public class WebsocketRouteTest extends WebsocketCamelRouterTestSupport { wsclient.close(); } - @Test - void testWebsocketSingleClientForReader() throws Exception { - WebsocketTestClient wsclient = new WebsocketTestClient("ws://localhost:" + PORT + "/hola3"); - wsclient.connect(); - - wsclient.sendTextMessage("Cerveza"); - - assertTrue(wsclient.await(10)); - List<String> received = wsclient.getReceived(String.class); - assertEquals(1, received.size()); - assertEquals("Hola Cerveza", received.get(0)); - wsclient.close(); - } - - @Test - void testWebsocketSingleClientForInputStream() throws Exception { - WebsocketTestClient wsclient = new WebsocketTestClient("ws://localhost:" + PORT + "/hola3"); - wsclient.connect(); - - wsclient.sendBytesMessage("Cerveza".getBytes("UTF-8")); - - assertTrue(wsclient.await(10)); - List<String> received = wsclient.getReceived(String.class); - assertEquals(1, received.size()); - assertEquals("Hola Cerveza", received.get(0)); - wsclient.close(); - } - - @Test - void testWebsocketBroadcastClient() throws Exception { - WebsocketTestClient wsclient1 = new WebsocketTestClient("ws://localhost:" + PORT + "/broadcast", 2); - WebsocketTestClient wsclient2 = new WebsocketTestClient("ws://localhost:" + PORT + "/broadcast", 2); - wsclient1.connect(); - wsclient2.connect(); - - wsclient1.sendTextMessage("Gambas"); - wsclient2.sendTextMessage("Calamares"); - - assertTrue(wsclient1.await(10)); - assertTrue(wsclient2.await(10)); - - List<String> received1 = wsclient1.getReceived(String.class); - assertEquals(2, received1.size()); - - assertTrue(received1.contains("Hola Gambas")); - assertTrue(received1.contains("Hola Calamares")); - - List<String> received2 = wsclient2.getReceived(String.class); - assertEquals(2, received2.size()); - assertTrue(received2.contains("Hola Gambas")); - assertTrue(received2.contains("Hola Calamares")); - - wsclient1.close(); - wsclient2.close(); - } - - @Test - void testWebsocketEventsResendingDisabled() throws Exception { - WebsocketTestClient wsclient = new WebsocketTestClient("ws://localhost:" + PORT + "/hola4"); - wsclient.connect(); - assertFalse(wsclient.await(10)); - wsclient.close(); - } - // START SNIPPET: payload @Override protected RouteBuilder createRouteBuilder() { @@ -141,27 +76,6 @@ public class WebsocketRouteTest extends WebsocketCamelRouterTestSupport { createResponse(exchange, false); } }).to("atmosphere-websocket:///hola"); - - // route for a broadcast line - from("atmosphere-websocket:///broadcast").to("log:info").process(new Processor() { - public void process(final Exchange exchange) { - createResponse(exchange, false); - } - }).to("atmosphere-websocket:///broadcast?sendToAll=true"); - - // route for a single stream line - from("atmosphere-websocket:///hola3?useStreaming=true").to("log:info").process(new Processor() { - public void process(final Exchange exchange) { - createResponse(exchange, true); - } - }).to("atmosphere-websocket:///hola3"); - - // route for events resending disabled - from("atmosphere-websocket:///hola4").to("log:info").process(new Processor() { - public void process(final Exchange exchange) { - checkEventsResendingDisabled(exchange); - } - }).to("atmosphere-websocket:///hola4"); } }; } diff --git a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute1WithInitParamTest.java b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute1WithInitParamTest.java new file mode 100644 index 000000000000..a10f061ff070 --- /dev/null +++ b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute1WithInitParamTest.java @@ -0,0 +1,103 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.atmosphere.websocket; + +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.test.infra.common.http.WebsocketTestClient; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class WebsocketRoute1WithInitParamTest extends WebsocketCamelRouterWithInitParamTestSupport { + + private void runtTest(String s) { + WebsocketTestClient wsclient = new WebsocketTestClient("ws://localhost:" + PORT + s); + wsclient.connect(); + wsclient.close(); + } + + @Test + void testWebsocketEventsResendingEnabled() { + assertDoesNotThrow(() -> runtTest("/hola")); + + } + + @Test + void testPassParametersWebsocketOnOpen() { + assertDoesNotThrow(() -> runtTest("/hola1?param1=value1¶m2=value2")); + } + + // START SNIPPET: payload + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + public void configure() { + // route for events resending enabled + from("atmosphere-websocket:///hola").to("log:info").process(new Processor() { + public void process(final Exchange exchange) { + checkEventsResendingEnabled(exchange); + } + }); + + // route for events resending enabled + from("atmosphere-websocket:///hola1").to("log:info").process(new Processor() { + public void process(final Exchange exchange) { + checkPassedParameters(exchange); + } + }); + } + }; + } + + private static void checkEventsResendingEnabled(Exchange exchange) { + Object connectionKey = exchange.getIn().getHeader(WebsocketConstants.CONNECTION_KEY); + Object eventType = exchange.getIn().getHeader(WebsocketConstants.EVENT_TYPE); + Object msg = exchange.getIn().getBody(); + + assertNull(msg); + assertNotNull(connectionKey); + + if (eventType instanceof Integer) { + assertTrue(eventType.equals(WebsocketConstants.ONOPEN_EVENT_TYPE) + || eventType.equals(WebsocketConstants.ONCLOSE_EVENT_TYPE) + || eventType.equals(WebsocketConstants.ONERROR_EVENT_TYPE)); + } + } + + private static void checkPassedParameters(Exchange exchange) { + Object connectionKey = exchange.getIn().getHeader(WebsocketConstants.CONNECTION_KEY); + Object eventType = exchange.getIn().getHeader(WebsocketConstants.EVENT_TYPE); + Object msg = exchange.getIn().getBody(); + + assertNull(msg); + assertNotNull(connectionKey); + + if (eventType instanceof Integer && eventType.equals(WebsocketConstants.ONOPEN_EVENT_TYPE)) { + + String param1 = (String) exchange.getIn().getHeader("param1"); + String param2 = (String) exchange.getIn().getHeader("param2"); + + assertTrue(param1.equals("value1") && param2.equals("value2")); + } + } + // END SNIPPET: payload +} diff --git a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteTest.java b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute2Test.java similarity index 61% copy from components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteTest.java copy to components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute2Test.java index 85c718da08e3..f2730c1f1237 100644 --- a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteTest.java +++ b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute2Test.java @@ -31,69 +31,12 @@ import org.apache.camel.util.IOHelper; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -public class WebsocketRouteTest extends WebsocketCamelRouterTestSupport { +public class WebsocketRoute2Test extends WebsocketCamelRouterTestSupport { private static final String RESPONSE_GREETING = "Hola "; private static final byte[] RESPONSE_GREETING_BYTES = { 0x48, 0x6f, 0x6c, 0x61, 0x20 }; - @Test - void testWebsocketSingleClient() throws Exception { - WebsocketTestClient wsclient = new WebsocketTestClient("ws://localhost:" + PORT + "/hola"); - wsclient.connect(); - - wsclient.sendTextMessage("Cerveza"); - - assertTrue(wsclient.await(10)); - List<String> received = wsclient.getReceived(String.class); - assertEquals(1, received.size()); - assertEquals("Hola Cerveza", received.get(0)); - wsclient.close(); - } - - @Test - void testWebsocketSingleClientForBytes() throws Exception { - WebsocketTestClient wsclient = new WebsocketTestClient("ws://localhost:" + PORT + "/hola"); - wsclient.connect(); - - wsclient.sendBytesMessage("Cerveza".getBytes("UTF-8")); - - assertTrue(wsclient.await(10)); - List<String> received = wsclient.getReceived(String.class); - assertEquals(1, received.size()); - assertEquals("Hola Cerveza", received.get(0)); - wsclient.close(); - } - - @Test - void testWebsocketSingleClientForReader() throws Exception { - WebsocketTestClient wsclient = new WebsocketTestClient("ws://localhost:" + PORT + "/hola3"); - wsclient.connect(); - - wsclient.sendTextMessage("Cerveza"); - - assertTrue(wsclient.await(10)); - List<String> received = wsclient.getReceived(String.class); - assertEquals(1, received.size()); - assertEquals("Hola Cerveza", received.get(0)); - wsclient.close(); - } - - @Test - void testWebsocketSingleClientForInputStream() throws Exception { - WebsocketTestClient wsclient = new WebsocketTestClient("ws://localhost:" + PORT + "/hola3"); - wsclient.connect(); - - wsclient.sendBytesMessage("Cerveza".getBytes("UTF-8")); - - assertTrue(wsclient.await(10)); - List<String> received = wsclient.getReceived(String.class); - assertEquals(1, received.size()); - assertEquals("Hola Cerveza", received.get(0)); - wsclient.close(); - } - @Test void testWebsocketBroadcastClient() throws Exception { WebsocketTestClient wsclient1 = new WebsocketTestClient("ws://localhost:" + PORT + "/broadcast", 2); @@ -122,46 +65,17 @@ public class WebsocketRouteTest extends WebsocketCamelRouterTestSupport { wsclient2.close(); } - @Test - void testWebsocketEventsResendingDisabled() throws Exception { - WebsocketTestClient wsclient = new WebsocketTestClient("ws://localhost:" + PORT + "/hola4"); - wsclient.connect(); - assertFalse(wsclient.await(10)); - wsclient.close(); - } - // START SNIPPET: payload @Override protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { public void configure() { - // route for a single line - from("atmosphere-websocket:///hola").to("log:info").process(new Processor() { - public void process(final Exchange exchange) { - createResponse(exchange, false); - } - }).to("atmosphere-websocket:///hola"); - // route for a broadcast line from("atmosphere-websocket:///broadcast").to("log:info").process(new Processor() { public void process(final Exchange exchange) { createResponse(exchange, false); } }).to("atmosphere-websocket:///broadcast?sendToAll=true"); - - // route for a single stream line - from("atmosphere-websocket:///hola3?useStreaming=true").to("log:info").process(new Processor() { - public void process(final Exchange exchange) { - createResponse(exchange, true); - } - }).to("atmosphere-websocket:///hola3"); - - // route for events resending disabled - from("atmosphere-websocket:///hola4").to("log:info").process(new Processor() { - public void process(final Exchange exchange) { - checkEventsResendingDisabled(exchange); - } - }).to("atmosphere-websocket:///hola4"); } }; } diff --git a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute2WithInitParamTest.java b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute2WithInitParamTest.java new file mode 100644 index 000000000000..030d1031fc8d --- /dev/null +++ b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute2WithInitParamTest.java @@ -0,0 +1,157 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.atmosphere.websocket; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.test.infra.common.http.WebsocketTestClient; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class WebsocketRoute2WithInitParamTest extends WebsocketCamelRouterWithInitParamTestSupport { + + private static final String[] EXISTED_USERS = { "Kim", "Pavlo", "Peter" }; + private static String[] broadcastMessageTo = {}; + private static Map<String, String> connectionKeyUserMap = new HashMap<>(); + + @Test + void testWebsocketSingleClientBroadcastMultipleClients() throws Exception { + final int awaitTime = 2; + connectionKeyUserMap.clear(); + + WebsocketTestClient wsclient1 = new WebsocketTestClient("ws://localhost:" + PORT + "/broadcast", 2); + WebsocketTestClient wsclient2 = new WebsocketTestClient("ws://localhost:" + PORT + "/broadcast", 2); + WebsocketTestClient wsclient3 = new WebsocketTestClient("ws://localhost:" + PORT + "/broadcast", 2); + + wsclient1.connect(); + wsclient1.await(awaitTime); + + wsclient2.connect(); + wsclient2.await(awaitTime); + + wsclient3.connect(); + wsclient3.await(awaitTime); + + //all connections were registered in external store + assertEquals(EXISTED_USERS.length, connectionKeyUserMap.size()); + + broadcastMessageTo = new String[] { EXISTED_USERS[0], EXISTED_USERS[1] }; + + wsclient1.sendTextMessage("Gambas"); + wsclient1.await(awaitTime); + + List<String> received1 = wsclient1.getReceived(String.class); + assertEquals(1, received1.size()); + + for (String element : broadcastMessageTo) { + assertTrue(received1.get(0).contains(element)); + } + + List<String> received2 = wsclient2.getReceived(String.class); + assertEquals(1, received2.size()); + for (String element : broadcastMessageTo) { + assertTrue(received2.get(0).contains(element)); + } + + List<String> received3 = wsclient3.getReceived(String.class); + assertEquals(0, received3.size()); + + wsclient1.close(); + wsclient2.close(); + wsclient3.close(); + } + + // START SNIPPET: payload + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + public void configure() { + // route for single client broadcast to multiple clients + from("atmosphere-websocket:///broadcast").to("log:info") + .choice() + .when(header(WebsocketConstants.EVENT_TYPE).isEqualTo(WebsocketConstants.ONOPEN_EVENT_TYPE)) + .process(new Processor() { + public void process(final Exchange exchange) { + createExternalConnectionRegister(exchange); + } + }) + .when(header(WebsocketConstants.EVENT_TYPE).isEqualTo(WebsocketConstants.ONCLOSE_EVENT_TYPE)) + .process(new Processor() { + public void process(final Exchange exchange) { + removeExternalConnectionRegister(); + } + }) + .when(header(WebsocketConstants.EVENT_TYPE).isEqualTo(WebsocketConstants.ONERROR_EVENT_TYPE)) + .process(new Processor() { + public void process(final Exchange exchange) { + removeExternalConnectionRegister(); + } + }) + .otherwise() + .process(new Processor() { + public void process(final Exchange exchange) { + createBroadcastMultipleClientsResponse(exchange); + } + }).to("atmosphere-websocket:///broadcast"); + } + }; + } + + private static void createExternalConnectionRegister(Exchange exchange) { + Object connectionKey = exchange.getIn().getHeader(WebsocketConstants.CONNECTION_KEY); + + String userName = EXISTED_USERS[0]; + + if (!connectionKeyUserMap.isEmpty()) { + userName = EXISTED_USERS[connectionKeyUserMap.size()]; + } + + connectionKeyUserMap.put(userName, (String) connectionKey); + } + + private static void removeExternalConnectionRegister() { + // remove connectionKey from external store + } + + private static void createBroadcastMultipleClientsResponse(Exchange exchange) { + List<String> connectionKeyList = new ArrayList<>(); + Object msg = exchange.getIn().getBody(); + + String additionalMessage = ""; + + //send the message only to selected connections + for (String element : broadcastMessageTo) { + connectionKeyList.add(connectionKeyUserMap.get(element)); + additionalMessage += element + " "; + } + + additionalMessage += " Received the message: "; + + exchange.getIn().setBody(additionalMessage + msg); + exchange.getIn().setHeader(WebsocketConstants.CONNECTION_KEY_LIST, connectionKeyList); + } + + // END SNIPPET: payload +} diff --git a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteTest.java b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute3Test.java similarity index 61% copy from components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteTest.java copy to components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute3Test.java index 85c718da08e3..2dc9664ce94d 100644 --- a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteTest.java +++ b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute3Test.java @@ -31,41 +31,12 @@ import org.apache.camel.util.IOHelper; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -public class WebsocketRouteTest extends WebsocketCamelRouterTestSupport { +public class WebsocketRoute3Test extends WebsocketCamelRouterTestSupport { private static final String RESPONSE_GREETING = "Hola "; private static final byte[] RESPONSE_GREETING_BYTES = { 0x48, 0x6f, 0x6c, 0x61, 0x20 }; - @Test - void testWebsocketSingleClient() throws Exception { - WebsocketTestClient wsclient = new WebsocketTestClient("ws://localhost:" + PORT + "/hola"); - wsclient.connect(); - - wsclient.sendTextMessage("Cerveza"); - - assertTrue(wsclient.await(10)); - List<String> received = wsclient.getReceived(String.class); - assertEquals(1, received.size()); - assertEquals("Hola Cerveza", received.get(0)); - wsclient.close(); - } - - @Test - void testWebsocketSingleClientForBytes() throws Exception { - WebsocketTestClient wsclient = new WebsocketTestClient("ws://localhost:" + PORT + "/hola"); - wsclient.connect(); - - wsclient.sendBytesMessage("Cerveza".getBytes("UTF-8")); - - assertTrue(wsclient.await(10)); - List<String> received = wsclient.getReceived(String.class); - assertEquals(1, received.size()); - assertEquals("Hola Cerveza", received.get(0)); - wsclient.close(); - } - @Test void testWebsocketSingleClientForReader() throws Exception { WebsocketTestClient wsclient = new WebsocketTestClient("ws://localhost:" + PORT + "/hola3"); @@ -94,74 +65,17 @@ public class WebsocketRouteTest extends WebsocketCamelRouterTestSupport { wsclient.close(); } - @Test - void testWebsocketBroadcastClient() throws Exception { - WebsocketTestClient wsclient1 = new WebsocketTestClient("ws://localhost:" + PORT + "/broadcast", 2); - WebsocketTestClient wsclient2 = new WebsocketTestClient("ws://localhost:" + PORT + "/broadcast", 2); - wsclient1.connect(); - wsclient2.connect(); - - wsclient1.sendTextMessage("Gambas"); - wsclient2.sendTextMessage("Calamares"); - - assertTrue(wsclient1.await(10)); - assertTrue(wsclient2.await(10)); - - List<String> received1 = wsclient1.getReceived(String.class); - assertEquals(2, received1.size()); - - assertTrue(received1.contains("Hola Gambas")); - assertTrue(received1.contains("Hola Calamares")); - - List<String> received2 = wsclient2.getReceived(String.class); - assertEquals(2, received2.size()); - assertTrue(received2.contains("Hola Gambas")); - assertTrue(received2.contains("Hola Calamares")); - - wsclient1.close(); - wsclient2.close(); - } - - @Test - void testWebsocketEventsResendingDisabled() throws Exception { - WebsocketTestClient wsclient = new WebsocketTestClient("ws://localhost:" + PORT + "/hola4"); - wsclient.connect(); - assertFalse(wsclient.await(10)); - wsclient.close(); - } - // START SNIPPET: payload @Override protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { public void configure() { - // route for a single line - from("atmosphere-websocket:///hola").to("log:info").process(new Processor() { - public void process(final Exchange exchange) { - createResponse(exchange, false); - } - }).to("atmosphere-websocket:///hola"); - - // route for a broadcast line - from("atmosphere-websocket:///broadcast").to("log:info").process(new Processor() { - public void process(final Exchange exchange) { - createResponse(exchange, false); - } - }).to("atmosphere-websocket:///broadcast?sendToAll=true"); - // route for a single stream line from("atmosphere-websocket:///hola3?useStreaming=true").to("log:info").process(new Processor() { public void process(final Exchange exchange) { createResponse(exchange, true); } }).to("atmosphere-websocket:///hola3"); - - // route for events resending disabled - from("atmosphere-websocket:///hola4").to("log:info").process(new Processor() { - public void process(final Exchange exchange) { - checkEventsResendingDisabled(exchange); - } - }).to("atmosphere-websocket:///hola4"); } }; } diff --git a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteWithInitParamTest.java b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute3WithInitParamTest.java similarity index 52% rename from components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteWithInitParamTest.java rename to components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute3WithInitParamTest.java index aaf6ae26ea09..311bc64f40e4 100644 --- a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteWithInitParamTest.java +++ b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute3WithInitParamTest.java @@ -16,12 +16,10 @@ */ package org.apache.camel.component.atmosphere.websocket; -import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.ExecutionException; import org.apache.camel.Exchange; import org.apache.camel.Processor; @@ -29,85 +27,18 @@ import org.apache.camel.builder.RouteBuilder; import org.apache.camel.test.infra.common.http.WebsocketTestClient; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; -public class WebsocketRouteWithInitParamTest extends WebsocketCamelRouterWithInitParamTestSupport { +public class WebsocketRoute3WithInitParamTest extends WebsocketCamelRouterWithInitParamTestSupport { private static final String[] EXISTED_USERS = { "Kim", "Pavlo", "Peter" }; private static String[] broadcastMessageTo = {}; private static Map<String, String> connectionKeyUserMap = new HashMap<>(); - private void runtTest(String s) throws InterruptedException, ExecutionException, IOException { - WebsocketTestClient wsclient = new WebsocketTestClient("ws://localhost:" + PORT + s); - wsclient.connect(); - wsclient.close(); - } - - @Test - void testWebsocketEventsResendingEnabled() { - assertDoesNotThrow(() -> runtTest("/hola")); - - } - - @Test - void testPassParametersWebsocketOnOpen() { - assertDoesNotThrow(() -> runtTest("/hola1?param1=value1¶m2=value2")); - } - - @Test - void testWebsocketSingleClientBroadcastMultipleClients() throws Exception { - final int awaitTime = 5; - connectionKeyUserMap.clear(); - - WebsocketTestClient wsclient1 = new WebsocketTestClient("ws://localhost:" + PORT + "/broadcast", 2); - WebsocketTestClient wsclient2 = new WebsocketTestClient("ws://localhost:" + PORT + "/broadcast", 2); - WebsocketTestClient wsclient3 = new WebsocketTestClient("ws://localhost:" + PORT + "/broadcast", 2); - - wsclient1.connect(); - wsclient1.await(awaitTime); - - wsclient2.connect(); - wsclient2.await(awaitTime); - - wsclient3.connect(); - wsclient3.await(awaitTime); - - //all connections were registered in external store - assertEquals(EXISTED_USERS.length, connectionKeyUserMap.size()); - - broadcastMessageTo = new String[] { EXISTED_USERS[0], EXISTED_USERS[1] }; - - wsclient1.sendTextMessage("Gambas"); - wsclient1.await(awaitTime); - - List<String> received1 = wsclient1.getReceived(String.class); - assertEquals(1, received1.size()); - - for (String element : broadcastMessageTo) { - assertTrue(received1.get(0).contains(element)); - } - - List<String> received2 = wsclient2.getReceived(String.class); - assertEquals(1, received2.size()); - for (String element : broadcastMessageTo) { - assertTrue(received2.get(0).contains(element)); - } - - List<String> received3 = wsclient3.getReceived(String.class); - assertEquals(0, received3.size()); - - wsclient1.close(); - wsclient2.close(); - wsclient3.close(); - } - @Test void testWebsocketSingleClientBroadcastMultipleClientsGuaranteeDelivery() throws Exception { - final int awaitTime = 5; + final int awaitTime = 2; connectionKeyUserMap.clear(); WebsocketTestClient wsclient1 = new WebsocketTestClient("ws://localhost:" + PORT + "/guarantee", 2); @@ -156,48 +87,6 @@ public class WebsocketRouteWithInitParamTest extends WebsocketCamelRouterWithIni protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { public void configure() { - // route for events resending enabled - from("atmosphere-websocket:///hola").to("log:info").process(new Processor() { - public void process(final Exchange exchange) { - checkEventsResendingEnabled(exchange); - } - }); - - // route for events resending enabled - from("atmosphere-websocket:///hola1").to("log:info").process(new Processor() { - public void process(final Exchange exchange) { - checkPassedParameters(exchange); - } - }); - - // route for single client broadcast to multiple clients - from("atmosphere-websocket:///broadcast").to("log:info") - .choice() - .when(header(WebsocketConstants.EVENT_TYPE).isEqualTo(WebsocketConstants.ONOPEN_EVENT_TYPE)) - .process(new Processor() { - public void process(final Exchange exchange) { - createExternalConnectionRegister(exchange); - } - }) - .when(header(WebsocketConstants.EVENT_TYPE).isEqualTo(WebsocketConstants.ONCLOSE_EVENT_TYPE)) - .process(new Processor() { - public void process(final Exchange exchange) { - removeExternalConnectionRegister(); - } - }) - .when(header(WebsocketConstants.EVENT_TYPE).isEqualTo(WebsocketConstants.ONERROR_EVENT_TYPE)) - .process(new Processor() { - public void process(final Exchange exchange) { - removeExternalConnectionRegister(); - } - }) - .otherwise() - .process(new Processor() { - public void process(final Exchange exchange) { - createBroadcastMultipleClientsResponse(exchange); - } - }).to("atmosphere-websocket:///broadcast"); - // route for single client broadcast to multiple clients guarantee delivery from("atmosphere-websocket:///guarantee").to("log:info") .choice() @@ -246,7 +135,7 @@ public class WebsocketRouteWithInitParamTest extends WebsocketCamelRouterWithIni String userName = EXISTED_USERS[0]; - if (connectionKeyUserMap.size() > 0) { + if (!connectionKeyUserMap.isEmpty()) { userName = EXISTED_USERS[connectionKeyUserMap.size()]; } @@ -275,36 +164,5 @@ public class WebsocketRouteWithInitParamTest extends WebsocketCamelRouterWithIni exchange.getIn().setHeader(WebsocketConstants.CONNECTION_KEY_LIST, connectionKeyList); } - private static void checkEventsResendingEnabled(Exchange exchange) { - Object connectionKey = exchange.getIn().getHeader(WebsocketConstants.CONNECTION_KEY); - Object eventType = exchange.getIn().getHeader(WebsocketConstants.EVENT_TYPE); - Object msg = exchange.getIn().getBody(); - - assertNull(msg); - assertNotNull(connectionKey); - - if (eventType instanceof Integer) { - assertTrue(eventType.equals(WebsocketConstants.ONOPEN_EVENT_TYPE) - || eventType.equals(WebsocketConstants.ONCLOSE_EVENT_TYPE) - || eventType.equals(WebsocketConstants.ONERROR_EVENT_TYPE)); - } - } - - private static void checkPassedParameters(Exchange exchange) { - Object connectionKey = exchange.getIn().getHeader(WebsocketConstants.CONNECTION_KEY); - Object eventType = exchange.getIn().getHeader(WebsocketConstants.EVENT_TYPE); - Object msg = exchange.getIn().getBody(); - - assertNull(msg); - assertNotNull(connectionKey); - - if (eventType instanceof Integer && eventType.equals(WebsocketConstants.ONOPEN_EVENT_TYPE)) { - - String param1 = (String) exchange.getIn().getHeader("param1"); - String param2 = (String) exchange.getIn().getHeader("param2"); - - assertTrue(param1.equals("value1") && param2.equals("value2")); - } - } // END SNIPPET: payload } diff --git a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteTest.java b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute4Test.java similarity index 53% rename from components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteTest.java rename to components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute4Test.java index 85c718da08e3..72bbd62bee98 100644 --- a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteTest.java +++ b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRoute4Test.java @@ -21,7 +21,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.Reader; import java.io.StringReader; -import java.util.List; import org.apache.camel.Exchange; import org.apache.camel.Processor; @@ -30,98 +29,13 @@ import org.apache.camel.test.infra.common.http.WebsocketTestClient; import org.apache.camel.util.IOHelper; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -public class WebsocketRouteTest extends WebsocketCamelRouterTestSupport { +public class WebsocketRoute4Test extends WebsocketCamelRouterTestSupport { private static final String RESPONSE_GREETING = "Hola "; private static final byte[] RESPONSE_GREETING_BYTES = { 0x48, 0x6f, 0x6c, 0x61, 0x20 }; - @Test - void testWebsocketSingleClient() throws Exception { - WebsocketTestClient wsclient = new WebsocketTestClient("ws://localhost:" + PORT + "/hola"); - wsclient.connect(); - - wsclient.sendTextMessage("Cerveza"); - - assertTrue(wsclient.await(10)); - List<String> received = wsclient.getReceived(String.class); - assertEquals(1, received.size()); - assertEquals("Hola Cerveza", received.get(0)); - wsclient.close(); - } - - @Test - void testWebsocketSingleClientForBytes() throws Exception { - WebsocketTestClient wsclient = new WebsocketTestClient("ws://localhost:" + PORT + "/hola"); - wsclient.connect(); - - wsclient.sendBytesMessage("Cerveza".getBytes("UTF-8")); - - assertTrue(wsclient.await(10)); - List<String> received = wsclient.getReceived(String.class); - assertEquals(1, received.size()); - assertEquals("Hola Cerveza", received.get(0)); - wsclient.close(); - } - - @Test - void testWebsocketSingleClientForReader() throws Exception { - WebsocketTestClient wsclient = new WebsocketTestClient("ws://localhost:" + PORT + "/hola3"); - wsclient.connect(); - - wsclient.sendTextMessage("Cerveza"); - - assertTrue(wsclient.await(10)); - List<String> received = wsclient.getReceived(String.class); - assertEquals(1, received.size()); - assertEquals("Hola Cerveza", received.get(0)); - wsclient.close(); - } - - @Test - void testWebsocketSingleClientForInputStream() throws Exception { - WebsocketTestClient wsclient = new WebsocketTestClient("ws://localhost:" + PORT + "/hola3"); - wsclient.connect(); - - wsclient.sendBytesMessage("Cerveza".getBytes("UTF-8")); - - assertTrue(wsclient.await(10)); - List<String> received = wsclient.getReceived(String.class); - assertEquals(1, received.size()); - assertEquals("Hola Cerveza", received.get(0)); - wsclient.close(); - } - - @Test - void testWebsocketBroadcastClient() throws Exception { - WebsocketTestClient wsclient1 = new WebsocketTestClient("ws://localhost:" + PORT + "/broadcast", 2); - WebsocketTestClient wsclient2 = new WebsocketTestClient("ws://localhost:" + PORT + "/broadcast", 2); - wsclient1.connect(); - wsclient2.connect(); - - wsclient1.sendTextMessage("Gambas"); - wsclient2.sendTextMessage("Calamares"); - - assertTrue(wsclient1.await(10)); - assertTrue(wsclient2.await(10)); - - List<String> received1 = wsclient1.getReceived(String.class); - assertEquals(2, received1.size()); - - assertTrue(received1.contains("Hola Gambas")); - assertTrue(received1.contains("Hola Calamares")); - - List<String> received2 = wsclient2.getReceived(String.class); - assertEquals(2, received2.size()); - assertTrue(received2.contains("Hola Gambas")); - assertTrue(received2.contains("Hola Calamares")); - - wsclient1.close(); - wsclient2.close(); - } - @Test void testWebsocketEventsResendingDisabled() throws Exception { WebsocketTestClient wsclient = new WebsocketTestClient("ws://localhost:" + PORT + "/hola4"); @@ -135,27 +49,6 @@ public class WebsocketRouteTest extends WebsocketCamelRouterTestSupport { protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { public void configure() { - // route for a single line - from("atmosphere-websocket:///hola").to("log:info").process(new Processor() { - public void process(final Exchange exchange) { - createResponse(exchange, false); - } - }).to("atmosphere-websocket:///hola"); - - // route for a broadcast line - from("atmosphere-websocket:///broadcast").to("log:info").process(new Processor() { - public void process(final Exchange exchange) { - createResponse(exchange, false); - } - }).to("atmosphere-websocket:///broadcast?sendToAll=true"); - - // route for a single stream line - from("atmosphere-websocket:///hola3?useStreaming=true").to("log:info").process(new Processor() { - public void process(final Exchange exchange) { - createResponse(exchange, true); - } - }).to("atmosphere-websocket:///hola3"); - // route for events resending disabled from("atmosphere-websocket:///hola4").to("log:info").process(new Processor() { public void process(final Exchange exchange) {
