Fix collateral caused by split of UserManager in api and implementation
[controller.git] / opendaylight / usermanager / implementation / src / test / java / org / opendaylight / controller / usermanager / internal / UserManagerImplTest.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.controller.usermanager.internal;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertTrue;
14
15 import java.util.ArrayList;
16 import java.util.List;
17 import java.util.concurrent.ConcurrentHashMap;
18
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;
32
33 /**
34  * Unit Tests for UserManagerImpl
35  */
36 public class UserManagerImplTest {
37
38     private static UserManagerImpl um;
39
40     /**
41      * @throws java.lang.Exception
42      */
43     @BeforeClass
44     public static void setUpBeforeClass() throws Exception {
45
46         IUserManager userManager = (IUserManager) ServiceHelper
47                 .getGlobalInstance(IUserManager.class, new Object());
48         if (userManager instanceof UserManagerImpl) {
49             um = (UserManagerImpl) userManager;
50         } else {
51             um = new UserManagerImpl();
52             um.setAuthProviders(new ConcurrentHashMap<String, IAAAProvider>());
53
54             // mock up a remote server list with a dummy server
55             um.setRemoteServerConfigList(new ConcurrentHashMap<String, ServerConfig>() {
56                 static final long serialVersionUID = 1L;
57                 {
58                     put("dummyServerConfig", new ServerConfig() {
59                         // Server config can't be empty
60                         static final long serialVersionUID = 8645L;
61
62                         @Override
63                         public String getAddress() {
64                             return "1.1.1.1";
65                         }
66
67                         @Override
68                         public String getSecret() {
69                             return "secret";
70                         }
71
72                         @Override
73                         public String getProtocol() {
74                             return "IPv4";
75                         }
76                     });
77                 }
78             });
79
80             // mock up a localUserConfigList with an admin user
81             um.setLocalUserConfigList(new ConcurrentHashMap<String, UserConfig>() {
82                 static final long serialVersionUID = 2L;
83                 {
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));
88                 }
89             });
90
91             um.setAuthorizationConfList(new ConcurrentHashMap<String, AuthorizationConfig>() {
92                 static final long serialVersionUID = 2L;
93                 {
94                     List<String> roles = new ArrayList<String>(3);
95                     roles.add(UserLevel.NETWORKOPERATOR.toString());
96                     roles.add("Container1-Admin");
97                     roles.add("Application2-User");
98
99                     put("Andrew", new AuthorizationConfig("Andrew", roles));
100                 }
101             });
102             // instantiate an empty activeUser collection
103             um.setActiveUsers(new ConcurrentHashMap<String, AuthenticatedUser>());
104         }
105     }
106
107     /**
108      * Test method for
109      * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#addAAAProvider(org.opendaylight.controller.usermanager.IAAAProvider)}
110      * .
111      */
112     @Test
113     public void testAddAAAProvider() {
114         // instantiate an anonymous AAAProvider
115         IAAAProvider a3p = new IAAAProvider() {
116
117             @Override
118             public AuthResponse authService(String userName, String password,
119                     String server, String secretKey) {
120                 return new AuthResponse();
121             };
122
123             @Override
124             public String getName() {
125                 return "dummyAAAProvider";
126             }
127         };
128
129         um.addAAAProvider(a3p);
130         assertEquals(a3p, um.getAAAProvider("dummyAAAProvider"));
131
132     }
133
134     /**
135      * Test method for
136      * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#removeAAAProvider(org.opendaylight.controller.usermanager.IAAAProvider)}
137      * and for for
138      * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#getAAAProvider(java.lang.String)}
139      * .
140      */
141     @Test
142     public void testRemoveAAAProvider() {
143         um.removeAAAProvider(um.getAAAProvider("dummyAAAProvider"));
144         assertTrue(um.getAAAProviderNames().isEmpty());
145     }
146
147     /**
148      * Test method for
149      * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#authenticate(java.lang.String, java.lang.String)}
150      * .
151      */
152     @Test
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);
157         um.addLocalUser(uc);
158         AuthResultEnum authResult = um.authenticate("administrator", "admin");
159         assertEquals(authResult, AuthResultEnum.AUTH_ACCEPT_LOC);
160     }
161
162     /**
163      * Test method for
164      * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#addRemoveLocalUser(org.opendaylight.controller.usermanager.org.opendaylight.controller.usermanager.internal.UserConfig, boolean)}
165      * .
166      */
167     @Test
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",
172                 roles);
173         um.addLocalUser(uc);
174         assertTrue(um.getLocalUserList().contains(uc));
175         um.removeLocalUser(uc);
176         assertFalse(um.getLocalUserList().contains(uc));
177     }
178
179     /**
180      * Test method for
181      * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#changeLocalUserPassword(java.lang.String, java.lang.String, java.lang.String)}
182      * .
183      */
184     @Test
185     public void testChangeLocalUserPassword() {
186         // fail("Not yet implemented");
187     }
188
189     /**
190      * Test method for
191      * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#userLogout(java.lang.String)}
192      * .
193      */
194     @Test
195     public void testUserLogout() {
196         // fail("Not yet implemented");
197     }
198
199     /**
200      * Test method for
201      * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#userTimedOut(java.lang.String)}
202      * .
203      */
204     @Test
205     public void testUserTimedOut() {
206         // fail("Not yet implemented");
207     }
208
209     /**
210      * Test method for
211      * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#authenticate(org.springframework.security.core.Authentication)}
212      * .
213      */
214     @Test
215     public void testAuthenticateAuthentication() {
216         // fail("Not yet implemented");
217     }
218
219     /**
220      * Test method for
221      * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#saveLocalUserList()}
222      * .
223      */
224     @Test
225     public void testSaveLocalUserList() {
226         // fail("Not yet implemented");
227     }
228
229     /**
230      * Test method for
231      * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#saveAAAServerList()}
232      * .
233      */
234     @Test
235     public void testSaveAAAServerList() {
236         // fail("Not yet implemented");
237     }
238
239     /**
240      * Test method for
241      * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#saveAuthorizationList()}
242      * .
243      */
244     @Test
245     public void testSaveAuthorizationList() {
246         // fail("Not yet implemented");
247     }
248
249     /**
250      * Test method for
251      * {@link org.opendaylight.controller.usermanager.internal.UserManagerImpl#readObject(java.io.ObjectInputStream)}
252      * .
253      */
254     @Test
255     public void testReadObject() {
256         // fail("Not yet implemented");
257     }
258
259     @Test
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");
266
267         roles.clear();
268         roles.add("App2Admin");
269         roles.add(UserLevel.NETWORKOPERATOR.toString());
270         um.addLocalUser(new UserConfig("John", "password", roles));
271
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);
280     }
281 }