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;
30 * Unit Tests for UserManagerImpl
32 public class UserManagerImplTest {
34 private static UserManagerImpl um;
37 * @throws java.lang.Exception
40 public static void setUpBeforeClass() throws Exception {
42 IUserManager userManager = (IUserManager) ServiceHelper
43 .getGlobalInstance(IUserManager.class, new Object());
44 if (userManager instanceof UserManagerImpl) {
45 um = (UserManagerImpl) userManager;
47 um = new UserManagerImpl();
48 um.setAuthProviders(new ConcurrentHashMap<String, IAAAProvider>());
50 // mock up a remote server list with a dummy server
51 um.setRemoteServerConfigList(new ConcurrentHashMap<String, ServerConfig>() {
52 static final long serialVersionUID = 1L;
54 put("dummyServerConfig", new ServerConfig() {
55 // Server config can't be empty
56 static final long serialVersionUID = 8645L;
59 public String getAddress() {
64 public String getSecret() {
69 public String getProtocol() {
76 // mock up a localUserConfigList with an admin user
77 um.setLocalUserConfigList(new ConcurrentHashMap<String, UserConfig>() {
78 static final long serialVersionUID = 2L;
80 List<String> roles = new ArrayList<String>(1);
81 roles.add(UserLevel.SYSTEMADMIN.toString());
82 put("admin", new UserConfig("admin",
83 "7029,7455,8165,7029,7881", roles));
87 um.setAuthorizationConfList(new ConcurrentHashMap<String, AuthorizationConfig>() {
88 static final long serialVersionUID = 2L;
90 List<String> roles = new ArrayList<String>(3);
91 roles.add(UserLevel.NETWORKOPERATOR.toString());
92 roles.add("Container1-Admin");
93 roles.add("Application2-User");
95 put("Andrew", new AuthorizationConfig("Andrew", roles));
98 // instantiate an empty activeUser collection
99 um.setActiveUsers(new ConcurrentHashMap<String, AuthenticatedUser>());
105 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#addAAAProvider(org.opendaylight.controller.usermanager.IAAAProvider)}
109 public void testAddAAAProvider() {
110 // instantiate an anonymous AAAProvider
111 IAAAProvider a3p = new IAAAProvider() {
114 public AuthResponse authService(String userName, String password,
115 String server, String secretKey) {
116 return new AuthResponse();
120 public String getName() {
121 return "dummyAAAProvider";
125 um.addAAAProvider(a3p);
126 assertEquals(a3p, um.getAAAProvider("dummyAAAProvider"));
132 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#removeAAAProvider(org.opendaylight.controller.usermanager.IAAAProvider)}
134 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#getAAAProvider(java.lang.String)}
138 public void testRemoveAAAProvider() {
139 um.removeAAAProvider(um.getAAAProvider("dummyAAAProvider"));
140 assertTrue(um.getAAAProviderNames().isEmpty());
145 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#authenticate(java.lang.String, java.lang.String)}
149 public void testAuthenticateStringString() {
150 List<String> roles = new ArrayList<String>(1);
151 roles.add(UserLevel.SYSTEMADMIN.toString());
152 UserConfig uc = new UserConfig("administrator", "admin", roles);
154 AuthResultEnum authResult = um.authenticate("administrator", "admin");
155 assertEquals(authResult, AuthResultEnum.AUTH_ACCEPT_LOC);
160 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#addRemoveLocalUser(org.opendaylight.controller.usermanager.internal.UserConfig, boolean)}
164 public void testAddRemoveLocalUser() {
165 List<String> roles = new ArrayList<String>(1);
166 roles.add(UserLevel.SYSTEMADMIN.toString());
167 UserConfig uc = new UserConfig("sysadmin", "7029,7455,8165,7029,7881",
170 assertTrue(um.getLocalUserList().contains(uc));
171 um.removeLocalUser(uc);
172 assertFalse(um.getLocalUserList().contains(uc));
177 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#changeLocalUserPassword(java.lang.String, java.lang.String, java.lang.String)}
181 public void testChangeLocalUserPassword() {
182 // fail("Not yet implemented");
187 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#userLogout(java.lang.String)}
191 public void testUserLogout() {
192 // fail("Not yet implemented");
197 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#userTimedOut(java.lang.String)}
201 public void testUserTimedOut() {
202 // fail("Not yet implemented");
207 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#authenticate(org.springframework.security.core.Authentication)}
211 public void testAuthenticateAuthentication() {
212 // fail("Not yet implemented");
217 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#saveLocalUserList()}
221 public void testSaveLocalUserList() {
222 // fail("Not yet implemented");
227 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#saveAAAServerList()}
231 public void testSaveAAAServerList() {
232 // fail("Not yet implemented");
237 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#saveAuthorizationList()}
241 public void testSaveAuthorizationList() {
242 // fail("Not yet implemented");
247 * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#readObject(java.io.ObjectInputStream)}
251 public void testReadObject() {
252 // fail("Not yet implemented");
256 public void testGetUserLevel() {
257 List<String> roles = new ArrayList<String>(2);
258 roles.add(UserLevel.SYSTEMADMIN.toString());
259 roles.add("App1_supervisor");
260 um.addLocalUser(new UserConfig("Jack", "password", roles));
261 um.authenticate("Jack", "password");
264 roles.add("App2Admin");
265 roles.add(UserLevel.NETWORKOPERATOR.toString());
266 um.addLocalUser(new UserConfig("John", "password", roles));
268 // Run the check on authenticated user
269 Assert.assertTrue(um.getUserLevel("Jack") == UserLevel.SYSTEMADMIN);
270 // Run the check on configured users
271 Assert.assertTrue(um.getUserLevel("John") == UserLevel.NETWORKOPERATOR);
272 // Run the check on local authorized users
273 Assert.assertTrue(um.getUserLevel("Andrew") == UserLevel.NETWORKOPERATOR);
274 // Non locally known user
275 Assert.assertTrue(um.getUserLevel("Tom") == UserLevel.NOUSER);