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>());
109 * {@link org.opendaylight.controller.usermanager.internal.UserManager#addAAAProvider(org.opendaylight.controller.usermanager.IAAAProvider)}
113 public void testAddAAAProvider() {
114 // instantiate an anonymous AAAProvider
115 IAAAProvider a3p = new IAAAProvider() {
118 public AuthResponse authService(String userName, String password,
119 String server, String secretKey) {
120 return new AuthResponse();
124 public String getName() {
125 return "dummyAAAProvider";
129 um.addAAAProvider(a3p);
130 assertEquals(a3p, um.getAAAProvider("dummyAAAProvider"));
136 * {@link org.opendaylight.controller.usermanager.internal.UserManager#removeAAAProvider(org.opendaylight.controller.usermanager.IAAAProvider)}
138 * {@link org.opendaylight.controller.usermanager.internal.UserManager#getAAAProvider(java.lang.String)}
142 public void testRemoveAAAProvider() {
143 um.removeAAAProvider(um.getAAAProvider("dummyAAAProvider"));
144 assertTrue(um.getAAAProviderNames().isEmpty());
149 * {@link org.opendaylight.controller.usermanager.internal.UserManager#authenticate(java.lang.String, java.lang.String)}
153 public void testAuthenticateStringString() {
154 List<String> roles = new ArrayList<String>(1);
155 roles.add(UserLevel.SYSTEMADMIN.toString());
156 UserConfig uc = new UserConfig("administrator", "admin", roles);
158 AuthResultEnum authResult = um.authenticate("administrator", "admin");
159 assertEquals(authResult, AuthResultEnum.AUTH_ACCEPT_LOC);
164 * {@link org.opendaylight.controller.usermanager.internal.UserManager#addRemoveLocalUser(org.opendaylight.controller.usermanager.org.opendaylight.controller.usermanager.internal.UserConfig, boolean)}
168 public void testAddRemoveLocalUser() {
169 List<String> roles = new ArrayList<String>(1);
170 roles.add(UserLevel.SYSTEMADMIN.toString());
171 UserConfig uc = new UserConfig("sysadmin", "7029,7455,8165,7029,7881",
174 assertTrue(um.getLocalUserList().contains(uc));
175 um.removeLocalUser(uc);
176 assertFalse(um.getLocalUserList().contains(uc));
181 * {@link org.opendaylight.controller.usermanager.internal.UserManager#changeLocalUserPassword(java.lang.String, java.lang.String, java.lang.String)}
185 public void testChangeLocalUserPassword() {
186 // fail("Not yet implemented");
191 * {@link org.opendaylight.controller.usermanager.internal.UserManager#userLogout(java.lang.String)}
195 public void testUserLogout() {
196 // fail("Not yet implemented");
201 * {@link org.opendaylight.controller.usermanager.internal.UserManager#userTimedOut(java.lang.String)}
205 public void testUserTimedOut() {
206 // fail("Not yet implemented");
211 * {@link org.opendaylight.controller.usermanager.internal.UserManager#authenticate(org.springframework.security.core.Authentication)}
215 public void testAuthenticateAuthentication() {
216 // fail("Not yet implemented");
221 * {@link org.opendaylight.controller.usermanager.internal.UserManager#saveLocalUserList()}
225 public void testSaveLocalUserList() {
226 // fail("Not yet implemented");
231 * {@link org.opendaylight.controller.usermanager.internal.UserManager#saveAAAServerList()}
235 public void testSaveAAAServerList() {
236 // fail("Not yet implemented");
241 * {@link org.opendaylight.controller.usermanager.internal.UserManager#saveAuthorizationList()}
245 public void testSaveAuthorizationList() {
246 // fail("Not yet implemented");
251 * {@link org.opendaylight.controller.usermanager.internal.UserManager#readObject(java.io.ObjectInputStream)}
255 public void testReadObject() {
256 // fail("Not yet implemented");
260 public void testGetUserLevel() {
261 List<String> roles = new ArrayList<String>(2);
262 roles.add(UserLevel.SYSTEMADMIN.toString());
263 roles.add("App1_supervisor");
264 um.addLocalUser(new UserConfig("Jack", "password", roles));
265 um.authenticate("Jack", "password");
268 roles.add("App2Admin");
269 roles.add(UserLevel.NETWORKOPERATOR.toString());
270 um.addLocalUser(new UserConfig("John", "password", roles));
272 // Run the check on authenticated user
273 Assert.assertTrue(um.getUserLevel("Jack") == UserLevel.SYSTEMADMIN);
274 // Run the check on configured users
275 Assert.assertTrue(um.getUserLevel("John") == UserLevel.NETWORKOPERATOR);
276 // Run the check on local authorized users
277 Assert.assertTrue(um.getUserLevel("Andrew") == UserLevel.NETWORKOPERATOR);
278 // Non locally known user
279 Assert.assertTrue(um.getUserLevel("Tom") == UserLevel.NOUSER);