~opensource21/permsec/psec2.0.x

« back to all changes in this revision

Viewing changes to psec/test/de/ppi/psec/services/AuthenticationServiceTest.java

  • Committer: niels
  • Date: 2012-05-26 18:01:51 UTC
  • Revision ID: opensource21@googlemail.com-20120526180151-1yn2ucehdty3ytdp
Switched complete to Mockito at Test.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
package de.ppi.psec.services;
2
2
 
 
3
import static org.fest.assertions.Assertions.assertThat;
3
4
import static org.junit.Assert.assertEquals;
4
5
import static org.junit.Assert.assertFalse;
5
6
import static org.junit.Assert.assertNotNull;
6
7
import static org.junit.Assert.assertNull;
7
8
import static org.junit.Assert.assertTrue;
8
 
import static org.fest.assertions.Assertions.*;
 
9
import static org.mockito.Mockito.mock;
 
10
import static org.mockito.Mockito.when;
9
11
 
10
12
import java.security.Permission;
11
13
import java.util.ArrayList;
12
14
import java.util.HashMap;
13
15
import java.util.List;
14
 
import java.util.Map;
15
16
 
16
17
import models.psec.PsecPermission;
17
18
import models.psec.PsecRole;
21
22
import org.junit.BeforeClass;
22
23
import org.junit.Test;
23
24
 
24
 
import play.i18n.Lang;
 
25
import play.mvc.Http;
25
26
import play.mvc.Http.Context;
26
27
import play.mvc.Http.Cookie;
27
 
import play.mvc.Http.Cookies;
28
28
import play.mvc.Http.Request;
29
 
import play.mvc.Http.RequestBody;
30
29
import play.mvc.Http.Response;
31
30
import play.mvc.Http.Session;
32
31
import de.ppi.psec.permissions.PsecBasicPermission;
40
39
    private static final String SESSION_KEY_REMEMBERED = "psecRem";
41
40
    private static final String COOKIE_NAME = "psec_rememberMe";
42
41
    
 
42
    Request requestMock; 
 
43
    Http.Cookies cookiesMock;
 
44
    UserPersistanceService userPersistanceServiceMock = mock(UserPersistanceService.class);
43
45
    
44
46
    @Before
45
47
    public void setUp() {
46
 
        service = new AuthenticationServiceImpl(10, "100d", "abcdefghijklmnopqrst", new UserPersistanceServiceEbean());
 
48
        service = new AuthenticationServiceImpl(10, "100d", "abcdefghijklmnopqrst", 
 
49
                userPersistanceServiceMock);
47
50
        initSessionRequestAndResponse();
48
51
    }
49
52
    
