Package org.mortbay.jetty.servlet

Source Code of org.mortbay.jetty.servlet.SessionManagerTest

/* ------------------------------------------------------------------------
* $Id$
* Copyright 2006 Tim Vernum
* ------------------------------------------------------------------------
* Licensed 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.mortbay.jetty.servlet;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;

import junit.framework.TestCase;

import org.mortbay.jetty.Server;
import org.mortbay.jetty.handler.ContextHandler;
import org.mortbay.jetty.servlet.AbstractSessionManager.Session;

/**
* @version $Revision$
*/
public class SessionManagerTest extends TestCase
{
    TestSessionIdManager idManager = new TestSessionIdManager();
    HashSessionManager sessionManager = new HashSessionManager();
    SessionHandler handler = new SessionHandler(sessionManager);
    Server server = new Server();
   
    protected void setUp() throws Exception
    {
        sessionManager.setIdManager(idManager);
        ContextHandler context=new ContextHandler();
        sessionManager.setSessionHandler(handler);
        server.setHandler(context);
        context.setHandler(handler);
        server.start();
    }

    protected void tearDown() throws Exception
    {
        server.stop();
    }

    public void testSetAttributeToNullIsTheSameAsRemoveAttribute() throws Exception
    {
        HttpSession session = sessionManager.newHttpSession(null);

        assertNull(session.getAttribute("foo"));
        assertFalse(session.getAttributeNames().hasMoreElements());
        session.setAttribute("foo", this);
        assertNotNull(session.getAttribute("foo"));
        assertTrue(session.getAttributeNames().hasMoreElements());
        session.removeAttribute("foo");
        assertNull(session.getAttribute("foo"));
        assertFalse(session.getAttributeNames().hasMoreElements());
        session.setAttribute("foo", this);
        assertNotNull(session.getAttribute("foo"));
        assertTrue(session.getAttributeNames().hasMoreElements());
        session.setAttribute("foo", null);
        assertNull(session.getAttribute("foo"));
        assertFalse(session.getAttributeNames().hasMoreElements());
    }
   
    public void testSessionPassivation() throws Exception
    {
        HttpSession session = sessionManager.newHttpSession(null);

        TestListener listener = new TestListener();
        session.setAttribute("key", listener);
       
        sessionManager.removeSession(session, false);

        assertNull(listener.activateEvent);
        assertNotNull(listener.passivateEvent);
    }
   
    public void testSessionActivation() throws Exception
    {
        HttpSession session = sessionManager.newHttpSession(null);

        TestListener listener = new TestListener();
        session.setAttribute("key", listener);

        sessionManager.removeSession(session, false);
        listener.passivateEvent = null;
       
        sessionManager.addSession((Session) session, false);

        assertNotNull(listener.activateEvent);
        assertNull(listener.passivateEvent);
    }
   
    public void testWorker() throws Exception
    {
        try
        {
            idManager.setWorkerName("node0");
            HttpSession session = sessionManager.newHttpSession(null);
           
            assertTrue(!session.getId().endsWith(".node0"));
            String nodeId=sessionManager.getNodeId(session);
            String clusterId=session.getId();
            String id1=clusterId+".node1";
           
            assertEquals(session.getId()+".node0",nodeId);
           
            assertTrue(sessionManager.getSessionCookie(session,"/context",false)!=null);
           
            assertEquals(session,sessionManager.getHttpSession(nodeId));
            assertTrue(sessionManager.access(session,false)==null);
           
            assertEquals(session,sessionManager.getHttpSession(id1));
            Cookie cookie = sessionManager.access(session,false);
            assertTrue(cookie!=null);
            assertEquals("JSESSIONID",cookie.getName());
            assertEquals(nodeId,cookie.getValue());
           
        }
        finally
        {
            idManager.setWorkerName(null);
        }
    }
   
   
    class TestSessionIdManager extends HashSessionIdManager
    {
       
        public boolean idInUse(String id)
        {
            return false;
        }

        public void addSession(HttpSession session)
        {
            // Ignore
        }

        public void invalidateAll(String id)
        {
            // Ignore
        }

        public String newSessionId(HttpServletRequest request, long created)
        {
            return "xyzzy";
        }

        public void removeSession(HttpSession session)
        {
            // ignore
        }

    }
   
    class TestListener implements HttpSessionActivationListener
    {
        private HttpSessionEvent activateEvent;
        private HttpSessionEvent passivateEvent;
       
        public void sessionDidActivate(HttpSessionEvent event)
        {
            activateEvent = event;
        }

        public void sessionWillPassivate(HttpSessionEvent event)
        {
            passivateEvent = event;
        }
       
    }
}
TOP

Related Classes of org.mortbay.jetty.servlet.SessionManagerTest

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.