1 package org.opendaylight.controller.clustersession;
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertNotNull;
5 import static org.junit.Assert.assertNull;
6 import static org.mockito.Mockito.mock;
7 import static org.mockito.Mockito.when;
9 import java.util.HashMap;
11 import java.util.concurrent.ConcurrentHashMap;
12 import java.util.concurrent.ConcurrentMap;
14 import org.apache.catalina.Context;
15 import org.apache.catalina.Session;
16 import org.apache.catalina.util.SessionIdGenerator;
17 import org.junit.AfterClass;
18 import org.junit.BeforeClass;
19 import org.junit.Test;
20 import org.junit.runner.RunWith;
21 import org.opendaylight.controller.clustering.services.IClusterGlobalServices;
22 import org.opendaylight.controller.clustersession.impl.ClusterSessionServiceImpl;
23 import org.osgi.framework.Bundle;
24 import org.osgi.framework.BundleContext;
25 import org.osgi.framework.FrameworkUtil;
26 import org.osgi.framework.ServiceReference;
27 import org.powermock.api.mockito.PowerMockito;
28 import org.powermock.core.classloader.annotations.PrepareForTest;
29 import org.powermock.modules.junit4.PowerMockRunner;
31 @RunWith(PowerMockRunner.class)
32 @PrepareForTest({FrameworkUtil.class})
33 public class ClusterSessionServiceImplTest {
34 static ClusterSessionManager manager = null;
35 static ClusterSessionServiceImpl sessionService = null;
36 private static final String SESSION_CACHE = "customSessionManager.sessionData";
37 static ConcurrentMap<String, ClusterSessionData> sessions = new ConcurrentHashMap<String, ClusterSessionData>();
38 private String sessionId = "1234567";
39 final String AUTH_TYPE = "FORM";
40 final String ATTRIBUTE_NAME = "AuthType";
42 @SuppressWarnings("unchecked")
44 public static void init(){
45 Bundle bundle = mock(Bundle.class);
46 BundleContext context = mock(BundleContext.class);
47 IClusterGlobalServices clusterGlobalService = mock(IClusterGlobalServices.class);
48 ServiceReference<IClusterGlobalServices> serviceReference = mock(ServiceReference.class);
49 PowerMockito.mockStatic(FrameworkUtil.class);
50 when(FrameworkUtil.getBundle(ClusterSessionManager.class)).thenReturn(bundle);
51 when(bundle.getBundleContext()).thenReturn(context);
52 when(context.getService(serviceReference)).thenReturn(clusterGlobalService);
53 when((ConcurrentMap<String, ClusterSessionData>)clusterGlobalService.getCache(SESSION_CACHE)).thenReturn(sessions);
54 Context containerContext = mock(Context.class);
55 manager = new ClusterSessionManager();
56 sessionService = (ClusterSessionServiceImpl) manager.getSessionService();
57 manager.setContainer(containerContext);
58 sessionService.startInternal(new SessionIdGenerator());
59 sessionService.addingService(serviceReference);
63 public void testCreateEmptySession(){
64 Session session = sessionService.createEmptySession();
65 assertEquals("session manager does not match", manager, session.getManager());
69 public void testCreateSessionwithRandomId(){
70 Session session = sessionService.createSession(null);
71 assertEquals("Session should be valid", true, session.isValid());
72 sessionService.removeSession(session.getId());
76 public void testCreateSession(){
77 Session session = sessionService.createSession(sessionId);
78 assertEquals("Session should be valid", true, session.isValid());
79 assertEquals("Session id does not match", sessionId, session.getId());
80 sessionService.removeSession(sessionId);
84 public void testNullfindSession() {
85 Session session = sessionService.findSession(null);
86 assertNull("Session should be null", session);
90 public void testSessionCRUD(){
91 Session foundSession = sessionService.findSession(sessionId);
92 assertNull("Session should not exist here", foundSession);
93 Session session = sessionService.createSession(sessionId);
94 foundSession = sessionService.findSession(sessionId);
95 assertEquals("Session was not added", sessionId, foundSession.getId());
96 session.setAuthType(AUTH_TYPE);
97 sessionService.updateSession((ClusterSession)session);
98 foundSession = sessionService.findSession(sessionId);
99 assertEquals("Session was not found, id does not match", sessionId, foundSession.getId());
100 assertEquals("Session was not found, auth type does match", AUTH_TYPE, foundSession.getAuthType());
101 sessionService.removeSession(sessionId);
102 foundSession = sessionService.findSession(sessionId);
103 assertEquals("Session was not removed", null, foundSession);
107 public void testExpireSession(){
108 Session session = sessionService.createSession(sessionId);
109 session.setAuthType(AUTH_TYPE);
110 sessionService.addSession((ClusterSession)session);
111 Session foundSession = sessionService.findSession(sessionId);
112 assertEquals("Session was not found", sessionId, foundSession.getId());
113 sessionService.expireSession(sessionId);
114 foundSession = sessionService.findSession(sessionId);
115 assertEquals("Session was not expired", null, foundSession);
119 public void testFindSessions(){
120 Session session = sessionService.createSession(sessionId);
121 session.setAuthType(AUTH_TYPE);
122 sessionService.addSession((ClusterSession)session);
123 Session[] sessions = sessionService.findSessions();
124 assertEquals("Session array size does not match", 1, sessions.length);
125 assertEquals("Session array size does not match", sessionId, sessions[0].getId());
126 sessionService.removeSession(sessionId);
130 public void testGetSession(){
131 ClusterSession session = (ClusterSession) sessionService.createSession(sessionId);
132 session.setAttribute(ATTRIBUTE_NAME, AUTH_TYPE);
133 HashMap<String, String> sessionAttributes = sessionService.getSession(sessionId);
134 assertNotNull("Session attribute should not be null", sessionAttributes);
135 assertEquals("Session attribute size does not match", 1, sessionAttributes.size());
136 assertEquals("Session attribute size does not match", AUTH_TYPE, sessionAttributes.get(ATTRIBUTE_NAME));
137 sessionService.removeSession(sessionId);
141 public void testNullSessionCache(){
142 ClusterSessionManager clustermanager = new ClusterSessionManager();
143 ClusterSessionServiceImpl service = new ClusterSessionServiceImpl(clustermanager);
144 Session session = service.findSession(sessionId);
145 assertNull("Session should be null, as cache is null", session);
146 Session[] sessions = service.findSessions();
147 assertEquals("Session array should be empty", 0, sessions.length);
148 service.removeSession(sessionId);
149 service.expireSession(sessionId);
150 session = service.createSession(sessionId);
151 assertNull("Session should be null, as cache is null", session);
152 service.addSession(null);
153 Map<String,String> attributes = service.getSession(sessionId);
154 assertNull("Attributes should be null, as cache is null", attributes);
155 service.updateSession(null);
159 public static void cleanup(){
160 sessionService.stopInternal();