/* * Copyright (c) 2010-2016 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.evolveum.midpoint.model.intest; import com.evolveum.icf.dummy.resource.*; import com.evolveum.midpoint.common.refinery.RefinedResourceSchema; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.query.ObjectQuery; import com.evolveum.midpoint.prism.util.PrismTestUtil; import com.evolveum.midpoint.prism.xml.XmlTypeConverter; import com.evolveum.midpoint.schema.GetOperationOptions; import com.evolveum.midpoint.schema.SearchResultList; import com.evolveum.midpoint.schema.SelectorOptions; import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.schema.processor.ObjectClassComplexTypeDefinition; import com.evolveum.midpoint.schema.processor.ResourceAttributeDefinition; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.util.MiscSchemaUtil; import com.evolveum.midpoint.schema.util.ObjectQueryUtil; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.test.DummyResourceContoller; import com.evolveum.midpoint.test.IntegrationTestTools; import com.evolveum.midpoint.test.util.TestUtil; import com.evolveum.midpoint.util.exception.*; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; import org.testng.annotations.Test; import javax.xml.datatype.XMLGregorianCalendar; import javax.xml.namespace.QName; import java.io.File; import java.io.FileNotFoundException; import java.net.ConnectException; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; import static com.evolveum.midpoint.test.IntegrationTestTools.display; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNotNull; /** * Test of account-entitlement association. * * @author Radovan Semancik * */ @ContextConfiguration(locations = {"classpath:ctx-model-intest-test-main.xml"}) @DirtiesContext(classMode = ClassMode.AFTER_CLASS) public class TestEntitlements extends AbstractInitializedModelIntegrationTest { public static final File TEST_DIR = new File("src/test/resources/entitlements"); public static final File ROLE_SWASHBUCKLER_FILE = new File(TEST_DIR, "role-swashbuckler.xml"); public static final String ROLE_SWASHBUCKLER_OID = "10000000-0000-0000-0000-000000001601"; public static final File ROLE_LANDLUBER_FILE = new File(TEST_DIR, "role-landluber.xml"); public static final String ROLE_LANDLUBER_OID = "10000000-0000-0000-0000-000000001603"; public static final File ROLE_WIMP_FILE = new File(TEST_DIR, "role-wimp.xml"); public static final String ROLE_WIMP_OID = "10000000-0000-0000-0000-000000001604"; public static final File ROLE_MAPMAKER_FILE = new File(TEST_DIR, "role-mapmaker.xml"); public static final String ROLE_MAPMAKER_OID = "10000000-0000-0000-0000-000000001605"; public static final File ROLE_BRUTE_FILE = new File(TEST_DIR, "role-brute.xml"); public static final String ROLE_BRUTE_OID = "10000000-0000-0000-0000-000000001606"; public static final String ROLE_BRUTE_NAME = "Brute"; public static final String GROUP_BRUTE_NAME = "brute"; public static final File ROLE_THUG_FILE = new File(TEST_DIR, "role-thug.xml"); public static final String ROLE_THUG_OID = "10000000-0000-0000-0000-000000001607"; public static final String ROLE_THUG_NAME = "Thug"; public static final String GROUP_THUG_NAME = "thug"; public static final File SHADOW_GROUP_DUMMY_SWASHBUCKLERS_FILE = new File(TEST_DIR, "group-swashbucklers.xml"); public static final String SHADOW_GROUP_DUMMY_SWASHBUCKLERS_OID = "20000000-0000-0000-3333-000000000001"; public static final String GROUP_DUMMY_SWASHBUCKLERS_NAME = "swashbucklers"; public static final String GROUP_DUMMY_SWASHBUCKLERS_DESCRIPTION = "Scurvy swashbucklers"; public static final File SHADOW_GROUP_DUMMY_LANDLUBERS_FILE = new File(TEST_DIR, "group-landlubers.xml"); public static final String SHADOW_GROUP_DUMMY_LANDLUBERS_OID = "20000000-0000-0000-3333-000000000003"; public static final String GROUP_DUMMY_LANDLUBERS_NAME = "landlubers"; public static final String GROUP_DUMMY_LANDLUBERS_DESCRIPTION = "Earthworms"; public static final String GROUP_DUMMY_WIMPS_NAME = "wimps"; public static final String GROUP_DUMMY_MAPMAKERS_NAME = "mapmakers"; public static final String ACCOUNT_GUYBRUSH_DUMMY_ORANGE_USERNAME = "guybrush"; private static final QName RESOURCE_DUMMY_GROUP_OBJECTCLASS = new QName(RESOURCE_DUMMY_NAMESPACE, "GroupObjectClass"); private static final String USER_WALLY_NAME = "wally"; private static final String USER_WALLY_FULLNAME = "Wally B. Feed"; @Override public void initSystem(Task initTask, OperationResult initResult) throws Exception { super.initSystem(initTask, initResult); importObjectFromFile(ROLE_SWASHBUCKLER_FILE); importObjectFromFile(ROLE_LANDLUBER_FILE); importObjectFromFile(ROLE_MAPMAKER_FILE); } /** * Add group shadow using model service. Group should appear on dummy resource. */ @Test public void test100AddGroupShadowSwashbucklers() throws Exception { final String TEST_NAME = "test100AddGroupShadowSwashbucklers"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); PrismObject<ShadowType> group = prismContext.parseObject(SHADOW_GROUP_DUMMY_SWASHBUCKLERS_FILE); // WHEN addObject(group, task, result); // THEN result.computeStatus(); TestUtil.assertSuccess(result); DummyGroup dummyGroup = getDummyResource().getGroupByName(GROUP_DUMMY_SWASHBUCKLERS_NAME); assertNotNull("No group created on dummy resource", dummyGroup); display("Group", dummyGroup); assertEquals("Wrong group description", GROUP_DUMMY_SWASHBUCKLERS_DESCRIPTION, dummyGroup.getAttributeValue(DummyResourceContoller.DUMMY_GROUP_ATTRIBUTE_DESCRIPTION)); } @Test public void test101GetGroupShadowSwashbucklers() throws Exception { final String TEST_NAME = "test101GetGroupShadowSwashbucklers"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN PrismObject<ShadowType> shadow = modelService.getObject(ShadowType.class, SHADOW_GROUP_DUMMY_SWASHBUCKLERS_OID, null, task, result); // THEN result.computeStatus(); TestUtil.assertSuccess(result); display("Shadow", shadow); assertShadowModel(shadow, SHADOW_GROUP_DUMMY_SWASHBUCKLERS_OID, GROUP_DUMMY_SWASHBUCKLERS_NAME, getDummyResourceType(), RESOURCE_DUMMY_GROUP_OBJECTCLASS); IntegrationTestTools.assertAttribute(shadow, getDummyResourceType(), DummyResourceContoller.DUMMY_GROUP_ATTRIBUTE_DESCRIPTION, GROUP_DUMMY_SWASHBUCKLERS_DESCRIPTION); } /** * Add account to a group using model service (shadow operations). */ @Test public void test110AssociateGuybrushToSwashbucklers() throws Exception { final String TEST_NAME = "test110AssociateGuybrushToSwashbucklers"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); ObjectDelta<ShadowType> delta = IntegrationTestTools.createEntitleDelta(ACCOUNT_SHADOW_GUYBRUSH_OID, dummyResourceCtl.getAttributeQName(DummyResourceContoller.DUMMY_ENTITLEMENT_GROUP_NAME), SHADOW_GROUP_DUMMY_SWASHBUCKLERS_OID, prismContext); Collection<ObjectDelta<? extends ObjectType>> deltas = MiscSchemaUtil.createCollection(delta); // WHEN modelService.executeChanges(deltas, null, task, result); // THEN result.computeStatus(); TestUtil.assertSuccess(result); DummyGroup dummyGroup = getDummyResource().getGroupByName(GROUP_DUMMY_SWASHBUCKLERS_NAME); assertNotNull("No group created on dummy resource", dummyGroup); display("Group", dummyGroup); assertEquals("Wrong group description", GROUP_DUMMY_SWASHBUCKLERS_DESCRIPTION, dummyGroup.getAttributeValue(DummyResourceContoller.DUMMY_GROUP_ATTRIBUTE_DESCRIPTION)); assertGroupMember(dummyGroup, ACCOUNT_GUYBRUSH_DUMMY_USERNAME); } @Test public void test200AssignRoleSwashbucklerToJack() throws Exception { final String TEST_NAME = "test200AssignRoleSwashbucklerToJack"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN assignRole(USER_JACK_OID, ROLE_SWASHBUCKLER_OID, task, result); // THEN result.computeStatus(); TestUtil.assertSuccess(result); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User jack", user); assertDefaultDummyAccount(ACCOUNT_JACK_DUMMY_USERNAME, ACCOUNT_JACK_DUMMY_FULLNAME, true); DummyGroup dummyGroup = getDummyResource().getGroupByName(GROUP_DUMMY_SWASHBUCKLERS_NAME); assertNotNull("No group on dummy resource", dummyGroup); display("Group", dummyGroup); assertEquals("Wrong group description", GROUP_DUMMY_SWASHBUCKLERS_DESCRIPTION, dummyGroup.getAttributeValue(DummyResourceContoller.DUMMY_GROUP_ATTRIBUTE_DESCRIPTION)); assertGroupMember(dummyGroup, ACCOUNT_GUYBRUSH_DUMMY_USERNAME); assertGroupMember(dummyGroup, ACCOUNT_JACK_DUMMY_USERNAME); } @Test public void test209UnAssignRoleSwashbucklerFromJack() throws Exception { final String TEST_NAME = "test209UnAssignRoleSwashbucklerFromJack"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN unassignRole(USER_JACK_OID, ROLE_SWASHBUCKLER_OID, task, result); // THEN result.computeStatus(); TestUtil.assertSuccess(result); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User jack", user); // TODO: assert role assignment DummyGroup dummyGroup = getDummyResource().getGroupByName(GROUP_DUMMY_SWASHBUCKLERS_NAME); assertNotNull("No group on dummy resource", dummyGroup); display("Group", dummyGroup); assertEquals("Wrong group description", GROUP_DUMMY_SWASHBUCKLERS_DESCRIPTION, dummyGroup.getAttributeValue(DummyResourceContoller.DUMMY_GROUP_ATTRIBUTE_DESCRIPTION)); assertGroupMember(dummyGroup, ACCOUNT_GUYBRUSH_DUMMY_USERNAME); assertNoGroupMember(dummyGroup, ACCOUNT_JACK_DUMMY_USERNAME); assertNoDummyAccount(ACCOUNT_JACK_DUMMY_USERNAME); } /** * Create the group from midPoint. Therefore the shadow exists. */ @Test public void test220AssignRoleLandluberToWally() throws Exception { final String TEST_NAME = "test220AssignRoleLandluberToWally"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); addObject(SHADOW_GROUP_DUMMY_LANDLUBERS_FILE); PrismObject<UserType> user = createUser(USER_WALLY_NAME, USER_WALLY_FULLNAME, true); addObject(user); // WHEN assignRole(user.getOid(), ROLE_LANDLUBER_OID, task, result); // THEN result.computeStatus(); TestUtil.assertSuccess(result); DummyGroup dummyGroup = getDummyResource().getGroupByName(GROUP_DUMMY_LANDLUBERS_NAME); assertNotNull("No group on dummy resource", dummyGroup); display("Group", dummyGroup); assertEquals("Wrong group description", GROUP_DUMMY_LANDLUBERS_DESCRIPTION, dummyGroup.getAttributeValue(DummyResourceContoller.DUMMY_GROUP_ATTRIBUTE_DESCRIPTION)); assertGroupMember(dummyGroup, USER_WALLY_NAME); } /** * Create the group directly on resource. Therefore the shadow does NOT exists. */ @Test public void test222AssignRoleMapmakerToWally() throws Exception { final String TEST_NAME = "test222AssignRoleMapmakerToWally"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); DummyGroup mapmakers = new DummyGroup(GROUP_DUMMY_MAPMAKERS_NAME); getDummyResource().addGroup(mapmakers); PrismObject<UserType> user = findUserByUsername(USER_WALLY_NAME); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(user.getOid(), ROLE_MAPMAKER_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); assertGroupMember(GROUP_DUMMY_MAPMAKERS_NAME, USER_WALLY_NAME, getDummyResource()); } @Test public void test224UnassignRoleMapmakerFromWally() throws Exception { final String TEST_NAME = "test224UnassignRoleMapmakerFromWally"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); PrismObject<UserType> user = findUserByUsername(USER_WALLY_NAME); // WHEN TestUtil.displayWhen(TEST_NAME); unassignRole(user.getOid(), ROLE_MAPMAKER_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); DummyGroup dummyGroup = getDummyResource().getGroupByName(GROUP_DUMMY_MAPMAKERS_NAME); assertNotNull("No group on dummy resource", dummyGroup); display("Group", dummyGroup); assertNoGroupMember(dummyGroup, USER_WALLY_NAME); } @Test public void test300AddRoleWimp() throws Exception { final String TEST_NAME = "test300AddRoleWimp"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); addObject(ROLE_WIMP_FILE, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); DummyGroup dummyGroup = getDummyResource().getGroupByName(GROUP_DUMMY_WIMPS_NAME); assertNotNull("No group on dummy resource", dummyGroup); display("Group", dummyGroup); // assertEquals("Wrong group description", GROUP_DUMMY_LANDLUBERS_DESCRIPTION, // dummyGroup.getAttributeValue(DummyResourceContoller.DUMMY_GROUP_ATTRIBUTE_DESCRIPTION)); assertNoGroupMembers(dummyGroup); DummyGroup dummyGroupAtOrange = dummyResourceOrange.getGroupByName(GROUP_DUMMY_WIMPS_NAME); assertNotNull("No group on orange dummy resource", dummyGroupAtOrange); display("Group @orange", dummyGroupAtOrange); assertNoGroupMembers(dummyGroupAtOrange); } @Test public void test302AddRoleBrute() throws Exception { final String TEST_NAME = "test302AddRoleBrute"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); addObject(ROLE_BRUTE_FILE, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); DummyGroup dummyGroupBrute = dummyResourceOrange.getGroupByName(GROUP_BRUTE_NAME); assertNotNull("No group on orange dummy resource", dummyGroupBrute); display("Group", dummyGroupBrute); assertNoGroupMembers(dummyGroupBrute); DummyGroup dummyGroupBruteWannabe = dummyResourceOrange.getGroupByName(GROUP_BRUTE_NAME + "-wannabe"); assertNotNull("No wannabe group on orange dummy resource", dummyGroupBruteWannabe); display("Wannabe Group", dummyGroupBruteWannabe); assertNoGroupMembers(dummyGroupBruteWannabe); } @Test public void test304AddRoleThug() throws Exception { final String TEST_NAME = "test304AddRoleThug"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); addObject(ROLE_THUG_FILE, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); DummyGroup dummyGroupThug = dummyResourceOrange.getGroupByName(GROUP_THUG_NAME); assertNotNull("No group on orange dummy resource", dummyGroupThug); display("Group", dummyGroupThug); assertNoGroupMembers(dummyGroupThug); DummyGroup dummyGroupThugWannabe = dummyResourceOrange.getGroupByName(GROUP_THUG_NAME + "-wannabe"); assertNotNull("No wannabe group on orange dummy resource", dummyGroupThugWannabe); display("Wannabe Group", dummyGroupThugWannabe); assertNoGroupMembers(dummyGroupThugWannabe); } @Test public void test310AssignRoleWimpToLargo() throws Exception { final String TEST_NAME = "test310AssignRoleWimpToLargo"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); addObject(USER_LARGO_FILE); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_LARGO_OID, ROLE_WIMP_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); assertGroupMember(GROUP_DUMMY_WIMPS_NAME, USER_LARGO_USERNAME, getDummyResource()); DummyGroup dummyGroupWimpAtOrange = dummyResourceOrange.getGroupByName(GROUP_DUMMY_WIMPS_NAME); assertNotNull("No group on orange dummy resource", dummyGroupWimpAtOrange); display("Group @orange", dummyGroupWimpAtOrange); assertGroupMember(dummyGroupWimpAtOrange, USER_LARGO_USERNAME); } @Test public void test312AssignRoleBruteToLargo() throws Exception { final String TEST_NAME = "test312AssignRoleBruteToLargo"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_LARGO_OID, ROLE_BRUTE_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); assertGroupMember(GROUP_BRUTE_NAME, USER_LARGO_USERNAME, dummyResourceOrange); DummyGroup dummyGroupBruteWannabe = dummyResourceOrange.getGroupByName(GROUP_BRUTE_NAME + "-wannabe"); assertNotNull("No wannabe group on orange dummy resource", dummyGroupBruteWannabe); display("Wannabe Group", dummyGroupBruteWannabe); assertGroupMember(dummyGroupBruteWannabe, USER_LARGO_USERNAME); } @Test public void test313UnAssignRoleBruteFromLargo() throws Exception { final String TEST_NAME = "test313UnAssignRoleBruteFromLargo"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); unassignRole(USER_LARGO_OID, ROLE_BRUTE_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); DummyGroup dummyGroupBrute = dummyResourceOrange.getGroupByName(GROUP_BRUTE_NAME); assertNotNull("No group on orange dummy resource", dummyGroupBrute); display("Group", dummyGroupBrute); assertNoGroupMembers(dummyGroupBrute); DummyGroup dummyGroupBruteWannabe = dummyResourceOrange.getGroupByName(GROUP_BRUTE_NAME + "-wannabe"); assertNotNull("No wannabe group on orange dummy resource", dummyGroupBruteWannabe); display("Wannabe Group", dummyGroupBruteWannabe); assertNoGroupMembers(dummyGroupBruteWannabe); assertGroupMember(GROUP_DUMMY_WIMPS_NAME, USER_LARGO_USERNAME, getDummyResource()); DummyGroup dummyGroupAtOrange = dummyResourceOrange.getGroupByName(GROUP_DUMMY_WIMPS_NAME); assertNotNull("No group on orange dummy resource", dummyGroupAtOrange); display("Group @orange", dummyGroupAtOrange); assertGroupMember(dummyGroupAtOrange, USER_LARGO_USERNAME); } @Test public void test314AssignRoleThugToLargo() throws Exception { final String TEST_NAME = "test314AssignRoleThugToLargo"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_LARGO_OID, ROLE_THUG_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); assertGroupMember(GROUP_THUG_NAME, USER_LARGO_USERNAME, dummyResourceOrange); DummyGroup dummyGroupThugWannabe = dummyResourceOrange.getGroupByName(GROUP_THUG_NAME + "-wannabe"); assertNotNull("No wannabe group on orange dummy resource", dummyGroupThugWannabe); display("Wannabe Group", dummyGroupThugWannabe); assertGroupMember(dummyGroupThugWannabe, USER_LARGO_USERNAME); } @Test public void test315UnAssignRoleThugFromLargo() throws Exception { final String TEST_NAME = "test315UnAssignRoleThugFromLargo"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); unassignRole(USER_LARGO_OID, ROLE_THUG_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); DummyGroup dummyGroupThug = dummyResourceOrange.getGroupByName(GROUP_THUG_NAME); assertNotNull("No group on orange dummy resource", dummyGroupThug); display("Group", dummyGroupThug); assertNoGroupMembers(dummyGroupThug); DummyGroup dummyGroupThugWannabe = dummyResourceOrange.getGroupByName(GROUP_THUG_NAME + "-wannabe"); assertNotNull("No wannabe group on orange dummy resource", dummyGroupThugWannabe); display("Wannabe Group", dummyGroupThugWannabe); assertNoGroupMembers(dummyGroupThugWannabe); assertGroupMember(GROUP_DUMMY_WIMPS_NAME, USER_LARGO_USERNAME, getDummyResource()); DummyGroup dummyGroupAtOrange = dummyResourceOrange.getGroupByName(GROUP_DUMMY_WIMPS_NAME); assertNotNull("No group on orange dummy resource", dummyGroupAtOrange); display("Group @orange", dummyGroupAtOrange); assertGroupMember(dummyGroupAtOrange, USER_LARGO_USERNAME); } /** * after renaming user largo it should be also propagated to the associations * @throws Exception */ @Test public void test317RenameLargo() throws Exception { final String TEST_NAME = "test317RenameLargo"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); modifyUserReplace(USER_LARGO_OID, UserType.F_NAME, task, result, PrismTestUtil.createPolyString("newLargo")); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); assertNoDummyAccount(RESOURCE_DUMMY_ORANGE_NAME, USER_LARGO_USERNAME); DummyGroup dummyGroup = getDummyResource().getGroupByName(GROUP_DUMMY_WIMPS_NAME); assertNotNull("No group on dummy resource", dummyGroup); display("Group", dummyGroup); assertNoGroupMember(dummyGroup, USER_LARGO_USERNAME); assertGroupMember(dummyGroup, "newLargo"); DummyGroup dummyGroupAtOrange = dummyResourceOrange.getGroupByName(GROUP_DUMMY_WIMPS_NAME); assertNotNull("No group on orange dummy resource", dummyGroupAtOrange); display("Group", dummyGroupAtOrange); assertNoGroupMember(dummyGroupAtOrange, USER_LARGO_USERNAME); assertGroupMember(dummyGroupAtOrange, "newLargo"); } @Test public void test319UnassignRoleWimpFromLargo() throws Exception { final String TEST_NAME = "test319UnassignRoleWimpFromLargo"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); unassignRole(USER_LARGO_OID, ROLE_WIMP_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); assertNoDummyAccount(RESOURCE_DUMMY_ORANGE_NAME, USER_LARGO_USERNAME); assertNoDummyAccount(RESOURCE_DUMMY_ORANGE_NAME, "newLargo"); DummyGroup dummyGroup = getDummyResource().getGroupByName(GROUP_DUMMY_WIMPS_NAME); assertNotNull("No group on dummy resource", dummyGroup); display("Group", dummyGroup); assertNoGroupMember(dummyGroup, USER_LARGO_USERNAME); assertNoGroupMember(dummyGroup, "newLargo"); DummyGroup dummyGroupAtOrange = dummyResourceOrange.getGroupByName(GROUP_DUMMY_WIMPS_NAME); assertNotNull("No group on orange dummy resource", dummyGroupAtOrange); display("Group @orange", dummyGroupAtOrange); assertNoGroupMember(dummyGroupAtOrange, USER_LARGO_USERNAME); // Orange resource has explicit referential integrity switched off assertGroupMember(dummyGroupAtOrange, "newLargo"); } /** * Similar routine than 31x, but different ordering. */ @Test public void test320AssignRoleBruteToRapp() throws Exception { final String TEST_NAME = "test320AssignRoleBruteToRapp"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); addObject(USER_RAPP_FILE); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_RAPP_OID, ROLE_BRUTE_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); assertGroupMember(GROUP_BRUTE_NAME, USER_RAPP_USERNAME, dummyResourceOrange); DummyGroup dummyGroupBruteWannabe = dummyResourceOrange.getGroupByName(GROUP_BRUTE_NAME + "-wannabe"); assertNotNull("No wannabe group on orange dummy resource", dummyGroupBruteWannabe); display("Wannabe Group", dummyGroupBruteWannabe); assertGroupMember(dummyGroupBruteWannabe, USER_RAPP_USERNAME); } @Test public void test322AssignRoleWimpToRapp() throws Exception { final String TEST_NAME = "test322AssignRoleWimpToRapp"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_RAPP_OID, ROLE_WIMP_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); assertGroupMember(GROUP_DUMMY_WIMPS_NAME, USER_RAPP_USERNAME, getDummyResource()); DummyGroup dummyGroupWimpAtOrange = dummyResourceOrange.getGroupByName(GROUP_DUMMY_WIMPS_NAME); assertNotNull("No group on orange dummy resource", dummyGroupWimpAtOrange); display("Group @orange", dummyGroupWimpAtOrange); assertGroupMember(dummyGroupWimpAtOrange, USER_RAPP_USERNAME); assertGroupMember(GROUP_BRUTE_NAME, USER_RAPP_USERNAME, dummyResourceOrange); DummyGroup dummyGroupBruteWannabe = dummyResourceOrange.getGroupByName(GROUP_BRUTE_NAME + "-wannabe"); assertNotNull("No wannabe group on orange dummy resource", dummyGroupBruteWannabe); display("Wannabe Group", dummyGroupBruteWannabe); assertGroupMember(dummyGroupBruteWannabe, USER_RAPP_USERNAME); } @Test public void test324AssignRoleThugToRapp() throws Exception { final String TEST_NAME = "test324AssignRoleThugToRapp"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_RAPP_OID, ROLE_THUG_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); assertGroupMember(GROUP_THUG_NAME, USER_RAPP_USERNAME, dummyResourceOrange); DummyGroup dummyGroupThugWannabe = dummyResourceOrange.getGroupByName(GROUP_THUG_NAME + "-wannabe"); assertNotNull("No wannabe group on orange dummy resource", dummyGroupThugWannabe); display("Wannabe Group", dummyGroupThugWannabe); assertGroupMember(dummyGroupThugWannabe, USER_RAPP_USERNAME); assertGroupMember(GROUP_DUMMY_WIMPS_NAME, USER_RAPP_USERNAME, getDummyResource()); DummyGroup dummyGroupWimpAtOrange = dummyResourceOrange.getGroupByName(GROUP_DUMMY_WIMPS_NAME); assertNotNull("No group on orange dummy resource", dummyGroupWimpAtOrange); display("Group @orange", dummyGroupWimpAtOrange); assertGroupMember(dummyGroupWimpAtOrange, USER_RAPP_USERNAME); assertGroupMember(GROUP_BRUTE_NAME, USER_RAPP_USERNAME, dummyResourceOrange); DummyGroup dummyGroupBruteWannabe = dummyResourceOrange.getGroupByName(GROUP_BRUTE_NAME + "-wannabe"); assertNotNull("No wannabe group on orange dummy resource", dummyGroupBruteWannabe); display("Wannabe Group", dummyGroupBruteWannabe); assertGroupMember(dummyGroupBruteWannabe, USER_RAPP_USERNAME); } @Test public void test327UnassignRoleWimpFromRapp() throws Exception { final String TEST_NAME = "test327UnassignRoleWimpFromRapp"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); unassignRole(USER_RAPP_OID, ROLE_WIMP_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); DummyGroup dummyGroupWimp = getDummyResource().getGroupByName(GROUP_DUMMY_WIMPS_NAME); assertNotNull("No group on dummy resource", dummyGroupWimp); display("Group", dummyGroupWimp); assertNoGroupMember(dummyGroupWimp, USER_RAPP_USERNAME); DummyGroup dummyGroupWimpAtOrange = dummyResourceOrange.getGroupByName(GROUP_DUMMY_WIMPS_NAME); assertNotNull("No group on orange dummy resource", dummyGroupWimpAtOrange); display("Group @orange", dummyGroupWimpAtOrange); assertNoGroupMember(dummyGroupWimpAtOrange, USER_RAPP_USERNAME); assertGroupMember(GROUP_THUG_NAME, USER_RAPP_USERNAME, dummyResourceOrange); DummyGroup dummyGroupThugWannabe = dummyResourceOrange.getGroupByName(GROUP_THUG_NAME + "-wannabe"); assertNotNull("No wannabe group on orange dummy resource", dummyGroupThugWannabe); display("Wannabe Group", dummyGroupThugWannabe); assertGroupMember(dummyGroupThugWannabe, USER_RAPP_USERNAME); assertGroupMember(GROUP_BRUTE_NAME, USER_RAPP_USERNAME, dummyResourceOrange); DummyGroup dummyGroupBruteWannabe = dummyResourceOrange.getGroupByName(GROUP_BRUTE_NAME + "-wannabe"); assertNotNull("No wannabe group on orange dummy resource", dummyGroupBruteWannabe); display("Wannabe Group", dummyGroupBruteWannabe); assertGroupMember(dummyGroupBruteWannabe, USER_RAPP_USERNAME); } @Test public void test328UnassignRoleThugFromRapp() throws Exception { final String TEST_NAME = "test328UnassignRoleThugFromRapp"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); unassignRole(USER_RAPP_OID, ROLE_THUG_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); DummyGroup dummyGroupThug = dummyResourceOrange.getGroupByName(GROUP_THUG_NAME); assertNotNull("No group on orange dummy resource", dummyGroupThug); display("Group", dummyGroupThug); assertNoGroupMember(dummyGroupThug, USER_RAPP_USERNAME); DummyGroup dummyGroupThugWannabe = dummyResourceOrange.getGroupByName(GROUP_THUG_NAME + "-wannabe"); assertNotNull("No wannabe group on orange dummy resource", dummyGroupThugWannabe); display("Wannabe Group", dummyGroupThugWannabe); assertNoGroupMember(dummyGroupThugWannabe, USER_RAPP_USERNAME); DummyGroup dummyGroupWimp = getDummyResource().getGroupByName(GROUP_DUMMY_WIMPS_NAME); assertNotNull("No group on dummy resource", dummyGroupWimp); display("Group", dummyGroupWimp); assertNoGroupMember(dummyGroupWimp, USER_RAPP_USERNAME); DummyGroup dummyGroupWimpAtOrange = dummyResourceOrange.getGroupByName(GROUP_DUMMY_WIMPS_NAME); assertNotNull("No group on orange dummy resource", dummyGroupWimpAtOrange); display("Group @orange", dummyGroupWimpAtOrange); assertNoGroupMember(dummyGroupWimpAtOrange, USER_RAPP_USERNAME); assertGroupMember(GROUP_BRUTE_NAME, USER_RAPP_USERNAME, dummyResourceOrange); DummyGroup dummyGroupBruteWannabe = dummyResourceOrange.getGroupByName(GROUP_BRUTE_NAME + "-wannabe"); assertNotNull("No wannabe group on orange dummy resource", dummyGroupBruteWannabe); display("Wannabe Group", dummyGroupBruteWannabe); assertGroupMember(dummyGroupBruteWannabe, USER_RAPP_USERNAME); } @Test public void test329UnAssignRoleBruteFromRapp() throws Exception { final String TEST_NAME = "test329UnAssignRoleBruteFromRapp"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); unassignRole(USER_RAPP_OID, ROLE_BRUTE_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); assertNoDummyAccount(RESOURCE_DUMMY_ORANGE_NAME, USER_RAPP_USERNAME); assertGroupMember(GROUP_BRUTE_NAME, USER_RAPP_USERNAME, dummyResourceOrange); DummyGroup dummyGroupBruteWannabe = dummyResourceOrange.getGroupByName(GROUP_BRUTE_NAME + "-wannabe"); assertNotNull("No wannabe group on orange dummy resource", dummyGroupBruteWannabe); display("Wannabe Group", dummyGroupBruteWannabe); // Orange resource has explicit referential integrity switched off assertGroupMember(dummyGroupBruteWannabe, USER_RAPP_USERNAME); DummyGroup dummyGroupWimps = getDummyResource().getGroupByName(GROUP_DUMMY_WIMPS_NAME); assertNotNull("No group on dummy resource", dummyGroupWimps); display("Group", dummyGroupWimps); assertNoGroupMembers(dummyGroupWimps); DummyGroup dummyGroupWimpsAtOrange = dummyResourceOrange.getGroupByName(GROUP_DUMMY_WIMPS_NAME); assertNotNull("No group on orange dummy resource", dummyGroupWimpsAtOrange); display("Group @orange", dummyGroupWimpsAtOrange); // Orange resource has explicit referential integrity switched off assertNoGroupMember(dummyGroupWimpsAtOrange, USER_RAPP_USERNAME); } @Test public void test600AssignRolePirateToJack() throws Exception { final String TEST_NAME = "test600AssignRolePirateToJack"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN assignRole(USER_JACK_OID, ROLE_PIRATE_OID, task, result); // THEN result.computeStatus(); TestUtil.assertSuccess(result); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User jack", user); assertDefaultDummyAccount(ACCOUNT_JACK_DUMMY_USERNAME, ACCOUNT_JACK_DUMMY_FULLNAME, true); DummyGroup dummyGroup = getDummyResource().getGroupByName(GROUP_DUMMY_SWASHBUCKLERS_NAME); assertNotNull("No group on dummy resource", dummyGroup); display("Group", dummyGroup); assertEquals("Wrong group description", GROUP_DUMMY_SWASHBUCKLERS_DESCRIPTION, dummyGroup.getAttributeValue(DummyResourceContoller.DUMMY_GROUP_ATTRIBUTE_DESCRIPTION)); assertNoGroupMember(dummyGroup, ACCOUNT_JACK_DUMMY_USERNAME); assertDummyAccountAttribute(null, ACCOUNT_JACK_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, "rum"); assertDummyAccountAttribute(null, ACCOUNT_JACK_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME, "Bloody Pirate"); } @Test public void test610AssignRoleSwashbucklerToJack() throws Exception { final String TEST_NAME = "test610AssignRoleSwashbucklerToJack"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN assignRole(USER_JACK_OID, ROLE_SWASHBUCKLER_OID, task, result); // THEN result.computeStatus(); TestUtil.assertSuccess(result); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User jack", user); assertDefaultDummyAccount(ACCOUNT_JACK_DUMMY_USERNAME, ACCOUNT_JACK_DUMMY_FULLNAME, true); DummyGroup dummyGroup = getDummyResource().getGroupByName(GROUP_DUMMY_SWASHBUCKLERS_NAME); assertNotNull("No group on dummy resource", dummyGroup); display("Group", dummyGroup); assertEquals("Wrong group description", GROUP_DUMMY_SWASHBUCKLERS_DESCRIPTION, dummyGroup.getAttributeValue(DummyResourceContoller.DUMMY_GROUP_ATTRIBUTE_DESCRIPTION)); assertGroupMember(dummyGroup, ACCOUNT_JACK_DUMMY_USERNAME); assertDummyAccountAttribute(null, ACCOUNT_JACK_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, "rum", "grog"); assertDummyAccountAttribute(null, ACCOUNT_JACK_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME, "Bloody Pirate", "Swashbuckler"); } @Test public void test620UnAssignSwashbucklerFromJack() throws Exception { final String TEST_NAME = "test620UnAssignSwashbucklerFromJack"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN unassignRole(USER_JACK_OID, ROLE_SWASHBUCKLER_OID, task, result); // THEN result.computeStatus(); TestUtil.assertSuccess(result); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User jack", user); assertDefaultDummyAccount(ACCOUNT_JACK_DUMMY_USERNAME, ACCOUNT_JACK_DUMMY_FULLNAME, true); DummyGroup dummyGroup = getDummyResource().getGroupByName(GROUP_DUMMY_SWASHBUCKLERS_NAME); assertNotNull("No group on dummy resource", dummyGroup); display("Group", dummyGroup); assertEquals("Wrong group description", GROUP_DUMMY_SWASHBUCKLERS_DESCRIPTION, dummyGroup.getAttributeValue(DummyResourceContoller.DUMMY_GROUP_ATTRIBUTE_DESCRIPTION)); assertNoGroupMember(dummyGroup, ACCOUNT_JACK_DUMMY_USERNAME); assertDummyAccountAttribute(null, ACCOUNT_JACK_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, "rum"); assertDummyAccountAttribute(null, ACCOUNT_JACK_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME, "Bloody Pirate"); } /** * Assign role with entitlement. The assignment is not yet valid. */ @Test public void test630AssignRoleSwashbucklerToJackValidity() throws Exception { final String TEST_NAME = "test630AssignRoleSwashbucklerToJackValidity"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); ActivationType activationType = new ActivationType(); XMLGregorianCalendar validFrom = clock.currentTimeXMLGregorianCalendar(); validFrom.add(XmlTypeConverter.createDuration(60*60*1000)); // one hour ahead activationType.setValidFrom(validFrom); XMLGregorianCalendar validTo = clock.currentTimeXMLGregorianCalendar(); validTo.add(XmlTypeConverter.createDuration(3*60*60*1000)); // three hours ahead activationType.setValidTo(validTo); // WHEN assignRole(USER_JACK_OID, ROLE_SWASHBUCKLER_OID, activationType, task, result); // THEN result.computeStatus(); TestUtil.assertSuccess(result); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User jack", user); assertDefaultDummyAccount(ACCOUNT_JACK_DUMMY_USERNAME, ACCOUNT_JACK_DUMMY_FULLNAME, true); DummyGroup dummyGroup = getDummyResource().getGroupByName(GROUP_DUMMY_SWASHBUCKLERS_NAME); assertNotNull("No group on dummy resource", dummyGroup); display("Group", dummyGroup); assertEquals("Wrong group description", GROUP_DUMMY_SWASHBUCKLERS_DESCRIPTION, dummyGroup.getAttributeValue(DummyResourceContoller.DUMMY_GROUP_ATTRIBUTE_DESCRIPTION)); assertNoGroupMember(dummyGroup, ACCOUNT_JACK_DUMMY_USERNAME); assertDummyAccountAttribute(null, ACCOUNT_JACK_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, "rum"); assertDummyAccountAttribute(null, ACCOUNT_JACK_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME, "Bloody Pirate"); } @Test public void test640JackRoleSwashbucklerBecomesValid() throws Exception { final String TEST_NAME = "test640JackRoleSwashbucklerBecomesValid"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); clock.overrideDuration("PT2H"); // WHEN recomputeUser(USER_JACK_OID, task, result); // THEN result.computeStatus(); TestUtil.assertSuccess(result); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User jack", user); assertDefaultDummyAccount(ACCOUNT_JACK_DUMMY_USERNAME, ACCOUNT_JACK_DUMMY_FULLNAME, true); DummyGroup dummyGroup = getDummyResource().getGroupByName(GROUP_DUMMY_SWASHBUCKLERS_NAME); assertNotNull("No group on dummy resource", dummyGroup); display("Group", dummyGroup); assertEquals("Wrong group description", GROUP_DUMMY_SWASHBUCKLERS_DESCRIPTION, dummyGroup.getAttributeValue(DummyResourceContoller.DUMMY_GROUP_ATTRIBUTE_DESCRIPTION)); assertGroupMember(dummyGroup, ACCOUNT_JACK_DUMMY_USERNAME); assertDummyAccountAttribute(null, ACCOUNT_JACK_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, "rum", "grog"); assertDummyAccountAttribute(null, ACCOUNT_JACK_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME, "Bloody Pirate", "Swashbuckler"); } @Test public void test645JackRoleSwashbucklerIsValid() throws Exception { final String TEST_NAME = "test645JackRoleSwashbucklerIsValid"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN recomputeUser(USER_JACK_OID, task, result); // THEN result.computeStatus(); TestUtil.assertSuccess(result); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User jack", user); assertDefaultDummyAccount(ACCOUNT_JACK_DUMMY_USERNAME, ACCOUNT_JACK_DUMMY_FULLNAME, true); DummyGroup dummyGroup = getDummyResource().getGroupByName(GROUP_DUMMY_SWASHBUCKLERS_NAME); assertNotNull("No group on dummy resource", dummyGroup); display("Group", dummyGroup); assertEquals("Wrong group description", GROUP_DUMMY_SWASHBUCKLERS_DESCRIPTION, dummyGroup.getAttributeValue(DummyResourceContoller.DUMMY_GROUP_ATTRIBUTE_DESCRIPTION)); assertGroupMember(dummyGroup, ACCOUNT_JACK_DUMMY_USERNAME); assertDummyAccountAttribute(null, ACCOUNT_JACK_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, "rum", "grog"); assertDummyAccountAttribute(null, ACCOUNT_JACK_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME, "Bloody Pirate", "Swashbuckler"); } @Test public void test650JackRoleSwashbucklerBecomesInvalid() throws Exception { final String TEST_NAME = "test650JackRoleSwashbucklerBecomesInvalid"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); clock.overrideDuration("PT2H"); // WHEN recomputeUser(USER_JACK_OID, task, result); // THEN result.computeStatus(); TestUtil.assertSuccess(result); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User jack", user); assertDefaultDummyAccount(ACCOUNT_JACK_DUMMY_USERNAME, ACCOUNT_JACK_DUMMY_FULLNAME, true); DummyGroup dummyGroup = getDummyResource().getGroupByName(GROUP_DUMMY_SWASHBUCKLERS_NAME); assertNotNull("No group on dummy resource", dummyGroup); display("Group", dummyGroup); assertEquals("Wrong group description", GROUP_DUMMY_SWASHBUCKLERS_DESCRIPTION, dummyGroup.getAttributeValue(DummyResourceContoller.DUMMY_GROUP_ATTRIBUTE_DESCRIPTION)); assertNoGroupMember(dummyGroup, ACCOUNT_JACK_DUMMY_USERNAME); // Drink is non-tolerant. Reconcile will remove the value. assertDummyAccountAttribute(null, ACCOUNT_JACK_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, "rum"); // Title is tolerant. Reconcile will not remove the value. assertDummyAccountAttribute(null, ACCOUNT_JACK_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME, "Bloody Pirate", "Swashbuckler"); } /** * Guybrush has an entitlement (swashbucklers), but after recomputation it should go away. */ @Test public void test700ReconcileGuybrush() throws Exception { final String TEST_NAME = "test700ReconcileGuybrush"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); clock.resetOverride(); dumpUserAndAccounts(getUser(USER_GUYBRUSH_OID), task, result); dumpOrangeGroups(task, result); // GIVEN assertGroupMember(getDummyGroup(null, GROUP_DUMMY_SWASHBUCKLERS_NAME), USER_GUYBRUSH_USERNAME); // WHEN reconcileUser(USER_GUYBRUSH_OID, task, result); // THEN dumpUserAndAccounts(getUser(USER_GUYBRUSH_OID), task, result); assertNoGroupMember(getDummyGroup(null, GROUP_DUMMY_SWASHBUCKLERS_NAME), USER_GUYBRUSH_USERNAME); } /** * Add account to a group using model service (shadow operations) - preparation for next test (tolerantValuePatterns) */ @Test public void test710AssociateGuybrushToLandlubers() throws Exception { final String TEST_NAME = "test710AssociateGuybrushToLandlubers"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); ObjectDelta<ShadowType> delta = IntegrationTestTools.createEntitleDelta(ACCOUNT_SHADOW_GUYBRUSH_OID, dummyResourceCtl.getAttributeQName(DummyResourceContoller.DUMMY_ENTITLEMENT_GROUP_NAME), SHADOW_GROUP_DUMMY_LANDLUBERS_OID, prismContext); Collection<ObjectDelta<? extends ObjectType>> deltas = MiscSchemaUtil.createCollection(delta); // WHEN modelService.executeChanges(deltas, null, task, result); // THEN result.computeStatus(); TestUtil.assertSuccess(result); assertGroupMember(GROUP_DUMMY_LANDLUBERS_NAME, ACCOUNT_GUYBRUSH_DUMMY_USERNAME, getDummyResource()); } /** * Add account to 2 groups using model service (shadow operations) - preparation for next test (intolerantValuePatterns) */ @Test public void test715AssociateGuybrushToThugs() throws Exception { final String TEST_NAME = "test715AssociateGuybrushToThugs"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // GIVEN assignAccount(USER_GUYBRUSH_OID, RESOURCE_DUMMY_ORANGE_OID, "default", task, result); dumpUserAndAccounts(getUser(USER_GUYBRUSH_OID), task, result); PrismObject<ShadowType> orangeAccount = findAccountShadowByUsername(USER_GUYBRUSH_USERNAME, resourceDummyOrange, result); assertNotNull("No orange account for guybrush", orangeAccount); ObjectDelta<ShadowType> delta1 = IntegrationTestTools.createEntitleDelta(orangeAccount.getOid(), dummyResourceCtlOrange.getAttributeQName(DummyResourceContoller.DUMMY_ENTITLEMENT_GROUP_NAME), getGroupShadow(dummyResourceCtlOrange, dummyResourceCtlOrange.getGroupObjectClass(), "thug", task, result).getOid(), prismContext); ObjectDelta<ShadowType> delta2 = IntegrationTestTools.createEntitleDelta(orangeAccount.getOid(), dummyResourceCtlOrange.getAttributeQName(DummyResourceContoller.DUMMY_ENTITLEMENT_GROUP_NAME), getGroupShadow(dummyResourceCtlOrange, dummyResourceCtlOrange.getGroupObjectClass(), "thug-wannabe", task, result) .getOid(), prismContext); ObjectDelta<ShadowType> delta = ObjectDelta.summarize(delta1, delta2); Collection<ObjectDelta<? extends ObjectType>> deltas = MiscSchemaUtil.createCollection(delta); // WHEN modelService.executeChanges(deltas, null, task, result); // THEN result.computeStatus(); TestUtil.assertSuccess(result); assertGroupMember(GROUP_THUG_NAME, ACCOUNT_GUYBRUSH_DUMMY_ORANGE_USERNAME, dummyResourceOrange); assertGroupMember(GROUP_THUG_NAME+"-wannabe", ACCOUNT_GUYBRUSH_DUMMY_ORANGE_USERNAME, dummyResourceOrange); } /** * Tolerant entitlement (landlubers, thug) should be kept. Other (thug-wannabe) should not. */ @Test public void test720ReconcileGuybrush() throws Exception { final String TEST_NAME = "test720ReconcileGuybrush"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestEntitlements.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); dumpUserAndAccounts(getUser(USER_GUYBRUSH_OID), task, result); // GIVEN assertGroupMember(getDummyGroup(null, GROUP_DUMMY_LANDLUBERS_NAME), USER_GUYBRUSH_USERNAME); // WHEN reconcileUser(USER_GUYBRUSH_OID, task, result); // THEN dumpUserAndAccounts(getUser(USER_GUYBRUSH_OID), task, result); assertGroupMember(GROUP_DUMMY_LANDLUBERS_NAME, ACCOUNT_GUYBRUSH_DUMMY_USERNAME, getDummyResource()); assertGroupMember(GROUP_THUG_NAME, ACCOUNT_GUYBRUSH_DUMMY_USERNAME, dummyResourceOrange); assertNoGroupMember(GROUP_THUG_NAME+"-wannabe", ACCOUNT_GUYBRUSH_DUMMY_USERNAME, dummyResourceOrange); } @SuppressWarnings("unused") private void dumpUsersAndTheirAccounts(Task task, OperationResult result) throws Exception { Collection<SelectorOptions<GetOperationOptions>> options = SelectorOptions.createCollection(GetOperationOptions.createResolveNames()); List<PrismObject<UserType>> users = modelService.searchObjects(UserType.class, null, options, task, result); for (PrismObject<UserType> user : users) { dumpUserAndAccounts(user, task, result); } } private void dumpUserAndAccounts(PrismObject<UserType> user, Task task, OperationResult result) throws ConfigurationException, ObjectNotFoundException, SchemaException, CommunicationException, SecurityViolationException { display("user", user); for (ObjectReferenceType linkRef : user.asObjectable().getLinkRef()) { PrismObject<ShadowType> shadow = modelService.getObject(ShadowType.class, linkRef.getOid(), null, task, result); display("shadow", shadow); } } @SuppressWarnings("unused") private void dumpAccountAndGroups(PrismObject<UserType> user, String dummyResourceName) throws ConflictException, SchemaViolationException, FileNotFoundException, ConnectException { String userName = user.getName().getOrig(); DummyAccount dummyAccount = getDummyAccount(dummyResourceName, userName); display("dummy account: " + dummyResourceName, dummyAccount); List<DummyGroup> groups = getGroupsForUser(dummyResourceName, userName); display("dummy account groups: " + dummyResourceName, groups); } private List<DummyGroup> getGroupsForUser(String dummyResourceName, String userName) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException { return DummyResource.getInstance(dummyResourceName).listGroups().stream() .filter(g -> g.containsMember(userName)) .collect(Collectors.toList()); } private void dumpOrangeGroups(Task task, OperationResult result) throws Exception { System.out.println("--------------------------------------------- Orange --------------------"); display("Orange groups", dummyResourceOrange.listGroups()); SearchResultList<PrismObject<ShadowType>> orangeGroupsShadows = modelService .searchObjects(ShadowType.class, ObjectQueryUtil.createResourceAndObjectClassQuery( RESOURCE_DUMMY_ORANGE_OID, dummyResourceCtlOrange.getGroupObjectClass(), prismContext), null, task, result); display("Orange groups shadows", orangeGroupsShadows); System.out.println("--------------------------------------------- Orange End ----------------"); } private PrismObject<ShadowType> getGroupShadow(DummyResourceContoller dummyResourceCtl, QName objectClass, String name, Task task, OperationResult result) throws Exception { PrismObject<ResourceType> resource = dummyResourceCtl.getResource(); ObjectClassComplexTypeDefinition groupDef = RefinedResourceSchema.getRefinedSchema(resource) .findObjectClassDefinition(dummyResourceCtl.getGroupObjectClass()); ResourceAttributeDefinition<Object> nameDef = groupDef.findAttributeDefinition(SchemaConstants.ICFS_NAME); assertNotNull("No icfs:name definition", nameDef); ObjectQuery query = ObjectQueryUtil.createResourceAndObjectClassFilterPrefix(resource.getOid(), objectClass, prismContext) .and().item(new ItemPath(ShadowType.F_ATTRIBUTES, SchemaConstants.ICFS_NAME), nameDef).eq(name) .build(); SearchResultList<PrismObject<ShadowType>> shadows = modelService.searchObjects(ShadowType.class, query, null, task, result); assertEquals("Wrong # of results for " + name + " of " + objectClass + " at " + resource, 1, shadows.size()); return shadows.get(0); } private void assertGroupMember(String groupName, String accountName, DummyResource dummyResource) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException { DummyGroup dummyGroup = dummyResource.getGroupByName(groupName); assertNotNull("No group " + dummyGroup + " on " + dummyResource, dummyGroup); display("group", dummyGroup); assertGroupMember(dummyGroup, accountName); } private void assertNoGroupMember(String groupName, String accountName, DummyResource dummyResource) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException { DummyGroup dummyGroup = dummyResource.getGroupByName(groupName); assertNotNull("No group " + dummyGroup + " on " + dummyResource, dummyGroup); display("group", dummyGroup); assertNoGroupMember(dummyGroup, accountName); } }