This is an automated email from the ASF dual-hosted git repository.

coheigea pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit dbe4d965940a4174c3790a7d6c73a78c677606c2
Author: Colm O hEigeartaigh <cohei...@apache.org>
AuthorDate: Fri May 3 11:59:02 2019 +0100

    CAMEL-13471 - Adding rest component tests for coap + various protocols
---
 .../camel/coap/CoAPRestComponentTCPTLSTest.java    | 103 ++++++++++++++++++++
 .../camel/coap/CoAPRestComponentTCPTest.java       | 107 +++------------------
 .../camel/coap/CoAPRestComponentTLSTest.java       | 107 +++++++++------------
 .../apache/camel/coap/CoAPRestComponentTest.java   | 101 +++----------------
 ...TCPTest.java => CoAPRestComponentTestBase.java} |  83 ++++++++++------
 5 files changed, 236 insertions(+), 265 deletions(-)

diff --git 
a/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTCPTLSTest.java
 
b/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTCPTLSTest.java
new file mode 100644
index 0000000..927476a
--- /dev/null
+++ 
b/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTCPTLSTest.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.coap;
+
+import java.io.IOException;
+import java.security.GeneralSecurityException;
+
+import javax.net.ssl.SSLContext;
+
+import org.apache.camel.model.rest.RestConfigurationDefinition;
+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.TrustManagersParameters;
+import org.eclipse.californium.core.CoapClient;
+import org.eclipse.californium.core.network.CoapEndpoint;
+import org.eclipse.californium.core.network.config.NetworkConfig;
+import org.eclipse.californium.elements.tcp.TcpClientConnector;
+import org.eclipse.californium.elements.tcp.TlsClientConnector;
+
+/**
+ * Test the CoAP Rest Component with TCP + TLS
+ */
+public class CoAPRestComponentTCPTLSTest extends CoAPRestComponentTestBase {
+
+    @Override
+    protected String getProtocol() {
+        return "coaps+tcp";
+    }
+
+    @Override
+    protected void decorateClient(CoapClient client) throws 
GeneralSecurityException, IOException {
+
+        NetworkConfig config = NetworkConfig.createStandardWithoutFile();
+        int tcpThreads = config.getInt(NetworkConfig.Keys.TCP_WORKER_THREADS);
+        int tcpConnectTimeout = 
config.getInt(NetworkConfig.Keys.TCP_CONNECT_TIMEOUT);
+        int tcpIdleTimeout = 
config.getInt(NetworkConfig.Keys.TCP_CONNECTION_IDLE_TIMEOUT);
+
+        KeyStoreParameters truststoreParameters = new KeyStoreParameters();
+        truststoreParameters.setResource("truststore.jks");
+        truststoreParameters.setPassword("storepass");
+
+        SSLContextParameters clientSSLContextParameters = new 
SSLContextParameters();
+        TrustManagersParameters clientSSLTrustManagers = new 
TrustManagersParameters();
+        clientSSLTrustManagers.setKeyStore(truststoreParameters);
+        clientSSLContextParameters.setTrustManagers(clientSSLTrustManagers);
+
+        SSLContext sslContext = 
clientSSLContextParameters.createSSLContext(context);
+        TcpClientConnector tcpConnector = new TlsClientConnector(sslContext, 
tcpThreads, tcpConnectTimeout, tcpIdleTimeout);
+
+        CoapEndpoint.Builder tcpBuilder = new CoapEndpoint.Builder();
+        tcpBuilder.setConnector(tcpConnector);
+
+        client.setEndpoint(tcpBuilder.build());
+    }
+
+    @Override
+    protected void decorateRestConfiguration(RestConfigurationDefinition 
restConfig) {
+        KeyStoreParameters keystoreParameters = new KeyStoreParameters();
+        keystoreParameters.setResource("service.jks");
+        keystoreParameters.setPassword("security");
+
+        SSLContextParameters serviceSSLContextParameters = new 
SSLContextParameters();
+        KeyManagersParameters serviceSSLKeyManagers = new 
KeyManagersParameters();
+        serviceSSLKeyManagers.setKeyPassword("security");
+        serviceSSLKeyManagers.setKeyStore(keystoreParameters);
+        serviceSSLContextParameters.setKeyManagers(serviceSSLKeyManagers);
+
+        KeyStoreParameters truststoreParameters = new KeyStoreParameters();
+        truststoreParameters.setResource("truststore.jks");
+        truststoreParameters.setPassword("storepass");
+
+        SSLContextParameters clientSSLContextParameters = new 
SSLContextParameters();
+        TrustManagersParameters clientSSLTrustManagers = new 
TrustManagersParameters();
+        clientSSLTrustManagers.setKeyStore(truststoreParameters);
+        clientSSLContextParameters.setTrustManagers(clientSSLTrustManagers);
+
+        context.getRegistry().bind("serviceSSLContextParameters", 
serviceSSLContextParameters);
+        context.getRegistry().bind("clientSSLContextParameters", 
clientSSLContextParameters);
+
+        restConfig.endpointProperty("sslContextParameters", 
"#serviceSSLContextParameters");
+    }
+
+    @Override
+    protected String getClientURI() {
+        return super.getClientURI() + 
"?sslContextParameters=#clientSSLContextParameters";
+    }
+
+}
diff --git 
a/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTCPTest.java
 
