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