1
1
package de.ppi.psec.services;
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;
10
12
import java.security.Permission;
11
13
import java.util.ArrayList;
12
14
import java.util.HashMap;
13
15
import java.util.List;
16
17
import models.psec.PsecPermission;
17
18
import models.psec.PsecRole;
40
39
private static final String SESSION_KEY_REMEMBERED = "psecRem";
41
40
private static final String COOKIE_NAME = "psec_rememberMe";
43
Http.Cookies cookiesMock;
44
UserPersistanceService userPersistanceServiceMock = mock(UserPersistanceService.class);
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();
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>()));
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())).
91
when(userPersistanceServiceMock.findUserByLoginname(psecUser.getLoginname())).
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();
94
assertTrue(serviceStub.login("hugo", "secret", true, true));
101
assertTrue(service.login("hugo", "secret", true, true));
95
102
copyCookiesFromResponseToRequest();
96
assertTrue(serviceStub.canRemembered());
103
assertTrue(service.canRemembered());
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());
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);
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);
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);
129
138
final Cookie rememberMeCookie = getCookie(COOKIE_NAME);
134
143
initSessionRequestAndResponse();
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));
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);
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();
223
231
permissions.add(perm);
224
232
psecUser.addToRoles(role);
226
//TODO niels fix it psecUser.setPermissions(permissions);
228
serviceStub.addUser(psecUser);
229
assertTrue(serviceStub.login("hugo", "secret", true, true));
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);
236
when(userPersistanceServiceMock.findUserById(psecUser.getId())).
237
thenReturn(psecUser);
238
when(userPersistanceServiceMock.findUserByLoginname(psecUser.getLoginname())).
239
thenReturn(psecUser);
241
assertTrue(service.login("hugo", "secret", true, true));
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));
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();
260
private Request getRequest() {
261
return Context.current().request();
264
272
private Response getResponse() {
265
273
return Context.current().response();
268
private final class DummyRequest extends Request {
270
private final Map <String, String[]> headers = new HashMap <String, String[]>();
272
private Map <String, Cookie> cookieMap = new HashMap <String, Cookie>() ;
274
final Cookies cookies = new Cookies() {
277
public Cookie get(String name) {
278
return cookieMap.get(name);
283
public void addCookie(String name, Cookie cookie) {
284
cookieMap.put(name, cookie);
287
public void removeCookie(String name) {
288
cookieMap.remove(name);
293
public String uri() {
298
public Map <String, String[]> queryString() {
303
public String path() {
308
public String method() {
313
public String host() {
318
public Map <String, String[]> headers() {
323
public Cookies cookies() {
328
public RequestBody body() {
333
public List <Lang> acceptLanguages() {