50
53
    private void initSessionRequestAndResponse() {
51
 
        final Request request = new DummyRequest();
52
 
        Context.current.set(new Context(request, new HashMap <String, String>(), 
 
54
        requestMock = mock(Request.class); 
 
55
        cookiesMock = mock(Http.Cookies.class);
 
56
        when(requestMock.cookies()).thenReturn(cookiesMock);
 
57
        Context.current.set(new Context(requestMock, new HashMap <String, String>(), 
53
58
                new HashMap <String, String>()));
54
59
        
55
60
    }
75
80
    @Test
76
81
    public void testCanRemembered() {
77
82
        boolean[] booleans = {true, false};
78
 
        AuthenticationServiceStub serviceStub = new AuthenticationServiceStub();
79
83
        final PsecUser psecUser = new PsecUser();
80
84
        psecUser.setId(Long.valueOf(1));
81
85
        psecUser.setLoginname("hugo");
82
86
        psecUser.setPassword("secret");
83
87
        psecUser.setLoginFailedCount(0);
84
88
        psecUser.setEnabled(true);
85
 
        serviceStub.addUser(psecUser);
 
89
        when(userPersistanceServiceMock.findUserById(psecUser.getId())).
 
90
                thenReturn(psecUser);
 
91
        when(userPersistanceServiceMock.findUserByLoginname(psecUser.getLoginname())).
 
92
                thenReturn(psecUser);
86
93
        for (boolean remember : booleans) {
87
94
            for (boolean js : booleans) {
88
 
                assertTrue(serviceStub.login("hugo", "secret", remember, js));
 
95
                assertTrue(service.login("hugo", "secret", remember, js));
89
96
                copyCookiesFromResponseToRequest();
90
 
                assertEquals(remember, serviceStub.canRemembered());
 
97
                assertEquals(remember, service.canRemembered());
91
98
                initSessionRequestAndResponse();
92
99
            }
93
100
        }
94
 
        assertTrue(serviceStub.login("hugo", "secret", true, true));
 
101
        assertTrue(service.login("hugo", "secret", true, true));
95
102
        copyCookiesFromResponseToRequest();
96
 
        assertTrue(serviceStub.canRemembered());
97
 
        serviceStub.logout();
 
103
        assertTrue(service.canRemembered());
 
104
        service.logout();
98
105
        assertNotNull(getDiscardedCookie(COOKIE_NAME));
99
 
        ((DummyRequest)getRequest()).removeCookie(COOKIE_NAME);
100
 
        assertFalse(serviceStub.canRemembered());
 
106
        when(cookiesMock.get(COOKIE_NAME)).thenReturn(null);
 
107
        assertFalse(service.canRemembered());
101
108
        
102
109
    }
103
110
 
104
111
    private void copyCookiesFromResponseToRequest() {
105
112
        final Iterable <Cookie> cookies = getResponse().cookies();
106
 
        DummyRequest request = (DummyRequest) getRequest();
107
113
        for (Cookie cookie : cookies) {
108
 
            request.addCookie(cookie.name(), cookie);
 
114
            when(cookiesMock.get(cookie.name())).thenReturn(cookie);
109
115
        }
110
116
    }
111
117
    
112
118
    @Test
113
119
    public void testLogin() {
114
120
        boolean[] booleans = {false, true};
115
 
        AuthenticationServiceStub serviceStub = new AuthenticationServiceStub();
116
121
        final PsecUser psecUser = new PsecUser();
117
122
        psecUser.setId(Long.valueOf(1));
118
123
        psecUser.setLoginname("hugo");
119
124
        psecUser.setPassword("secret");
120
125
        psecUser.setLoginFailedCount(0);
121
126
        psecUser.setEnabled(true);
122
 
        serviceStub.addUser(psecUser);
 
127
        when(userPersistanceServiceMock.findUserById(psecUser.getId())).
 
128
                thenReturn(psecUser);
 
129
        when(userPersistanceServiceMock.findUserByLoginname(psecUser.getLoginname())).
 
130
                thenReturn(psecUser);
 
131
 
123
132
        for (boolean remember : booleans) {
124
133
            for (boolean js : booleans) {
125
134
                assertNull(getCookie(COOKIE_NAME));
126
 
                assertTrue(serviceStub.login("hugo", "secret", remember, js));                
 
135
                assertTrue(service.login("hugo", "secret", remember, js));                
127
136
                assertEquals(remember, getCookie(COOKIE_NAME) != null);
128
137
                if  (remember) {                
129
138
                    final Cookie rememberMeCookie = getCookie(COOKIE_NAME);
134
143
                initSessionRequestAndResponse();
135
144
                //login failed
136
145
                //passwort wrong
137
 
                assertFalse(serviceStub.login("hugo", "secrets", remember, js));
 
146
                assertFalse(service.login("hugo", "secrets", remember, js));
138
147
                //loginname wrong
139
 
                assertFalse(serviceStub.login("hugos", "secret", remember, js));
 
148
                assertFalse(service.login("hugos", "secret", remember, js));
140
149
                //user disabled.
141
150
                psecUser.setEnabled(false);
142
 
                assertFalse(serviceStub.login("hugos", "secret", remember, js));
 
151
                assertFalse(service.login("hugos", "secret", remember, js));
143
152
                psecUser.setEnabled(true);
144
153
                
145
154
                //test failCount
146
155
                psecUser.setLoginFailedCount(10);
147
 
                assertTrue(serviceStub.login("hugo", "secret", remember, js));
 
156
                assertTrue(service.login("hugo", "secret", remember, js));
148
157
                assertEquals(0, psecUser.getLoginFailedCount());
149
158
                psecUser.setLoginFailedCount(10);
150
 
                assertFalse(serviceStub.login("hugo", "secrets", remember, js));
 
159
                assertFalse(service.login("hugo", "secrets", remember, js));
151
160
                assertEquals(11, psecUser.getLoginFailedCount());
152
 
                assertFalse(serviceStub.login("hugo", "secret", remember, js));
 
161
                assertFalse(service.login("hugo", "secret", remember, js));
153
162
                psecUser.setLoginFailedCount(0);
154
163
                initSessionRequestAndResponse();
155
164
            }
178
187
    }
179
188
    
180
189
    @Test
181
 
    public void testLogout() {
 
190
    public void testLogout() {        
182
191
        getSession().put(SESSION_KEY_USERID, "1");
183
192
        getResponse().setCookie(COOKIE_NAME, "A value");
184
193
        assertNotNull(getSession().get(SESSION_KEY_USERID));
186
195
        assertNotNull(cookie);        
187
196
        assertThat(cookie.maxAge()).isNotEqualTo(0);
188
197
        assertEquals("A value", cookie.value());
189
 
        ((DummyRequest)getRequest()).addCookie(COOKIE_NAME, cookie);
 
198
        when(cookiesMock.get(COOKIE_NAME)).thenReturn(cookie);       
190
199
        service.logout();
191
200
        assertNull(getSession().get(SESSION_KEY_USERID));
192
201
        assertNotNull(getDiscardedCookie(COOKIE_NAME));
195
204
    
196
205
    @Test
197
206
    public void testSessionValues() {
198
 
        AuthenticationServiceStub serviceStub = new AuthenticationServiceStub();
199
207
        final PsecUser psecUser = new PsecUser();
200
208
        psecUser.setId(Long.valueOf(1));
201
209
        psecUser.setLoginname("hugo");
223
231
            permissions.add(perm);
224
232
            psecUser.addToRoles(role);
225
233
        }
226
 
        //TODO niels fix it psecUser.setPermissions(permissions);
227
 
        
228
 
        serviceStub.addUser(psecUser);
229
 
        assertTrue(serviceStub.login("hugo", "secret", true, true));
230
 
        
231
 
        assertEquals(psecUser.getFirstname(), serviceStub.getFirstname());
232
 
        assertEquals(psecUser.getLastname(), serviceStub.getLastname());
233
 
        assertEquals(psecUser.getLoginname(), serviceStub.getLoginname());
234
 
        assertEquals(psecUser.getId().toString(), serviceStub.getUserid());
235
 
        final List<String> serviceRoleList = serviceStub.getRoles();
 
234
        psecUser.setPsecPermissions(permissions);
 
235
        
 
236
        when(userPersistanceServiceMock.findUserById(psecUser.getId())).
 
237
                thenReturn(psecUser);
 
238
        when(userPersistanceServiceMock.findUserByLoginname(psecUser.getLoginname())).
 
239
                thenReturn(psecUser);
 
240
 
 
241
        assertTrue(service.login("hugo", "secret", true, true));
 
242
        
 
243
        assertEquals(psecUser.getFirstname(), service.getFirstname());
 
244
        assertEquals(psecUser.getLastname(), service.getLastname());
 
245
        assertEquals(psecUser.getLoginname(), service.getLoginname());
 
246
        assertEquals(psecUser.getId().toString(), service.getUserid());
 
247
        final List<String> serviceRoleList = service.getRoles();
236
248
        assertEquals(roleNames.size(), serviceRoleList.size());
237
249
        for (int i = 0; i < roleNames.size(); i++) {
238
250
            assertEquals(roleNames.get(i), serviceRoleList.get(i));
239
251
        }
240
 
        final List<Permission> servicePermList = serviceStub.getPermissions();
 
252
        final List<Permission> servicePermList = service.getPermissions();
241
253
        assertEquals(permissions.size(), servicePermList.size());
242
254
        for (int i = 0; i < permissions.size(); i++) {
243
255
            assertEquals(permissions.get(i).convertToPermission(), servicePermList.get(i));
256
268
    private Session getSession() {
257
269
        return Context.current().session();
258
270
    }
259
 
    
260
 
    private Request getRequest() {
261
 
        return Context.current().request();
262
 
    }
263
 
    
 
271
       
264
272
    private Response getResponse() {
265
273
        return Context.current().response();
266
274
    }
267
 
 
268
 
    private final class DummyRequest extends Request {
269
 
        
270
 
        private final Map <String, String[]> headers = new HashMap <String, String[]>();
271
 
        
272
 
        private Map <String, Cookie> cookieMap = new HashMap <String, Cookie>() ; 
273
 
        
274
 
        final Cookies cookies = new Cookies() {
275
 
            
276
 
            @Override
277
 
            public Cookie get(String name) {
278
 
                return cookieMap.get(name);
279
 
            }
280
 
            
281
 
        };
282
 
        
283
 
        public void addCookie(String name, Cookie cookie) {
284
 
            cookieMap.put(name, cookie);
285
 
        }
286
 
        
287
 
        public void removeCookie(String name) {
288
 
            cookieMap.remove(name);
289
 
        }
290
 
        
291
 
        
292
 
        @Override
293
 
        public String uri() {
294
 
            return null;
295
 
        }
296
 
        
297
 
        @Override
298
 
        public Map <String, String[]> queryString() {
299
 
            return null;
300
 
        }
301
 
        
302
 
        @Override
303
 
        public String path() {
304
 
            return null;
305
 
        }
306
 
        
307
 
        @Override
308
 
        public String method() {
309
 
            return null;
310
 
        }
311
 
        
312
 
        @Override
313
 
        public String host() {
314
 
            return null;
315
 
        }
316
 
        
317
 
        @Override
318
 
        public Map <String, String[]> headers() {                
319
 
            return headers;
320
 
        }
321
 
        
322
 
        @Override
323
 
        public Cookies cookies() {
324
 
            return cookies;
325
 
        }
326
 
        
327
 
        @Override
328
 
        public RequestBody body() {
329
 
            return null;
330
 
        }
331
 
        
332
 
        @Override
333
 
        public List <Lang> acceptLanguages() {
334
 
            return null;
335
 
        }
336
 
    }
337
275
        
338
276
}