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>


Reply via email to