1 package org.opendaylight.controller.clustersession;
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.fail;
6 import java.io.BufferedInputStream;
7 import java.io.BufferedOutputStream;
9 import java.io.FileInputStream;
10 import java.io.FileOutputStream;
11 import java.io.IOException;
12 import java.io.InputStream;
13 import java.io.ObjectInput;
14 import java.io.ObjectInputStream;
15 import java.io.ObjectOutput;
16 import java.io.ObjectOutputStream;
17 import java.io.OutputStream;
18 import java.util.ArrayList;
19 import java.util.List;
20 import java.util.Locale;
22 import org.apache.catalina.authenticator.Constants;
23 import org.apache.catalina.authenticator.SavedRequest;
24 import org.apache.catalina.realm.GenericPrincipal;
25 import org.junit.Test;
26 import org.opendaylight.controller.clustersession.impl.ClusterSessionServiceImpl;
27 import org.opendaylight.controller.clustersession.service.ClusterSessionService;
30 public class ClusterSessionUtilTest {
32 final String AUTH_TYPE = "FORM";
33 final String ADMIN = "admin";
34 final String REQUEST_URI = "/test";
35 final String BLANK = "";
36 final String HEADER_NAME = "ContentType";
37 final String HEADER_VALUE = "JSON";
38 final long creationTime = 54545454L;
39 final int interval = 0;
40 ClusterSessionManager manager = new ClusterSessionManager();
41 ClusterSessionService sessionService = new ClusterSessionServiceImpl(manager);
44 public void testNullSerializableClusterSession() {
45 ClusterSessionData sessionData = ClusterSessionUtil.getSerializableSession(null);
46 assertEquals("Session data should be null for null session", null, sessionData);
50 public void testSerializableClusterSession() {
51 ClusterSession customSession = createClusterSesion();
52 ClusterSessionData sessionData = ClusterSessionUtil.getSerializableSession(customSession);
53 assertEquals("Session authentication type not valid", AUTH_TYPE, sessionData.getAuthType());
54 assertEquals("Session username does not match", ADMIN, sessionData.getUserName());
55 assertEquals("Session password does not match", ADMIN, sessionData.getPassword());
56 assertEquals("Session prinicpal does not match", ADMIN, sessionData.getSession().getPrincipal().getName());
60 public void testNullDeserialzableclusterSession() {
61 ClusterSession session = ClusterSessionUtil.getDeserializedSession(null, sessionService, manager);
62 assertEquals("Session should be null for null session data", null, session);
66 public void testDeserializableClusterSesion() {
67 ClusterSession customSession = createClusterSesion();
68 ClusterSessionData sessionData = ClusterSessionUtil.getSerializableSession(customSession);
69 customSession = sessionData.getSession();
70 customSession.setAuthType(AUTH_TYPE);
71 customSession.setNote(Constants.FORM_PRINCIPAL_NOTE, BLANK);
72 customSession.setNote(Constants.FORM_REQUEST_NOTE, BLANK);
73 ClusterSession session = ClusterSessionUtil.getDeserializedSession(sessionData, sessionService, manager);
74 assertEquals("Session authentication type not valid", AUTH_TYPE, session.getAuthType());
75 assertEquals("prinicpal name is not valid", ADMIN, session.getPrincipal().getName());
76 SavedRequest savedRequest = (SavedRequest)session.getNote(Constants.FORM_REQUEST_NOTE);
77 assertEquals("saved request uri does not match", REQUEST_URI, savedRequest.getRequestURI());
78 assertEquals("saved request header does not match", HEADER_VALUE, savedRequest.getHeaderValues(HEADER_NAME).next());
79 assertEquals("saved request header does not match", Locale.ENGLISH, savedRequest.getLocales().next());
80 String username = (String)session.getNote(Constants.FORM_USERNAME);
81 assertEquals("username does not match", ADMIN, username);
82 String password = (String)session.getNote(Constants.FORM_PASSWORD);
83 assertEquals("password does not match", ADMIN, password);
84 assertEquals("session manager does not match", manager, session.getManager());
85 assertEquals("session creation time does not match", creationTime, session.getCreationTime());
86 assertEquals("session man inactive interval does not match", interval, session.getMaxInactiveInterval());
87 assertEquals("is session new does not match", true, session.isNew());
88 assertEquals("is session valid does not match", true, session.isValid());
92 public void testSerializationtoFile(){
93 ClusterSession customSession = createClusterSesion();
94 ClusterSessionData sessionData = ClusterSessionUtil.getSerializableSession(customSession);
96 OutputStream file = new FileOutputStream("sessionData.ser");
97 OutputStream buffer = new BufferedOutputStream(file);
98 ObjectOutput output = new ObjectOutputStream(buffer);
100 output.writeObject(sessionData);
102 catch(IOException ex){
103 fail("IO exception while serializing object to a file.");
106 InputStream file = new FileInputStream("sessionData.ser");
107 InputStream buffer = new BufferedInputStream(file);
108 ObjectInput input = new ObjectInputStream (buffer);
110 //deserialize the session
111 ClusterSessionData recovedSession = (ClusterSessionData)input.readObject();
113 ClusterSession session = ClusterSessionUtil.getDeserializedSession(recovedSession, sessionService, manager);
114 assertEquals("Session authentication type not valid", AUTH_TYPE, session.getAuthType());
115 assertEquals("prinicpal name is not valid", ADMIN, session.getPrincipal().getName());
116 SavedRequest savedRequest = (SavedRequest)session.getNote(Constants.FORM_REQUEST_NOTE);
117 assertEquals("saved request uri is not valid", REQUEST_URI, savedRequest.getRequestURI());
118 assertEquals("saved request header does not match", HEADER_VALUE, savedRequest.getHeaderValues(HEADER_NAME).next());
119 assertEquals("saved request header does not match", Locale.ENGLISH, savedRequest.getLocales().next());
120 String username = (String)session.getNote(Constants.FORM_USERNAME);
121 assertEquals("username does not match", ADMIN, username);
122 String password = (String)session.getNote(Constants.FORM_PASSWORD);
123 assertEquals("password does not match", ADMIN, password);
125 catch(ClassNotFoundException ex){
126 fail("Exception in object deserialization from file");
128 catch(IOException ex){
129 fail("Exception in object deserialization from file");
131 File serializedFile = new File("sessionData.ser");
132 serializedFile.delete();
135 private ClusterSession createClusterSesion(){
136 ClusterSession clusterSession = new ClusterSession(manager, sessionService);
137 clusterSession.setAuthType(AUTH_TYPE);
138 clusterSession.setCreationTime(creationTime);
139 clusterSession.setMaxInactiveInterval(interval);
140 clusterSession.setNew(true);
141 clusterSession.setValid(true);
142 List<String> roles = new ArrayList<String>();
144 GenericPrincipal principal = new GenericPrincipal(ADMIN, ADMIN, roles);
145 clusterSession.setPrincipal(principal);
146 clusterSession.setNote(Constants.FORM_PRINCIPAL_NOTE, principal);
147 SavedRequest savedRequest = new SavedRequest();
148 savedRequest.setRequestURI(REQUEST_URI);
149 savedRequest.addHeader(HEADER_NAME, HEADER_VALUE);
150 savedRequest.addLocale(Locale.ENGLISH);
151 clusterSession.setNote(Constants.FORM_REQUEST_NOTE, savedRequest);
152 clusterSession.setNote(Constants.FORM_USERNAME, ADMIN);
153 clusterSession.setNote(Constants.FORM_PASSWORD, ADMIN);
154 return clusterSession;