Package org.mule.transport.http.functional

Source Code of org.mule.transport.http.functional.HttpMultipleCookiesTestCase

/*
* Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.transport.http.functional;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import org.mule.tck.AbstractServiceAndFlowTestCase;
import org.mule.tck.junit4.rule.DynamicPort;

import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpState;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.jetty.server.AbstractNetworkConnector;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runners.Parameterized.Parameters;

public class HttpMultipleCookiesTestCase extends AbstractServiceAndFlowTestCase
{
   
    protected static String TEST_MESSAGE = "Test Http Request ";
    protected static final Log logger = LogFactory.getLog(HttpMultipleCookiesTestCase.class);

    private CountDownLatch simpleServerLatch = new CountDownLatch(1);
    private CountDownLatch simpleServerShutdownLatch = new CountDownLatch(1);
    private static AtomicBoolean cookiesRecieved = new AtomicBoolean(false);

    private Server server = null;

    @Rule
    public DynamicPort dynamicPort1 = new DynamicPort("port1");
   
    @Rule
    public DynamicPort dynamicPort2 = new DynamicPort("port2");

    public HttpMultipleCookiesTestCase(ConfigVariant variant, String configResources)
    {
        super(variant, configResources);
        setStartContext(false);
    }

    @Parameters
    public static Collection<Object[]> parameters()
    {
        return Arrays.asList(new Object[][]{
            {ConfigVariant.SERVICE, "http-multiple-cookies-test-flow.xml"},
            {ConfigVariant.FLOW, "http-multiple-cookies-test-service.xml"}
        });
    }     
   
    @Override
    protected void doSetUp() throws Exception
    {
        super.doSetUp();
        startServer();
        assertTrue(simpleServerLatch.await(RECEIVE_TIMEOUT, TimeUnit.MILLISECONDS));
    }
           
    @Override
    protected void doTearDown() throws Exception
    {
        super.doTearDown();
        muleContext.stop();
        stopServer();
        assertTrue(simpleServerShutdownLatch.await(RECEIVE_TIMEOUT, TimeUnit.MILLISECONDS));
    }

    @Test
    public void testSendDirectly() throws Exception
    {
        muleContext.start();
        sendMessage(dynamicPort2.getNumber());
    }

    @Test
    public void testSendviaMule() throws Exception
    {
        muleContext.start();
        sendMessage(dynamicPort1.getNumber());
    }

    protected void sendMessage(int port) throws Exception
    {
        HttpClient client2 = new HttpClient();
        client2.getParams().setCookiePolicy(CookiePolicy.RFC_2109);
        HttpState state = new HttpState();
        Cookie cookie1 = new Cookie("localhost", "TheFirst", "First", "/", null, false);
        state.addCookie(cookie1);
        Cookie cookie2 = new Cookie("localhost", "TheSecond", "Value2", "/", null, false);
        state.addCookie(cookie2);
        Cookie cookie3 = new Cookie("localhost", "TheThird", "Value3", "/", null, false);
        state.addCookie(cookie3);

        client2.setState(state);
        PostMethod method = new PostMethod("http://localhost:" + port);
        Thread.sleep(5000);
        client2.executeMethod(method);
        assertEquals(TEST_MESSAGE, method.getResponseBodyAsString());
        assertTrue("Cookies were not recieved", cookiesRecieved.get());

        for (Cookie cookie : client2.getState().getCookies())
        {
            logger.debug(cookie.getName() + " " + cookie.getValue());
        }
        assertEquals(6, client2.getState().getCookies().length);
    }

    protected void startServer() throws Exception
    {
        logger.debug("server starting");
        Server server = new Server();
        AbstractNetworkConnector connector = new ServerConnector(server);
        connector.setPort(dynamicPort2.getNumber());
        server.setConnectors(new Connector[]{connector});

        ServletContextHandler handler = new ServletContextHandler();
        server.setHandler(handler);

        handler.setContextPath("/");
        handler.addServlet(new ServletHolder(HelloServlet.class), "/");

        server.start();
        // server.join();
        simpleServerLatch.countDown();
        logger.debug("Server started");
    }
   
    protected void stopServer() throws Exception
    {
        logger.debug("server stopping");
       
        if(server != null && server.isRunning())
        {
            assertEquals(1, server.getConnectors());           
            // this test only uses one connector
            server.getConnectors()[0].stop();
        }
       
        simpleServerShutdownLatch.countDown();
        logger.debug("Server stopped");
    }

    public static class HelloServlet extends HttpServlet
    {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
        {
            try
            {
                response.setContentType("text/xml");
                response.setContentLength(TEST_MESSAGE.length());
                for (int i = 0; i < 3; i++)
                {
                    javax.servlet.http.Cookie cookie1 = new javax.servlet.http.Cookie("OutputCookieName" + i,
                        "OutputCookieValue" + i);
                    response.addCookie(cookie1);
                }
                cookiesRecieved.set(false);
                javax.servlet.http.Cookie[] cookies = request.getCookies();
                if (cookies != null)
                {
                    for (javax.servlet.http.Cookie cookie : cookies)
                    {
                        logger.debug(cookie.getName() + " " + cookie.getValue());
                        cookiesRecieved.set(true);
                    }
                }
                response.setStatus(HttpServletResponse.SC_OK);
                response.getWriter().println(TEST_MESSAGE);
            }
            catch (Exception e)
            {
                logger.error("Servlet error", e);
                throw new ServletException(e);
            }
        }

        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
        {
            doGet(request, response);
        }

    }

}
TOP

Related Classes of org.mule.transport.http.functional.HttpMultipleCookiesTestCase

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.