/* * Copyright 2008-2014 by Emeric Vernat * * This file is part of Java Melody. * * 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 net.bull.javamelody; import static org.easymock.EasyMock.createNiceMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import java.lang.reflect.Field; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; import org.junit.Before; import org.junit.Test; /** * Test unitaire de la classe SessionListener. * @author Emeric Vernat */ public class TestSessionListener { private SessionListener sessionListener; private HttpSession createSession() { return new SessionTestImpl(true); } private HttpSessionEvent createSessionEvent(String id, boolean serializable, long lastAccess) { return new HttpSessionEvent(new SessionTestImpl(id, serializable, lastAccess)); } private HttpSessionEvent createSessionEvent() { return new HttpSessionEvent(createSession()); } private void clearSessions() { sessionListener.contextDestroyed(null); } /** Test. */ @Before public void setUp() { Utils.initialize(); try { final Field field = SessionListener.class.getDeclaredField("instanceCreated"); field.setAccessible(true); field.set(null, false); } catch (final IllegalAccessException e) { throw new IllegalStateException(e); } catch (final NoSuchFieldException e) { throw new IllegalStateException(e); } sessionListener = new SessionListener(); clearSessions(); } /** Test. */ @Test public void testGetSessionCount() { sessionListener.sessionCreated(createSessionEvent()); if (SessionListener.getSessionCount() != 1) { fail("getSessionCount"); } } /** Test. */ @Test public void testGetSessionAgeSum() { sessionListener.sessionCreated(createSessionEvent()); if (SessionListener.getSessionAgeSum() < 0) { fail("getSessionAgeSum"); } } /** Test. */ @Test public void testInvalidateAllSessions() { final SessionTestImpl session = new SessionTestImpl(true); sessionListener.sessionCreated(new HttpSessionEvent(session)); SessionListener.invalidateAllSessions(); if (!session.isInvalidated()) { fail("invalidateAllSessions"); } } /** Test. */ @Test public void testInvalidateSession() { final SessionTestImpl session = new SessionTestImpl(true); sessionListener.sessionCreated(new HttpSessionEvent(session)); SessionListener.invalidateSession(session.getId()); if (!session.isInvalidated()) { fail("invalidateAllSessions"); } } /** Test. */ @Test public void testGetAllSessionsInformations() { final long now = System.currentTimeMillis(); sessionListener.sessionCreated(createSessionEvent("1", true, now)); sessionListener.sessionCreated(createSessionEvent("2", true, now + 2)); sessionListener.sessionCreated(createSessionEvent("3", true, now)); sessionListener.sessionCreated(createSessionEvent("4", true, now - 2)); sessionListener.sessionCreated(createSessionEvent("5", true, now)); if (SessionListener.getAllSessionsInformations().size() != 5) { fail("getAllSessions"); } } /** Test. */ @Test public void testGetSessionInformationsBySessionId() { final HttpSessionEvent sessionEvent = createSessionEvent(); sessionListener.sessionCreated(sessionEvent); final SessionInformations sessionInformations = SessionListener .getSessionInformationsBySessionId(sessionEvent.getSession().getId()); assertEquals("getSessionInformationsBySessionId", sessionEvent.getSession().getId(), sessionInformations.getId()); assertNull("getSessionInformationsBySessionId", SessionListener.getSessionInformationsBySessionId("n'importe quoi")); } /** Test. */ @Test public void testContextInitialized() { ServletContext servletContext = createNiceMock(ServletContext.class); expect(servletContext.getServerInfo()).andReturn("Mock").anyTimes(); expect(servletContext.getMajorVersion()).andReturn(2).anyTimes(); expect(servletContext.getMinorVersion()).andReturn(5).anyTimes(); ServletContextEvent servletContextEvent = new ServletContextEvent(servletContext); replay(servletContext); sessionListener.contextInitialized(servletContextEvent); sessionListener.contextDestroyed(servletContextEvent); verify(servletContext); Utils.setProperty(Parameter.NO_DATABASE, "true"); servletContext = createNiceMock(ServletContext.class); expect(servletContext.getServerInfo()).andReturn("Mock").anyTimes(); expect(servletContext.getMajorVersion()).andReturn(2).anyTimes(); expect(servletContext.getMinorVersion()).andReturn(5).anyTimes(); servletContextEvent = new ServletContextEvent(servletContext); replay(servletContext); sessionListener.contextInitialized(servletContextEvent); sessionListener.contextDestroyed(servletContextEvent); verify(servletContext); } /** Test. */ @Test public void testContextDestroyed() { sessionListener.sessionCreated(createSessionEvent()); sessionListener.contextDestroyed(null); if (!SessionListener.getAllSessionsInformations().isEmpty()) { fail("contextDestroyed"); } if (SessionListener.getSessionCount() != 0) { fail("contextDestroyed"); } } /** Test. */ @Test public void testSessionCreated() { final HttpSessionEvent sessionEvent = createSessionEvent(); sessionListener.sessionCreated(sessionEvent); if (SessionListener.getSessionCount() != 1) { fail("sessionCreated"); } if (SessionListener.getAllSessionsInformations().isEmpty()) { fail("sessionCreated"); } sessionListener.sessionCreated(sessionEvent); if (SessionListener.getSessionCount() != 1) { fail("sessionCreated"); } } /** Test. */ @Test public void testSessionDestroyed() { sessionListener.sessionCreated(createSessionEvent()); sessionListener.sessionDestroyed(createSessionEvent()); if (SessionListener.getSessionCount() != 0) { fail("sessionDestroyed"); } if (!SessionListener.getAllSessionsInformations().isEmpty()) { fail("sessionDestroyed"); } } /** Test. */ @Test public void testSessionDidActivate() { sessionListener.sessionDidActivate(createSessionEvent()); if (SessionListener.getSessionCount() != 1) { fail("sessionDidActivate"); } if (SessionListener.getAllSessionsInformations().isEmpty()) { fail("sessionDidActivate"); } } /** Test. */ @Test public void testSessionWillPassivate() { sessionListener.sessionDidActivate(createSessionEvent()); sessionListener.sessionWillPassivate(createSessionEvent()); if (SessionListener.getSessionCount() != 0) { fail("sessionWillPassivate"); } if (!SessionListener.getAllSessionsInformations().isEmpty()) { fail("sessionWillPassivate"); } } /** Test. */ @Test public void testWithInstanceDisabled() { final SessionListener sessionListener1 = new SessionListener(); final SessionListener sessionListener2 = new SessionListener(); final ServletContext servletContext = createNiceMock(ServletContext.class); final ServletContextEvent servletContextEvent = new ServletContextEvent(servletContext); expect(servletContext.getContextPath()).andReturn("/test").anyTimes(); expect(servletContext.getServerInfo()).andReturn("Glassfish").anyTimes(); expect(servletContext.getMajorVersion()).andReturn(2).anyTimes(); expect(servletContext.getMinorVersion()).andReturn(5).anyTimes(); replay(servletContext); sessionListener1.contextInitialized(servletContextEvent); sessionListener2.contextInitialized(servletContextEvent); sessionListener2.sessionCreated(null); sessionListener2.sessionWillPassivate(null); sessionListener2.sessionDidActivate(null); sessionListener2.sessionDestroyed(null); sessionListener2.contextDestroyed(servletContextEvent); verify(servletContext); } /** Test. */ @Test public void registerSessionIfNeeded() { final HttpSession session = createSession(); sessionListener.registerSessionIfNeeded(session); sessionListener.registerSessionIfNeeded(session); sessionListener.registerSessionIfNeeded(null); sessionListener.unregisterInvalidatedSessions(); sessionListener.unregisterSessionIfNeeded(session); sessionListener.unregisterSessionIfNeeded(session); sessionListener.unregisterSessionIfNeeded(null); } /** Test. */ @Test public void testToString() { final String string = sessionListener.toString(); assertNotNull("toString not null", string); assertFalse("toString not empty", string.isEmpty()); } }