Author: sagara
Date: Fri Oct 14 11:42:02 2011
New Revision: 1183316

URL: http://svn.apache.org/viewvc?rev=1183316&view=rev
Log:
AXIS2-3933 : Added basic test framework to test HTTP transport classes. 

Added:
    
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/mock/
    
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/mock/MockAxisHttpResponse.java
   (with props)
    
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/mock/MockHTTPResponse.java
   (with props)
    
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/mock/MockHttpServletResponse.java
   (with props)
Modified:
    
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/CommonsHTTPTransportSenderTest.java

Modified: 
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/CommonsHTTPTransportSenderTest.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/CommonsHTTPTransportSenderTest.java?rev=1183316&r1=1183315&r2=1183316&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/CommonsHTTPTransportSenderTest.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/CommonsHTTPTransportSenderTest.java
 Fri Oct 14 11:42:02 2011
@@ -18,31 +18,56 @@
  */
 package org.apache.axis2.transport.http;
 
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 
+import javax.mail.MessagingException;
+import javax.servlet.http.HttpServletResponse;
 import javax.xml.namespace.QName;
 
+import junit.framework.TestCase;
+
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.soap.SOAPBody;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.client.Options;
 import org.apache.axis2.client.ServiceClient;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.ConfigurationContextFactory;
-import org.junit.Test;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.description.Parameter;
+import org.apache.axis2.description.TransportOutDescription;
+import org.apache.axis2.engine.Handler.InvocationResponse;
+import org.apache.axis2.transport.OutTransportInfo;
+import org.apache.axis2.transport.TransportSender;
+import org.apache.axis2.transport.http.mock.MockAxisHttpResponse;
+import org.apache.axis2.transport.http.mock.MockHttpServletResponse;
+import org.apache.axis2.transport.http.mock.MockHTTPResponse;
+import org.apache.commons.httpclient.Header;
+import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.http.ProtocolVersion;
+import org.apache.http.RequestLine;
+import org.apache.http.message.BasicRequestLine;
 import org.mortbay.http.SocketListener;
 import org.mortbay.jetty.Server;
 
