package de.randi2.core.integration.security;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.acls.domain.PrincipalSid;
import org.springframework.security.acls.model.AccessControlEntry;
import org.springframework.security.acls.model.Acl;
import org.springframework.security.acls.model.Sid;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import de.randi2.dao.HibernateAclService;
import de.randi2.dao.LoginDao;
import de.randi2.dao.RoleDao;
import de.randi2.dao.TrialSiteDao;
import de.randi2.model.Login;
import de.randi2.model.Role;
import de.randi2.model.TreatmentArm;
import de.randi2.model.Trial;
import de.randi2.model.TrialSite;
import de.randi2.model.TrialSubject;
import de.randi2.model.security.AclHibernate;
import de.randi2.model.security.ObjectIdentityHibernate;
import de.randi2.model.security.PermissionHibernate;
import de.randi2.model.security.SidHibernate;
import de.randi2.testUtility.utility.DomainObjectFactory;
import de.randi2.testUtility.utility.InitializeDatabaseUtil;
import de.randi2.utility.security.RolesAndRights;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/META-INF/spring-test.xml",
"/META-INF/subconfig/security.xml" })
@Transactional
public class RolesAndRightsTest {
@Autowired
private InitializeDatabaseUtil databaseUtil;
@Autowired
private HibernateAclService aclService;
@Autowired
private DomainObjectFactory factory;
@Autowired
private RolesAndRights rolesAndRights;
@Autowired
private TrialSiteDao siteDao;
@Autowired
private LoginDao loginDao;
@Autowired
private RoleDao roleDao;
private EntityManager entityManager;
@PersistenceContext
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
@Before
@SuppressWarnings("unchecked")
public void setUp() {
try {
databaseUtil.setUpDatabaseEmpty();
} catch (Exception e) {
fail(e.getMessage());
}
}
@Test
public void grantRightsTrialSiteObjectAnonymousRoleTest() {
TrialSite site = factory.getTrialSite();
site.setId(1);
Sid sid = new PrincipalSid(Role.ROLE_ANONYMOUS.getName());
rolesAndRights.grantRights(site, null);
assertEquals(1, entityManager.createQuery("from AclHibernate")
.getResultList().size());
Acl acl = aclService.readAclById(
new ObjectIdentityHibernate(site.getClass(), site.getId()),
Arrays.asList(sid));
assertEquals(site.getId(), acl.getObjectIdentity().getIdentifier());
assertEquals(site.getClass().getCanonicalName(), acl
.getObjectIdentity().getType());
List<AccessControlEntry> entries = acl.getEntries();
assertEquals(1, entries.size());
assertEquals('R',
((PermissionHibernate) entries.get(0).getPermission())
.getCode());
}
@Test
public void grantRightsTrialSiteObjectRoleWithAdminTrialSiteTest() {
Role role = new Role("ROLE_Name", false, false, false, false, false,
true, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, null);
roleDao.create(role);
Login login = factory.getLogin();
login.getRoles().add(role);
loginDao.create(login);
TrialSite site = factory.getTrialSite();
site.setId(1);
Sid sid = new PrincipalSid(login.getUsername());
rolesAndRights.grantRights(site, null);
List<AclHibernate> acls = entityManager
.createQuery("from AclHibernate").getResultList();
assertEquals(2, acls.size());
for (Acl acl : acls) {
// Anonymous role is tested with other test method
if (!((SidHibernate) acl.getOwner()).getSidname().equals(
Role.ROLE_ANONYMOUS.getName())) {
assertEquals(site.getId(), acl.getObjectIdentity()
.getIdentifier());
assertEquals(site.getClass().getCanonicalName(), acl
.getObjectIdentity().getType());
List<AccessControlEntry> entries = acl.getEntries();
assertEquals(1, entries.size());
assertEquals('A', ((PermissionHibernate) entries.get(0)
.getPermission()).getCode());
}
}
}
@Test
public void grantRightsTrialSiteObjectRoleWithWriteTrialSiteTest() {
TrialSite site = factory.getTrialSite();
site.setId(1);
// test without trial site scope
Role role = new Role("ROLE_Name", false, false, false, false, true,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, null);
roleDao.create(role);
Login login = factory.getLogin();
login.getRoles().add(role);
loginDao.create(login);
Sid sid = new PrincipalSid(login.getUsername());
rolesAndRights.grantRights(site, null);
List<AclHibernate> acls = entityManager
.createQuery("from AclHibernate").getResultList();
assertEquals(2, acls.size());
for (Acl acl : acls) {
// Anonymous role is tested with other test method
if (!((SidHibernate) acl.getOwner()).getSidname().equals(
Role.ROLE_ANONYMOUS.getName())) {
assertEquals(site.getId(), acl.getObjectIdentity()
.getIdentifier());
assertEquals(site.getClass().getCanonicalName(), acl
.getObjectIdentity().getType());
List<AccessControlEntry> entries = acl.getEntries();
assertEquals(1, entries.size());
assertEquals('W', ((PermissionHibernate) entries.get(0)
.getPermission()).getCode());
}
}
}
@Test
public void grantRightsTrialSiteObjectRoleWithWriteTrialSiteScopeTest() {
TrialSite site = factory.getTrialSite();
site.setId(1);
// test with trial site scope
Role role_nr = new Role("ROLE_Name_nr", false, false, false, true,
true, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, null);
roleDao.create(role_nr);
Login login_nr = factory.getLogin();
login_nr.getRoles().add(role_nr);
loginDao.create(login_nr);
Sid sid_nr = new PrincipalSid(login_nr.getUsername());
rolesAndRights.grantRights(site, null);
List<AclHibernate> acls_nr = entityManager.createQuery(
"from AclHibernate").getResultList();
assertEquals(1, acls_nr.size());
assertTrue(((SidHibernate) acls_nr.get(0).getOwner()).getSidname()
.equals(Role.ROLE_ANONYMOUS.getName()));
Role role = new Role("ROLE_Name", false, false, false, true, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, null);
roleDao.create(role);
Login login = factory.getLogin();
login.getRoles().add(role);
loginDao.create(login);
Sid sid = new PrincipalSid(login.getUsername());
rolesAndRights.grantRights(site, null);
List<AclHibernate> acls = entityManager
.createQuery("from AclHibernate").getResultList();
assertEquals(1, acls.size());
assertTrue(((SidHibernate) acls.get(0).getOwner()).getSidname().equals(
Role.ROLE_ANONYMOUS.getName()));
}
@Test
public void grantRightsTrialSiteObjectRoleWithReadTrialSiteTest() {
TrialSite site = factory.getTrialSite();
site.setId(1);
Role role = new Role("ROLE_Name", false, false, true, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, null);
roleDao.create(role);
Login login = factory.getLogin();
login.getRoles().add(role);
loginDao.create(login);
Sid sid = new PrincipalSid(login.getUsername());
rolesAndRights.grantRights(site, null);
List<AclHibernate> acls = entityManager
.createQuery("from AclHibernate").getResultList();
assertEquals(2, acls.size());
for (Acl acl : acls) {
// Anonymous role is tested with other test method
if (!((SidHibernate) acl.getOwner()).getSidname().equals(
Role.ROLE_ANONYMOUS.getName())) {
assertEquals(site.getId(), acl.getObjectIdentity()
.getIdentifier());
assertEquals(site.getClass().getCanonicalName(), acl
.getObjectIdentity().getType());
List<AccessControlEntry> entries = acl.getEntries();
assertEquals(1, entries.size());
assertEquals('R', ((PermissionHibernate) entries.get(0)
.getPermission()).getCode());
}
}
}
@Test
public void grantRightsTrialSiteObjectRoleWithReadTrialSiteScopeTest() {
TrialSite site = factory.getTrialSite();
site.setId(1);
// test with trial site scope
Role role_nr = new Role("ROLE_Name_nr", false, true, true, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, null);
roleDao.create(role_nr);
Login login_nr = factory.getLogin();
login_nr.getRoles().add(role_nr);
loginDao.create(login_nr);
Sid sid_nr = new PrincipalSid(login_nr.getUsername());
rolesAndRights.grantRights(site, null);
List<AclHibernate> acls_nr = entityManager.createQuery(
"from AclHibernate").getResultList();
assertEquals(1, acls_nr.size());
assertTrue(((SidHibernate) acls_nr.get(0).getOwner()).getSidname()
.equals(Role.ROLE_ANONYMOUS.getName()));
Role role = new Role("ROLE_Name", false, true, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, null);
roleDao.create(role);
Login login = factory.getLogin();
login.getRoles().add(role);
loginDao.create(login);
Sid sid = new PrincipalSid(login.getUsername());
rolesAndRights.grantRights(site, null);
List<AclHibernate> acls = entityManager
.createQuery("from AclHibernate").getResultList();
assertEquals(1, acls.size());
assertTrue(((SidHibernate) acls.get(0).getOwner()).getSidname().equals(
Role.ROLE_ANONYMOUS.getName()));
}
@Test
public void grantRightsTrialSiteObjectRoleWithAllTrialSiteTest() {
TrialSite site = factory.getTrialSite();
site.setId(1);
Role role = new Role("ROLE_Name", false, false, true, false, true,
true, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, null);
roleDao.create(role);
Login login = factory.getLogin();
login.getRoles().add(role);
loginDao.create(login);
Sid sid = new PrincipalSid(login.getUsername());
rolesAndRights.grantRights(site, null);
List<AclHibernate> acls = entityManager
.createQuery("from AclHibernate").getResultList();
assertEquals(2, acls.size());
for (Acl acl : acls) {
// Anonymous role is tested with other test method
if (!((SidHibernate) acl.getOwner()).getSidname().equals(
Role.ROLE_ANONYMOUS.getName())) {
assertEquals(site.getId(), acl.getObjectIdentity()
.getIdentifier());
assertEquals(site.getClass().getCanonicalName(), acl
.getObjectIdentity().getType());
List<AccessControlEntry> entries = acl.getEntries();
assertEquals(3, entries.size());
List<Character> permissions = new ArrayList<Character>();
permissions.add('R');
permissions.add('W');
permissions.add('A');
for (AccessControlEntry ace : acl.getEntries()) {
assertTrue(permissions.contains(((PermissionHibernate) ace
.getPermission()).getCode()));
assertTrue(permissions
.remove((Character) ((PermissionHibernate) ace
.getPermission()).getCode()));
}
}
}
}
@Test
public void grantRightsTrialObjectWithOutScopeAdminTest() {
Trial trial = factory.getTrial();
trial.setId(1);
Role role = new Role("ROLE_Name", false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, true,
false, false, false, false, false, null);
roleDao.create(role);
Login login = factory.getLogin();
login.getRoles().add(role);
loginDao.create(login);
Sid sid = new PrincipalSid(login.getUsername());
rolesAndRights.grantRights(trial, null);
List<AclHibernate> acls = entityManager
.createQuery("from AclHibernate").getResultList();
assertEquals(1, acls.size());
for (Acl acl : acls) {
assertEquals(trial.getId(), acl.getObjectIdentity().getIdentifier());
assertEquals(trial.getClass().getCanonicalName(), acl
.getObjectIdentity().getType());
List<AccessControlEntry> entries = acl.getEntries();
assertEquals(1, entries.size());
assertEquals('A', ((PermissionHibernate) entries.get(0)
.getPermission()).getCode());
}
}
@Test
public void grantRightsTrialObjectWithOutScopeReadTest() {
Trial trial = factory.getTrial();
trial.setId(1);
Role role = new Role("ROLE_Name", false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, true, false,
false, false, false, false, false, null);
roleDao.create(role);
Login login = factory.getLogin();
login.getRoles().add(role);
loginDao.create(login);
Sid sid = new PrincipalSid(login.getUsername());
rolesAndRights.grantRights(trial, null);
List<AclHibernate> acls = entityManager
.createQuery("from AclHibernate").getResultList();
assertEquals(1, acls.size());
for (Acl acl : acls) {
assertEquals(trial.getId(), acl.getObjectIdentity().getIdentifier());
assertEquals(trial.getClass().getCanonicalName(), acl
.getObjectIdentity().getType());
List<AccessControlEntry> entries = acl.getEntries();
assertEquals(1, entries.size());
assertEquals('R', ((PermissionHibernate) entries.get(0)
.getPermission()).getCode());
}
}
@Test
public void grantRightsTrialObjectWithOutScopeWriteTest() {
Trial trial = factory.getTrial();
trial.setId(1);
Role role = new Role("ROLE_Name", false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, true, false, false, false,
false, false, false, false, false, null);
roleDao.create(role);
Login login = factory.getLogin();
login.getRoles().add(role);
loginDao.create(login);
Sid sid = new PrincipalSid(login.getUsername());
rolesAndRights.grantRights(trial, null);
List<AclHibernate> acls = entityManager
.createQuery("from AclHibernate").getResultList();
assertEquals(1, acls.size());
for (Acl acl : acls) {
assertEquals(trial.getId(), acl.getObjectIdentity().getIdentifier());
assertEquals(trial.getClass().getCanonicalName(), acl
.getObjectIdentity().getType());
List<AccessControlEntry> entries = acl.getEntries();
assertEquals(1, entries.size());
assertEquals('W', ((PermissionHibernate) entries.get(0)
.getPermission()).getCode());
}
}
@Test
public void grantRightsTrialObjectWithOutScopeAllTest() {
Trial trial = factory.getTrial();
trial.setId(1);
Role role = new Role("ROLE_Name", false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, true, false, true, true,
false, false, false, false, false, null);
roleDao.create(role);
Login login = factory.getLogin();
login.getRoles().add(role);
loginDao.create(login);
Sid sid = new PrincipalSid(login.getUsername());
rolesAndRights.grantRights(trial, null);
List<AclHibernate> acls = entityManager
.createQuery("from AclHibernate").getResultList();
assertEquals(1, acls.size());
for (Acl acl : acls) {
assertEquals(trial.getId(), acl.getObjectIdentity().getIdentifier());
assertEquals(trial.getClass().getCanonicalName(), acl
.getObjectIdentity().getType());
List<AccessControlEntry> entries = acl.getEntries();
assertEquals(3, entries.size());
List<Character> permissions = new ArrayList<Character>();
permissions.add('R');
permissions.add('W');
permissions.add('A');
for (AccessControlEntry ace : acl.getEntries()) {
assertTrue(permissions.contains(((PermissionHibernate) ace
.getPermission()).getCode()));
assertTrue(permissions
.remove((Character) ((PermissionHibernate) ace
.getPermission()).getCode()));
}
}
}
@Test
public void grantRightsTrialObjectWithScopeWriteTest() {
Trial trial = factory.getTrial();
Login login = factory.getLogin();
entityManager.persist(login);
TrialSite site1 = factory.getTrialSite();
entityManager.persist(site1);
Role role1 = new Role("ROLE_Name d3", false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, true, true, false, false,
false, false, false, false, false, false, null);
entityManager.persist(role1);
site1.getMembers().add(login.getPerson());
site1 = entityManager.merge(site1);
// Logins site1
login.getRoles().add(role1);
login = entityManager.merge(login);
trial.setLeadingSite(site1);
trial.setSponsorInvestigator(login.getPerson());
trial.addParticipatingSite(site1);
entityManager.persist(trial);
Sid sid = new PrincipalSid(login.getUsername());
rolesAndRights.grantRights(trial, site1);
entityManager.flush();
entityManager.clear();
List<AclHibernate> acls = entityManager
.createQuery("from AclHibernate").getResultList();
assertEquals(1, acls.size());
for (Acl acl : acls) {
assertEquals(trial.getId(), acl.getObjectIdentity().getIdentifier());
assertEquals(trial.getClass().getCanonicalName(), acl
.getObjectIdentity().getType());
List<AccessControlEntry> entries = acl.getEntries();
assertEquals(1, entries.size());
assertEquals('W', ((PermissionHibernate) entries.get(0)
.getPermission()).getCode());
}
}
@Test
@Transactional(propagation=Propagation.REQUIRED)
public void grantRightsTrialObjectWithScopeReadTest() {
Trial trial = factory.getTrial();
Login login = factory.getLogin();
entityManager.persist(login);
TrialSite site1 = factory.getTrialSite();
entityManager.persist(site1);
Role role1 = new Role("Role_name", false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, true, true, false,
false, false, false, false, false, null);
entityManager.persist(role1);
site1.getMembers().add(login.getPerson());
site1 = entityManager.merge(site1);
// Logins site1
login.getRoles().add(role1);
login = entityManager.merge(login);
trial.setLeadingSite(site1);
trial.setSponsorInvestigator(login.getPerson());
trial.addParticipatingSite(site1);
Sid sid = new PrincipalSid(login.getUsername());
rolesAndRights.grantRights(trial, site1);
List<AclHibernate> acls = entityManager
.createQuery("from AclHibernate").getResultList();
assertEquals(1, acls.size());
for (Acl acl : acls) {
assertEquals(trial.getId(), acl.getObjectIdentity().getIdentifier());
assertEquals(trial.getClass().getCanonicalName(), acl
.getObjectIdentity().getType());
List<AccessControlEntry> entries = acl.getEntries();
assertEquals(1, entries.size());
assertEquals('R', ((PermissionHibernate) entries.get(0)
.getPermission()).getCode());
}
}
@Test
public void grantRightsTrialObjectWithScopeAllTest() {
Trial trial = factory.getTrial();
Login login = factory.getLogin();
entityManager.persist(login);
TrialSite site1 = factory.getTrialSite();
entityManager.persist(site1);
Role role1 = new Role("ROLE_Name d3", false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, true, true, true, true,
false, false, false, false, false, false, null);
entityManager.persist(role1);
site1.getMembers().add(login.getPerson());
site1 = entityManager.merge(site1);
// Logins site1
login.getRoles().add(role1);
login = entityManager.merge(login);
trial.setLeadingSite(site1);
trial.setSponsorInvestigator(login.getPerson());
trial.addParticipatingSite(site1);
Sid sid = new PrincipalSid(login.getUsername());
rolesAndRights.grantRights(trial, site1);
List<AclHibernate> acls = entityManager
.createQuery("from AclHibernate").getResultList();
assertEquals(1, acls.size());
for (Acl acl : acls) {
assertEquals(trial.getId(), acl.getObjectIdentity().getIdentifier());
assertEquals(trial.getClass().getCanonicalName(), acl
.getObjectIdentity().getType());
List<AccessControlEntry> entries = acl.getEntries();
assertEquals(2, entries.size());
List<Character> permissions = new ArrayList<Character>();
permissions.add('R');
permissions.add('W');
for (AccessControlEntry ace : acl.getEntries()) {
assertTrue(permissions.contains(((PermissionHibernate) ace
.getPermission()).getCode()));
assertTrue(permissions
.remove((Character) ((PermissionHibernate) ace
.getPermission()).getCode()));
}
}
}
@Test
public void grantRightsTrialSubjectReadTest() {
Login login = factory.getLogin();
entityManager.persist(login);
TrialSite site1 = factory.getTrialSite();
entityManager.persist(site1);
Role role = new Role("ROLE_Name", false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, true, false,
false, false, true, false, false, null);
roleDao.create(role);
entityManager.persist(role);
site1.getMembers().add(login.getPerson());
site1 = entityManager.merge(site1);
// Logins site1
login.getRoles().add(role);
login = entityManager.merge(login);
entityManager.flush();
entityManager.clear();
Trial trial = factory.getTrial();
trial.setLeadingSite(site1);
trial.setSponsorInvestigator(login.getPerson());
entityManager.persist(trial);
entityManager.flush();
entityManager.clear();
TreatmentArm arm1 = new TreatmentArm();
arm1.setName("arm1");
arm1.setDescription("arm1");
arm1.setPlannedSubjects(10);
arm1.setTrial(trial);
TreatmentArm arm2 = new TreatmentArm();
arm2.setName("arm2");
arm2.setDescription("arm2");
arm2.setPlannedSubjects(10);
arm2.setTrial(trial);
Set<TreatmentArm> arms = new HashSet<TreatmentArm>();
arms.add(arm1);
arms.add(arm2);
trial.setTreatmentArms(arms);
trial = entityManager.merge(trial);
rolesAndRights.grantRights(trial, site1);
// Flush session and clear the entity manager
entityManager.flush();
entityManager.clear();
trial = entityManager.find(Trial.class, trial.getId());
Sid sid = new PrincipalSid(login.getUsername());
TrialSubject subject = new TrialSubject();
subject.setArm(trial.getTreatmentArms().iterator().next());
rolesAndRights.grantRights(subject, site1);
List<AclHibernate> acls = entityManager
.createQuery("from AclHibernate").getResultList();
assertEquals(2, acls.size());
for (Acl acl : acls) {
if (acl.getObjectIdentity().getType()
.equals(Trial.class.getCanonicalName())) {
assertEquals(trial.getId(), acl.getObjectIdentity().getIdentifier());
List<AccessControlEntry> entries = acl.getEntries();
assertEquals(1, entries.size());
assertEquals('R', ((PermissionHibernate) entries.get(0)
.getPermission()).getCode());
} else {
assertEquals(subject.getId(), acl.getObjectIdentity().getIdentifier());
assertEquals(subject.getClass().getCanonicalName(), acl
.getObjectIdentity().getType());
List<AccessControlEntry> entries = acl.getEntries();
assertEquals(1, entries.size());
assertEquals('R', ((PermissionHibernate) entries.get(0)
.getPermission()).getCode());
}
}
}
@Test
public void grantRightsTrialSubjectWriteTest() {
Login login = factory.getLogin();
entityManager.persist(login);
TrialSite site1 = factory.getTrialSite();
entityManager.persist(site1);
Role role = new Role("ROLE_Name", false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, true, false,
false, true, false, false, false, null);
roleDao.create(role);
entityManager.persist(role);
site1.getMembers().add(login.getPerson());
site1 = entityManager.merge(site1);
// Logins site1
login.getRoles().add(role);
login = entityManager.merge(login);
Trial trial = factory.getTrial();
trial.setLeadingSite(site1);
trial.setSponsorInvestigator(login.getPerson());
entityManager.persist(trial);
entityManager.flush();
entityManager.clear();
TreatmentArm arm1 = new TreatmentArm();
arm1.setName("arm1");
arm1.setDescription("arm1");
arm1.setPlannedSubjects(10);
arm1.setTrial(trial);
TreatmentArm arm2 = new TreatmentArm();
arm2.setName("arm2");
arm2.setDescription("arm2");
arm2.setPlannedSubjects(10);
arm2.setTrial(trial);
Set<TreatmentArm> arms = new HashSet<TreatmentArm>();
arms.add(arm1);
arms.add(arm2);
trial.setTreatmentArms(arms);
trial = entityManager.merge(trial);
rolesAndRights.grantRights(trial, site1);
// Flush session and clear the entity manager
entityManager.flush();
entityManager.clear();
trial = entityManager.find(Trial.class, trial.getId());
Sid sid = new PrincipalSid(login.getUsername());
TrialSubject subject = new TrialSubject();
subject.setArm(trial.getTreatmentArms().iterator().next());
rolesAndRights.grantRights(subject, site1);
List<AclHibernate> acls = entityManager
.createQuery("from AclHibernate").getResultList();
assertEquals(2, acls.size());
for (Acl acl : acls) {
if (acl.getObjectIdentity().getType()
.equals(Trial.class.getCanonicalName())) {
assertEquals(trial.getId(), acl.getObjectIdentity().getIdentifier());
List<AccessControlEntry> entries = acl.getEntries();
assertEquals(1, entries.size());
assertEquals('R', ((PermissionHibernate) entries.get(0)
.getPermission()).getCode());
} else {
assertEquals(subject.getId(), acl.getObjectIdentity().getIdentifier());
assertEquals(subject.getClass().getCanonicalName(), acl
.getObjectIdentity().getType());
List<AccessControlEntry> entries = acl.getEntries();
assertEquals(1, entries.size());
assertEquals('W', ((PermissionHibernate) entries.get(0)
.getPermission()).getCode());
}
}
}
@Test
public void grantRightsTrialSubjectAdminTest() {
Login login = factory.getLogin();
entityManager.persist(login);
TrialSite site1 = factory.getTrialSite();
entityManager.persist(site1);
Role role = new Role("ROLE_Name", false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, true, false,
false, false, false, true, false, null);
roleDao.create(role);
entityManager.persist(role);
site1.getMembers().add(login.getPerson());
site1 = entityManager.merge(site1);
// Logins site1
login.getRoles().add(role);
login = entityManager.merge(login);
Trial trial = factory.getTrial();
trial.setLeadingSite(site1);
trial.setSponsorInvestigator(login.getPerson());
entityManager.persist(trial);
entityManager.flush();
entityManager.clear();
TreatmentArm arm1 = new TreatmentArm();
arm1.setName("arm1");
arm1.setDescription("arm1");
arm1.setPlannedSubjects(10);
arm1.setTrial(trial);
TreatmentArm arm2 = new TreatmentArm();
arm2.setName("arm2");
arm2.setDescription("arm2");
arm2.setPlannedSubjects(10);
arm2.setTrial(trial);
Set<TreatmentArm> arms = new HashSet<TreatmentArm>();
arms.add(arm1);
arms.add(arm2);
trial.setTreatmentArms(arms);
trial = entityManager.merge(trial);
rolesAndRights.grantRights(trial, site1);
// Flush session and clear the entity manager
entityManager.flush();
entityManager.clear();
trial = entityManager.find(Trial.class, trial.getId());
Sid sid = new PrincipalSid(login.getUsername());
TrialSubject subject = new TrialSubject();
subject.setArm(trial.getTreatmentArms().iterator().next());
rolesAndRights.grantRights(subject, site1);
List<AclHibernate> acls = entityManager
.createQuery("from AclHibernate").getResultList();
assertEquals(2, acls.size());
for (Acl acl : acls) {
if (acl.getObjectIdentity().getType()
.equals(Trial.class.getCanonicalName())) {
assertEquals(trial.getId(), acl.getObjectIdentity().getIdentifier());
List<AccessControlEntry> entries = acl.getEntries();
assertEquals(1, entries.size());
assertEquals('R', ((PermissionHibernate) entries.get(0)
.getPermission()).getCode());
} else {
assertEquals(subject.getId(), acl.getObjectIdentity().getIdentifier());
assertEquals(subject.getClass().getCanonicalName(), acl
.getObjectIdentity().getType());
List<AccessControlEntry> entries = acl.getEntries();
assertEquals(1, entries.size());
assertEquals('A', ((PermissionHibernate) entries.get(0)
.getPermission()).getCode());
}
}
}
@Test
@Ignore
public void grantRightsUserObjectWithOutScopeTest() {
fail();
}
@Test
@Ignore
public void grantRightsUserObjectWithScopeTest() {
fail();
}
@Test
@Ignore
public void registerPersonRoleTest() {
fail();
}
@Test
@Ignore
public void registerPersonTest() {
fail();
}
@Test
@Ignore
public void newPersonGrantUserRightsTest() {
fail();
}
@Test
@Ignore
public void newPersonGrantUserTrialTest() {
fail();
}
@Test
@Ignore
public void newPersonGrantUserTrialSiteTest() {
fail();
}
@Test
@Ignore
public void newPersonGrantUserTrialSubjectTest() {
fail();
}
}