Package org.objectweb.celtix.geronimo.container

Source Code of org.objectweb.celtix.geronimo.container.GeronimoServerTransportTest$DummyRequest

package org.objectweb.celtix.geronimo.container;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.net.URI;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executor;

import javax.xml.namespace.QName;
import javax.xml.ws.Holder;
import javax.xml.ws.handler.MessageContext;

import junit.framework.TestCase;

import org.apache.geronimo.webservices.WebServiceContainer.Request;
import org.apache.geronimo.webservices.WebServiceContainer.Response;
import org.easymock.classextension.EasyMock;
import org.objectweb.celtix.Bus;
import org.objectweb.celtix.configuration.Configuration;
import org.objectweb.celtix.context.InputStreamMessageContext;
import org.objectweb.celtix.context.OutputStreamMessageContext;
import org.objectweb.celtix.geronimo.MockBusFactory;
import org.objectweb.celtix.transports.ServerTransport;
import org.objectweb.celtix.transports.ServerTransportCallback;
import org.objectweb.celtix.ws.addressing.AttributedURIType;
import org.objectweb.celtix.ws.addressing.EndpointReferenceType;
import org.objectweb.celtix.wsdl.EndpointReferenceUtils;

public class GeronimoServerTransportTest extends TestCase {

    private Bus mockBus;
    private EndpointReferenceType address;
    private Holder<InputStreamMessageContext> ctxHolder = new Holder<InputStreamMessageContext>();
    private Holder<ServerTransport> transportHolder = new Holder<ServerTransport>();
    private Holder<Boolean> invokedHolder = new Holder<Boolean>();
    private MockBusFactory busFactory = new MockBusFactory();
    private GeronimoServerTransport transport;
   
   
    public void setUp() throws Exception {
       
        mockBus = busFactory.createMockBus();
       
        address = new EndpointReferenceType();
        AttributedURIType uri = new AttributedURIType();
        uri.setValue("http://foo.bar.iona.com/wibbly/wobbly/wonder");
        address.setAddress(uri);
        QName serviceName = new QName("http://www.w3.org/2004/08/wsdl", "testServiceName");
        EndpointReferenceUtils.setServiceAndPortName(address, serviceName, "");

        Configuration child =
            busFactory.addChildConfig("http://celtix.objectweb.org/bus/jaxws/endpoint-config", null, null);
        EasyMock.replay(child);
        busFactory.replay();
       
        transport = new GeronimoServerTransport(mockBus, address);
       
    }
   
    public void testTransportIsSerializable() {
       
        assertTrue("transport must be serializable",
                   Serializable.class.isAssignableFrom(GeronimoServerTransport.class));
    }
   
   
    public void testCopyHeaders() {

 
        DummyRequest req = new DummyRequest();
        req.setHeader("Accept", "text/plain, text/html");
        req.setHeader("Host", "localhost");
        req.setHeader("Content-Type", "text/html");
       
        GeronimoInputStreamMessageContext ctx = transport.createInputStreamMessageContext();
        ctx.setRequest(req);
       
        Map<String, List<String>> headerMap = new HashMap<String, List<String>>();
        assertTrue(ctx instanceof MessageContext);
        transport.copyRequestHeaders(ctx, headerMap);
               
        assertEquals("unexpected number of headers", 3, headerMap.size());
        checkHeader(headerMap, "Host", "localhost");
        checkHeader(headerMap, "Content-Type", "text/html");
        checkHeader(headerMap, "Accept", "text/plain", "text/html");
    }
   
   
    private void checkHeader(Map<String, List<String>> headers, String name, String... expectedValues) {
       
        List<String> values = headers.get(name);
       
        int valueCount = 0;

        for (String expectedValue : expectedValues) {
            assertTrue("unexpected header value: [" + expectedValue + "] " + values,
                       values.contains(expectedValue));
            ++valueCount;
        }
        assertEquals("unexpected number of header values", valueCount, values.size());
    }
   
    public void testInvoke() throws Exception {
       
        final Request request = EasyMock.createMock(Request.class);
        final Response response = EasyMock.createMock(Response.class);
       

        transport.activate(new ServerTransportCallback() {

            public void dispatch(InputStreamMessageContext ctx, ServerTransport tport) {
                invokedHolder.value = Boolean.TRUE;
                ctxHolder.value = ctx;
                transportHolder.value = tport;
            }

            public Executor getExecutor() {
                return null;
            }
           
        });
       
        transport.invoke(request, response);
       
        assertTrue("ServerTransportCallback.dispatch was not called", invokedHolder.value);
        assertSame("transport not passed to ServerTransportCallback", transport, transportHolder.value);
       
        assertNotNull("no context passed from transport", ctxHolder.value);
        InputStreamMessageContext ctx = ctxHolder.value;
        assertTrue("context is of incorrect type: " + ctx.getClass(),
                   ctx instanceof GeronimoInputStreamMessageContext);
        GeronimoInputStreamMessageContext inctx = (GeronimoInputStreamMessageContext)ctx;
        assertNotNull("request not available in context", inctx.getRequest());
       
        assertNotNull("response not available in context", inctx.getResponse());
    }

    public void testCreateOutputStreamContext() throws IOException {

        MessageContext mc = EasyMock.createMock(MessageContext.class);
        Response resp = EasyMock.createNiceMock(Response.class);
        resp.setStatusCode(200);
        EasyMock.expect(resp.getOutputStream()).andReturn(EasyMock.createNiceMock(OutputStream.class));
       
        EasyMock.expect(mc.get(GeronimoInputStreamMessageContext.RESPONSE))
                .andReturn(resp);
       
        EasyMock.expect(mc.get("foo")).andReturn("ret");
        EasyMock.replay(mc);
        EasyMock.replay(resp);
       
        OutputStreamMessageContext outctx = transport.createOutputStreamContext(mc);
       
        assertNotNull("received null context from the transoprt", outctx);
        assertTrue("incorrect type for context" + outctx.getClass(),
                   outctx instanceof GeronimoOutputStreamServerMessageContext);

        assertNotNull("no outputstream in context", outctx.getOutputStream());
       
        // check that context passed in has been wrapped.
       
        outctx.get("foo");
        EasyMock.verify(mc);
       
    }
   
   
    static class DummyRequest implements Request {

        private Map<String, String> headers = new HashMap<String, String>();

        public void setHeader(String header, String value) {
            headers.put(header, value);
        }
        public String getHeader(String header) {
            return headers.get(header);
        }

        public URI getURI() {
            // TODO Auto-generated method stub
            return null;
        }

        public int getContentLength() {
            // TODO Auto-generated method stub
            return 0;
        }

        public String getContentType() {
            // TODO Auto-generated method stub
            return null;
        }

        public InputStream getInputStream() throws IOException {
            // TODO Auto-generated method stub
            return null;
        }

        public int getMethod() {
            // TODO Auto-generated method stub
            return 0;
        }

        public String getParameter(String arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        public Map getParameters() {
            // TODO Auto-generated method stub
            return null;
        }

        public Object getAttribute(String arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        public void setAttribute(String arg0, Object arg1) {
            // TODO Auto-generated method stub
           
        }
       
    }
   
}
TOP

Related Classes of org.objectweb.celtix.geronimo.container.GeronimoServerTransportTest$DummyRequest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.