/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.security.impl; import static org.junit.Assert.*; import java.util.HashMap; import java.util.Map; import org.junit.Test; import org.junit.Assert; import junit.framework.TestCase; public class RoleHierarchyHelperTest { protected Map<String,String> createFromArray (String[][] array) { Map<String,String> mappings = new HashMap<String, String>(); for (int i = 0; i < array.length;i++) { mappings.put(array[i][0],array[i][1]); } return mappings; } @Test public void testValidTree() throws Exception { Map<String,String> map = createFromArray(new String[][] { {"node1", null }, {"node11", "node1" }, {"node12", "node1" }, {"node111", "node11" }, {"node112", "node11" }, }); RoleHierarchyHelper helper = new RoleHierarchyHelper(map); assertFalse(helper.containsRole("abc")); assertTrue(helper.containsRole("node11")); assertFalse(helper.isRoot("node11")); assertTrue(helper.isRoot("node1")); assertEquals(1, helper.getRootRoles().size()); assertTrue(helper.getRootRoles().contains("node1")); assertEquals(3, helper.getLeafRoles().size()); assertTrue(helper.getLeafRoles().contains("node111")); assertTrue(helper.getLeafRoles().contains("node112")); assertTrue(helper.getLeafRoles().contains("node12")); assertEquals("node1",helper.getParent("node11")); assertNull(helper.getParent("node1")); assertEquals(0, helper.getAncestors("node1").size()); assertEquals(1, helper.getAncestors("node12").size()); assertTrue(helper.getAncestors("node12").contains("node1")); assertEquals(2, helper.getAncestors("node112").size()); assertTrue(helper.getAncestors("node112").contains("node11")); assertTrue(helper.getAncestors("node112").contains("node1")); assertEquals(2, helper.getChildren("node1").size()); assertTrue(helper.getChildren("node1").contains("node11")); assertTrue(helper.getChildren("node1").contains("node12")); assertEquals(0, helper.getChildren("node12").size()); assertEquals(2, helper.getChildren("node11").size()); assertTrue(helper.getChildren("node11").contains("node111")); assertTrue(helper.getChildren("node11").contains("node112")); assertEquals(4, helper.getDescendants("node1").size()); assertTrue(helper.getDescendants("node1").contains("node11")); assertTrue(helper.getDescendants("node1").contains("node12")); assertTrue(helper.getDescendants("node1").contains("node111")); assertTrue(helper.getDescendants("node1").contains("node112")); assertEquals(0, helper.getDescendants("node12").size()); assertEquals(2, helper.getDescendants("node11").size()); assertTrue(helper.getDescendants("node11").contains("node111")); assertTrue(helper.getDescendants("node11").contains("node112")); assertTrue(helper.isValidParent("node11", null)); assertTrue(helper.isValidParent("node11", "node12")); assertFalse(helper.isValidParent("node11", "node11")); assertFalse(helper.isValidParent("node1", "node111")); boolean fail=true; try { helper.isRoot("abc"); } catch (RuntimeException e) { fail=false; } if (fail) Assert.fail("No Exception"); } @Test public void testInValidTree1() throws Exception { Map<String,String> map = createFromArray(new String[][] { {"node1", "node1" } }); RoleHierarchyHelper helper = new RoleHierarchyHelper(map); boolean fail; fail=true; try { helper.getParent("node1"); } catch (RuntimeException e) { fail=false; } if (fail) Assert.fail("No Exception"); fail=true; try { helper.getAncestors("node1"); } catch (RuntimeException e) { fail=false; } if (fail) Assert.fail("No Exception"); fail=true; try { helper.getChildren("node1"); } catch (RuntimeException e) { fail=false; } if (fail) Assert.fail("No Exception"); fail=true; try { helper.getDescendants("node1"); } catch (RuntimeException e) { fail=false; } if (fail) Assert.fail("No Exception"); } @Test public void testInValidTree2() throws Exception { Map<String,String> map = createFromArray(new String[][] { {"node1", "node2" }, {"node2", "node1" } }); RoleHierarchyHelper helper = new RoleHierarchyHelper(map); boolean fail; helper.getParent("node1"); // ok fail=true; try { helper.getAncestors("node1"); } catch (RuntimeException e) { fail=false; } if (fail) Assert.fail("No Exception"); helper.getChildren("node1"); // ok fail=true; try { helper.getDescendants("node1"); } catch (RuntimeException e) { fail=false; } if (fail) Assert.fail("No Exception"); } }