Author: davsclaus Date: Tue Apr 30 13:49:24 2013 New Revision: 1477632 URL: http://svn.apache.org/r1477632 Log: CAMEL-6327: More work on new camel-netty-http component.
Added: camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConverter.java camel/trunk/components/camel-netty-http/src/main/resources/META-INF/services/org/apache/camel/TypeConverter camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpAccessHttpRequestAndResponseBeanTest.java camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpAccessHttpRequestBeanTest.java - copied, changed from r1477564, camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpAccessHttpRequestTest.java camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpMethodRestrictTest.java - copied, changed from r1477564, camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleTest.java camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpTraceDisabledTest.java - copied, changed from r1477564, camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleTest.java camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyUseRawHttpResponseTest.java - copied, changed from r1477564, camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpAccessHttpRequestTest.java Modified: camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/HttpServerChannelHandler.java camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpBinding.java camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpEndpoint.java Modified: camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java?rev=1477632&r1=1477631&r2=1477632&view=diff ============================================================================== --- camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java (original) +++ camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java Tue Apr 30 13:49:24 2013 @@ -100,6 +100,11 @@ public class DefaultNettyHttpBinding imp public HttpResponse fromCamelMessage(Message message) throws Exception { LOG.trace("fromCamelMessage: {}", message); + // the message body may already be a Netty HTTP response + if (message.getBody() instanceof HttpResponse) { + return (HttpResponse) message.getBody(); + } + // the status code is default 200, but a header can override that Integer code = message.getHeader(Exchange.HTTP_RESPONSE_CODE, 200, Integer.class); HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.valueOf(code)); Modified: camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/HttpServerChannelHandler.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/HttpServerChannelHandler.java?rev=1477632&r1=1477631&r2=1477632&view=diff ============================================================================== --- camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/HttpServerChannelHandler.java (original) +++ camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/HttpServerChannelHandler.java Tue Apr 30 13:49:24 2013 @@ -36,6 +36,8 @@ import org.slf4j.LoggerFactory; import static org.jboss.netty.handler.codec.http.HttpHeaders.is100ContinueExpected; import static org.jboss.netty.handler.codec.http.HttpHeaders.isKeepAlive; import static org.jboss.netty.handler.codec.http.HttpResponseStatus.CONTINUE; +import static org.jboss.netty.handler.codec.http.HttpResponseStatus.METHOD_NOT_ALLOWED; +import static org.jboss.netty.handler.codec.http.HttpResponseStatus.SERVICE_UNAVAILABLE; import static org.jboss.netty.handler.codec.http.HttpVersion.HTTP_1_1; /** @@ -60,17 +62,37 @@ public class HttpServerChannelHandler ex request = (HttpRequest) messageEvent.getMessage(); if (LOG.isDebugEnabled()) { - LOG.debug("Message received: keep-alive {}", isKeepAlive(request)); + LOG.debug("Message received: {} keep-alive: {}", request, isKeepAlive(request)); } if (is100ContinueExpected(request)) { // send back http 100 response to continue HttpResponse response = new DefaultHttpResponse(HTTP_1_1, CONTINUE); messageEvent.getChannel().write(response); - } else { - // let Camel process this message - super.messageReceived(ctx, messageEvent); + return; } + + if (consumer.isSuspended()) { + // are we suspended? + LOG.debug("Consumer suspended, cannot service request {}", request); + HttpResponse response = new DefaultHttpResponse(HTTP_1_1, SERVICE_UNAVAILABLE); + messageEvent.getChannel().write(response); + return; + } + if (consumer.getEndpoint().getHttpMethodRestrict() != null + && !consumer.getEndpoint().getHttpMethodRestrict().contains(request.getMethod().getName())) { + HttpResponse response = new DefaultHttpResponse(HTTP_1_1, METHOD_NOT_ALLOWED); + messageEvent.getChannel().write(response); + return; + } + if ("TRACE".equals(request.getMethod().getName()) && !consumer.getEndpoint().isTraceEnabled()) { + HttpResponse response = new DefaultHttpResponse(HTTP_1_1, METHOD_NOT_ALLOWED); + messageEvent.getChannel().write(response); + return; + } + + // let Camel process this message + super.messageReceived(ctx, messageEvent); } @Override Modified: camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpBinding.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpBinding.java?rev=1477632&r1=1477631&r2=1477632&view=diff ============================================================================== --- camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpBinding.java (original) +++ camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpBinding.java Tue Apr 30 13:49:24 2013 @@ -52,11 +52,12 @@ public interface NettyHttpBinding { /** * Binds from Camel {@link Message} to Netty {@link HttpResponse}. * + * * @param message the Camel message * @return the http response * @throws Exception is thrown if error during binding */ - HttpResponse fromCamelMessage(Message message) throws Exception; + Object fromCamelMessage(Message message) throws Exception; /** * Gets the header filter strategy Added: camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConverter.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConverter.java?rev=1477632&view=auto ============================================================================== --- camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConverter.java (added) +++ camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConverter.java Tue Apr 30 13:49:24 2013 @@ -0,0 +1,51 @@ +/** + * 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.netty.http; + +import org.apache.camel.Converter; +import org.apache.camel.Exchange; +import org.apache.camel.FallbackConverter; +import org.apache.camel.spi.TypeConverterRegistry; +import org.jboss.netty.handler.codec.http.HttpRequest; + +@Converter +public final class NettyHttpConverter { + + private NettyHttpConverter() { + } + + /** + * A fallback converter that allows us to easily call Java beans and use the raw Netty {@link HttpRequest} as parameter types. + */ + @FallbackConverter + public static Object convertToHttpRequest(Class<?> type, Exchange exchange, Object value, TypeConverterRegistry registry) { + // if we want to covert to HttpRequest + if (value != null && HttpRequest.class.isAssignableFrom(type)) { + + // okay we may need to cheat a bit when we want to grab the HttpRequest as its stored on the NettyHttpMessage + // so if the message instance is a NettyHttpMessage and its body is the value, then we can grab the + // HttpRequest from the NettyHttpMessage + NettyHttpMessage msg = exchange.getIn(NettyHttpMessage.class); + if (msg != null && msg.getBody() == value) { + return msg.getHttpRequest(); + } + } + + return null; + } + +} Modified: camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpEndpoint.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpEndpoint.java?rev=1477632&r1=1477631&r2=1477632&view=diff ============================================================================== --- camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpEndpoint.java (original) +++ camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpEndpoint.java Tue Apr 30 13:49:24 2013 @@ -37,6 +37,8 @@ public class NettyHttpEndpoint extends N private NettyHttpBinding nettyHttpBinding; private HeaderFilterStrategy headerFilterStrategy; + private boolean traceEnabled; + private String httpMethodRestrict; public NettyHttpEndpoint(String endpointUri, NettyHttpComponent component, NettyConfiguration configuration) { super(endpointUri, component, configuration); @@ -92,6 +94,22 @@ public class NettyHttpEndpoint extends N this.headerFilterStrategy = headerFilterStrategy; } + public boolean isTraceEnabled() { + return traceEnabled; + } + + public void setTraceEnabled(boolean traceEnabled) { + this.traceEnabled = traceEnabled; + } + + public String getHttpMethodRestrict() { + return httpMethodRestrict; + } + + public void setHttpMethodRestrict(String httpMethodRestrict) { + this.httpMethodRestrict = httpMethodRestrict; + } + @Override protected void doStart() throws Exception { super.doStart(); Added: camel/trunk/components/camel-netty-http/src/main/resources/META-INF/services/org/apache/camel/TypeConverter URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-netty-http/src/main/resources/META-INF/services/org/apache/camel/TypeConverter?rev=1477632&view=auto ============================================================================== --- camel/trunk/components/camel-netty-http/src/main/resources/META-INF/services/org/apache/camel/TypeConverter (added) +++ camel/trunk/components/camel-netty-http/src/main/resources/META-INF/services/org/apache/camel/TypeConverter Tue Apr 30 13:49:24 2013 @@ -0,0 +1,18 @@ +# +# 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. +# + +org.apache.camel.component.netty.http.NettyHttpConverter \ No newline at end of file Added: camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpAccessHttpRequestAndResponseBeanTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpAccessHttpRequestAndResponseBeanTest.java?rev=1477632&view=auto ============================================================================== --- camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpAccessHttpRequestAndResponseBeanTest.java (added) +++ camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpAccessHttpRequestAndResponseBeanTest.java Tue Apr 30 13:49:24 2013 @@ -0,0 +1,72 @@ +/** + * 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.netty.http; + +import java.nio.charset.Charset; + +import org.apache.camel.builder.RouteBuilder; +import org.jboss.netty.buffer.ChannelBuffers; +import org.jboss.netty.handler.codec.http.DefaultHttpResponse; +import org.jboss.netty.handler.codec.http.HttpHeaders; +import org.jboss.netty.handler.codec.http.HttpRequest; +import org.jboss.netty.handler.codec.http.HttpResponse; +import org.jboss.netty.handler.codec.http.HttpResponseStatus; +import org.jboss.netty.handler.codec.http.HttpVersion; +import org.junit.Test; + +public class NettyHttpAccessHttpRequestAndResponseBeanTest extends BaseNettyTest { + + @Test + public void testRawHttpRequestAndResponseInBean() throws Exception { + getMockEndpoint("mock:input").expectedBodiesReceived("World", "Camel"); + + String out = template.requestBody("http://localhost:{{port}}/foo", "World", String.class); + assertEquals("Bye World", out); + + String out2 = template.requestBody("http://localhost:{{port}}/foo", "Camel", String.class); + assertEquals("Bye Camel", out2); + + assertMockEndpointsSatisfied(); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("netty-http:http://0.0.0.0:{{port}}/foo") + .to("mock:input") + .transform().method(NettyHttpAccessHttpRequestAndResponseBeanTest.class, "myTransformer"); + } + }; + } + + /** + * We can use both a netty http request and response type for transformation + */ + public static HttpResponse myTransformer(HttpRequest request) { + String in = request.getContent().toString(Charset.forName("UTF-8")); + String reply = "Bye " + in; + + HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK); + response.setContent(ChannelBuffers.copiedBuffer(reply.getBytes())); + response.setHeader(HttpHeaders.Names.CONTENT_LENGTH, reply.length()); + + return response; + } + +} Copied: camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpAccessHttpRequestBeanTest.java (from r1477564, camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpAccessHttpRequestTest.java) URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpAccessHttpRequestBeanTest.java?p2=camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpAccessHttpRequestBeanTest.java&p1=camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpAccessHttpRequestTest.java&r1=1477564&r2=1477632&rev=1477632&view=diff ============================================================================== --- camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpAccessHttpRequestTest.java (original) +++ camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpAccessHttpRequestBeanTest.java Tue Apr 30 13:49:24 2013 @@ -16,19 +16,19 @@ */ package org.apache.camel.component.netty.http; -import org.apache.camel.Exchange; -import org.apache.camel.Processor; +import java.nio.charset.Charset; + import org.apache.camel.builder.RouteBuilder; import org.jboss.netty.handler.codec.http.HttpRequest; import org.junit.Test; -public class NettyHttpAccessHttpRequestTest extends BaseNettyTest { +public class NettyHttpAccessHttpRequestBeanTest extends BaseNettyTest { @Test public void testAccessHttpRequest() throws Exception { - getMockEndpoint("mock:input").expectedBodiesReceived("Hello World"); + getMockEndpoint("mock:input").expectedBodiesReceived("World"); - String out = template.requestBody("http://localhost:{{port}}/foo", "Hello World", String.class); + String out = template.requestBody("http://localhost:{{port}}/foo", "World", String.class); assertEquals("Bye World", out); assertMockEndpointsSatisfied(); @@ -41,17 +41,14 @@ public class NettyHttpAccessHttpRequestT public void configure() throws Exception { from("netty-http:http://0.0.0.0:{{port}}/foo") .to("mock:input") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - // we can get the original http request - HttpRequest request = exchange.getIn(NettyHttpMessage.class).getHttpRequest(); - assertNotNull(request); - } - }) - .transform().constant("Bye World"); + .transform().method(NettyHttpAccessHttpRequestBeanTest.class, "myTransformer"); } }; } + public static String myTransformer(HttpRequest request) { + String in = request.getContent().toString(Charset.forName("UTF-8")); + return "Bye " + in; + } + } Copied: camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpMethodRestrictTest.java (from r1477564, camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleTest.java) URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpMethodRestrictTest.java?p2=camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpMethodRestrictTest.java&p1=camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleTest.java&r1=1477564&r2=1477632&rev=1477632&view=diff ============================================================================== --- camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleTest.java (original) +++ camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpMethodRestrictTest.java Tue Apr 30 13:49:24 2013 @@ -16,29 +16,57 @@ */ package org.apache.camel.component.netty.http; +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.Processor; import org.apache.camel.builder.RouteBuilder; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; +import org.apache.commons.httpclient.methods.StringRequestEntity; import org.junit.Test; -public class NettyHttpSimpleTest extends BaseNettyTest { +public class NettyHttpMethodRestrictTest extends BaseNettyTest { + + private String getUrl() { + return "http://localhost:" + getPort() + "/methodRestrict"; + } @Test - public void testHttpSimple() throws Exception { - getMockEndpoint("mock:input").expectedBodiesReceived("Hello World"); + public void testProperHttpMethod() throws Exception { + HttpClient httpClient = new HttpClient(); + PostMethod httpPost = new PostMethod(getUrl()); + + StringRequestEntity reqEntity = new StringRequestEntity("This is a test", null, null); + httpPost.setRequestEntity(reqEntity); + + int status = httpClient.executeMethod(httpPost); - String out = template.requestBody("http://localhost:{{port}}/foo", "Hello World", String.class); - assertEquals("Bye World", out); + assertEquals("Get a wrong response status", 200, status); + + String result = httpPost.getResponseBodyAsString(); + assertEquals("Get a wrong result", "This is a test response", result); + } + + @Test + public void testImproperHttpMethod() throws Exception { + HttpClient httpClient = new HttpClient(); + GetMethod httpGet = new GetMethod(getUrl()); + int status = httpClient.executeMethod(httpGet); - assertMockEndpointsSatisfied(); + assertEquals("Get a wrong response status", 405, status); } - @Override protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { - @Override public void configure() throws Exception { - from("netty-http:http://0.0.0.0:{{port}}/foo") - .to("mock:input") - .transform().constant("Bye World"); + from("netty-http://http://localhost:{{port}}/methodRestrict?httpMethodRestrict=POST").process(new Processor() { + public void process(Exchange exchange) throws Exception { + Message in = exchange.getIn(); + String request = in.getBody(String.class); + exchange.getOut().setBody(request + " response"); + } + }); } }; } Copied: camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpTraceDisabledTest.java (from r1477564, camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleTest.java) URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpTraceDisabledTest.java?p2=camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpTraceDisabledTest.java&p1=camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleTest.java&r1=1477564&r2=1477632&rev=1477632&view=diff ============================================================================== --- camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleTest.java (original) +++ camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpTraceDisabledTest.java Tue Apr 30 13:49:24 2013 @@ -17,18 +17,35 @@ package org.apache.camel.component.netty.http; import org.apache.camel.builder.RouteBuilder; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.methods.TraceMethod; import org.junit.Test; -public class NettyHttpSimpleTest extends BaseNettyTest { +public class NettyHttpTraceDisabledTest extends BaseNettyTest { - @Test - public void testHttpSimple() throws Exception { - getMockEndpoint("mock:input").expectedBodiesReceived("Hello World"); + private int portTraceOn = getNextPort(); + private int portTraceOff = getNextPort(); - String out = template.requestBody("http://localhost:{{port}}/foo", "Hello World", String.class); - assertEquals("Bye World", out); + @Test + public void testTraceDisabled() throws Exception { + HttpClient httpclient = new HttpClient(); + TraceMethod trace = new TraceMethod("http://localhost:" + portTraceOff + "/myservice"); + httpclient.executeMethod(trace); + + // TRACE shouldn't be allowed by default + assertTrue(trace.getStatusCode() == 405); + trace.releaseConnection(); + } - assertMockEndpointsSatisfied(); + @Test + public void testTraceEnabled() throws Exception { + HttpClient httpclient = new HttpClient(); + TraceMethod trace = new TraceMethod("http://localhost:" + portTraceOn + "/myservice"); + httpclient.executeMethod(trace); + + // TRACE is now allowed + assertTrue(trace.getStatusCode() == 200); + trace.releaseConnection(); } @Override @@ -36,9 +53,8 @@ public class NettyHttpSimpleTest extends return new RouteBuilder() { @Override public void configure() throws Exception { - from("netty-http:http://0.0.0.0:{{port}}/foo") - .to("mock:input") - .transform().constant("Bye World"); + from("netty-http:http://localhost:" + portTraceOff + "/myservice").to("log:foo"); + from("netty-http:http://localhost:" + portTraceOn + "/myservice?traceEnabled=true").to("log:bar"); } }; } Copied: camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyUseRawHttpResponseTest.java (from r1477564, camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpAccessHttpRequestTest.java) URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyUseRawHttpResponseTest.java?p2=camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyUseRawHttpResponseTest.java&p1=camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpAccessHttpRequestTest.java&r1=1477564&r2=1477632&rev=1477632&view=diff ============================================================================== --- camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpAccessHttpRequestTest.java (original) +++ camel/trunk/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyUseRawHttpResponseTest.java Tue Apr 30 13:49:24 2013 @@ -19,10 +19,15 @@ package org.apache.camel.component.netty import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.builder.RouteBuilder; -import org.jboss.netty.handler.codec.http.HttpRequest; +import org.jboss.netty.buffer.ChannelBuffers; +import org.jboss.netty.handler.codec.http.DefaultHttpResponse; +import org.jboss.netty.handler.codec.http.HttpHeaders; +import org.jboss.netty.handler.codec.http.HttpResponse; +import org.jboss.netty.handler.codec.http.HttpResponseStatus; +import org.jboss.netty.handler.codec.http.HttpVersion; import org.junit.Test; -public class NettyHttpAccessHttpRequestTest extends BaseNettyTest { +public class NettyUseRawHttpResponseTest extends BaseNettyTest { @Test public void testAccessHttpRequest() throws Exception { @@ -44,12 +49,13 @@ public class NettyHttpAccessHttpRequestT .process(new Processor() { @Override public void process(Exchange exchange) throws Exception { - // we can get the original http request - HttpRequest request = exchange.getIn(NettyHttpMessage.class).getHttpRequest(); - assertNotNull(request); + HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK); + response.setContent(ChannelBuffers.copiedBuffer("Bye World".getBytes())); + response.setHeader(HttpHeaders.Names.CONTENT_LENGTH, 9); + + exchange.getOut().setBody(response); } - }) - .transform().constant("Bye World"); + }); } }; }