package org.js.model.rbac;
import static org.junit.Assert.assertTrue;
import java.util.List;
import java.util.Set;
import org.js.model.rbac.Permission;
import org.js.model.rbac.Role;
import org.js.model.rbac.Subject;
import org.junit.Test;
/**
* @author <a href="mailto:julia.schroeter@tu-dresden.de">Julia Schroeter</a>
*
*/
public class RBACServiceTest extends AbstractTestRbac {
@Test
public void getAllRolePermissions() {
Role r1 = getRole("r1");
Set<Permission> permissions = rbacService.getAllRolePermissions(r1);
assertTrue(permissions.size() == 2);
}
@Test
public void getAllRolePermissionsInheritance() {
Role r4 = getRole("r4");
Set<Permission> permissions = rbacService.getAllRolePermissions(r4);
assertTrue(permissions.size() == 3);
}
@Test
public void getAllRolePermissionsMultiInheritance() {
Role r4 = getRole("r6");
Set<Permission> permissions = rbacService.getAllRolePermissions(r4);
assertTrue(permissions.size() == 10);
// Feature f5 = getFeature("f5");
//
// SelectFeature selectF5 = createSelectFeature(f5, true);
// DeselectFeature deselectF5 = createDeselectFeature(f5, true);
/*
* r6: select f5, deselect f5 r5: select f9, deselect f9, select f4, deselect f4 r2: deselect f2 r1: select f3
* select f2 r3: select f2, deselect f2
*/
}
@Test
public void roleDirectSubjectsTest() {
Subject s1 = getSubject("s1");
Subject s2 = getSubject("s2");
Subject s3 = getSubject("s3");
Subject s4 = getSubject("s4");
Role r1 = getRole("r1");
Role r2 = getRole("r2");
// r1 -> s1, s4, s3
List<Subject> r1Subjects = rbacService.getRoleDirectSubjects(r1);
assertTrue(r1Subjects.size() == 3);
assertTrue(r1Subjects.contains(s1));
assertTrue(r1Subjects.contains(s4));
assertTrue(r1Subjects.contains(s3));
// r2 -> s2, s3, s4
List<Subject> r2Subjects = rbacService.getRoleDirectSubjects(r2);
assertTrue(r2Subjects.size() == 3);
assertTrue(r2Subjects.contains(s2));
assertTrue(r2Subjects.contains(s3));
assertTrue(r2Subjects.contains(s4));
}
@Test
public void subjectRolesTest() {
Subject s1 = getSubject("s1");
Subject s3 = getSubject("s3");
Subject s4 = getSubject("s4");
Subject s5 = getSubject("s5");
Role r1 = getRole("r1");
Role r2 = getRole("r2");
Role r4 = getRole("r4");
// s1 -> r1
List<Role> s1Roles = rbacService.getSubjectRoles(s1);
assertTrue(s1Roles.size() == 1);
assertTrue(s1Roles.contains(r1));
// s3 -> r1 r2
List<Role> s3Roles = rbacService.getSubjectRoles(s3);
assertTrue(s3Roles.size() == 2);
assertTrue(s3Roles.contains(r1));
assertTrue(s3Roles.contains(r2));
// s4 -> r1 r2
List<Role> s4Roles = rbacService.getSubjectRoles(s4);
assertTrue(s4Roles.size() == 2);
assertTrue(s4Roles.contains(r1));
assertTrue(s4Roles.contains(r2));
// s5 -> r1 r2 r4
List<Role> s5Roles = rbacService.getSubjectRoles(s5);
assertTrue(s5Roles.size() == 3);
assertTrue(s5Roles.contains(r1));
assertTrue(s5Roles.contains(r2));
assertTrue(s5Roles.contains(r4));
}
@Test
public void getChildRolesTest() {
Role r1 = getRole("r1");
Role r2 = getRole("r2");
Role r4 = getRole("r4");
Role r6 = getRole("r6");
// r1 -> r2, r4, r6
List<Role> cr1 = rbacService.getChildRoles(r1);
assertTrue(cr1.size() == 3);
assertTrue(cr1.contains(r2));
assertTrue(cr1.contains(r4));
assertTrue(cr1.contains(r6));
// r4 -> r6
List<Role> cr4 = rbacService.getChildRoles(r4);
assertTrue(cr4.size() == 1);
assertTrue(cr4.contains(r6));
// r6 -> 0
List<Role> cr6 = rbacService.getChildRoles(r6);
assertTrue(cr6.size() == 0);
}
@Test
public void getParentRolesTest() {
Role r1 = getRole("r1");
Role r2 = getRole("r2");
Role r3 = getRole("r3");
Role r4 = getRole("r4");
Role r5 = getRole("r5");
Role r6 = getRole("r6");
// r1 -> 0
List<Role> cr1 = rbacService.getParentRoles(r1);
assertTrue(cr1.size() == 0);
// r4 -> r2, r1
List<Role> cr4 = rbacService.getParentRoles(r4);
assertTrue(cr4.size() == 2);
assertTrue(cr4.contains(r2));
assertTrue(cr4.contains(r1));
// r6 -> r4, r5, r3, r2, r1
List<Role> cr6 = rbacService.getParentRoles(r6);
assertTrue(cr6.size() == 5);
assertTrue(cr6.contains(r1));
assertTrue(cr6.contains(r2));
assertTrue(cr6.contains(r3));
assertTrue(cr6.contains(r4));
assertTrue(cr6.contains(r5));
}
}