b/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTCPTest.java
index bd85eec..6c8a649 100644
--- 
a/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTCPTest.java
+++ 
b/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTCPTest.java
@@ -16,71 +16,27 @@
  */
 package org.apache.camel.coap;
 
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.test.AvailablePortFinder;
-import org.apache.camel.test.junit4.CamelTestSupport;
+import java.io.IOException;
+import java.security.GeneralSecurityException;
+
+import org.apache.camel.model.rest.RestConfigurationDefinition;
 import org.eclipse.californium.core.CoapClient;
-import org.eclipse.californium.core.CoapResponse;
-import org.eclipse.californium.core.coap.CoAP.ResponseCode;
-import org.eclipse.californium.core.coap.MediaTypeRegistry;
 import org.eclipse.californium.core.network.CoapEndpoint;
 import org.eclipse.californium.core.network.config.NetworkConfig;
 import org.eclipse.californium.elements.tcp.TcpClientConnector;
-import org.junit.Test;
-
-public class CoAPRestComponentTCPTest extends CamelTestSupport {
-    static int coapport = AvailablePortFinder.getNextAvailable();
-
-    @Test
-    public void testCoAP() throws Exception {
-        NetworkConfig.createStandardWithoutFile();
-        CoapClient client;
-        CoapResponse rsp;
-
-        client = new CoapClient("coap+tcp://localhost:" + coapport + 
"/TestResource/Ducky");
-        decorateWithTCP(client);
-        rsp = client.get();
-        assertEquals(ResponseCode.CONTENT, rsp.getCode());
-        assertEquals("Hello Ducky", rsp.getResponseText());
-        rsp = client.post("data", MediaTypeRegistry.TEXT_PLAIN);
-        assertEquals(ResponseCode.CONTENT, rsp.getCode());
-        assertEquals("Hello Ducky: data", rsp.getResponseText());
 
-        client = new CoapClient("coap+tcp://localhost:" + coapport + 
"/TestParams?id=Ducky");
-        decorateWithTCP(client);
-        client.setTimeout(1000000L);
-        rsp = client.get();
-        assertEquals(ResponseCode.CONTENT, rsp.getCode());
-        assertEquals("Hello Ducky", rsp.getResponseText());
-        rsp = client.post("data", MediaTypeRegistry.TEXT_PLAIN);
-        assertEquals(ResponseCode.CONTENT, rsp.getCode());
-        assertEquals("Hello Ducky: data", rsp.getResponseText());
-        assertEquals(MediaTypeRegistry.TEXT_PLAIN, 
rsp.getOptions().getContentFormat());
-    }
+/**
+ * Test the CoAP Rest Component with plain TCP.
+ */
+public class CoAPRestComponentTCPTest extends CoAPRestComponentTestBase {
 
-    @Test
-    public void testCoAPMethodNotAllowedResponse() throws Exception {
-        NetworkConfig.createStandardWithoutFile();
-        CoapClient client = new CoapClient("coap+tcp://localhost:" + coapport 
+ "/TestResource/Ducky");
-        decorateWithTCP(client);
-        client.setTimeout(1000000L);
-        CoapResponse rsp = client.delete();
-        assertEquals(ResponseCode.METHOD_NOT_ALLOWED, rsp.getCode());
+    @Override
+    protected String getProtocol() {
+        return "coap+tcp";
     }
 
-    @Test
-    public void testCoAPNotFoundResponse() throws Exception {
-        NetworkConfig.createStandardWithoutFile();
-        CoapClient client = new CoapClient("coap+tcp://localhost:" + coapport 
+ "/foo/bar/cheese");
-        decorateWithTCP(client);
-        client.setTimeout(1000000L);
-        CoapResponse rsp = client.get();
-        assertEquals(ResponseCode.NOT_FOUND, rsp.getCode());
-    }
-    
-    private void decorateWithTCP(CoapClient client) {
+    @Override
+    protected void decorateClient(CoapClient client) throws 
GeneralSecurityException, IOException {
         NetworkConfig config = NetworkConfig.createStandardWithoutFile();
         int tcpThreads = config.getInt(NetworkConfig.Keys.TCP_WORKER_THREADS);
         int tcpConnectTimeout = 
config.getInt(NetworkConfig.Keys.TCP_CONNECT_TIMEOUT);
@@ -93,39 +49,8 @@ public class CoAPRestComponentTCPTest extends 
CamelTestSupport {
     }
 
     @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        return new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                
restConfiguration("coap").scheme("coap+tcp").host("localhost").port(coapport);
-
-                rest("/TestParams")
-                    .get().to("direct:get1")
-                    .post().to("direct:post1");
-
-                rest("/TestResource")
-                    .get("/{id}").to("direct:get1")
-                    .post("/{id}").to("direct:post1");
-                
-                from("direct:get1").process(new Processor() {
-                    public void process(Exchange exchange) throws Exception {
-                        String id = exchange.getIn().getHeader("id", 
String.class);
-                        exchange.getOut().setBody("Hello " + id);
-                    }
-                });
-
-                from("direct:post1").process(new Processor() {
-                    public void process(Exchange exchange) throws Exception {
-                        String id = exchange.getIn().getHeader("id", 
String.class);
-                        String ct = 
exchange.getIn().getHeader(Exchange.CONTENT_TYPE, String.class);
-                        if (!"text/plain".equals(ct)) {
-                            throw new Exception("No content type");
-                        }
-                        exchange.getOut().setBody("Hello " + id + ": " + 
exchange.getIn().getBody(String.class));
-                        exchange.getOut().setHeader(Exchange.CONTENT_TYPE, ct);
-                    }
-                });
-            }
-        };
+    protected void decorateRestConfiguration(RestConfigurationDefinition 
restConfig) {
+        // Nothing here
     }
+
 }
diff --git 
a/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTLSTest.java
 
b/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTLSTest.java
index 26a4b29..f0e8973 100644
--- 
a/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTLSTest.java
+++ 
b/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTLSTest.java
@@ -16,50 +16,53 @@
  */
 package org.apache.camel.coap;
 
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
-import org.apache.camel.Produce;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
+import java.io.IOException;
+import java.security.GeneralSecurityException;
+import java.security.KeyStore;
+import java.security.cert.Certificate;
+
+import org.apache.camel.model.rest.RestConfigurationDefinition;
 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.TrustManagersParameters;
-import org.apache.camel.test.AvailablePortFinder;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.eclipse.californium.core.coap.CoAP;
-import org.junit.Test;
-
-public class CoAPRestComponentTLSTest extends CamelTestSupport {
-    protected static final int PORT = AvailablePortFinder.getNextAvailable();
-
-    @Produce("direct:start")
-    protected ProducerTemplate sender;
-
-    @Test
-    public void testPOST() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMinimumMessageCount(1);
-        mock.expectedBodiesReceived("Hello Camel CoAP");
-        mock.expectedHeaderReceived(CoAPConstants.COAP_RESPONSE_CODE, 
CoAP.ResponseCode.CONTENT.toString());
-        sender.sendBodyAndHeader("Camel CoAP", CoAPConstants.COAP_METHOD, 
"POST");
-        assertMockEndpointsSatisfied();
-    }
+import org.eclipse.californium.core.CoapClient;
+import org.eclipse.californium.core.network.CoapEndpoint;
+import org.eclipse.californium.scandium.DTLSConnector;
+import org.eclipse.californium.scandium.config.DtlsConnectorConfig;
 
-    @Test
-    public void testGET() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMinimumMessageCount(1);
-        mock.expectedBodiesReceived("Hello user");
-        mock.expectedHeaderReceived(CoAPConstants.COAP_RESPONSE_CODE, 
CoAP.ResponseCode.CONTENT.toString());
-        sender.sendBody("");
-        assertMockEndpointsSatisfied();
+/**
+ * Test the CoAP Rest Component with UDP + TLS
+ */
+public class CoAPRestComponentTLSTest extends CoAPRestComponentTestBase {
+
+    @Override
+    protected String getProtocol() {
+        return "coaps";
     }
 
     @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
+    protected void decorateClient(CoapClient client) throws 
GeneralSecurityException, IOException {
+
+        DtlsConnectorConfig.Builder builder = new 
DtlsConnectorConfig.Builder();
+        builder.setClientOnly();
+
+        KeyStoreParameters truststoreParameters = new KeyStoreParameters();
+        truststoreParameters.setResource("truststore.jks");
+        truststoreParameters.setPassword("storepass");
 
+        KeyStore trustStore = truststoreParameters.createKeyStore();
+        Certificate[] certs = new Certificate[] 
{trustStore.getCertificate(trustStore.aliases().nextElement())};
+        builder.setTrustStore(certs);
+
+        CoapEndpoint.Builder coapBuilder = new CoapEndpoint.Builder();
+        coapBuilder.setConnector(new DTLSConnector(builder.build()));
+
+        client.setEndpoint(coapBuilder.build());
+    }
+
+    @Override
+    protected void decorateRestConfiguration(RestConfigurationDefinition 
restConfig) {
         KeyStoreParameters keystoreParameters = new KeyStoreParameters();
         keystoreParameters.setResource("service.jks");
         keystoreParameters.setPassword("security");
@@ -82,32 +85,12 @@ public class CoAPRestComponentTLSTest extends 
CamelTestSupport {
         context.getRegistry().bind("serviceSSLContextParameters", 
serviceSSLContextParameters);
         context.getRegistry().bind("clientSSLContextParameters", 
clientSSLContextParameters);
 
-        return new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                
restConfiguration().component("coap").scheme("coaps").host("localhost").port(PORT)
-                    .endpointProperty("sslContextParameters", 
"#serviceSSLContextParameters");
-
-                rest("/TestResource")
-                    .get().to("direct:get1")
-                    .post().to("direct:post1");
-
-                from("direct:get1").process(new Processor() {
-                    public void process(Exchange exchange) throws Exception {
-                        exchange.getOut().setBody("Hello user");
-                    }
-                });
-
-                from("direct:post1").process(new Processor() {
-                    public void process(Exchange exchange) throws Exception {
-                        exchange.getOut().setBody("Hello " + 
exchange.getIn().getBody(String.class));
-                    }
-                });
-
-                from("direct:start")
-                    
.toF("coaps://localhost:%d/TestResource?sslContextParameters=#clientSSLContextParameters",
 PORT)
-                    .to("mock:result");
-            }
-        };
+        restConfig.endpointProperty("sslContextParameters", 
"#serviceSSLContextParameters");
     }
+
+    @Override
+    protected String getClientURI() {
+        return super.getClientURI() + 
"?sslContextParameters=#clientSSLContextParameters";
+    }
+
 }
diff --git 
a/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTest.java
 
b/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTest.java
index 0769cb5..8c033b7 100644
--- 
a/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTest.java
+++ 
b/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTest.java
@@ -16,98 +16,29 @@
  */
 package org.apache.camel.coap;
 
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.test.AvailablePortFinder;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.eclipse.californium.core.CoapClient;
-import org.eclipse.californium.core.CoapResponse;
-import org.eclipse.californium.core.coap.CoAP.ResponseCode;
-import org.eclipse.californium.core.coap.MediaTypeRegistry;
-import org.eclipse.californium.core.network.config.NetworkConfig;
-import org.junit.Test;
-
-public class CoAPRestComponentTest extends CamelTestSupport {
-    static int coapport = AvailablePortFinder.getNextAvailable();
-
-    @Test
-    public void testCoAP() throws Exception {
-        NetworkConfig.createStandardWithoutFile();
-        CoapClient client;
-        CoapResponse rsp;
+import java.io.IOException;
+import java.security.GeneralSecurityException;
 
-        client = new CoapClient("coap://localhost:" + coapport + 
"/TestResource/Ducky");
-        rsp = client.get();
-        assertEquals(ResponseCode.CONTENT, rsp.getCode());
-        assertEquals("Hello Ducky", rsp.getResponseText());
-        rsp = client.post("data", MediaTypeRegistry.TEXT_PLAIN);
-        assertEquals(ResponseCode.CONTENT, rsp.getCode());
-        assertEquals("Hello Ducky: data", rsp.getResponseText());
+import org.apache.camel.model.rest.RestConfigurationDefinition;
+import org.eclipse.californium.core.CoapClient;
 
-        client = new CoapClient("coap://localhost:" + coapport + 
"/TestParams?id=Ducky");
-        client.setTimeout(1000000L);
-        rsp = client.get();
-        assertEquals(ResponseCode.CONTENT, rsp.getCode());
-        assertEquals("Hello Ducky", rsp.getResponseText());
-        rsp = client.post("data", MediaTypeRegistry.TEXT_PLAIN);
-        assertEquals(ResponseCode.CONTENT, rsp.getCode());
-        assertEquals("Hello Ducky: data", rsp.getResponseText());
-        assertEquals(MediaTypeRegistry.TEXT_PLAIN, 
rsp.getOptions().getContentFormat());
-    }
+/**
+ * Test the CoAP Rest Component with plain UDP.
+ */
+public class CoAPRestComponentTest extends CoAPRestComponentTestBase {
 
-    @Test
-    public void testCoAPMethodNotAllowedResponse() throws Exception {
-        NetworkConfig.createStandardWithoutFile();
-        CoapClient client = new CoapClient("coap://localhost:" + coapport + 
"/TestResource/Ducky");
-        client.setTimeout(1000000L);
-        CoapResponse rsp = client.delete();
-        assertEquals(ResponseCode.METHOD_NOT_ALLOWED, rsp.getCode());
+    @Override
+    protected String getProtocol() {
+        return "coap";
     }
 
-    @Test
-    public void testCoAPNotFoundResponse() throws Exception {
-        NetworkConfig.createStandardWithoutFile();
-        CoapClient client = new CoapClient("coap://localhost:" + coapport + 
"/foo/bar/cheese");
-        client.setTimeout(1000000L);
-        CoapResponse rsp = client.get();
-        assertEquals(ResponseCode.NOT_FOUND, rsp.getCode());
+    @Override
+    protected void decorateClient(CoapClient client) throws 
GeneralSecurityException, IOException {
+        // Nothing here
     }
 
     @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        return new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                restConfiguration("coap").host("localhost").port(coapport);
-
-                rest("/TestParams")
-                    .get().to("direct:get1")
-                    .post().to("direct:post1");
-
-                rest("/TestResource")
-                    .get("/{id}").to("direct:get1")
-                    .post("/{id}").to("direct:post1");
-                
-                from("direct:get1").process(new Processor() {
-                    public void process(Exchange exchange) throws Exception {
-                        String id = exchange.getIn().getHeader("id", 
String.class);
-                        exchange.getOut().setBody("Hello " + id);
-                    }
-                });
-
-                from("direct:post1").process(new Processor() {
-                    public void process(Exchange exchange) throws Exception {
-                        String id = exchange.getIn().getHeader("id", 
String.class);
-                        String ct = 
exchange.getIn().getHeader(Exchange.CONTENT_TYPE, String.class);
-                        if (!"text/plain".equals(ct)) {
-                            throw new Exception("No content type");
-                        }
-                        exchange.getOut().setBody("Hello " + id + ": " + 
exchange.getIn().getBody(String.class));
-                        exchange.getOut().setHeader(Exchange.CONTENT_TYPE, ct);
-                    }
-                });
-            }
-        };
+    protected void decorateRestConfiguration(RestConfigurationDefinition 
restConfig) {
+        // Nothing here
     }
 }
diff --git 
a/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTCPTest.java
 
b/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTestBase.java
similarity index 62%
copy from 
components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTCPTest.java
copy to 
components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTestBase.java
index bd85eec..9af40c9 100644
--- 
a/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTCPTest.java
+++ 
b/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTestBase.java
@@ -16,31 +16,40 @@
  */
 package org.apache.camel.coap;
 
+import java.io.IOException;
+import java.security.GeneralSecurityException;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.model.rest.RestConfigurationDefinition;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.eclipse.californium.core.CoapClient;
 import org.eclipse.californium.core.CoapResponse;
 import org.eclipse.californium.core.coap.CoAP.ResponseCode;
+import org.eclipse.californium.core.coap.CoAP;
 import org.eclipse.californium.core.coap.MediaTypeRegistry;
-import org.eclipse.californium.core.network.CoapEndpoint;
 import org.eclipse.californium.core.network.config.NetworkConfig;
-import org.eclipse.californium.elements.tcp.TcpClientConnector;
 import org.junit.Test;
 
-public class CoAPRestComponentTCPTest extends CamelTestSupport {
+abstract class CoAPRestComponentTestBase extends CamelTestSupport {
     static int coapport = AvailablePortFinder.getNextAvailable();
 
+    @Produce("direct:start")
+    protected ProducerTemplate sender;
+
     @Test
     public void testCoAP() throws Exception {
         NetworkConfig.createStandardWithoutFile();
         CoapClient client;
         CoapResponse rsp;
 
-        client = new CoapClient("coap+tcp://localhost:" + coapport + 
"/TestResource/Ducky");
-        decorateWithTCP(client);
+        client = new CoapClient(getProtocol() + "://localhost:" + coapport + 
"/TestResource/Ducky");
+        decorateClient(client);
         rsp = client.get();
         assertEquals(ResponseCode.CONTENT, rsp.getCode());
         assertEquals("Hello Ducky", rsp.getResponseText());
@@ -48,8 +57,8 @@ public class CoAPRestComponentTCPTest extends 
CamelTestSupport {
         assertEquals(ResponseCode.CONTENT, rsp.getCode());
         assertEquals("Hello Ducky: data", rsp.getResponseText());
 
-        client = new CoapClient("coap+tcp://localhost:" + coapport + 
"/TestParams?id=Ducky");
-        decorateWithTCP(client);
+        client = new CoapClient(getProtocol() + "://localhost:" + coapport + 
"/TestParams?id=Ducky");
+        decorateClient(client);
         client.setTimeout(1000000L);
         rsp = client.get();
         assertEquals(ResponseCode.CONTENT, rsp.getCode());
@@ -63,8 +72,8 @@ public class CoAPRestComponentTCPTest extends 
CamelTestSupport {
     @Test
     public void testCoAPMethodNotAllowedResponse() throws Exception {
         NetworkConfig.createStandardWithoutFile();
-        CoapClient client = new CoapClient("coap+tcp://localhost:" + coapport 
+ "/TestResource/Ducky");
-        decorateWithTCP(client);
+        CoapClient client = new CoapClient(getProtocol() + "://localhost:" + 
coapport + "/TestResource/Ducky");
+        decorateClient(client);
         client.setTimeout(1000000L);
         CoapResponse rsp = client.delete();
         assertEquals(ResponseCode.METHOD_NOT_ALLOWED, rsp.getCode());
@@ -73,23 +82,39 @@ public class CoAPRestComponentTCPTest extends 
CamelTestSupport {
     @Test
     public void testCoAPNotFoundResponse() throws Exception {
         NetworkConfig.createStandardWithoutFile();
-        CoapClient client = new CoapClient("coap+tcp://localhost:" + coapport 
+ "/foo/bar/cheese");
-        decorateWithTCP(client);
+        CoapClient client = new CoapClient(getProtocol() + "://localhost:" + 
coapport + "/foo/bar/cheese");
+        decorateClient(client);
         client.setTimeout(1000000L);
         CoapResponse rsp = client.get();
         assertEquals(ResponseCode.NOT_FOUND, rsp.getCode());
     }
-    
-    private void decorateWithTCP(CoapClient client) {
-        NetworkConfig config = NetworkConfig.createStandardWithoutFile();
-        int tcpThreads = config.getInt(NetworkConfig.Keys.TCP_WORKER_THREADS);
-        int tcpConnectTimeout = 
config.getInt(NetworkConfig.Keys.TCP_CONNECT_TIMEOUT);
-        int tcpIdleTimeout = 
config.getInt(NetworkConfig.Keys.TCP_CONNECTION_IDLE_TIMEOUT);
-        TcpClientConnector tcpConnector = new TcpClientConnector(tcpThreads, 
tcpConnectTimeout, tcpIdleTimeout);
-        CoapEndpoint.Builder tcpBuilder = new CoapEndpoint.Builder();
-        tcpBuilder.setConnector(tcpConnector);
-
-        client.setEndpoint(tcpBuilder.build());
+
+    @Test
+    public void testPOSTClientRoute() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedMinimumMessageCount(1);
+        mock.expectedBodiesReceived("Hello some-id: xyz");
+        mock.expectedHeaderReceived(CoAPConstants.COAP_RESPONSE_CODE, 
CoAP.ResponseCode.CONTENT.toString());
+        sender.sendBodyAndHeader("xyz", CoAPConstants.COAP_METHOD, "POST");
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testGETClientRoute() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedMinimumMessageCount(1);
+        mock.expectedBodiesReceived("Hello some-id");
+        mock.expectedHeaderReceived(CoAPConstants.COAP_RESPONSE_CODE, 
CoAP.ResponseCode.CONTENT.toString());
+        sender.sendBody(null);
+        assertMockEndpointsSatisfied();
+    }
+
+    protected abstract String getProtocol();
+    protected abstract void decorateClient(CoapClient client) throws 
GeneralSecurityException, IOException;
+    protected abstract void 
decorateRestConfiguration(RestConfigurationDefinition restConfig);
+
+    protected String getClientURI() {
+        return getProtocol() + "://localhost:%d/TestResource/some-id";
     }
 
     @Override
@@ -97,7 +122,9 @@ public class CoAPRestComponentTCPTest extends 
CamelTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                
restConfiguration("coap").scheme("coap+tcp").host("localhost").port(coapport);
+                RestConfigurationDefinition restConfig =
+                    
restConfiguration("coap").scheme(getProtocol()).host("localhost").port(coapport);
+                decorateRestConfiguration(restConfig);
 
                 rest("/TestParams")
                     .get().to("direct:get1")
@@ -106,7 +133,7 @@ public class CoAPRestComponentTCPTest extends 
CamelTestSupport {
                 rest("/TestResource")
                     .get("/{id}").to("direct:get1")
                     .post("/{id}").to("direct:post1");
-                
+
                 from("direct:get1").process(new Processor() {
                     public void process(Exchange exchange) throws Exception {
                         String id = exchange.getIn().getHeader("id", 
String.class);
@@ -118,14 +145,16 @@ public class CoAPRestComponentTCPTest extends 
CamelTestSupport {
                     public void process(Exchange exchange) throws Exception {
                         String id = exchange.getIn().getHeader("id", 
String.class);
                         String ct = 
exchange.getIn().getHeader(Exchange.CONTENT_TYPE, String.class);
-                        if (!"text/plain".equals(ct)) {
-                            throw new Exception("No content type");
-                        }
                         exchange.getOut().setBody("Hello " + id + ": " + 
exchange.getIn().getBody(String.class));
                         exchange.getOut().setHeader(Exchange.CONTENT_TYPE, ct);
                     }
                 });
+
+                from("direct:start")
+                    .toF(getClientURI(), coapport)
+                    .to("mock:result");
             }
         };
     }
+
 }

Reply via email to