You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2019/10/16 10:04:09 UTC
[camel-k-runtime] branch master updated: knative: add some checks
about supported http methods and mandatory body
This is an automated email from the ASF dual-hosted git repository.
nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-runtime.git
The following commit(s) were added to refs/heads/master by this push:
new e02ffce knative: add some checks about supported http methods and mandatory body
new ca2e1dc Merge pull request #161 from lburgazzoli/knative-http-hardening
e02ffce is described below
commit e02ffce53d63d4df8e277663e30b13861611d795
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Wed Oct 16 11:33:30 2019 +0200
knative: add some checks about supported http methods and mandatory body
---
.../http/KnativeHttpConsumerDispatcher.java | 10 +++
.../knative/http/KnativeHttpProducer.java | 7 +++
.../component/knative/http/KnativeHttpTest.java | 72 ++++++++++++++++++++++
3 files changed, 89 insertions(+)
diff --git a/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpConsumerDispatcher.java b/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpConsumerDispatcher.java
index ed4af7f..621fb1a 100644
--- a/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpConsumerDispatcher.java
+++ b/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpConsumerDispatcher.java
@@ -25,6 +25,7 @@ import java.util.concurrent.ExecutorService;
import io.vertx.core.Handler;
import io.vertx.core.Vertx;
+import io.vertx.core.http.HttpMethod;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerOptions;
import io.vertx.core.http.HttpServerRequest;
@@ -167,6 +168,15 @@ public final class KnativeHttpConsumerDispatcher {
@Override
public void handle(HttpServerRequest request) {
+ if (request.method() != HttpMethod.POST) {
+ HttpServerResponse response = request.response();
+ response.setStatusCode(405);
+ response.putHeader(Exchange.CONTENT_TYPE, "text/plain");
+ response.end("Unsupported method: " + request.method());
+
+ return;
+ }
+
LOGGER.debug("received exchange on path: {}, headers: {}",
request.path(),
request.headers()
diff --git a/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpProducer.java b/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpProducer.java
index fd4328e..124d91a 100644
--- a/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpProducer.java
+++ b/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpProducer.java
@@ -69,6 +69,13 @@ public class KnativeHttpProducer extends DefaultAsyncProducer {
@Override
public boolean process(Exchange exchange, AsyncCallback callback) {
+ if (exchange.getMessage().getBody() == null) {
+ exchange.setException(new IllegalArgumentException("body must not be null"));
+ callback.done(true);
+
+ return true;
+ }
+
final byte[] payload;
try {
diff --git a/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java b/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java
index e13acaf..cd572ec 100644
--- a/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java
+++ b/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java
@@ -1017,5 +1017,77 @@ public class KnativeHttpTest {
mock.assertIsSatisfied();
}
+ @ParameterizedTest
+ @MethodSource("provideCloudEventsImplementations")
+ void testWrongMethod(CloudEvent ce) throws Exception {
+ KnativeEnvironment env = KnativeEnvironment.on(
+ KnativeEnvironment.endpoint(
+ Knative.EndpointKind.source,
+ "myEndpoint",
+ "localhost",
+ port,
+ KnativeSupport.mapOf(
+ Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
+ Knative.CONTENT_TYPE, "text/plain"
+ ))
+ );
+
+ KnativeComponent component = context.getComponent("knative", KnativeComponent.class);
+ component.setCloudEventsSpecVersion(ce.version());
+ component.setEnvironment(env);
+
+ context.addRoutes(new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("knative:endpoint/myEndpoint")
+ .to("mock:ce");
+ from("direct:start")
+ .toF("undertow:http://localhost:%d", port);
+ }
+ });
+
+ context.start();
+
+ Exchange exchange = template.request("direct:start", e -> e.getMessage().setBody(null));
+ assertThat(exchange.isFailed()).isTrue();
+ assertThat(exchange.getException()).isInstanceOf(CamelException.class);
+ assertThat(exchange.getException()).hasMessageStartingWith("HTTP operation failed invoking");
+ assertThat(exchange.getException()).hasMessageEndingWith("with statusCode: 405");
+ }
+
+ @ParameterizedTest
+ @MethodSource("provideCloudEventsImplementations")
+ void testNoBody(CloudEvent ce) throws Exception {
+ KnativeEnvironment env = KnativeEnvironment.on(
+ KnativeEnvironment.endpoint(
+ Knative.EndpointKind.sink,
+ "myEndpoint",
+ "localhost",
+ port,
+ KnativeSupport.mapOf(
+ Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
+ Knative.CONTENT_TYPE, "text/plain"
+ ))
+ );
+
+ KnativeComponent component = context.getComponent("knative", KnativeComponent.class);
+ component.setCloudEventsSpecVersion(ce.version());
+ component.setEnvironment(env);
+
+ context.addRoutes(new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start")
+ .to("knative:endpoint/myEndpoint");
+ }
+ });
+
+ context.start();
+
+ Exchange exchange = template.request("direct:start", e -> e.getMessage().setBody(null));
+ assertThat(exchange.isFailed()).isTrue();
+ assertThat(exchange.getException()).isInstanceOf(IllegalArgumentException.class);
+ assertThat(exchange.getException()).hasMessage("body must not be null");
+ }
}