-public class CommonsHTTPTransportSenderTest {
+public class CommonsHTTPTransportSenderTest extends TestCase  {
+
     /**
      * Tests that HTTP connections are properly released when the server 
returns a 404 error. This
      * is a regression test for AXIS2-5093.
      * 
      * @throws Exception
      */
-    @Test
+    
     public void testConnectionReleaseWith404() throws Exception {
         // Create a Jetty server instance without any contexts. It will always 
return HTTP 404.
         Server server = new Server();
@@ -72,5 +97,135 @@ public class CommonsHTTPTransportSenderT
         } finally {
             server.stop();
         }
+    }    
+
+    public void testInvokeWithServletBasedOutTransportInfo() throws Exception {
+        MockHTTPResponse httpResponse = new MockHttpServletResponse();
+        ServletBasedOutTransportInfo info = new ServletBasedOutTransportInfo(
+                (HttpServletResponse) httpResponse);
+        SOAPEnvelope envelope = getEnvelope();
+        httpResponse = configAndRun(httpResponse, info, null);
+
+        assertEquals("Not the expected Header value", "application/xml", 
httpResponse.getHeaders()
+                .get("Content-Type"));
+        assertEquals("Not the expected Header value", "custom-value", 
httpResponse.getHeaders()
+                .get("Custom-header"));
+        assertEquals("Not the expected body content", 
envelope.toString().replace("utf", "UTF"),
+                new 
String(httpResponse.getByteArrayOutputStream().toByteArray()));
+    }
+    
+    public void testInvokeWithAxisHttpResponseImpl() throws Exception {
+        RequestLine line = new BasicRequestLine("", "", new 
ProtocolVersion("http", 1, 0));
+        MockHTTPResponse httpResponse = new MockAxisHttpResponse(line);
+        SOAPEnvelope envelope = getEnvelope();
+        httpResponse = (MockAxisHttpResponse) configAndRun(httpResponse,
+                (OutTransportInfo) httpResponse, null);
+
+        assertEquals("Not the expected Header value", "application/xml", 
httpResponse.getHeaders()
+                .get("Content-Type"));
+        assertEquals("Not the expected Header value", "custom-value", 
httpResponse.getHeaders()
+                .get("Custom-header"));
+        assertEquals("Not the expected body content", 
envelope.toString().replace("utf", "UTF"),
+                new 
String(httpResponse.getByteArrayOutputStream().toByteArray()));
+    }
+    
+    public void testInvokeWithEPR() throws Exception {
+        RequestLine line = new BasicRequestLine("", "", new 
ProtocolVersion("http", 1, 0));
+        MockHTTPResponse httpResponse = new MockAxisHttpResponse(line);
+        /*
+         * TODO - This method used to test client side support of
+         * CommonsHTTPTransportSender. At the moment this will return 
Connection
+         * refused exception because there is no server side support given. It
+         * is required to complete this test by adding a HTTP server and verify
+         * data in the server side.
+         */
+        try {
+            httpResponse = (MockAxisHttpResponse) configAndRun(httpResponse,
+                    (OutTransportInfo) httpResponse, "http://localhost:8080";);
+            fail("Should raise org.apache.axis2.AxisFault: Connection 
refused");
+        } catch (AxisFault e) {
+        }
+
+        // assertEquals("Not the expected Header value", "application/xml",
+        // httpResponse.getHeaders().get("Content-Type"));
+        // assertEquals("Not the expected Header value", "custom-value",
+        // httpResponse.getHeaders().get("Custom-header"));
+        // assertEquals("Not the expected body content",
+        // envelope.toString().replace("utf", "UTF"), new String(httpResponse
+        // .getByteArrayOutputStream().toByteArray()));
+
+    }
+    
+    public void testCleanup() throws AxisFault {
+        TransportSender sender = new CommonsHTTPTransportSender();
+        MessageContext msgContext = new MessageContext();
+        HttpMethod httpMethod = new GetMethod();
+        msgContext.setProperty(HTTPConstants.HTTP_METHOD, httpMethod);
+        assertNotNull("HttpMethod can not be null",
+                msgContext.getProperty(HTTPConstants.HTTP_METHOD));
+        sender.cleanup(msgContext);
+        assertNull("HttpMethod should be null", 
msgContext.getProperty(HTTPConstants.HTTP_METHOD));
+
+    }
+    
+    public void testInit() throws AxisFault {
+        ConfigurationContext confContext = ConfigurationContextFactory
+                .createEmptyConfigurationContext();
+        TransportOutDescription transportOut = new 
TransportOutDescription("http");
+        TransportSender sender = new CommonsHTTPTransportSender();
+        sender.init(confContext, transportOut);
+
+    }
+    
+    private MockHTTPResponse configAndRun(MockHTTPResponse outResponse,
+            OutTransportInfo outTransportInfo, String epr) throws Exception {
+        MockHTTPResponse response = outResponse;
+        ConfigurationContext confContext = ConfigurationContextFactory
+                .createEmptyConfigurationContext();
+        TransportOutDescription transportOut = new 
TransportOutDescription("http");
+        Parameter param = new Parameter(HTTPConstants.OMIT_SOAP_12_ACTION, 
false);
+        SOAPEnvelope envelope = getEnvelope();
+        MessageContext msgContext = new MessageContext();
+
+        TransportSender sender = new CommonsHTTPTransportSender();
+        transportOut.addParameter(param);
+        // create dummy SOAPEnvelope
+        msgContext.setEnvelope(envelope);
+        msgContext.setProperty(MessageContext.TRANSPORT_OUT,
+                ((MockHTTPResponse) response).getByteArrayOutputStream());
+        msgContext.setProperty(Constants.OUT_TRANSPORT_INFO, outTransportInfo);
+        msgContext.setTransportOut(transportOut);
+        msgContext.setConfigurationContext(confContext);
+        if (epr != null) {
+            msgContext.setProperty(Constants.Configuration.TRANSPORT_URL, epr);
+        }
+        // set two Headers for testing
+        List<Header> headerList = new ArrayList<Header>();
+        Header header1 = new Header("Content-Type", "application/xml");
+        Header header2 = new Header("Custom-header", "custom-value");
+        headerList.add(header1);
+        headerList.add(header2);
+        msgContext.setProperty(HTTPConstants.HTTP_HEADERS, headerList);
+        sender.init(confContext, transportOut);
+        InvocationResponse inResponse = sender.invoke(msgContext);
+        assertEquals("Not the expected InvocationResponse", 
InvocationResponse.CONTINUE, inResponse);
+        return response;
+
+    }
+    
+    private SOAPEnvelope getEnvelope() throws IOException, MessagingException {
+        SOAPFactory soapFac = OMAbstractFactory.getSOAP11Factory();
+        OMFactory omFac = OMAbstractFactory.getOMFactory();
+        SOAPEnvelope enp = soapFac.createSOAPEnvelope();
+        SOAPBody sopaBody = soapFac.createSOAPBody();
+
+        OMElement content = omFac.createOMElement(new QName("message"));
+        OMElement data1 = omFac.createOMElement(new QName("part"));
+        data1.setText("sample data");
+
+        content.addChild(data1);
+        sopaBody.addChild(content);
+        enp.addChild(sopaBody);
+        return enp;
     }
 }

Added: 
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/mock/MockAxisHttpResponse.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/mock/MockAxisHttpResponse.java?rev=1183316&view=auto
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/mock/MockAxisHttpResponse.java
 (added)
+++ 
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/mock/MockAxisHttpResponse.java
 Fri Oct 14 11:42:02 2011
@@ -0,0 +1,115 @@
+/*
+ * 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.axis2.transport.http.mock;
+
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.axis2.transport.OutTransportInfo;
+import org.apache.axis2.transport.http.server.AxisHttpResponse;
+import org.apache.http.RequestLine;
+import org.apache.http.message.BasicHttpRequest;
+
+/**
+ * The Class MockAxisHttpResponse is a mock implementation of AxisHttpResponse
+ * to used with unit tests.
+ * 
+ * @since 1.7.0
+ */
+public class MockAxisHttpResponse extends BasicHttpRequest implements 
AxisHttpResponse,
+        OutTransportInfo, MockHTTPResponse {
+
+    private Map<String, String> headers = new HashMap<String, String>();
+    private ByteArrayOutputStream byteArrayOutputStream = new 
ByteArrayOutputStream();
+
+    public MockAxisHttpResponse(RequestLine requestline) {
+        super(requestline);
+    }
+
+    /**
+     * Gets all the headers as a Map of <Header-Name, Header-Value>.
+     * 
+     * This method can be used in test cases to retrieve all headers written to
+     * the HttpServletResponse.
+     * 
+     * @return the headers
+     */
+    public Map<String, String> getHeaders() {
+        return headers;
+    }
+
+    public void setStatus(int sc) {
+
+    }
+
+    public void sendError(int sc, String msg) {
+
+    }
+
+    public void sendError(int sc) {
+    }
+
+    public void setContentType(String contentType) {
+
+    }
+
+    public OutputStream getOutputStream() {
+        return null;
+    }
+
+    public void setDateHeader(String name, long date) {
+        headers.remove(name);
+        headers.put(name, new Date(date).toString());
+
+    }
+
+    public void addDateHeader(String name, long date) {
+        headers.put(name, new Date(date).toString());
+
+    }
+
+    public void setHeader(String name, String value) {
+        headers.remove(name);
+        headers.put(name, value);
+    }
+
+    public void addHeader(String name, String value) {
+        headers.put(name, value);
+
+    }
+
+    public void setIntHeader(String name, int value) {
+        headers.remove(name);
+        headers.put(name, String.valueOf(value));
+
+    }
+
+    public void addIntHeader(String name, int value) {
+        headers.put(name, String.valueOf(value));
+    }
+
+    public ByteArrayOutputStream getByteArrayOutputStream() {       
+        return byteArrayOutputStream;
+    }
+
+}
\ No newline at end of file

Propchange: 
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/mock/MockAxisHttpResponse.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/mock/MockHTTPResponse.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/mock/MockHTTPResponse.java?rev=1183316&view=auto
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/mock/MockHTTPResponse.java
 (added)
+++ 
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/mock/MockHTTPResponse.java
 Fri Oct 14 11:42:02 2011
@@ -0,0 +1,50 @@
+/*
+ * 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.axis2.transport.http.mock;
+
+import java.io.ByteArrayOutputStream;
+import java.util.Map;
+
+/**
+ * The Interface MockHTTPResponse.
+ * 
+ * @since 1.7.0
+ */
+public interface MockHTTPResponse {
+
+    /**
+     * Gets all the headers as a Map of <Header-Name, Header-Value>.
+     * 
+     * This method can be used in test cases to retrieve all headers written to
+     * the HttpServletResponse.
+     * 
+     * @return the headers
+     */
+    public Map<String, String> getHeaders();
+
+    /**
+     * HTTP response write to a internal ByteArrayOutputStream and possible to
+     * retrieve written content using this method.
+     * 
+     * @return tByteArrayOutputStream
+     */
+    public ByteArrayOutputStream getByteArrayOutputStream();
+
+}

Propchange: 
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/mock/MockHTTPResponse.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/mock/MockHttpServletResponse.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/mock/MockHttpServletResponse.java?rev=1183316&view=auto
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/mock/MockHttpServletResponse.java
 (added)
+++ 
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/mock/MockHttpServletResponse.java
 Fri Oct 14 11:42:02 2011
@@ -0,0 +1,179 @@
+/*
+ * 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.axis2.transport.http.mock;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.axis2.transport.OutTransportInfo;
+
+/**
+ * The Class MockHttpServletResponse is a mock implementation of
+ * HttpServletResponse to used with unit tests.
+ * 
+ * @since 1.7.0
+ */
+public class MockHttpServletResponse implements HttpServletResponse, 
OutTransportInfo, MockHTTPResponse {
+
+    private String ContentType;
+    private int ContentLength;
+    private OutputStream outStream;
+    private boolean committed;
+    private Map<String, String> headers;
+    private ByteArrayOutputStream byteArrayOutputStream;   
+    
+    public MockHttpServletResponse() {
+        headers = new HashMap<String, String>();
+        byteArrayOutputStream = new ByteArrayOutputStream();
+    }
+    
+    public ByteArrayOutputStream getByteArrayOutputStream(){
+        return byteArrayOutputStream;        
+    }
+        
+    public Map<String, String> getHeaders() {
+        return headers;
+    }
+
+    public String getCharacterEncoding() {
+        return null;
+    }
+
+    public ServletOutputStream getOutputStream() throws IOException {
+        return (ServletOutputStream) outStream;
+    }
+
+    public PrintWriter getWriter() throws IOException {
+        return null;
+    }
+
+    public int getBufferSize() {
+        return 0;
+    }
+
+    public void flushBuffer() throws IOException {
+    }
+
+    public boolean isCommitted() {
+        return committed;
+    }
+
+    public void reset() {
+    }
+
+    public Locale getLocale() {
+        return null;
+    }
+
+    public void resetBuffer() {
+    }
+
+    public void setContentLength(int len) {
+        this.ContentLength = len;
+    }
+
+    public void setContentType(String type) {
+        this.ContentType = type;
+    }
+
+    public void setBufferSize(int size) {
+
+    }
+
+    public void setLocale(Locale loc) {
+
+    }
+
+    public void addCookie(Cookie cookie) {
+
+    }
+
+    public boolean containsHeader(String name) {
+        return headers.containsKey(name);
+    }
+
+    public String encodeURL(String url) {
+        return null;
+    }
+
+    public String encodeRedirectURL(String url) {
+        return null;
+    }
+
+    public String encodeUrl(String url) {
+        return null;
+    }
+
+    public String encodeRedirectUrl(String url) {
+        return null;
+    }
+
+    public void sendError(int sc, String msg) throws IOException {
+    }
+
+    public void sendError(int sc) throws IOException {
+    }
+
+    public void sendRedirect(String location) throws IOException {
+    }
+
+    public void setDateHeader(String name, long date) {
+        headers.remove(name);
+        headers.put(name, new Date(date).toString());
+    }
+
+    public void addDateHeader(String name, long date) {
+        headers.put(name, new Date(date).toString());
+    }
+
+    public void setHeader(String name, String value) {
+        headers.remove(name);
+        headers.put(name, value);
+    }
+
+    public void addHeader(String name, String value) {
+        headers.put(name, value);
+    }
+
+    public void setIntHeader(String name, int value) {
+        headers.remove(name);
+        headers.put(name, String.valueOf(value));
+    }
+
+    public void addIntHeader(String name, int value) {
+        headers.put(name, String.valueOf(value));
+    }
+
+    public void setStatus(int sc) {
+    }
+
+    public void setStatus(int sc, String sm) {
+    }
+}
\ No newline at end of file

Propchange: 
axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/mock/MockHttpServletResponse.java
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to