Merge "Bug-780: potential lock release being missed if error code path happens in...
[controller.git] / opendaylight / samples / clustersession / src / test / java / org / opendaylight / controller / clustersession / ClusterSessionUtilTest.java
1 package org.opendaylight.controller.clustersession;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.fail;
5
6 import java.io.BufferedInputStream;
7 import java.io.BufferedOutputStream;
8 import java.io.File;
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;
21
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;
28
29
30 public class ClusterSessionUtilTest {
31
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);
42
43   @Test
44   public void testNullSerializableClusterSession() {
45     ClusterSessionData sessionData = ClusterSessionUtil.getSerializableSession(null);
46     assertEquals("Session data should be null for null session", null, sessionData);
47   }
48
49   @Test
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());
57   }
58
59   @Test
60   public void testNullDeserialzableclusterSession() {
61     ClusterSession session =  ClusterSessionUtil.getDeserializedSession(null, sessionService, manager);
62     assertEquals("Session should be null for null session data", null, session);
63   }
64
65   @Test
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());
89   }
90
91   @Test
92   public void testSerializationtoFile(){
93     ClusterSession customSession = createClusterSesion();
94     ClusterSessionData sessionData = ClusterSessionUtil.getSerializableSession(customSession);
95     try(
96         OutputStream file = new FileOutputStream("sessionData.ser");
97         OutputStream buffer = new BufferedOutputStream(file);
98         ObjectOutput output = new ObjectOutputStream(buffer);
99         ){
100       output.writeObject(sessionData);
101     }
102     catch(IOException ex){
103       fail("IO exception while serializing object to a file.");
104     }
105     try(
106         InputStream file = new FileInputStream("sessionData.ser");
107         InputStream buffer = new BufferedInputStream(file);
108         ObjectInput input = new ObjectInputStream (buffer);
109         ){
110       //deserialize the session
111       ClusterSessionData recovedSession = (ClusterSessionData)input.readObject();
112       //display its data
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);
124     }
125     catch(ClassNotFoundException ex){
126       fail("Exception in object deserialization from file");
127     }
128     catch(IOException ex){
129       fail("Exception in object deserialization from file");
130     }
131     File serializedFile = new File("sessionData.ser");
132     serializedFile.delete();
133   }
134
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>();
143     roles.add(ADMIN);
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;
155   }
156 }