2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.controller.usermanager.internal;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertTrue;
15 import java.util.ArrayList;
16 import java.util.List;
17 import java.util.concurrent.ConcurrentHashMap;
19 import org.junit.Assert;
20 import org.junit.BeforeClass;
21 import org.junit.Test;
22 import org.opendaylight.controller.sal.authorization.AuthResultEnum;
23 import org.opendaylight.controller.sal.authorization.UserLevel;
24 import org.opendaylight.controller.sal.utils.ServiceHelper;
25 import org.opendaylight.controller.usermanager.AuthResponse;
26 import org.opendaylight.controller.usermanager.IAAAProvider;
27 import org.opendaylight.controller.usermanager.IUserManager;
28 import org.opendaylight.controller.usermanager.ServerConfig;
29 import org.opendaylight.controller.usermanager.UserConfig;
30 import org.opendaylight.controller.usermanager.AuthorizationConfig;
33 * Unit Tests for UserManagerImpl
35 public class UserManagerImplTest {
37 private static UserManagerImpl um;
40 * @throws java.lang.Exception
43 public static void setUpBeforeClass() throws Exception {
45 IUserManager userManager = (IUserManager) ServiceHelper
46 .getGlobalInstance(IUserManager.class, new Object());
47 if (userManager instanceof UserManagerImpl) {
48 um = (UserManagerImpl) userManager;
50 um = new UserManagerImpl();
51 um.setAuthProviders(new ConcurrentHashMap<String, IAAAProvider>());
53 // mock up a remote server list with a dummy server
54 um.setRemoteServerConfigList(new ConcurrentHashMap<String, ServerConfig>() {
55 static final long serialVersionUID = 1L;
57 put("dummyServerConfig", new ServerConfig() {
58 // Server config can't be empty
59 static final long serialVersionUID = 8645L;
62 public String getAddress() {
67 public String getSecret() {
72 public String getProtocol() {
79 // mock up a localUserConfigList with an admin user
80 um.setLocalUserConfigList(new ConcurrentHashMap<String, UserConfig>() {
81 static final long serialVersionUID = 2L;
83 List<String> roles = new ArrayList<String>(1);
84 roles.add(UserLevel.SYSTEMADMIN.toString());
85 put("admin", new UserConfig("admin",
86 "7029,7455,8165,7029,7881", roles));
90 um.setAuthorizationConfList(new ConcurrentHashMap<String, AuthorizationConfig>() {
91 static final long serialVersionUID = 2L;
93 List<String> roles = new ArrayList<String>(3);
94 roles.add(UserLevel.NETWORKOPERATOR.toString());
95 roles.add("Container1-Admin");
96 roles.add("Application2-User");
98 put("Andrew", new AuthorizationConfig("Andrew", roles));
101 // instantiate an empty activeUser collection
102 um.setActiveUsers(new ConcurrentHashMap<String, AuthenticatedUser>());
108 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#addAAAProvider(org.opendaylight.controller.usermanager.IAAAProvider)}
112 public void testAddAAAProvider() {
113 // instantiate an anonymous AAAProvider
114 IAAAProvider a3p = new IAAAProvider() {
117 public AuthResponse authService(String userName, String password,
118 String server, String secretKey) {
119 return new AuthResponse();
123 public String getName() {
124 return "dummyAAAProvider";
128 um.addAAAProvider(a3p);
129 assertEquals(a3p, um.getAAAProvider("dummyAAAProvider"));
135 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#removeAAAProvider(org.opendaylight.controller.usermanager.IAAAProvider)}
137 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#getAAAProvider(java.lang.String)}
141 public void testRemoveAAAProvider() {
142 um.removeAAAProvider(um.getAAAProvider("dummyAAAProvider"));
143 assertTrue(um.getAAAProviderNames().isEmpty());
148 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#authenticate(java.lang.String, java.lang.String)}
152 public void testAuthenticateStringString() {
153 List<String> roles = new ArrayList<String>(1);
154 roles.add(UserLevel.SYSTEMADMIN.toString());
155 UserConfig uc = new UserConfig("administrator", "admin", roles);
157 AuthResultEnum authResult = um.authenticate("administrator", "admin");
158 assertEquals(authResult, AuthResultEnum.AUTH_ACCEPT_LOC);
163 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#addRemoveLocalUser(org.opendaylight.controller.usermanager.org.opendaylight.controller.usermanager.internal.UserConfig, boolean)}
167 public void testAddRemoveLocalUser() {
168 List<String> roles = new ArrayList<String>(1);
169 roles.add(UserLevel.SYSTEMADMIN.toString());
170 UserConfig uc = new UserConfig("sysadmin", "7029,7455,8165,7029,7881",
173 assertTrue(um.getLocalUserList().contains(uc));
174 um.removeLocalUser(uc);
175 assertFalse(um.getLocalUserList().contains(uc));
180 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#changeLocalUserPassword(java.lang.String, java.lang.String, java.lang.String)}
184 public void testChangeLocalUserPassword() {
185 // fail("Not yet implemented");
190 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#userLogout(java.lang.String)}
194 public void testUserLogout() {
195 // fail("Not yet implemented");
200 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#userTimedOut(java.lang.String)}
204 public void testUserTimedOut() {
205 // fail("Not yet implemented");
210 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#authenticate(org.springframework.security.core.Authentication)}
214 public void testAuthenticateAuthentication() {
215 // fail("Not yet implemented");
220 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#saveLocalUserList()}
224 public void testSaveLocalUserList() {
225 // fail("Not yet implemented");
230 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#saveAAAServerList()}
234 public void testSaveAAAServerList() {
235 // fail("Not yet implemented");
240 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#saveAuthorizationList()}
244 public void testSaveAuthorizationList() {
245 // fail("Not yet implemented");
250 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#readObject(java.io.ObjectInputStream)}
254 public void testReadObject() {
255 // fail("Not yet implemented");
259 public void testGetUserLevel() {
260 List<String> roles = new ArrayList<String>(2);
261 roles.add(UserLevel.SYSTEMADMIN.toString());
262 roles.add("App1_supervisor");
263 um.addLocalUser(new UserConfig("Jack", "password", roles));
264 um.authenticate("Jack", "password");
267 roles.add("App2Admin");
268 roles.add(UserLevel.NETWORKOPERATOR.toString());
269 um.addLocalUser(new UserConfig("John", "password", roles));
271 // Run the check on authenticated user
272 Assert.assertTrue(um.getUserLevel("Jack") == UserLevel.SYSTEMADMIN);
273 // Run the check on configured users
274 Assert.assertTrue(um.getUserLevel("John") == UserLevel.NETWORKOPERATOR);
275 // Run the check on local authorized users
276 Assert.assertTrue(um.getUserLevel("Andrew") == UserLevel.NETWORKOPERATOR);
277 // Non locally known user
278 Assert.assertTrue(um.getUserLevel("Tom") == UserLevel.NOUSER);