1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.kuali.mobility.shared.controllers;
16
17 import org.apache.log4j.Logger;
18 import org.junit.AfterClass;
19 import org.junit.Before;
20 import org.junit.BeforeClass;
21 import org.junit.Test;
22 import org.kuali.mobility.shared.Constants;
23 import org.kuali.mobility.shared.LoginService;
24 import org.kuali.mobility.shared.entity.MockUser;
25 import org.springframework.context.ApplicationContext;
26 import org.springframework.context.support.FileSystemXmlApplicationContext;
27 import org.springframework.mock.web.MockHttpServletRequest;
28 import org.springframework.mock.web.MockHttpServletResponse;
29 import org.springframework.mock.web.MockHttpSession;
30 import org.springframework.mock.web.MockServletContext;
31 import org.springframework.ui.ExtendedModelMap;
32 import org.springframework.ui.Model;
33 import org.springframework.validation.BindingResult;
34 import org.springframework.validation.MapBindingResult;
35
36 import java.security.MessageDigest;
37 import java.security.NoSuchAlgorithmException;
38 import java.util.HashMap;
39
40 import static org.junit.Assert.assertTrue;
41 import static org.junit.Assert.fail;
42
43
44
45
46 public class MockLoginControllerTest {
47 private static final Logger LOG = Logger.getLogger(MockLoginControllerTest.class);
48
49 private static ApplicationContext applicationContext;
50
51 private static MockServletContext servletContext;
52 private MockLoginController controller;
53
54 private static final String LOGIN_VIEW = "mocklogin";
55 private static final String REDIRECT_VIEW = "redirect:/home";
56 private static final String TEST_USER = "nurul";
57 private static final String EMPTY = "";
58 private static final String TEST_PASSWORD = "6968a2c57c3a4fee8fadc79a80355e4d";
59 private static final String INVALID = "1234567890";
60
61 private static String[] getConfigLocations() {
62 return new String[] { "classpath:/MockLoginControllerSpringBeans.xml" };
63 }
64
65 @BeforeClass
66 public static void setUpClass() throws Exception {
67 MockLoginControllerTest.setApplicationContext(new FileSystemXmlApplicationContext(getConfigLocations()));
68 servletContext = new MockServletContext();
69 }
70
71 @AfterClass
72 public static void tearDownClass() throws Exception {
73 }
74
75 @Before
76 public void preTest() {
77 this.setController((MockLoginController) getApplicationContext().getBean("loginController"));
78 }
79
80 @Test
81 public void testMockLoginNoUser() {
82 MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
83 MockHttpServletResponse response = new MockHttpServletResponse();
84 Model uiModel = new ExtendedModelMap();
85
86 String viewName = getController().mockLogin(request,response,uiModel);
87
88 assertTrue("View name is incorrect.", LOGIN_VIEW.equals(viewName));
89 }
90
91 @Test
92 public void testMockLoginWithUser() {
93 MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
94 MockHttpServletResponse response = new MockHttpServletResponse();
95 Model uiModel = new ExtendedModelMap();
96
97 MockUser user = (MockUser)getApplicationContext().getBean("user");
98 user.setUserId(TEST_USER);
99 user.setPassword(TEST_PASSWORD);
100
101 MockHttpSession session = new MockHttpSession();
102 session.setAttribute(Constants.KME_MOCK_USER_KEY,user);
103
104 request.setSession(session);
105
106 String viewName = getController().mockLogin(request,response,uiModel);
107
108 assertTrue("View name is incorrect.", LOGIN_VIEW.equals(viewName));
109 }
110
111 @Test
112 public void testSubmitWithValidUser() {
113 MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
114 MockHttpServletResponse response = new MockHttpServletResponse();
115 Model uiModel = new ExtendedModelMap();
116
117 MockUser user = (MockUser)getApplicationContext().getBean("user");
118 user.setUserId(TEST_USER);
119 user.setPassword(TEST_PASSWORD);
120
121 MockHttpSession session = new MockHttpSession();
122 session.setAttribute(Constants.KME_MOCK_USER_KEY,user);
123
124 request.setSession(session);
125
126 BindingResult result = new MapBindingResult(new HashMap<String,String>(),new String());
127
128 String viewName;
129 try {
130 viewName = getController().submit(request, response, uiModel, user, result );
131 } catch( NullPointerException npe ) {
132 LOG.error(npe.getLocalizedMessage(),npe);
133 viewName = null;
134 }
135 assertTrue("View name is incorrect.", REDIRECT_VIEW.equals(viewName));
136 }
137
138 @Test
139 public void testSubmitWithInvalidPassword() {
140 MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
141 MockHttpServletResponse response = new MockHttpServletResponse();
142 Model uiModel = new ExtendedModelMap();
143
144 MockUser user = (MockUser)getApplicationContext().getBean("user");
145 user.setUserId(TEST_USER);
146 user.setPassword(INVALID);
147
148 MockHttpSession session = new MockHttpSession();
149 session.setAttribute(Constants.KME_MOCK_USER_KEY,user);
150
151 request.setSession(session);
152
153 BindingResult result = new MapBindingResult(new HashMap<String,String>(),new String());
154
155 String viewName;
156 try {
157 viewName = getController().submit(request, response, uiModel, user, result );
158 } catch( NullPointerException npe ) {
159 LOG.error(npe.getLocalizedMessage(),npe);
160 viewName = null;
161 }
162 assertTrue("View name is incorrect.", LOGIN_VIEW.equals(viewName));
163 }
164
165 @Test
166 public void testSubmitWithNullPassword() {
167 MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
168 MockHttpServletResponse response = new MockHttpServletResponse();
169 Model uiModel = new ExtendedModelMap();
170
171 MockUser user = (MockUser)getApplicationContext().getBean("user");
172 user.setUserId(TEST_USER);
173
174 MockHttpSession session = new MockHttpSession();
175 session.setAttribute(Constants.KME_MOCK_USER_KEY,user);
176
177 request.setSession(session);
178
179 BindingResult result = new MapBindingResult(new HashMap<String,String>(),new String());
180
181 String viewName;
182 try {
183 viewName = getController().submit(request, response, uiModel, user, result );
184 } catch( NullPointerException npe ) {
185 LOG.error(npe.getLocalizedMessage(),npe);
186 viewName = null;
187 }
188 assertTrue("View name is incorrect.", LOGIN_VIEW.equals(viewName));
189 }
190
191 @Test
192 public void testSubmitWithEmptyPassword() {
193 MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
194 MockHttpServletResponse response = new MockHttpServletResponse();
195 Model uiModel = new ExtendedModelMap();
196
197 MockUser user = (MockUser)getApplicationContext().getBean("user");
198 user.setUserId(TEST_USER);
199 user.setPassword(EMPTY);
200
201 MockHttpSession session = new MockHttpSession();
202 session.setAttribute(Constants.KME_MOCK_USER_KEY,user);
203
204 request.setSession(session);
205
206 BindingResult result = new MapBindingResult(new HashMap<String,String>(),new String());
207
208 String viewName;
209 try {
210 viewName = getController().submit(request, response, uiModel, user, result );
211 } catch( NullPointerException npe ) {
212 LOG.error(npe.getLocalizedMessage(),npe);
213 viewName = null;
214 }
215 assertTrue("View name is incorrect.", LOGIN_VIEW.equals(viewName));
216 }
217
218 @Test
219 public void testSubmitWithNullUserId() {
220 MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
221 MockHttpServletResponse response = new MockHttpServletResponse();
222 Model uiModel = new ExtendedModelMap();
223
224 MockUser user = (MockUser)getApplicationContext().getBean("user");
225 user.setUserId(null);
226 user.setPassword(TEST_PASSWORD);
227
228 MockHttpSession session = new MockHttpSession();
229 session.setAttribute(Constants.KME_MOCK_USER_KEY,user);
230
231 request.setSession(session);
232
233 BindingResult result = new MapBindingResult(new HashMap<String,String>(),new String());
234
235 String viewName;
236 try {
237 viewName = getController().submit(request, response, uiModel, user, result );
238 } catch( NullPointerException npe ) {
239 LOG.error(npe.getLocalizedMessage(),npe);
240 viewName = null;
241 }
242 assertTrue("View name is incorrect.", LOGIN_VIEW.equals(viewName));
243 }
244
245 @Test
246 public void testSubmitWithEmptyUserId() {
247 MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
248 MockHttpServletResponse response = new MockHttpServletResponse();
249 Model uiModel = new ExtendedModelMap();
250
251 MockUser user = (MockUser)getApplicationContext().getBean("user");
252 user.setUserId(EMPTY);
253 user.setPassword(TEST_PASSWORD);
254
255 MockHttpSession session = new MockHttpSession();
256 session.setAttribute(Constants.KME_MOCK_USER_KEY,user);
257
258 request.setSession(session);
259
260 BindingResult result = new MapBindingResult(new HashMap<String,String>(),new String());
261
262 String viewName;
263 try {
264 viewName = getController().submit(request, response, uiModel, user, result );
265 } catch( NullPointerException npe ) {
266 LOG.error(npe.getLocalizedMessage(),npe);
267 viewName = null;
268 }
269 assertTrue("View name is incorrect.", LOGIN_VIEW.equals(viewName));
270 }
271
272 @Test
273 public void testCalculateHash() {
274 String expected = "2a7ee8b03046524ae8b6fcdc88345fa5";
275 try {
276 String response = MockLoginController.calculateHash(MessageDigest.getInstance("MD5"),TEST_PASSWORD);
277 assertTrue("Expected "+expected+" and got "+response,expected.equals(response));
278 } catch( NoSuchAlgorithmException nsae ) {
279 LOG.error(nsae.getLocalizedMessage(),nsae);
280 fail("Class being tested threw an exception.");
281 } catch( Exception e ) {
282 LOG.error(e.getLocalizedMessage(),e);
283 fail("Class being tested threw an exception.");
284 }
285 }
286
287 @Test
288 public void testGetService() {
289 LoginService testService = getController().getLoginService();
290 assertTrue("Failed to find login service.",testService!=null && testService.equals((LoginService)getApplicationContext().getBean("loginService")));
291 }
292
293 public static ApplicationContext getApplicationContext() {
294 return applicationContext;
295 }
296
297 public static void setApplicationContext(ApplicationContext applicationContext) {
298 MockLoginControllerTest.applicationContext = applicationContext;
299 }
300
301 public MockLoginController getController() {
302 return controller;
303 }
304
305 public void setController(MockLoginController controller) {
306 this.controller = controller;
307 }
308 }