/** * <a href="http://www.openolat.org"> * OpenOLAT - Online Learning and Training</a><br> * <p> * Licensed under the Apache License, Version 2.0 (the "License"); <br> * you may not use this file except in compliance with the License.<br> * You may obtain a copy of the License at the * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> * <p> * Unless required by applicable law or agreed to in writing,<br> * software distributed under the License is distributed on an "AS IS" BASIS, <br> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> * See the License for the specific language governing permissions and <br> * limitations under the License. * <p> * Initial code contributed and copyrighted by<br> * frentix GmbH, http://www.frentix.com * <p> */ package org.olat.basesecurity.manager; import java.util.Collections; import java.util.List; import java.util.Set; import org.junit.Assert; import org.junit.Test; import org.olat.basesecurity.Grant; import org.olat.basesecurity.Group; import org.olat.basesecurity.GroupMembership; import org.olat.basesecurity.model.GroupImpl; import org.olat.core.commons.persistence.DB; import org.olat.core.id.Identity; import org.olat.resource.OLATResource; import org.olat.test.JunitTestHelper; import org.olat.test.OlatTestCase; import org.springframework.beans.factory.annotation.Autowired; /** * * Initial date: 27.02.2014<br> * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * */ public class GroupDAOTest extends OlatTestCase { @Autowired private DB dbInstance; @Autowired private GroupDAO groupDao; @Test public void createGroup() { Group group = groupDao.createGroup(); dbInstance.commit(); Assert.assertNotNull(group); } @Test public void createGroupMembership() { Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-1-"); Group group = groupDao.createGroup(); GroupMembership membership = groupDao.addMembershipTwoWay(group, id, "author"); dbInstance.commit(); Assert.assertNotNull(membership); } @Test public void createGroupMembership_oneWay() { Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-1-"); Group group = groupDao.createGroup(); groupDao.addMembershipOneWay(group, id, "author"); dbInstance.commit(); } @Test public void createGroupMembership_v2() { Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-1-"); Group group = groupDao.createGroup(); GroupMembership membership = groupDao.addMembershipTwoWay(group, id, "author"); dbInstance.commit(); Assert.assertNotNull(membership); dbInstance.getCurrentEntityManager().detach(group); dbInstance.commitAndCloseSession(); GroupImpl loadedGroup = (GroupImpl)groupDao.loadGroup(group.getKey()); Assert.assertNotNull(loadedGroup); Set<GroupMembership> members = loadedGroup.getMembers(); Assert.assertNotNull(members); Assert.assertEquals(1, members.size()); } @Test public void createGroupMembership_oneWay_v2() { Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-1-"); Group group = groupDao.createGroup(); groupDao.addMembershipOneWay(group, id, "author"); dbInstance.commitAndCloseSession(); GroupImpl loadedGroup = (GroupImpl)groupDao.loadGroup(group.getKey()); Assert.assertNotNull(loadedGroup); Set<GroupMembership> members = loadedGroup.getMembers(); Assert.assertNotNull(members); Assert.assertEquals(1, members.size()); } @Test public void getMemberships() { Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-1-"); Group group = groupDao.createGroup(); GroupMembership membership = groupDao.addMembershipTwoWay(group, id, "author"); dbInstance.commit(); Assert.assertNotNull(membership); dbInstance.getCurrentEntityManager().detach(group); dbInstance.commitAndCloseSession(); List<GroupMembership> members = groupDao.getMemberships(group, "author"); Assert.assertNotNull(members); Assert.assertEquals(1, members.size()); } @Test public void getMemberships_oneWay() { Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-1-"); Group group = groupDao.createGroup(); groupDao.addMembershipOneWay(group, id, "author"); dbInstance.commitAndCloseSession(); List<GroupMembership> members = groupDao.getMemberships(group, "author"); Assert.assertNotNull(members); Assert.assertEquals(1, members.size()); } @Test public void hasRole() { Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-2-"); Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-2b-"); Group group = groupDao.createGroup(); GroupMembership membership = groupDao.addMembershipTwoWay(group, id, "author"); dbInstance.commit(); Assert.assertNotNull(membership); dbInstance.commitAndCloseSession(); boolean hasRole = groupDao.hasRole(group, id, "author"); Assert.assertTrue(hasRole); //negative tests boolean hasNotRole = groupDao.hasRole(group, id, "pilot"); Assert.assertFalse(hasNotRole); boolean id2_hasNotRole = groupDao.hasRole(group, id2, "author"); Assert.assertFalse(id2_hasNotRole); } @Test public void getMembers() { Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-3-"); Group group = groupDao.createGroup(); GroupMembership membership = groupDao.addMembershipTwoWay(group, id, "author"); dbInstance.commit(); Assert.assertNotNull(membership); dbInstance.commitAndCloseSession(); List<Identity> members = groupDao.getMembers(group, "author"); Assert.assertNotNull(members); Assert.assertEquals(1, members.size()); } @Test public void countMembers() { Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-4-"); Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-5-"); Identity id3 = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-6-"); Group group = groupDao.createGroup(); GroupMembership membership1 = groupDao.addMembershipTwoWay(group, id1, "pilot"); GroupMembership membership2 = groupDao.addMembershipTwoWay(group, id2, "pilot"); GroupMembership membership3 = groupDao.addMembershipTwoWay(group, id3, "copilot"); dbInstance.commit(); Assert.assertNotNull(membership1); Assert.assertNotNull(membership2); Assert.assertNotNull(membership3); dbInstance.commitAndCloseSession(); int numOfMembers = groupDao.countMembers(group); Assert.assertEquals(3, numOfMembers); } @Test public void removeMembership() { Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-7-"); Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-8-"); Group group = groupDao.createGroup(); GroupMembership membership1 = groupDao.addMembershipTwoWay(group, id1, "pilot"); GroupMembership membership2 = groupDao.addMembershipTwoWay(group, id2, "pilot"); Assert.assertNotNull(membership1); Assert.assertNotNull(membership2); dbInstance.commitAndCloseSession(); //check List<GroupMembership> memberships = groupDao.getMemberships(group, "pilot"); Assert.assertEquals(2, memberships.size()); //remove groupDao.removeMembership(group, id1); dbInstance.commitAndCloseSession(); //check List<GroupMembership> deletedMemberships = groupDao.getMemberships(group, "pilot"); Assert.assertEquals(1, deletedMemberships.size()); Identity stayingMember = deletedMemberships.get(0).getIdentity(); Assert.assertNotNull(stayingMember); Assert.assertEquals(id2, stayingMember); } @Test public void removeMembership_byRole() { Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-7-"); Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-8-"); Group group = groupDao.createGroup(); GroupMembership membership1 = groupDao.addMembershipTwoWay(group, id1, "pilot"); GroupMembership membership2 = groupDao.addMembershipTwoWay(group, id2, "pilot"); GroupMembership membership2alt = groupDao.addMembershipTwoWay(group, id2, "commander"); Assert.assertNotNull(membership1); Assert.assertNotNull(membership2); Assert.assertNotNull(membership2alt); dbInstance.commitAndCloseSession(); //check List<GroupMembership> memberships = groupDao.getMemberships(group, "pilot"); Assert.assertEquals(2, memberships.size()); List<GroupMembership> membershipsAlt = groupDao.getMemberships(group, "commander"); Assert.assertEquals(1, membershipsAlt.size()); //remove groupDao.removeMembership(group, id2, "pilot"); dbInstance.commitAndCloseSession(); //check pilots List<GroupMembership> stayingMemberships = groupDao.getMemberships(group, "pilot"); Assert.assertEquals(1, stayingMemberships.size()); Identity stayingMember = stayingMemberships.get(0).getIdentity(); Assert.assertNotNull(stayingMember); Assert.assertEquals(id1, stayingMember); //check commanders List<GroupMembership> stayingMembershipsAlt = groupDao.getMemberships(group, "commander"); Assert.assertEquals(1, stayingMembershipsAlt.size()); Identity stayingMemberAlt = stayingMembershipsAlt.get(0).getIdentity(); Assert.assertNotNull(stayingMemberAlt); Assert.assertEquals(id2, stayingMemberAlt); } @Test public void removeMemberships_group() { Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-7-"); Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-8-"); Group group = groupDao.createGroup(); GroupMembership membership1 = groupDao.addMembershipTwoWay(group, id1, "pilot"); GroupMembership membership2 = groupDao.addMembershipTwoWay(group, id2, "pilot"); Assert.assertNotNull(membership1); Assert.assertNotNull(membership2); dbInstance.commitAndCloseSession(); //check List<GroupMembership> memberships = groupDao.getMemberships(group, "pilot"); Assert.assertEquals(2, memberships.size()); //remove groupDao.removeMemberships(group); dbInstance.commitAndCloseSession(); //check List<GroupMembership> deletedMemberships = groupDao.getMemberships(group, "pilot"); Assert.assertTrue(deletedMemberships.isEmpty()); } @Test public void removeMemberships_groupAndRole() { Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-12-"); Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-13-"); Group group = groupDao.createGroup(); GroupMembership membership1 = groupDao.addMembershipTwoWay(group, id1, "pilot"); GroupMembership membership2 = groupDao.addMembershipTwoWay(group, id2, "copilot"); Assert.assertNotNull(membership1); Assert.assertNotNull(membership2); dbInstance.commitAndCloseSession(); //check int numOfMembers = groupDao.countMembers(group); Assert.assertEquals(2, numOfMembers); //remove int numOfDeletedRows = groupDao.removeMemberships(group, "pilot"); dbInstance.commitAndCloseSession(); Assert.assertEquals(1, numOfDeletedRows); //check List<GroupMembership> deletedMemberships = groupDao.getMemberships(group, "pilot"); Assert.assertTrue(deletedMemberships.isEmpty()); List<GroupMembership> lastMemberships = groupDao.getMemberships(group, "copilot"); Assert.assertEquals(1, lastMemberships.size()); } @Test public void removeMemberships_identity() { // Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-9-"); Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-10-"); Group group1 = groupDao.createGroup(); GroupMembership membership1 = groupDao.addMembershipTwoWay(group1, id1, "pilot"); GroupMembership membership2 = groupDao.addMembershipTwoWay(group1, id2, "pilot"); Assert.assertNotNull(membership1); Assert.assertNotNull(membership2); dbInstance.commitAndCloseSession(); Group group2 = groupDao.createGroup(); GroupMembership membership3 = groupDao.addMembershipTwoWay(group2, id1, "passanger"); GroupMembership membership4 = groupDao.addMembershipTwoWay(group2, id2, "passanger"); Assert.assertNotNull(membership3); Assert.assertNotNull(membership4); dbInstance.commitAndCloseSession(); //check List<GroupMembership> memberships = groupDao.getMemberships(group1, "pilot"); Assert.assertEquals(2, memberships.size()); //remove groupDao.removeMemberships(id1); dbInstance.commitAndCloseSession(); //check List<GroupMembership> deletedMemberships1 = groupDao.getMemberships(group1, "pilot"); Assert.assertEquals(1, deletedMemberships1.size()); Assert.assertEquals(membership2, deletedMemberships1.get(0)); List<GroupMembership> deletedMemberships2 = groupDao.getMemberships(group2, "passanger"); Assert.assertEquals(1, deletedMemberships2.size()); Assert.assertEquals(membership4, deletedMemberships2.get(0)); } @Test public void addGrant() { Group group = groupDao.createGroup(); OLATResource resource = JunitTestHelper.createRandomResource(); groupDao.addGrant(group, "grant-role", "read-only", resource); dbInstance.commitAndCloseSession(); } @Test public void getGrants_withResource() { Group group = groupDao.createGroup(); OLATResource resource = JunitTestHelper.createRandomResource(); groupDao.addGrant(group, "getGrants-res", "getGrants-res-perm", resource); dbInstance.commitAndCloseSession(); List<Group> groups = Collections.singletonList(group); List<Grant> grants = groupDao.getGrants(groups, resource); Assert.assertNotNull(grants); Assert.assertEquals(1, grants.size()); Grant grant = grants.get(0); Assert.assertNotNull(grant); Assert.assertEquals(group, grant.getGroup()); Assert.assertEquals(resource, grant.getResource()); Assert.assertEquals("getGrants-res", grant.getRole()); Assert.assertEquals("getGrants-res-perm", grant.getPermission()); } @Test public void getGrants_withResource_withRole() { Group group = groupDao.createGroup(); OLATResource resource = JunitTestHelper.createRandomResource(); groupDao.addGrant(group, "getGrants-role-1", "getGrants-role-1-perm", resource); groupDao.addGrant(group, "getGrants-role-2", "getGrants-role-2-perm", resource); dbInstance.commitAndCloseSession(); List<Grant> grants = groupDao.getGrants(group, "getGrants-role-2", resource); Assert.assertNotNull(grants); Assert.assertEquals(1, grants.size()); Grant grant = grants.get(0); Assert.assertNotNull(grant); Assert.assertEquals(group, grant.getGroup()); Assert.assertEquals(resource, grant.getResource()); Assert.assertEquals("getGrants-role-2", grant.getRole()); Assert.assertEquals("getGrants-role-2-perm", grant.getPermission()); } @Test public void hasGrant() { Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("grant-1-"); Group group = groupDao.createGroup(); String role = "hasGrant-role"; groupDao.addMembershipTwoWay(group, id, role); OLATResource resource = JunitTestHelper.createRandomResource(); groupDao.addGrant(group, role, "hasGrant-perm", resource); dbInstance.commitAndCloseSession(); boolean hasGrant = groupDao.hasGrant(id, "hasGrant-perm", resource); Assert.assertTrue(hasGrant); } @Test public void getPermissions() { Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("grant-1-"); Group group = groupDao.createGroup(); String role = "getPermissions-role"; groupDao.addMembershipTwoWay(group, id, role); OLATResource resource = JunitTestHelper.createRandomResource(); groupDao.addGrant(group, role, "getPermissions-perm", resource); dbInstance.commitAndCloseSession(); List<String> permissions = groupDao.getPermissions(id, resource); Assert.assertNotNull(permissions); Assert.assertEquals(1, permissions.size()); Assert.assertEquals("getPermissions-perm", permissions.get(0)); } @Test public void getPermissions_complex() { Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("grant-1-"); Group group = groupDao.createGroup(); String role1 = "getPermissions-role-1"; groupDao.addMembershipTwoWay(group, id, role1); String role2 = "getPermissions-role-2"; groupDao.addMembershipTwoWay(group, id, role2); OLATResource resource = JunitTestHelper.createRandomResource(); groupDao.addGrant(group, role1, "getPermissions-perm-1", resource); groupDao.addGrant(group, role2, "getPermissions-perm-2", resource); dbInstance.commitAndCloseSession(); List<String> permissions = groupDao.getPermissions(id, resource); Assert.assertNotNull(permissions); Assert.assertEquals(2, permissions.size()); Assert.assertTrue(permissions.contains("getPermissions-perm-1")); Assert.assertTrue(permissions.contains("getPermissions-perm-2")); } @Test public void addRemoveGrant() { Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("addremove-1-"); Group group = groupDao.createGroup(); groupDao.addMembershipTwoWay(group, id, "addremove-1"); groupDao.addMembershipTwoWay(group, id, "addremove-2"); OLATResource resource = JunitTestHelper.createRandomResource(); groupDao.addGrant(group, "addremove-1", "addremove-1-perm", resource); groupDao.addGrant(group, "addremove-2", "addremove-2-perm", resource); dbInstance.commitAndCloseSession(); //setup check boolean hasPerm1 = groupDao.hasGrant(id, "addremove-1-perm", resource); Assert.assertTrue(hasPerm1); boolean hasPerm2 = groupDao.hasGrant(id, "addremove-2-perm", resource); Assert.assertTrue(hasPerm2); //remove perm 1 groupDao.removeGrant(group, "addremove-1", "addremove-1-perm", resource); dbInstance.commitAndCloseSession(); //check boolean hasStillPerm1 = groupDao.hasGrant(id, "addremove-1-perm", resource); Assert.assertFalse(hasStillPerm1); boolean hasStillPerm2 = groupDao.hasGrant(id, "addremove-2-perm", resource); Assert.assertTrue(hasStillPerm2); } @Test public void addRemoveGrants() { Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("addremove-1-"); Group group = groupDao.createGroup(); groupDao.addMembershipTwoWay(group, id, "addremove-1"); groupDao.addMembershipTwoWay(group, id, "addremove-2"); OLATResource resource = JunitTestHelper.createRandomResource(); groupDao.addGrant(group, "addremove-1", "addremove-1-perm", resource); groupDao.addGrant(group, "addremove-1", "addremove-11-perm", resource); groupDao.addGrant(group, "addremove-2", "addremove-2-perm", resource); groupDao.addGrant(group, "addremove-2", "addremove-22-perm", resource); dbInstance.commitAndCloseSession(); //setup check boolean hasPerm1 = groupDao.hasGrant(id, "addremove-1-perm", resource); Assert.assertTrue(hasPerm1); boolean hasPerm11 = groupDao.hasGrant(id, "addremove-11-perm", resource); Assert.assertTrue(hasPerm11); boolean hasPerm2 = groupDao.hasGrant(id, "addremove-2-perm", resource); Assert.assertTrue(hasPerm2); boolean hasPerm22 = groupDao.hasGrant(id, "addremove-22-perm", resource); Assert.assertTrue(hasPerm22); //remove perm 1 groupDao.removeGrants(group, "addremove-1", resource); dbInstance.commitAndCloseSession(); //check boolean hasStillPerm1 = groupDao.hasGrant(id, "addremove-1-perm", resource); Assert.assertFalse(hasStillPerm1); boolean hasStillPerm11 = groupDao.hasGrant(id, "addremove-11-perm", resource); Assert.assertFalse(hasStillPerm11); boolean hasStillPerm2 = groupDao.hasGrant(id, "addremove-2-perm", resource); Assert.assertTrue(hasStillPerm2); boolean hasStillPerm22 = groupDao.hasGrant(id, "addremove-22-perm", resource); Assert.assertTrue(hasStillPerm22); } }