/**
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.repository.security;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.drools.repository.RepositorySessionUtil;
import junit.framework.TestCase;
public class PermissionManagerTest extends TestCase {
public void testLoadSave() throws Exception {
PermissionManager pm = new PermissionManager(RepositorySessionUtil.getRepository());
Map<String, List<String>> perms = new HashMap<String, List<String>>() {{
put("package.admin", new ArrayList<String>() {{add("1234567890");}});
put("package.developer", new ArrayList<String>() {{add("1"); add("2");}});
put("analyst", new ArrayList<String>() {{add("HR");}});
put("admin", new ArrayList<String>());
}};
pm.updateUserPermissions("wankle", perms);
Map<String, List<String>> perms_ = pm.retrieveUserPermissions("wankle");
assertEquals(perms.size(), perms_.size());
perms_ = pm.retrieveUserPermissions("wankle");
assertEquals(perms.size(), perms_.size());
List<String> padmin = perms_.get("package.admin");
assertEquals(1, padmin.size());
assertEquals("1234567890", padmin.get(0));
List<String> pdev = perms_.get("package.developer");
assertEquals(2, pdev.size());
perms = new HashMap<String, List<String>>() {{
put("admin", null);
}};
pm.updateUserPermissions("wankle2", perms);
perms_ = pm.retrieveUserPermissions("wankle2");
List<String> aperms = perms_.get("admin");
assertEquals(0, aperms.size());
perms_.remove("admin");
assertEquals(0, perms_.size());
pm.updateUserPermissions("wankle2", perms_);
perms_ = pm.retrieveUserPermissions("wankle2");
assertEquals(0, perms_.size());
perms_ = pm.retrieveUserPermissions("wankle");
padmin = perms_.get("package.admin");
assertEquals(1, padmin.size());
assertEquals("1234567890", padmin.get(0));
assertTrue(pm.listUsers().containsKey("wankle"));
pm.removeUserPermissions("wankle");
assertFalse(pm.listUsers().containsKey("wankle"));
}
public void testUpdatePerms() throws Exception {
PermissionManager pm = new PermissionManager(RepositorySessionUtil.getRepository());
Map<String, List<String>> perms = new HashMap<String, List<String>>() {{
put("package.admin", new ArrayList<String>() {{add("1234567890");}});
put("package.developer", new ArrayList<String>() {{add("1"); add("2");}});
put("analyst", new ArrayList<String>() {{add("HR");}});
put("admin", new ArrayList<String>());
}};
pm.updateUserPermissions("testUpdatePermsWankle", perms);
perms = pm.retrieveUserPermissions("testUpdatePermsWankle");
assertEquals(4, perms.size());
perms.remove("package.developer");
pm.updateUserPermissions("testUpdatePermsWankle", perms);
perms = pm.retrieveUserPermissions("testUpdatePermsWankle");
assertEquals(3, perms.size());
}
public void testNilUser() throws Exception {
PermissionManager pm = new PermissionManager(RepositorySessionUtil.getRepository());
Map<String, List<String>> perms_ = pm.retrieveUserPermissions("nobody");
assertEquals(0, perms_.size());
perms_ = pm.retrieveUserPermissions("nobody");
assertEquals(0, perms_.size());
}
public void testListingUsers() throws Exception {
PermissionManager pm = new PermissionManager(RepositorySessionUtil.getRepository());
pm.deleteAllUsers();
Map<String, List<String>> perms = new HashMap<String, List<String>>() {{
put("package.admin", new ArrayList<String>() {{add("1234567890");}});
put("package.developer", new ArrayList<String>() {{add("1"); add("2");}});
put("analyst", new ArrayList<String>() {{add("HR");}});
put("admin", new ArrayList<String>());
}};
pm.updateUserPermissions("listingUser1", perms);
perms = new HashMap<String, List<String>>() {{
put("admin", new ArrayList<String>());
}};
pm.updateUserPermissions("listingUser2", perms);
pm.updateUserPermissions("listingUser3", perms);
perms = new HashMap<String, List<String>>() {{
put("package.developer", new ArrayList<String>() {{add("1"); add("2");}});
}};
pm.updateUserPermissions("listingUser4", perms);
perms = new HashMap<String, List<String>>() {{
put("analyst", new ArrayList<String>() {{add("1"); add("2");}});
}};
pm.updateUserPermissions("listingUser5", perms);
Map<String, List<String>> result = pm.listUsers();
assertNotNull(result);
assertEquals(5, result.size());
assertTrue(result.containsKey("listingUser1"));
assertTrue(result.containsKey("listingUser2"));
assertTrue(result.containsKey("listingUser3"));
assertTrue(result.containsKey("listingUser4"));
assertTrue(result.containsKey("listingUser5"));
List<String> permTypes = result.get("listingUser1");
assertEquals(4, permTypes.size());
assertTrue(permTypes.contains("package.developer"));
permTypes = result.get("listingUser5");
assertEquals(1, permTypes.size());
assertEquals("analyst", permTypes.get(0));
}
public void testEmptyUserName() throws Exception {
PermissionManager pm = new PermissionManager(RepositorySessionUtil.getRepository());
Map<String, List<String>> perms_ = pm.retrieveUserPermissions("");
assertEquals(0, perms_.size());
perms_ = pm.retrieveUserPermissions(" ");
assertEquals(0, perms_.size());
Map<String, List<String>> perms = new HashMap<String, List<String>>() {{
put("package.admin", new ArrayList<String>() {{add("1234567890");}});
put("package.developer", new ArrayList<String>() {{add("1"); add("2");}});
put("analyst", new ArrayList<String>() {{add("HR");}});
put("admin", new ArrayList<String>());
}};
pm.updateUserPermissions(" ", perms);
pm.updateUserPermissions("", perms);
pm.removeUserPermissions("");
pm.removeUserPermissions(" ");
}
}