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