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"); } }; } + }