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.AuthenticatedUser;
27 import org.opendaylight.controller.usermanager.IAAAProvider;
28 import org.opendaylight.controller.usermanager.IUserManager;
29 import org.opendaylight.controller.usermanager.ServerConfig;
30 import org.opendaylight.controller.usermanager.UserConfig;
31 import org.opendaylight.controller.usermanager.AuthorizationConfig;
34 * Unit Tests for UserManager
36 public class UserManagerImplTest {
38 private static UserManager um;
41 * @throws java.lang.Exception
44 public static void setUpBeforeClass() throws Exception {
46 IUserManager userManager = (IUserManager) ServiceHelper
47 .getGlobalInstance(IUserManager.class, new Object());
48 if (userManager instanceof UserManager) {
49 um = (UserManager) userManager;
51 um = new UserManager();
52 um.setAuthProviders(new ConcurrentHashMap<String, IAAAProvider>());
54 // mock up a remote server list with a dummy server
55 um.setRemoteServerConfigList(new ConcurrentHashMap<String, ServerConfig>() {
56 static final long serialVersionUID = 1L;
58 put("dummyServerConfig", new ServerConfig() {
59 // Server config can't be empty
60 static final long serialVersionUID = 8645L;
63 public String getAddress() {
68 public String getSecret() {
73 public String getProtocol() {
80 // mock up a localUserConfigList with an admin user
81 um.setLocalUserConfigList(new ConcurrentHashMap<String, UserConfig>() {
82 static final long serialVersionUID = 2L;
84 List<String> roles = new ArrayList<String>(1);
85 roles.add(UserLevel.SYSTEMADMIN.toString());
86 put("admin", new UserConfig("admin",
87 "7029,7455,8165,7029,7881", roles));
91 um.setAuthorizationConfList(new ConcurrentHashMap<String, AuthorizationConfig>() {
92 static final long serialVersionUID = 2L;
94 List<String> roles = new ArrayList<String>(3);
95 roles.add(UserLevel.NETWORKOPERATOR.toString());
96 roles.add("Container1-Admin");
97 roles.add("Application2-User");
99 put("Andrew", new AuthorizationConfig("Andrew", roles));
102 // instantiate an empty activeUser collection
103 um.setActiveUsers(new ConcurrentHashMap<String, AuthenticatedUser>());
107 private IAAAProvider getAnonymousAAAProvider(final String providerName) {
108 // instantiate an anonymous AAAProvider
109 return new IAAAProvider() {
112 public AuthResponse authService(String userName, String password,
113 String server, String secretKey) {
114 return new AuthResponse();
118 public String getName() {
126 * {@link org.opendaylight.controller.usermanager.internal.UserManager#addAAAProvider(org.opendaylight.controller.usermanager.IAAAProvider)}
128 * {@link org.opendaylight.controller.usermanager.internal.UserManager#removeAAAProvider(org.opendaylight.controller.usermanager.IAAAProvider)}
130 * {@link org.opendaylight.controller.usermanager.internal.UserManager#getAAAProvider(java.lang.String)}
133 public void testAddGetRemoveAAAProvider() {
134 final String providerName = "dummyAAAProvider";
135 IAAAProvider a3p = getAnonymousAAAProvider(providerName);
136 um.addAAAProvider(a3p);
137 assertEquals(a3p, um.getAAAProvider(providerName));
138 um.removeAAAProvider(um.getAAAProvider(providerName));
139 assertTrue(um.getAAAProviderNames().isEmpty());
144 * {@link org.opendaylight.controller.usermanager.internal.UserManager#authenticate(java.lang.String, java.lang.String)}
148 public void testAuthenticateStringString() {
149 List<String> roles = new ArrayList<String>(1);
150 roles.add(UserLevel.SYSTEMADMIN.toString());
151 UserConfig uc = new UserConfig("administrator", "admin", roles);
153 AuthResultEnum authResult = um.authenticate("administrator", "admin");
154 assertEquals(authResult, AuthResultEnum.AUTH_ACCEPT_LOC);
159 * {@link org.opendaylight.controller.usermanager.internal.UserManager#addRemoveLocalUser(org.opendaylight.controller.usermanager.org.opendaylight.controller.usermanager.internal.UserConfig, boolean)}
163 public void testAddRemoveLocalUser() {
164 List<String> roles = new ArrayList<String>(1);
165 roles.add(UserLevel.SYSTEMADMIN.toString());
166 UserConfig uc = new UserConfig("sysadmin", "7029,7455,8165,7029,7881",
169 assertTrue(um.getLocalUserList().contains(uc));
170 um.removeLocalUser(uc);
171 assertFalse(um.getLocalUserList().contains(uc));
176 * {@link org.opendaylight.controller.usermanager.internal.UserManager#changeLocalUserPassword(java.lang.String, java.lang.String, java.lang.String)}
180 public void testChangeLocalUserPassword() {
181 // fail("Not yet implemented");
186 * {@link org.opendaylight.controller.usermanager.internal.UserManager#userLogout(java.lang.String)}
190 public void testUserLogout() {
191 // fail("Not yet implemented");
196 * {@link org.opendaylight.controller.usermanager.internal.UserManager#userTimedOut(java.lang.String)}
200 public void testUserTimedOut() {
201 // fail("Not yet implemented");
206 * {@link org.opendaylight.controller.usermanager.internal.UserManager#authenticate(org.springframework.security.core.Authentication)}
210 public void testAuthenticateAuthentication() {
211 // fail("Not yet implemented");
216 * {@link org.opendaylight.controller.usermanager.internal.UserManager#saveLocalUserList()}
220 public void testSaveLocalUserList() {
221 // fail("Not yet implemented");
226 * {@link org.opendaylight.controller.usermanager.internal.UserManager#saveAAAServerList()}
230 public void testSaveAAAServerList() {
231 // fail("Not yet implemented");
236 * {@link org.opendaylight.controller.usermanager.internal.UserManager#saveAuthorizationList()}
240 public void testSaveAuthorizationList() {
241 // fail("Not yet implemented");
246 * {@link org.opendaylight.controller.usermanager.internal.UserManager#readObject(java.io.ObjectInputStream)}
250 public void testReadObject() {
251 // fail("Not yet implemented");
255 public void testGetUserLevel() {
256 List<String> roles = new ArrayList<String>(2);
257 roles.add(UserLevel.SYSTEMADMIN.toString());
258 roles.add("App1_supervisor");
259 um.addLocalUser(new UserConfig("Jack", "password", roles));
260 um.authenticate("Jack", "password");
263 roles.add("App2Admin");
264 roles.add(UserLevel.NETWORKOPERATOR.toString());
265 um.addLocalUser(new UserConfig("John", "password", roles));
267 // Run the check on authenticated user
268 Assert.assertTrue(um.getUserLevel("Jack") == UserLevel.SYSTEMADMIN);
269 // Run the check on configured users
270 Assert.assertTrue(um.getUserLevel("John") == UserLevel.NETWORKOPERATOR);
271 // Run the check on local authorized users
272 Assert.assertTrue(um.getUserLevel("Andrew") == UserLevel.NETWORKOPERATOR);
273 // Non locally known user
274 Assert.assertTrue(um.getUserLevel("Tom") == UserLevel.NOUSER);