Author: hiranya
Date: Mon May 30 00:35:51 2016
New Revision: 1746069
URL: http://svn.apache.org/viewvc?rev=1746069&view=rev
Log:
Implemented support for echoing HTTP headers in the Echo Http server;
Implemented Sample10101 to test the impact of the DISABLE_CHUNKING property in
the HTTP transport
Added:
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/tests/transport/Sample10101.java
synapse/trunk/java/modules/integration/src/test/resources/extras/synapse_sample_10101.xml
synapse/trunk/java/modules/integration/src/test/resources/sample10101.xml
Modified:
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/EchoHttpServerController.java
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/TestSamplesHandlerSuite.java
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/clients/HttpResponse.java
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/config/SampleConfigConstants.java
Modified:
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/EchoHttpServerController.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/EchoHttpServerController.java?rev=1746069&r1=1746068&r2=1746069&view=diff
==============================================================================
---
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/EchoHttpServerController.java
(original)
+++
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/EchoHttpServerController.java
Mon May 30 00:35:51 2016
@@ -25,6 +25,7 @@ import org.apache.commons.logging.LogFac
import org.apache.http.*;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
import org.apache.http.impl.DefaultBHttpServerConnection;
import org.apache.http.impl.DefaultBHttpServerConnectionFactory;
import org.apache.http.protocol.*;
@@ -38,22 +39,29 @@ import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.atomic.AtomicInteger;
+/**
+ * A simple HTTP server implementation which is capable of echoing back the
body
+ * or the headers of an HTTP request.
+ */
public class EchoHttpServerController extends AbstractBackEndServerController {
private static final Log log =
LogFactory.getLog(EchoHttpServerController.class);
- private int port;
+ private final int port;
+ private final boolean echoHeaders;
private RequestListenerThread requestListener;
public EchoHttpServerController(OMElement element) {
super(element);
port = Integer.parseInt(SynapseTestUtils.getParameter(element,
- SampleConfigConstants.TAG_BE_SERVER_CONF_AXIS2_HTTP_PORT,
"9000"));
+ SampleConfigConstants.TAG_BE_SERVER_CONF_ECHO_HTTP_PORT,
"9000"));
+ echoHeaders =
Boolean.parseBoolean(SynapseTestUtils.getParameter(element,
+ SampleConfigConstants.TAG_BE_SERVER_CONF_ECHO_HEADERS,
"false"));
}
public boolean startProcess() {
try {
- requestListener = new RequestListenerThread(port);
+ requestListener = new RequestListenerThread(port, echoHeaders);
requestListener.start();
return true;
} catch (IOException e) {
@@ -70,23 +78,39 @@ public class EchoHttpServerController ex
static class EchoHttpHandler implements HttpRequestHandler {
+ private final boolean echoHeaders;
+
+ EchoHttpHandler(boolean echoHeaders) {
+ this.echoHeaders = echoHeaders;
+ }
+
public void handle(HttpRequest request, HttpResponse response,
HttpContext context) throws HttpException,
IOException {
if (log.isDebugEnabled()) {
log.debug(request.getRequestLine().toString());
}
- if (request instanceof HttpEntityEnclosingRequest) {
- HttpEntity entity = ((HttpEntityEnclosingRequest)
request).getEntity();
- byte[] entityContent = EntityUtils.toByteArray(entity);
- if (log.isDebugEnabled()) {
- log.debug("Request entity read; size=" +
entityContent.length);
+
+ if (echoHeaders) {
+ StringBuilder body = new StringBuilder();
+ for (Header header : request.getAllHeaders()) {
+ body.append(header.getName()).append(":
").append(header.getValue()).append("\n");
}
response.setStatusCode(HttpStatus.SC_OK);
- response.setEntity(new ByteArrayEntity(entityContent,
-
ContentType.create(entity.getContentType().getValue())));
+ response.setEntity(new StringEntity(body.toString(),
ContentType.TEXT_PLAIN));
} else {
- response.setStatusCode(HttpStatus.SC_NO_CONTENT);
+ if (request instanceof HttpEntityEnclosingRequest) {
+ HttpEntity entity = ((HttpEntityEnclosingRequest)
request).getEntity();
+ byte[] entityContent = EntityUtils.toByteArray(entity);
+ if (log.isDebugEnabled()) {
+ log.debug("Request entity read; size=" +
entityContent.length);
+ }
+ response.setStatusCode(HttpStatus.SC_OK);
+ response.setEntity(new ByteArrayEntity(entityContent,
+
ContentType.create(entity.getContentType().getValue())));
+ } else {
+ response.setStatusCode(HttpStatus.SC_NO_CONTENT);
+ }
}
}
}
@@ -97,7 +121,7 @@ public class EchoHttpServerController ex
private final ServerSocket serversocket;
private final HttpService httpService;
- public RequestListenerThread(final int port) throws IOException {
+ public RequestListenerThread(final int port, final boolean
echoHeaders) throws IOException {
this.connFactory = DefaultBHttpServerConnectionFactory.INSTANCE;
this.serversocket = new ServerSocket();
this.serversocket.setReuseAddress(true);
@@ -112,7 +136,7 @@ public class EchoHttpServerController ex
// Set up request handlers
UriHttpRequestHandlerMapper registry = new
UriHttpRequestHandlerMapper();
- registry.register("*", new EchoHttpHandler());
+ registry.register("*", new EchoHttpHandler(echoHeaders));
// Set up the HTTP service
this.httpService = new HttpService(httpProcessor, registry);
Modified:
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/TestSamplesHandlerSuite.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/TestSamplesHandlerSuite.java?rev=1746069&r1=1746068&r2=1746069&view=diff
==============================================================================
---
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/TestSamplesHandlerSuite.java
(original)
+++
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/TestSamplesHandlerSuite.java
Mon May 30 00:35:51 2016
@@ -25,6 +25,7 @@ import org.apache.commons.logging.LogFac
import org.apache.synapse.samples.framework.tests.rest.Sample10002;
import org.apache.synapse.samples.framework.tests.rest.Sample10003;
import org.apache.synapse.samples.framework.tests.tasks.*;
+import org.apache.synapse.samples.framework.tests.transport.Sample10101;
import org.apache.synapse.samples.framework.tests.transport.Sample250;
import org.apache.synapse.samples.framework.tests.advanced.*;
import org.apache.synapse.samples.framework.tests.endpoint.*;
@@ -246,5 +247,7 @@ public class TestSamplesHandlerSuite ext
sampleClassRepo.put("10001", Sample10001.class);
sampleClassRepo.put("10002", Sample10002.class);
sampleClassRepo.put("10003", Sample10003.class);
+
+ sampleClassRepo.put("10101", Sample10101.class);
}
}
\ No newline at end of file
Modified:
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/clients/HttpResponse.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/clients/HttpResponse.java?rev=1746069&r1=1746068&r2=1746069&view=diff
==============================================================================
---
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/clients/HttpResponse.java
(original)
+++
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/clients/HttpResponse.java
Mon May 30 00:35:51 2016
@@ -29,8 +29,7 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
public class HttpResponse {
@@ -80,4 +79,21 @@ public class HttpResponse {
public String getBodyAsString() {
return new String(this.body);
}
+
+ public Map<String,List<String>> getBodyAsMap() {
+ String body = getBodyAsString();
+ Map<String,List<String>> map = new HashMap<String,List<String>>();
+ for (String line : body.split("\n")) {
+ int index = line.indexOf(':');
+ String key = line.substring(0, index).trim();
+ String value = line.substring(index + 1).trim();
+ List<String> values = map.get(key);
+ if (values == null) {
+ values = new ArrayList<String>();
+ map.put(key, values);
+ }
+ values.add(value);
+ }
+ return map;
+ }
}
Modified:
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/config/SampleConfigConstants.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/config/SampleConfigConstants.java?rev=1746069&r1=1746068&r2=1746069&view=diff
==============================================================================
---
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/config/SampleConfigConstants.java
(original)
+++
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/config/SampleConfigConstants.java
Mon May 30 00:35:51 2016
@@ -48,7 +48,8 @@ public class SampleConfigConstants {
public static final String TAG_BE_SERVER_CONF_AXIS2_HTTPS_PORT =
"httpsPort";
public static final String TAG_BE_SERVER_CONF_AXIS2_COUNTER_ENABLED =
"counterEnabled";
- public static final String TAG_BE_SERVER_CONF_ECHO_HTTP_PORT = "port";
+ public static final String TAG_BE_SERVER_CONF_ECHO_HTTP_PORT = "httpPort";
+ public static final String TAG_BE_SERVER_CONF_ECHO_HEADERS = "echoHeaders";
public static final String TAG_BE_SERVER_CONF_DERBY_PORT = "dbPort";
Added:
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/tests/transport/Sample10101.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/tests/transport/Sample10101.java?rev=1746069&view=auto
==============================================================================
---
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/tests/transport/Sample10101.java
(added)
+++
synapse/trunk/java/modules/integration/src/test/java/org/apache/synapse/samples/framework/tests/transport/Sample10101.java
Mon May 30 00:35:51 2016
@@ -0,0 +1,43 @@
+package org.apache.synapse.samples.framework.tests.transport;
+
+import org.apache.http.HttpHeaders;
+import org.apache.http.HttpStatus;
+import org.apache.synapse.samples.framework.SynapseTestCase;
+import org.apache.synapse.samples.framework.clients.BasicHttpClient;
+import org.apache.synapse.samples.framework.clients.HttpResponse;
+
+import java.util.List;
+import java.util.Map;
+
+public class Sample10101 extends SynapseTestCase {
+
+ public static final byte[] TEST_PAYLOAD = "<test>foo</test>".getBytes();
+
+ public Sample10101() {
+ super(10101);
+ }
+
+ public void testChunking() throws Exception {
+ BasicHttpClient client = new BasicHttpClient();
+ HttpResponse response =
client.doPost("http://127.0.0.1:8280/test/chunked",
+ TEST_PAYLOAD, "application/xml");
+ assertEquals(HttpStatus.SC_OK, response.getStatus());
+ Map<String,List<String>> headers = response.getBodyAsMap();
+ assertTrue(headers.containsKey(HttpHeaders.TRANSFER_ENCODING));
+ assertFalse(headers.containsKey(HttpHeaders.CONTENT_LENGTH));
+ assertEquals("chunked",
headers.get(HttpHeaders.TRANSFER_ENCODING).get(0));
+ }
+
+ public void testDisableChunking() throws Exception {
+ BasicHttpClient client = new BasicHttpClient();
+ HttpResponse response =
client.doPost("http://127.0.0.1:8280/test/content_length",
+ TEST_PAYLOAD, "application/xml");
+ assertEquals(HttpStatus.SC_OK, response.getStatus());
+ Map<String,List<String>> headers = response.getBodyAsMap();
+ assertFalse(headers.containsKey(HttpHeaders.TRANSFER_ENCODING));
+ assertTrue(headers.containsKey(HttpHeaders.CONTENT_LENGTH));
+ assertEquals(TEST_PAYLOAD.length, Integer.parseInt(headers.get(
+ HttpHeaders.CONTENT_LENGTH).get(0)));
+ }
+
+}
Added:
synapse/trunk/java/modules/integration/src/test/resources/extras/synapse_sample_10101.xml
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/integration/src/test/resources/extras/synapse_sample_10101.xml?rev=1746069&view=auto
==============================================================================
---
synapse/trunk/java/modules/integration/src/test/resources/extras/synapse_sample_10101.xml
(added)
+++
synapse/trunk/java/modules/integration/src/test/resources/extras/synapse_sample_10101.xml
Mon May 30 00:35:51 2016
@@ -0,0 +1,29 @@
+<syn:definitions xmlns:syn="http://ws.apache.org/ns/synapse">
+ <syn:api name="TestAPI" context="/test">
+ <syn:resource methods="POST" url-mapping="/content_length">
+ <syn:inSequence>
+ <syn:property name="DISABLE_CHUNKING" value="true"
scope="axis2"/>
+ <syn:send>
+ <syn:endpoint>
+ <syn:address
uri="http://localhost:9000/services/EchoService"/>
+ </syn:endpoint>
+ </syn:send>
+ </syn:inSequence>
+ <syn:outSequence>
+ <syn:send/>
+ </syn:outSequence>
+ </syn:resource>
+ <syn:resource methods="POST" url-mapping="/chunked">
+ <syn:inSequence>
+ <syn:send>
+ <syn:endpoint>
+ <syn:address
uri="http://localhost:9000/services/EchoService"/>
+ </syn:endpoint>
+ </syn:send>
+ </syn:inSequence>
+ <syn:outSequence>
+ <syn:send/>
+ </syn:outSequence>
+ </syn:resource>
+ </syn:api>
+</syn:definitions>
\ No newline at end of file
Added: synapse/trunk/java/modules/integration/src/test/resources/sample10101.xml
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/integration/src/test/resources/sample10101.xml?rev=1746069&view=auto
==============================================================================
--- synapse/trunk/java/modules/integration/src/test/resources/sample10101.xml
(added)
+++ synapse/trunk/java/modules/integration/src/test/resources/sample10101.xml
Mon May 30 00:35:51 2016
@@ -0,0 +1,18 @@
+<synapseSample>
+ <sampleID>10101</sampleID>
+ <sampleName>Pass Through Transport Chunked Encoding Support</sampleName>
+ <synapseConfig>
+ <axis2Repo>modules/integration/target/test_repos/synapse</axis2Repo>
+
<axis2Xml>modules/integration/target/test_repos/synapse/conf/axis2_def.xml</axis2Xml>
+
<synapseXml>modules/integration/src/test/resources/extras/synapse_sample_10101.xml</synapseXml>
+ </synapseConfig>
+ <backEndServerConfig>
+ <echoServer id="0">
+ <httpPort>9000</httpPort>
+ <echoHeaders>true</echoHeaders>
+ </echoServer>
+ </backEndServerConfig>
+ <clientConfig>
+
<clientRepo>modules/integration/target/test_repos/axis2Client</clientRepo>
+ </clientConfig>
+</synapseSample>