package no.dusken.aranea.admin.security; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.GrantedAuthorityImpl; import org.springframework.util.Assert; import java.util.Arrays; import java.util.Collection; import java.util.LinkedList; import static junit.framework.Assert.assertEquals; import static org.junit.Assert.fail; /** * @author Marvin B. Lillehaug <lillehau@underdusken.no> */ public class TestRoleHiearchy { private RoleHierarchyImpl hierachy; @Before public void setup(){ hierachy = new RoleHierarchyImpl(); hierachy.setHierarchy("ROLE_MASKINIST > ROLE_ANSVARLIG_REDAKTØR " + "ROLE_ANSVARLIG_REDAKTØR > ROLE_REDAKTØR " + "ROLE_ANSVARLIG_REDAKTØR > ROLE_REDAKTØR " + "ROLE_ANSVARLIG_REDAKTØR > ROLE_REDAKTØR " + "ROLE_ANSVARLIG_REDAKTØR > ROLE_REDAKTØR " + "ROLE_ANSVARLIG_REDAKTØR > ROLE_REDAKTØR " + "ROLE_REDAKTØR > ROLE_KULTURREDAKTØR " + "ROLE_REDAKTØR > ROLE_NYHETSREDAKTØR " + "ROLE_REDAKTØR > ROLE_REPORTASJEREDAKTØR " + "ROLE_REDAKTØR > ROLE_FOTOREDAKTØR " + "ROLE_REDAKTØR > ROLE_NETTREDAKTØR " + "ROLE_KULTURREDAKTØR > ROLE_DUSKER " + "ROLE_NYHETSREDAKTØR > ROLE_DUSKER " + "ROLE_REPORTASJEREDAKTØR > ROLE_DUSKER " + "ROLE_NETTREDAKTØR > ROLE_DUSKER " + "ROLE_DUSKER > ROLE_JOURNALIST " + "ROLE_DUSKER > ROLE_LAYOUT " + "ROLE_DUSKER > ROLE_FOTOGRAF " + "ROLE_DUSKER > ROLE_ILLUSTRATØR " + "ROLE_DUSKER > ROLE_DATA " + "ROLE_DUSKER > ROLE_ANNONSE " + "ROLE_DUSKER > ROLE_ANNONSEANSVARLIG " + "ROLE_DUSKER > ROLE_ØKONOMI " + "ROLE_DUSKER > ROLE_KORREKTUR " + "ROLE_DUSKER > ROLE_GJENGSJEF " + "ROLE_DUSKER > ROLE_SIVILARBEIDER " + "ROLE_DUSKER > ROLE_DEBATT-_OG_KRONIKKANSVARLIG " + "ROLE_DUSKER > ROLE_OVERSETTER"); } /** * Test what happens when the setup * Ansv. red > *red is tried */ @Test @Ignore public void testRoleHiearchyAstericsBehavior(){ GrantedAuthority maskinist = new GrantedAuthorityImpl("maskinist"); RoleHierarchyImpl testhierachy = new RoleHierarchyImpl(); testhierachy.setHierarchy("maskinist > ansvred " + "ansvred > *red" + "nyhetsred > nyhet" + "kulturred > kultur"); Collection<GrantedAuthority> reachable = hierachy.getReachableGrantedAuthorities(new LinkedList<GrantedAuthority>(Arrays.asList(maskinist))); Assert.notNull(reachable, "reachable was null"); //since kulturred has not been specified to be under ansvred it should not come up if *red is not matched for(GrantedAuthority ga: reachable){ if(ga.getAuthority().equals("kulturred")){ return; } } fail("*red not matched"); } /* * ROLE_ANSVARLIG_REDAKTØR should be reachable from ROLE_MASKINIST */ @Test public void testAnsvredUnderMaskinist(){ GrantedAuthority maskinist = new GrantedAuthorityImpl("ROLE_MASKINIST"); Collection<GrantedAuthority> reachable = hierachy.getReachableGrantedAuthorities(new LinkedList<GrantedAuthority>(Arrays.asList(maskinist))); Assert.notNull(reachable, "reachable was null"); for(GrantedAuthority ga: reachable){ if(ga.getAuthority().equals("ROLE_ANSVARLIG_REDAKTØR")){ return; } } fail("ROLE_ANSVARLIG_REDAKTØR not reachable"); } /* * Test that all roles are reachable from maskinist */ @Test public void testAllUnderMaskinist(){ GrantedAuthority maskinist = new GrantedAuthorityImpl("ROLE_MASKINIST"); Collection<GrantedAuthority> reachable = hierachy.getReachableGrantedAuthorities(new LinkedList<GrantedAuthority>(Arrays.asList(maskinist))); Assert.notNull(reachable, "reachable was null"); assertEquals(22, reachable.size()); } /** * Test that the correct number is reachable from dusker */ @Test public void testAllDusker(){ GrantedAuthority maskinist = new GrantedAuthorityImpl("ROLE_DUSKER"); Collection<GrantedAuthority> reachable = hierachy.getReachableGrantedAuthorities(new LinkedList<GrantedAuthority>(Arrays.asList(maskinist))); Assert.notNull(reachable, "reachable was null"); assertEquals(14, reachable.size()); } /** * Test that no authorities are reachable from a role not specified. */ @Test public void testNetmeeter(){ GrantedAuthority netmeeter = new GrantedAuthorityImpl("ROLE_NETMEETER"); Collection<GrantedAuthority> reachable = hierachy.getReachableGrantedAuthorities(new LinkedList<GrantedAuthority>(Arrays.asList(netmeeter))); Assert.notNull(reachable, "reachable was null"); assertEquals(1, reachable.size()); } /** * All redaktørs and maskinist should be over ROLE_REDAKTØR */ @Test public void testNyhetsredAnsvredMaskinistOverRedaktor(){ GrantedAuthority netmeeter = new GrantedAuthorityImpl("ROLE_REDAKTØR"); Collection<GrantedAuthority> reachable = hierachy.getReachableGrantedAuthorities(new LinkedList<GrantedAuthority>(Arrays.asList(netmeeter))); Assert.notNull(reachable, "reachable was null"); assertEquals(20, reachable.size()); } }