You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2017/03/10 08:21:36 UTC
[2/3] camel git commit: Added Unit test to camel-undertow to verify
type and outType behave as expected with arrays
Added Unit test to camel-undertow to verify type and outType behave as expected with arrays
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/1e49195d
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/1e49195d
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/1e49195d
Branch: refs/heads/master
Commit: 1e49195dad6bfbcbc6933eaf9de5cb5af6c5c82c
Parents: fca73e0
Author: Scott Cranton <sc...@cranton.com>
Authored: Thu Mar 9 21:33:48 2017 -0500
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Mar 10 09:21:26 2017 +0100
----------------------------------------------------------------------
.../rest/RestUndertowHttpPojoTypeTest.java | 332 +++++++++++++++++++
1 file changed, 332 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/1e49195d/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowHttpPojoTypeTest.java
----------------------------------------------------------------------
diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowHttpPojoTypeTest.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowHttpPojoTypeTest.java
new file mode 100644
index 0000000..1752f54
--- /dev/null
+++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowHttpPojoTypeTest.java
@@ -0,0 +1,332 @@
+/**
+ * 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.undertow.rest;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.undertow.BaseUndertowTest;
+import org.apache.camel.model.rest.RestBindingMode;
+import org.apache.camel.model.rest.RestDefinition;
+import org.apache.camel.model.rest.VerbDefinition;
+import org.junit.Test;
+
+import java.util.*;
+
+public class RestUndertowHttpPojoTypeTest extends BaseUndertowTest {
+ private final ObjectMapper mapper = new ObjectMapper();
+
+ @Test
+ public void testUndertowPojoTypeValidateModel() throws Exception {
+ // Wasn't clear if there's a way to put this test into camel-core just to test the model
+ // perhaps without starting the Camel Context?
+
+ List<RestDefinition> restDefinitions = context().getRestDefinitions();
+ assertNotNull(restDefinitions);
+ assertTrue(restDefinitions.size() > 0);
+
+ RestDefinition restDefinition = restDefinitions.get(0);
+ List<VerbDefinition> verbs = restDefinition.getVerbs();
+ assertNotNull(verbs);
+
+ Map<String, VerbDefinition> mapVerb = new TreeMap<>();
+
+ verbs.forEach(verb -> mapVerb.put(verb.getId(), verb));
+
+ assertEquals(UserPojo[].class.getCanonicalName(), mapVerb.get("getUsers").getOutType());
+ assertEquals(UserPojo[].class.getCanonicalName(), mapVerb.get("getUsersList").getOutType());
+ assertEquals(UserPojo.class.getCanonicalName(), mapVerb.get("getUser").getOutType());
+
+ assertEquals(UserPojo.class.getCanonicalName(), mapVerb.get("putUser").getType());
+ assertEquals(UserPojo[].class.getCanonicalName(), mapVerb.get("putUsers").getType());
+ assertEquals(UserPojo[].class.getCanonicalName(), mapVerb.get("putUsersList").getType());
+ }
+
+ @Test
+ public void testUndertowPojoTypeGetUsers() throws Exception {
+ Exchange outExchange = template.request("undertow:http://localhost:{{port}}/users", new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setHeader(Exchange.HTTP_METHOD, "GET");
+ exchange.getIn().setHeader(Exchange.ACCEPT_CONTENT_TYPE, "application/json");
+ }
+ });
+
+ assertNotNull(outExchange);
+ assertEquals("application/json", outExchange.getOut().getHeader(Exchange.CONTENT_TYPE));
+ String out = outExchange.getOut().getBody(String.class);
+ assertNotNull(out);
+
+ UserPojo[] users = mapper.readValue(out, UserPojo[].class);
+ assertEquals(2, users.length);
+ assertEquals("Scott", users[0].getName());
+ assertEquals("Claus", users[1].getName());
+ }
+
+ @Test
+ public void testUndertowPojoTypePutUser() throws Exception {
+ Exchange outExchange = template.request("undertow:http://localhost:{{port}}/users/1", new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setHeader(Exchange.HTTP_METHOD, "PUT");
+ exchange.getIn().setHeader(Exchange.ACCEPT_CONTENT_TYPE, "application/json");
+ exchange.getIn().setHeader(Exchange.CONTENT_TYPE, "application/json");
+
+ UserPojo user = new UserPojo();
+ user.setId(1);
+ user.setName("Scott");
+
+ String body = mapper.writeValueAsString(user);
+ exchange.getIn().setBody(body);
+ }
+ });
+
+ assertNotNull(outExchange);
+ assertEquals(200, outExchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
+ }
+
+ @Test
+ public void testUndertowPojoTypePutUserFail() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:putUser");
+ mock.expectedMessageCount(0);
+
+ Exchange outExchange = template.request("undertow:http://localhost:{{port}}/users/1", new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setHeader(Exchange.HTTP_METHOD, "PUT");
+ exchange.getIn().setHeader(Exchange.ACCEPT_CONTENT_TYPE, "application/json");
+ exchange.getIn().setHeader(Exchange.CONTENT_TYPE, "application/json");
+
+ CountryPojo country = new CountryPojo();
+ country.setIso("US");
+ country.setCountry("United States");
+
+ String body = mapper.writeValueAsString(country);
+ exchange.getIn().setBody(body);
+ }
+ });
+
+ assertNotNull(outExchange);
+ assertEquals(400, outExchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Test
+ public void testUndertowPojoTypePutUsers() throws Exception {
+ UserPojo user1 = new UserPojo();
+ user1.setId(1);
+ user1.setName("Scott");
+
+ UserPojo user2 = new UserPojo();
+ user2.setId(2);
+ user2.setName("Claus");
+
+ final UserPojo[] users = new UserPojo[]{user1, user2};
+
+ MockEndpoint mock = getMockEndpoint("mock:putUsers");
+ mock.expectedMessageCount(1);
+ mock.message(0).body(UserPojo[].class);
+
+ Exchange outExchange = template.request("undertow:http://localhost:{{port}}/users", new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setHeader(Exchange.HTTP_METHOD, "PUT");
+ exchange.getIn().setHeader(Exchange.ACCEPT_CONTENT_TYPE, "application/json");
+ exchange.getIn().setHeader(Exchange.CONTENT_TYPE, "application/json");
+
+ String body = mapper.writeValueAsString(users);
+ exchange.getIn().setBody(body);
+ }
+ });
+
+ assertNotNull(outExchange);
+ assertEquals(200, outExchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
+
+ assertMockEndpointsSatisfied();
+
+ Exchange exchange = mock.assertExchangeReceived(0);
+ UserPojo[] receivedUsers = exchange.getIn().getBody(UserPojo[].class);
+ assertEquals(2, receivedUsers.length);
+ assertEquals(user1.getName(), receivedUsers[0].getName());
+ assertEquals(user2.getName(), receivedUsers[1].getName());
+ }
+
+ @Test
+ public void testUndertowPojoTypePutUsersFail() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:putUsers");
+ mock.expectedMessageCount(0);
+
+ Exchange outExchange = template.request("undertow:http://localhost:{{port}}/users", new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setHeader(Exchange.HTTP_METHOD, "PUT");
+ exchange.getIn().setHeader(Exchange.ACCEPT_CONTENT_TYPE, "application/json");
+ exchange.getIn().setHeader(Exchange.CONTENT_TYPE, "application/json");
+
+ UserPojo user = new UserPojo();
+ user.setId(1);
+ user.setName("Scott");
+
+ String body = mapper.writeValueAsString(user);
+ exchange.getIn().setBody(body);
+ }
+ });
+
+ assertNotNull(outExchange);
+ assertEquals(400, outExchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Test
+ public void testUndertowPojoTypePutUsersList() throws Exception {
+ UserPojo user1 = new UserPojo();
+ user1.setId(1);
+ user1.setName("Scott");
+
+ UserPojo user2 = new UserPojo();
+ user2.setId(2);
+ user2.setName("Claus");
+
+ final UserPojo[] users = new UserPojo[]{user1, user2};
+
+ MockEndpoint mock = getMockEndpoint("mock:putUsersList");
+ mock.expectedMessageCount(1);
+ mock.message(0).body(UserPojo[].class);
+
+ Exchange outExchange = template.request("undertow:http://localhost:{{port}}/users/list", new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setHeader(Exchange.HTTP_METHOD, "PUT");
+ exchange.getIn().setHeader(Exchange.ACCEPT_CONTENT_TYPE, "application/json");
+ exchange.getIn().setHeader(Exchange.CONTENT_TYPE, "application/json");
+
+ String body = mapper.writeValueAsString(users);
+ exchange.getIn().setBody(body);
+ }
+ });
+
+ assertNotNull(outExchange);
+ assertEquals(200, outExchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
+
+ assertMockEndpointsSatisfied();
+
+ Exchange exchange = mock.assertExchangeReceived(0);
+ UserPojo[] receivedUsers = exchange.getIn().getBody(UserPojo[].class);
+ assertEquals(2, receivedUsers.length);
+ assertEquals(user1.getName(), receivedUsers[0].getName());
+ assertEquals(user2.getName(), receivedUsers[1].getName());
+ }
+
+ @Test
+ public void testUndertowPojoTypePutUsersListFail() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:putUsersList");
+ mock.expectedMessageCount(0);
+
+ Exchange outExchange = template.request("undertow:http://localhost:{{port}}/users/list", new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setHeader(Exchange.HTTP_METHOD, "PUT");
+ exchange.getIn().setHeader(Exchange.ACCEPT_CONTENT_TYPE, "application/json");
+ exchange.getIn().setHeader(Exchange.CONTENT_TYPE, "application/json");
+
+ UserPojo user = new UserPojo();
+ user.setId(1);
+ user.setName("Scott");
+
+ String body = mapper.writeValueAsString(user);
+ exchange.getIn().setBody(body);
+ }
+ });
+
+ assertNotNull(outExchange);
+ assertEquals(400, outExchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ onException(Exception.class)
+ .handled(true)
+ .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(400))
+ .setHeader(Exchange.CONTENT_TYPE, constant("text/plain"))
+ .setBody().simple("${exchange.message}");
+
+ // configure to use undertow on localhost with the given port
+ restConfiguration().component("undertow").host("localhost").port(getPort())
+ .bindingMode(RestBindingMode.json);
+
+ // use the rest DSL to define the rest services
+ rest()
+ .get("/users").id("getUsers").outType(UserPojo[].class)
+ .route().process(new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ UserPojo user1 = new UserPojo();
+ user1.setId(1);
+ user1.setName("Scott");
+
+ UserPojo user2 = new UserPojo();
+ user2.setId(2);
+ user2.setName("Claus");
+
+ exchange.getOut().setBody(new UserPojo[] {user1, user2});
+ }
+ }).endRest()
+ .get("/users/list").id("getUsersList").outTypeList(UserPojo.class)
+ .route().process(new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ UserPojo user1 = new UserPojo();
+ user1.setId(1);
+ user1.setName("Scott");
+
+ UserPojo user2 = new UserPojo();
+ user2.setId(2);
+ user2.setName("Claus");
+
+ exchange.getOut().setBody(new UserPojo[] {user1, user2});
+ }
+ }).endRest()
+ .get("/users/{id}").id("getUser").outType(UserPojo.class)
+ .route().process(new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ UserPojo user1 = new UserPojo();
+ user1.setId(exchange.getIn().getHeader("id", int.class));
+ user1.setName("Scott");
+ exchange.getOut().setBody(user1);
+ }
+ }).endRest()
+ .put("/users/{id}").id("putUser").type(UserPojo.class)
+ .to("mock:putUser")
+ .put("/users").id("putUsers").type(UserPojo[].class)
+ .to("mock:putUsers")
+ .put("/users/list").id("putUsersList").typeList(UserPojo.class)
+ .to("mock:putUsersList");
+ }
+ };
+ }
+
+}