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 2016/02/25 10:41:58 UTC
[2/2] camel git commit: CAMEL-9442 - Add tests for camel-http,
porting from camel-http4
CAMEL-9442 - Add tests for camel-http, porting from camel-http4
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/0cf8e048
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/0cf8e048
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/0cf8e048
Branch: refs/heads/camel-2.16.x
Commit: 0cf8e0484d96c23d28b0a5d56466e692397e2dc0
Parents: 2314e21
Author: Tadayoshi Sato <sa...@gmail.com>
Authored: Wed Feb 24 15:56:16 2016 +0900
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Feb 25 10:41:49 2016 +0100
----------------------------------------------------------------------
components/camel-http/pom.xml | 8 +-
.../camel/component/http/BaseHttpTest.java | 73 +++++++++++++
.../component/http/HttpBridgeEndpointTest.java | 109 +++++++++++++++++++
.../handler/BasicRawQueryValidationHandler.java | 38 +++++++
.../http/handler/BasicValidationHandler.java | 93 ++++++++++++++++
5 files changed, 320 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/0cf8e048/components/camel-http/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-http/pom.xml b/components/camel-http/pom.xml
index 50020bf..e247ddb 100644
--- a/components/camel-http/pom.xml
+++ b/components/camel-http/pom.xml
@@ -73,7 +73,7 @@
<!-- testing -->
<dependency>
<groupId>org.apache.camel</groupId>
- <artifactId>camel-test</artifactId>
+ <artifactId>camel-test</artifactId>
<scope>test</scope>
</dependency>
@@ -87,6 +87,12 @@
<artifactId>slf4j-log4j12</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-server</artifactId>
+ <version>${jetty9-version}</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
http://git-wip-us.apache.org/repos/asf/camel/blob/0cf8e048/components/camel-http/src/test/java/org/apache/camel/component/http/BaseHttpTest.java
----------------------------------------------------------------------
diff --git a/components/camel-http/src/test/java/org/apache/camel/component/http/BaseHttpTest.java b/components/camel-http/src/test/java/org/apache/camel/component/http/BaseHttpTest.java
new file mode 100644
index 0000000..7453b9e
--- /dev/null
+++ b/components/camel-http/src/test/java/org/apache/camel/component/http/BaseHttpTest.java
@@ -0,0 +1,73 @@
+/**
+ * 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.http;
+
+import java.util.Map;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.eclipse.jetty.server.Handler;
+import org.eclipse.jetty.server.handler.ContextHandler;
+import org.eclipse.jetty.server.handler.ContextHandlerCollection;
+import org.eclipse.jetty.server.handler.HandlerCollection;
+
+/**
+ * Ported from {@link org.apache.camel.component.http4.BaseHttpTest}.
+ *
+ * @version
+ */
+public abstract class BaseHttpTest extends CamelTestSupport {
+
+ protected void assertExchange(Exchange exchange) {
+ assertNotNull(exchange);
+
+ assertTrue(exchange.hasOut());
+ Message out = exchange.getOut();
+ assertHeaders(out.getHeaders());
+ assertBody(out.getBody(String.class));
+ }
+
+ protected void assertHeaders(Map<String, Object> headers) {
+ assertEquals(HttpServletResponse.SC_OK, headers.get(Exchange.HTTP_RESPONSE_CODE));
+ assertEquals("12", headers.get("Content-Length"));
+ assertNotNull("Should have Content-Type header", headers.get("Content-Type"));
+ }
+
+ protected void assertBody(String body) {
+ assertEquals(getExpectedContent(), body);
+ }
+
+ protected String getExpectedContent() {
+ return "camel rocks!";
+ }
+
+ protected ContextHandler contextHandler(String context, Handler handler) {
+ ContextHandler contextHandler = new ContextHandler(context);
+ contextHandler.setHandler(handler);
+ return contextHandler;
+ }
+
+ protected HandlerCollection handlers(Handler... handlers) {
+ HandlerCollection collection = new ContextHandlerCollection();
+ collection.setHandlers(handlers);
+ return collection;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/0cf8e048/components/camel-http/src/test/java/org/apache/camel/component/http/HttpBridgeEndpointTest.java
----------------------------------------------------------------------
diff --git a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpBridgeEndpointTest.java b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpBridgeEndpointTest.java
new file mode 100644
index 0000000..3e021e9
--- /dev/null
+++ b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpBridgeEndpointTest.java
@@ -0,0 +1,109 @@
+/**
+ * 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.http;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.component.http.handler.BasicRawQueryValidationHandler;
+import org.apache.camel.component.http.handler.BasicValidationHandler;
+import org.apache.camel.test.AvailablePortFinder;
+import org.eclipse.jetty.server.Server;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests ported from {@link org.apache.camel.component.http4.HttpBridgeEndpointTest}.
+ *
+ * @version
+ */
+public class HttpBridgeEndpointTest extends BaseHttpTest {
+
+ private static final int PORT = AvailablePortFinder.getNextAvailable();
+ private Server localServer;
+
+ @Before
+ @Override
+ public void setUp() throws Exception {
+ localServer = new Server(PORT);
+ localServer.setHandler(handlers(
+ contextHandler("/", new BasicValidationHandler("GET", null, null, getExpectedContent())),
+ contextHandler("/query", new BasicRawQueryValidationHandler("GET", "x=%3B", null, getExpectedContent()))
+ ));
+ localServer.start();
+
+ super.setUp();
+ }
+
+ @After
+ @Override
+ public void tearDown() throws Exception {
+ super.tearDown();
+
+ if (localServer != null) {
+ localServer.stop();
+ }
+ }
+
+ @Test
+ public void notBridgeEndpoint() throws Exception {
+ Exchange exchange = template.request("http://host/?bridgeEndpoint=false", new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setHeader(Exchange.HTTP_URI, "http://localhost:" + PORT + "/");
+ }
+ });
+
+ assertExchange(exchange);
+ }
+
+ @Test
+ public void bridgeEndpoint() throws Exception {
+ Exchange exchange = template.request("http://localhost:" + PORT + "/?bridgeEndpoint=true", new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setHeader(Exchange.HTTP_URI, "http://host:8080/");
+ }
+ });
+
+ assertExchange(exchange);
+ }
+
+ @Test
+ public void bridgeEndpointWithQuery() throws Exception {
+ Exchange exchange = template.request("http://localhost:" + PORT + "/query?bridgeEndpoint=true", new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setHeader(Exchange.HTTP_URI, "http://host:8080/");
+ exchange.getIn().setHeader(Exchange.HTTP_QUERY, "x=%3B");
+ }
+ });
+
+ assertExchange(exchange);
+ }
+
+ @Test
+ public void bridgeEndpointWithRawQueryAndQuery() throws Exception {
+ Exchange exchange = template.request("http://localhost:" + PORT + "/query?bridgeEndpoint=true", new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setHeader(Exchange.HTTP_URI, "http://host:8080/");
+ exchange.getIn().setHeader(Exchange.HTTP_RAW_QUERY, "x=%3B");
+ exchange.getIn().setHeader(Exchange.HTTP_QUERY, "x=;");
+ }
+ });
+
+ assertExchange(exchange);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/0cf8e048/components/camel-http/src/test/java/org/apache/camel/component/http/handler/BasicRawQueryValidationHandler.java
----------------------------------------------------------------------
diff --git a/components/camel-http/src/test/java/org/apache/camel/component/http/handler/BasicRawQueryValidationHandler.java b/components/camel-http/src/test/java/org/apache/camel/component/http/handler/BasicRawQueryValidationHandler.java
new file mode 100644
index 0000000..1f8019b
--- /dev/null
+++ b/components/camel-http/src/test/java/org/apache/camel/component/http/handler/BasicRawQueryValidationHandler.java
@@ -0,0 +1,38 @@
+/**
+ * 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.http.handler;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * Similar to {@link BasicValidationHandler} but validates the raw query instead.
+ */
+public class BasicRawQueryValidationHandler extends BasicValidationHandler {
+
+ public BasicRawQueryValidationHandler(String expectedMethod, String expectedQuery, Object expectedContent, String responseContent) {
+ super(expectedMethod, expectedQuery, expectedContent, responseContent);
+ }
+
+ protected boolean validateQuery(HttpServletRequest request) {
+ String query = request.getQueryString();
+ if (expectedQuery != null && !expectedQuery.equals(query)) {
+ return false;
+ }
+ return true;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/0cf8e048/components/camel-http/src/test/java/org/apache/camel/component/http/handler/BasicValidationHandler.java
----------------------------------------------------------------------
diff --git a/components/camel-http/src/test/java/org/apache/camel/component/http/handler/BasicValidationHandler.java b/components/camel-http/src/test/java/org/apache/camel/component/http/handler/BasicValidationHandler.java
new file mode 100644
index 0000000..a709272
--- /dev/null
+++ b/components/camel-http/src/test/java/org/apache/camel/component/http/handler/BasicValidationHandler.java
@@ -0,0 +1,93 @@
+/**
+ * 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.http.handler;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.handler.AbstractHandler;
+
+/**
+ *
+ * @version
+ */
+public class BasicValidationHandler extends AbstractHandler {
+
+ protected String expectedMethod;
+ protected String expectedQuery;
+ protected Object expectedContent;
+ protected String responseContent;
+
+ public BasicValidationHandler(String expectedMethod, String expectedQuery,
+ Object expectedContent, String responseContent) {
+ this.expectedMethod = expectedMethod;
+ this.expectedQuery = expectedQuery;
+ this.expectedContent = expectedContent;
+ this.responseContent = responseContent;
+ }
+
+ @Override
+ public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
+ throws IOException, ServletException {
+
+ baseRequest.setHandled(true);
+
+ if (expectedMethod != null && !expectedMethod.equals(request.getMethod())) {
+ response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
+ return;
+ }
+
+ if (!validateQuery(request)) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ return;
+ }
+
+ if (expectedContent != null) {
+ StringBuilder content = new StringBuilder();
+ String line = null;
+ while ((line = request.getReader().readLine()) != null) {
+ content.append(line);
+ }
+
+ if (!expectedContent.equals(content.toString())) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ return;
+ }
+ }
+
+ response.setStatus(HttpServletResponse.SC_OK);
+ if (responseContent != null) {
+ response.setContentType("text/plain; charset=utf-8");
+ PrintWriter out = response.getWriter();
+ out.print(responseContent);
+ }
+ }
+
+ protected boolean validateQuery(HttpServletRequest request) {
+ String query = request.getQueryString();
+ if (expectedQuery != null && !expectedQuery.equals(query)) {
+ return false;
+ }
+ return true;
+ }
+
+}