Make sure invokeOperation is set once
[controller.git] / opendaylight / adsal / 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 UserManager
35  */
36 public class UserManagerImplTest {
37
38     private static UserManager 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 UserManager) {
49             um = (UserManager) userManager;
50         } else {
51             um = new UserManager();
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     private IAAAProvider getAnonymousAAAProvider(final String providerName) {
108         // instantiate an anonymous AAAProvider
109         return new IAAAProvider() {
110
111             @Override
112             public AuthResponse authService(String userName, String password,
113                     String server, String secretKey) {
114                 return new AuthResponse();
115             };
116
117             @Override
118             public String getName() {
119                 return providerName;
120             }
121         };
122     }
123
124     /**
125      * Test method for
126      * {@link org.opendaylight.controller.usermanager.internal.UserManager#addAAAProvider(org.opendaylight.controller.usermanager.IAAAProvider)}
127      * and for
128      * {@link org.opendaylight.controller.usermanager.internal.UserManager#removeAAAProvider(org.opendaylight.controller.usermanager.IAAAProvider)}
129      * and
130      * {@link org.opendaylight.controller.usermanager.internal.UserManager#getAAAProvider(java.lang.String)}
131      */
132     @Test
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());
140     }
141
142     /**
143      * Test method for
144      * {@link org.opendaylight.controller.usermanager.internal.UserManager#authenticate(java.lang.String, java.lang.String)}
145      * .
146      */
147     @Test
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);
152         um.addLocalUser(uc);
153         AuthResultEnum authResult = um.authenticate("administrator", "admin");
154         assertEquals(authResult, AuthResultEnum.AUTH_ACCEPT_LOC);
155     }
156
157     /**
158      * Test method for
159      * {@link org.opendaylight.controller.usermanager.internal.UserManager#addRemoveLocalUser(org.opendaylight.controller.usermanager.org.opendaylight.controller.usermanager.internal.UserConfig, boolean)}
160      * .
161      */
162     @Test
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",
167                 roles);
168         um.addLocalUser(uc);
169         assertTrue(um.getLocalUserList().contains(uc));
170         um.removeLocalUser(uc);
171         assertFalse(um.getLocalUserList().contains(uc));
172     }
173
174     /**
175      * Test method for
176      * {@link org.opendaylight.controller.usermanager.internal.UserManager#changeLocalUserPassword(java.lang.String, java.lang.String, java.lang.String)}
177      * .
178      */
179     @Test
180     public void testChangeLocalUserPassword() {
181         // fail("Not yet implemented");
182     }
183
184     /**
185      * Test method for
186      * {@link org.opendaylight.controller.usermanager.internal.UserManager#userLogout(java.lang.String)}
187      * .
188      */
189     @Test
190     public void testUserLogout() {
191         // fail("Not yet implemented");
192     }
193
194     /**
195      * Test method for
196      * {@link org.opendaylight.controller.usermanager.internal.UserManager#userTimedOut(java.lang.String)}
197      * .
198      */
199     @Test
200     public void testUserTimedOut() {
201         // fail("Not yet implemented");
202     }
203
204     /**
205      * Test method for
206      * {@link org.opendaylight.controller.usermanager.internal.UserManager#authenticate(org.springframework.security.core.Authentication)}
207      * .
208      */
209     @Test
210     public void testAuthenticateAuthentication() {
211         // fail("Not yet implemented");
212     }
213
214     /**
215      * Test method for
216      * {@link org.opendaylight.controller.usermanager.internal.UserManager#saveLocalUserList()}
217      * .
218      */
219     @Test
220     public void testSaveLocalUserList() {
221         // fail("Not yet implemented");
222     }
223
224     /**
225      * Test method for
226      * {@link org.opendaylight.controller.usermanager.internal.UserManager#saveAAAServerList()}
227      * .
228      */
229     @Test
230     public void testSaveAAAServerList() {
231         // fail("Not yet implemented");
232     }
233
234     /**
235      * Test method for
236      * {@link org.opendaylight.controller.usermanager.internal.UserManager#saveAuthorizationList()}
237      * .
238      */
239     @Test
240     public void testSaveAuthorizationList() {
241         // fail("Not yet implemented");
242     }
243
244     /**
245      * Test method for
246      * {@link org.opendaylight.controller.usermanager.internal.UserManager#readObject(java.io.ObjectInputStream)}
247      * .
248      */
249     @Test
250     public void testReadObject() {
251         // fail("Not yet implemented");
252     }
253
254     @Test
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");
261
262         roles.clear();
263         roles.add("App2Admin");
264         roles.add(UserLevel.NETWORKOPERATOR.toString());
265         um.addLocalUser(new UserConfig("John", "password", roles));
266
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);
275     }
276 }