You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by co...@apache.org on 2019/06/11 08:31:44 UTC
[camel] 02/06: Missing file from last commit
This is an automated email from the ASF dual-hosted git repository.
coheigea pushed a commit to branch CAMEL-13563
in repository https://gitbox.apache.org/repos/asf/camel.git
commit cce51dc871ef05f7ff5ac50666458c2d41a815fa
Author: Colm O hEigeartaigh <co...@apache.org>
AuthorDate: Thu May 23 15:08:41 2019 +0100
Missing file from last commit
---
.../WebsocketSSLClientAuthRouteExampleTest.java | 190 +++++++++++++++++++++
1 file changed, 190 insertions(+)
diff --git a/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketSSLClientAuthRouteExampleTest.java b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketSSLClientAuthRouteExampleTest.java
new file mode 100644
index 0000000..2853542
--- /dev/null
+++ b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketSSLClientAuthRouteExampleTest.java
@@ -0,0 +1,190 @@
+/*
+ * 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.websocket;
+
+import java.io.IOException;
+import java.security.GeneralSecurityException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import javax.net.ssl.SSLContext;
+
+import io.netty.handler.ssl.ClientAuth;
+import io.netty.handler.ssl.JdkSslContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.support.jsse.KeyManagersParameters;
+import org.apache.camel.support.jsse.KeyStoreParameters;
+import org.apache.camel.support.jsse.SSLContextParameters;
+import org.apache.camel.support.jsse.SSLContextServerParameters;
+import org.apache.camel.support.jsse.TrustManagersParameters;
+import org.apache.camel.test.AvailablePortFinder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.asynchttpclient.AsyncHttpClient;
+import org.asynchttpclient.AsyncHttpClientConfig;
+import org.asynchttpclient.DefaultAsyncHttpClient;
+import org.asynchttpclient.DefaultAsyncHttpClientConfig;
+import org.asynchttpclient.ws.WebSocket;
+import org.asynchttpclient.ws.WebSocketTextListener;
+import org.asynchttpclient.ws.WebSocketUpgradeHandler;
+import org.junit.Before;
+import org.junit.Test;
+
+public class WebsocketSSLClientAuthRouteExampleTest extends CamelTestSupport {
+
+ private static List<String> received = new ArrayList<>();
+ private static CountDownLatch latch = new CountDownLatch(10);
+ protected Properties originalValues = new Properties();
+ protected String pwd = "changeit";
+ protected int port;
+
+ @Override
+ @Before
+ public void setUp() throws Exception {
+ port = AvailablePortFinder.getNextAvailable(16200);
+
+ super.setUp();
+ }
+
+ protected AsyncHttpClient createAsyncHttpSSLClient() throws IOException, GeneralSecurityException {
+
+ AsyncHttpClient c;
+ AsyncHttpClientConfig config;
+
+ DefaultAsyncHttpClientConfig.Builder builder =
+ new DefaultAsyncHttpClientConfig.Builder();
+
+ SSLContextParameters sslContextParameters = new SSLContextParameters();
+
+ KeyStoreParameters truststoreParameters = new KeyStoreParameters();
+ truststoreParameters.setResource("jsse/localhost.ks");
+ truststoreParameters.setPassword(pwd);
+
+ TrustManagersParameters clientSSLTrustManagers = new TrustManagersParameters();
+ clientSSLTrustManagers.setKeyStore(truststoreParameters);
+ sslContextParameters.setTrustManagers(clientSSLTrustManagers);
+
+ KeyStoreParameters keystoreParameters = new KeyStoreParameters();
+ keystoreParameters.setResource("jsse/localhost.ks");
+ keystoreParameters.setPassword(pwd);
+ KeyManagersParameters clientAuthClientSSLKeyManagers = new KeyManagersParameters();
+ clientAuthClientSSLKeyManagers.setKeyPassword(pwd);
+ clientAuthClientSSLKeyManagers.setKeyStore(keystoreParameters);
+ sslContextParameters.setKeyManagers(clientAuthClientSSLKeyManagers);
+
+ SSLContext sslContext = sslContextParameters.createSSLContext(context());
+ JdkSslContext ssl = new JdkSslContext(sslContext, true, ClientAuth.REQUIRE);
+ builder.setSslContext(ssl);
+ builder.setAcceptAnyCertificate(true);
+ config = builder.build();
+ c = new DefaultAsyncHttpClient(config);
+
+ return c;
+ }
+
+ protected SSLContextParameters defineSSLContextParameters() {
+
+ KeyStoreParameters ksp = new KeyStoreParameters();
+ ksp.setResource("jsse/localhost.ks");
+ ksp.setPassword(pwd);
+
+ KeyManagersParameters kmp = new KeyManagersParameters();
+ kmp.setKeyPassword(pwd);
+ kmp.setKeyStore(ksp);
+
+ TrustManagersParameters tmp = new TrustManagersParameters();
+ tmp.setKeyStore(ksp);
+
+ SSLContextServerParameters scsp = new SSLContextServerParameters();
+ scsp.setClientAuthentication("REQUIRE");
+
+ SSLContextParameters sslContextParameters = new SSLContextParameters();
+ sslContextParameters.setKeyManagers(kmp);
+ sslContextParameters.setTrustManagers(tmp);
+ sslContextParameters.setServerParameters(scsp);
+
+ return sslContextParameters;
+ }
+
+ @Test
+ public void testWSHttpCall() throws Exception {
+
+ AsyncHttpClient c = createAsyncHttpSSLClient();
+ WebSocket websocket = c.prepareGet("wss://127.0.0.1:" + port + "/test").execute(
+ new WebSocketUpgradeHandler.Builder()
+ .addWebSocketListener(new WebSocketTextListener() {
+ @Override
+ public void onMessage(String message) {
+ received.add(message);
+ log.info("received --> " + message);
+ latch.countDown();
+ }
+
+
+ @Override
+ public void onOpen(WebSocket websocket) {
+ }
+
+ @Override
+ public void onClose(WebSocket websocket) {
+ }
+
+ @Override
+ public void onError(Throwable t) {
+ t.printStackTrace();
+ }
+ }).build()).get();
+
+ getMockEndpoint("mock:client").expectedBodiesReceived("Hello from WS client");
+
+ websocket.sendMessage("Hello from WS client");
+ assertTrue(latch.await(10, TimeUnit.SECONDS));
+
+ assertMockEndpointsSatisfied();
+
+ assertEquals(10, received.size());
+ for (int i = 0; i < 10; i++) {
+ assertEquals(">> Welcome on board!", received.get(i));
+ }
+
+ websocket.close();
+ c.close();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() {
+
+ WebsocketComponent websocketComponent = (WebsocketComponent) context.getComponent("websocket");
+ websocketComponent.setSslContextParameters(defineSSLContextParameters());
+ websocketComponent.setPort(port);
+ websocketComponent.setMinThreads(1);
+ websocketComponent.setMaxThreads(25);
+
+ from("websocket://test")
+ .log(">>> Message received from WebSocket Client : ${body}")
+ .to("mock:client")
+ .loop(10)
+ .setBody().constant(">> Welcome on board!")
+ .to("websocket://test");
+ }
+ };
+ }
+}