/* * Copyright (c) 2013-2015 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.sync; import static org.testng.AssertJUnit.assertEquals; import static com.evolveum.midpoint.test.IntegrationTestTools.display; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.List; import javax.xml.datatype.XMLGregorianCalendar; import com.evolveum.midpoint.schema.constants.ObjectTypes; import com.evolveum.midpoint.schema.util.ObjectTypeUtil; 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 com.evolveum.midpoint.model.impl.trigger.RecomputeTriggerHandler; import com.evolveum.midpoint.model.intest.AbstractInitializedModelIntegrationTest; import com.evolveum.midpoint.model.intest.TestActivation; import com.evolveum.midpoint.model.intest.TestMapping; import com.evolveum.midpoint.model.intest.TestTriggerTask; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.path.IdItemPathSegment; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.path.NameItemPathSegment; import com.evolveum.midpoint.prism.util.PrismTestUtil; import com.evolveum.midpoint.prism.xml.XmlTypeConverter; import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.util.MiscSchemaUtil; import com.evolveum.midpoint.security.api.MidPointPrincipal; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.test.DummyResourceContoller; import com.evolveum.midpoint.test.util.TestUtil; import com.evolveum.midpoint.util.DebugUtil; import com.evolveum.midpoint.util.exception.CommunicationException; import com.evolveum.midpoint.util.exception.ConfigurationException; import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; /** * @author Radovan Semancik * * @see TestActivation * */ @ContextConfiguration(locations = {"classpath:ctx-model-intest-test-main.xml"}) @DirtiesContext(classMode = ClassMode.AFTER_CLASS) public class TestValidityRecomputeTask extends AbstractInitializedModelIntegrationTest { private static final File TEST_DIR = new File("src/test/resources/sync"); protected static final File ROLE_RED_JUDGE_FILE = new File(TEST_DIR, "role-red-judge.xml"); protected static final String ROLE_RED_JUDGE_OID = "12345111-1111-2222-1111-121212111222"; protected static final File ROLE_BIG_JUDGE_FILE = new File(TEST_DIR, "role-big-judge.xml"); protected static final String ROLE_BIG_JUDGE_OID = "12345111-1111-2222-1111-121212111224"; private static final XMLGregorianCalendar LONG_LONG_TIME_AGO = XmlTypeConverter.createXMLGregorianCalendar(1111, 1, 1, 12, 00, 00); private XMLGregorianCalendar drakeValidFrom; private XMLGregorianCalendar drakeValidTo; @Override public void initSystem(Task initTask, OperationResult initResult) throws Exception { super.initSystem(initTask, initResult); repoAddObjectFromFile(ROLE_RED_JUDGE_FILE, initResult); repoAddObjectFromFile(ROLE_BIG_JUDGE_FILE, initResult); DebugUtil.setDetailedDebugDump(true); } @Test public void test100ImportValidityScannerTask() throws Exception { final String TEST_NAME = "test100ImportValidityScannerTask"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // Pretend that the user was added a long time ago clock.override(LONG_LONG_TIME_AGO); addObject(USER_HERMAN_FILE); // Make sure that it is effectivelly disabled PrismObject<UserType> userHermanBefore = getUser(USER_HERMAN_OID); assertEffectiveActivation(userHermanBefore, ActivationStatusType.DISABLED); assertValidityStatus(userHermanBefore, TimeIntervalStatusType.BEFORE); clock.resetOverride(); XMLGregorianCalendar startCal = clock.currentTimeXMLGregorianCalendar(); /// WHEN TestUtil.displayWhen(TEST_NAME); importObjectFromFile(TASK_VALIDITY_SCANNER_FILENAME); waitForTaskStart(TASK_VALIDITY_SCANNER_OID, false); waitForTaskFinish(TASK_VALIDITY_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); XMLGregorianCalendar endCal = clock.currentTimeXMLGregorianCalendar(); assertLastRecomputeTimestamp(TASK_VALIDITY_SCANNER_OID, startCal, endCal); PrismObject<UserType> userHermanAfter = getUser(USER_HERMAN_OID); assertEffectiveActivation(userHermanAfter, ActivationStatusType.ENABLED); assertValidityStatus(userHermanAfter, TimeIntervalStatusType.IN); } @Test public void test110JackAssignJudgeDisabled() throws Exception { final String TEST_NAME = "test110JackAssignJudgeDisabled"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); ActivationType activationType = new ActivationType(); activationType.setAdministrativeStatus(ActivationStatusType.DISABLED); testJackAssignRoleJudgeInvalid(TEST_NAME, activationType, task, result); } @Test public void test111JackAssignJudgeNotYetValid() throws Exception { final String TEST_NAME = "test111JackAssignJudgeNotYetValid"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.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); testJackAssignRoleJudgeInvalid(TEST_NAME, activationType, task, result); } @Test public void test112JackAssignJudgeAfterValidity() throws Exception { final String TEST_NAME = "test112JackAssignJudgeAfterValidity"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); ActivationType activationType = new ActivationType(); XMLGregorianCalendar validTo = clock.currentTimeXMLGregorianCalendar(); validTo.add(XmlTypeConverter.createDuration(-60*60*1000)); // one hour ago activationType.setValidTo(validTo); testJackAssignRoleJudgeInvalid(TEST_NAME, activationType, task, result); } @Test public void test115JackAssignJudgeEnabled() throws Exception { final String TEST_NAME = "test115JackAssignJudgeEnabled"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); ActivationType activationType = new ActivationType(); activationType.setAdministrativeStatus(ActivationStatusType.ENABLED); testJackAssignRoleJudgeValid(TEST_NAME, activationType, task, result); } @Test public void test115JackAssignJudgeValid() throws Exception { final String TEST_NAME = "test115JackAssignJudgeValid"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.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 ago activationType.setValidFrom(validFrom); XMLGregorianCalendar validTo = clock.currentTimeXMLGregorianCalendar(); validTo.add(XmlTypeConverter.createDuration(60*60*1000)); // one hour ahead activationType.setValidTo(validTo); testJackAssignRoleJudgeValid(TEST_NAME, activationType, task, result); } private void testJackAssignRoleJudgeValid(final String TEST_NAME, ActivationType activationType, Task task, OperationResult result) throws Exception { // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_JACK_OID, ROLE_BIG_JUDGE_OID, activationType, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(null, USER_JACK_USERNAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_JACK_USERNAME); // WHEN TestUtil.displayWhen(TEST_NAME); waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(null, USER_JACK_USERNAME); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User after", user); assertLinks(user, 2); assert11xUserOk(user); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertAuthorized(principal, AUTZ_PUNISH_URL); // CLEANUP unassignAllRoles(USER_JACK_OID); assertNoDummyAccount(null, USER_JACK_USERNAME); } private void testJackAssignRoleJudgeInvalid(final String TEST_NAME, ActivationType activationType, Task task, OperationResult result) throws Exception { // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_JACK_OID, ROLE_BIG_JUDGE_OID, activationType, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertNoDummyAccount(null, USER_JACK_USERNAME); // WHEN TestUtil.displayWhen(TEST_NAME); waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); assertNoDummyAccount(null, USER_JACK_USERNAME); assertNoDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_JACK_USERNAME); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User after", user); assertNoLinkedAccount(user); assert11xUserOk(user); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertNotAuthorized(principal, AUTZ_PUNISH_URL); // CLEANUP unassignAllRoles(USER_JACK_OID); assertNoDummyAccount(null, USER_JACK_USERNAME); } private void assert11xUserOk(PrismObject<UserType> user) { assertAdministrativeStatusEnabled(user); assertEffectiveActivation(user, ActivationStatusType.ENABLED); } @Test public void test120JackDisableAssignmentJudge() throws Exception { final String TEST_NAME = "test120JackDisableAssignmentJudge"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); ActivationType activationType = new ActivationType(); activationType.setAdministrativeStatus(ActivationStatusType.ENABLED); assignRole(USER_JACK_OID, ROLE_BIG_JUDGE_OID, activationType, task, result); assertDummyAccount(null, USER_JACK_USERNAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_JACK_USERNAME); AssignmentType judgeAssignment = getJudgeAssignment(USER_JACK_OID); // WHEN TestUtil.displayWhen(TEST_NAME); modifyAssignmentAdministrativeStatus(USER_JACK_OID, judgeAssignment.getId(), ActivationStatusType.DISABLED, task, result); // THEN TestUtil.displayThen(TEST_NAME); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User after", user); assertNoDummyAccount(null, USER_JACK_USERNAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_JACK_USERNAME, USER_JACK_FULL_NAME, false); assert11xUserOk(user); } @Test public void test122JackReplaceNullAdministrativeStatusAssignmentJudge() throws Exception { final String TEST_NAME = "test122JackReplaceNullAdministrativeStatusAssignmentJudge"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); assertNoDummyAccount(null, USER_JACK_USERNAME); AssignmentType judgeAssignment = getJudgeAssignment(USER_JACK_OID); // WHEN TestUtil.displayWhen(TEST_NAME); modifyAssignmentAdministrativeStatus(USER_JACK_OID, judgeAssignment.getId(), null, task, result); // THEN TestUtil.displayThen(TEST_NAME); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User after", user); assertDummyAccount(null, USER_JACK_USERNAME); assert11xUserOk(user); } @Test public void test123JackDisableAssignmentJudge() throws Exception { final String TEST_NAME = "test123JackDisableAssignmentJudge"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); assertDummyAccount(null, USER_JACK_USERNAME); AssignmentType judgeAssignment = getJudgeAssignment(USER_JACK_OID); // WHEN TestUtil.displayWhen(TEST_NAME); modifyAssignmentAdministrativeStatus(USER_JACK_OID, judgeAssignment.getId(), ActivationStatusType.DISABLED, task, result); // THEN TestUtil.displayThen(TEST_NAME); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User after", user); assertNoDummyAccount(null, USER_JACK_USERNAME); assert11xUserOk(user); } @Test public void test124JackEnableAssignmentJudge() throws Exception { final String TEST_NAME = "test124JackEnableAssignmentJudge"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); assertNoDummyAccount(null, USER_JACK_USERNAME); AssignmentType judgeAssignment = getJudgeAssignment(USER_JACK_OID); // WHEN TestUtil.displayWhen(TEST_NAME); modifyAssignmentAdministrativeStatus(USER_JACK_OID, judgeAssignment.getId(), ActivationStatusType.ENABLED, task, result); // THEN TestUtil.displayThen(TEST_NAME); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User after", user); assertDummyAccount(null, USER_JACK_USERNAME); assert11xUserOk(user); } @Test public void test125JackDeleteAdministrativeStatusAssignmentJudge() throws Exception { final String TEST_NAME = "test125JackDeleteAdministrativeStatusAssignmentJudge"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); assertDummyAccount(null, USER_JACK_USERNAME); AssignmentType judgeAssignment = getJudgeAssignment(USER_JACK_OID); // WHEN TestUtil.displayWhen(TEST_NAME); modifyObjectDeleteProperty(UserType.class, USER_JACK_OID, new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(judgeAssignment.getId()), new NameItemPathSegment(AssignmentType.F_ACTIVATION), new NameItemPathSegment(ActivationType.F_ADMINISTRATIVE_STATUS)), task, result, ActivationStatusType.ENABLED); // THEN TestUtil.displayThen(TEST_NAME); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User after", user); assertDummyAccount(null, USER_JACK_USERNAME); assert11xUserOk(user); } @Test public void test126JackAddAdministrativeStatusAssignmentJudge() throws Exception { final String TEST_NAME = "test126JackAddAdministrativeStatusAssignmentJudge"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); assertDummyAccount(null, USER_JACK_USERNAME); AssignmentType judgeAssignment = getJudgeAssignment(USER_JACK_OID); // WHEN TestUtil.displayWhen(TEST_NAME); modifyObjectAddProperty(UserType.class, USER_JACK_OID, new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(judgeAssignment.getId()), new NameItemPathSegment(AssignmentType.F_ACTIVATION), new NameItemPathSegment(ActivationType.F_ADMINISTRATIVE_STATUS)), task, result, ActivationStatusType.ENABLED); // THEN TestUtil.displayThen(TEST_NAME); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User after", user); assertDummyAccount(null, USER_JACK_USERNAME); assert11xUserOk(user); } @Test public void test127JackDeleteActivationAssignmentJudge() throws Exception { final String TEST_NAME = "test127JackDeleteActivationAssignmentJudge"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); assertDummyAccount(null, USER_JACK_USERNAME); AssignmentType judgeAssignment = getJudgeAssignment(USER_JACK_OID); ActivationType activationType = new ActivationType(); activationType.setAdministrativeStatus(ActivationStatusType.ENABLED); // WHEN TestUtil.displayWhen(TEST_NAME); modifyObjectDeleteContainer(UserType.class, USER_JACK_OID, new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(judgeAssignment.getId()), new NameItemPathSegment(AssignmentType.F_ACTIVATION)), task, result, activationType); // THEN TestUtil.displayThen(TEST_NAME); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User after", user); assertDummyAccount(null, USER_JACK_USERNAME); assert11xUserOk(user); } @Test public void test128JackAssignmentJudgeValidToSetInvalid() throws Exception { final String TEST_NAME = "test128JackAssignmentJudgeValidToSetInvalid"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); assertDummyAccount(null, USER_JACK_USERNAME); AssignmentType judgeAssignment = getJudgeAssignment(USER_JACK_OID); ActivationType activationType = new ActivationType(); XMLGregorianCalendar validTo = clock.currentTimeXMLGregorianCalendar(); validTo.add(XmlTypeConverter.createDuration(-60*60*1000)); // one hour ago activationType.setValidTo(validTo); // WHEN TestUtil.displayWhen(TEST_NAME); modifyObjectReplaceContainer(UserType.class, USER_JACK_OID, new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(judgeAssignment.getId()), new NameItemPathSegment(AssignmentType.F_ACTIVATION)), task, result, activationType); // THEN TestUtil.displayThen(TEST_NAME); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User after", user); assertNoDummyAccount(null, USER_JACK_USERNAME); assert11xUserOk(user); } @Test public void test129JackAssignmentJudgeValidToSetValid() throws Exception { final String TEST_NAME = "test129JackAssignmentJudgeValidToSetValid"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); assertNoDummyAccount(null, USER_JACK_USERNAME); AssignmentType judgeAssignment = getJudgeAssignment(USER_JACK_OID); XMLGregorianCalendar validTo = clock.currentTimeXMLGregorianCalendar(); validTo.add(XmlTypeConverter.createDuration(60*60*1000)); // one hour ahead // WHEN TestUtil.displayWhen(TEST_NAME); modifyObjectReplaceProperty(UserType.class, USER_JACK_OID, new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(judgeAssignment.getId()), new NameItemPathSegment(AssignmentType.F_ACTIVATION), new NameItemPathSegment(ActivationType.F_VALID_TO)), task, result, validTo); // THEN TestUtil.displayThen(TEST_NAME); PrismObject<UserType> user = getUser(USER_JACK_OID); display("User after", user); assertDummyAccount(null, USER_JACK_USERNAME); assert11xUserOk(user); // CLEANUP unassignAllRoles(USER_JACK_OID); assertNoDummyAccount(null, USER_JACK_USERNAME); } private AssignmentType getJudgeAssignment(String userOid) throws ObjectNotFoundException, SchemaException, SecurityViolationException, CommunicationException, ConfigurationException { PrismObject<UserType> user = getUser(userOid); List<AssignmentType> assignments = user.asObjectable().getAssignment(); assertEquals("Wrong num ass", 1, assignments.size()); return assignments.iterator().next(); } /** * The test13x works with two roles for the same resource, enabling/disabling them. */ @Test public void test130BarbossaAssignJudgeEnabled() throws Exception { final String TEST_NAME = "test130BarbossaAssignJudgeEnabled"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // preconditions assertNoAssignments(USER_BARBOSSA_OID); assertNoDummyAccount(null, USER_BARBOSSA_USERNAME); ActivationType activationType = new ActivationType(); activationType.setAdministrativeStatus(ActivationStatusType.ENABLED); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_BARBOSSA_OID, ROLE_JUDGE_OID, activationType, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(null, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); // WHEN TestUtil.displayWhen(TEST_NAME); waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(null, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); assertDummyAccountAttribute(null, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME, ROLE_JUDGE_TITLE); assertDummyAccountAttribute(null, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, RESOURCE_DUMMY_DRINK, ROLE_JUDGE_DRINK); PrismObject<UserType> user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 1); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertAuthorized(principal, AUTZ_PUNISH_URL); } @Test public void test131BarbossaAssignSailorEnabled() throws Exception { final String TEST_NAME = "test131BarbossaAssignSailorEnabled"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); ActivationType activationType = new ActivationType(); activationType.setAdministrativeStatus(ActivationStatusType.ENABLED); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_BARBOSSA_OID, ROLE_SAILOR_OID, activationType, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(null, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); // WHEN TestUtil.displayWhen(TEST_NAME); waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(null, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); assertDummyAccountAttribute(null, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME, ROLE_JUDGE_TITLE); assertDummyAccountAttribute(null, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, RESOURCE_DUMMY_DRINK, ROLE_JUDGE_DRINK, ROLE_SAILOR_DRINK); PrismObject<UserType> user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 1); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertAuthorized(principal, AUTZ_PUNISH_URL); } @Test public void test132BarbossaDisableAssignmentJudge() throws Exception { final String TEST_NAME = "test132BarbossaDisableAssignmentJudge"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); AssignmentType assignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_JUDGE_OID); // WHEN TestUtil.displayWhen(TEST_NAME); modifyAssignmentAdministrativeStatus(USER_BARBOSSA_OID, assignment.getId(), ActivationStatusType.DISABLED, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(null, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); // WHEN TestUtil.displayWhen(TEST_NAME); waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(null, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); assertNoDummyAccountAttribute(null, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME); assertDummyAccountAttribute(null, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, RESOURCE_DUMMY_DRINK, ROLE_SAILOR_DRINK); PrismObject<UserType> user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 1); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertNotAuthorized(principal, AUTZ_PUNISH_URL); } @Test public void test133BarbossaDisableAssignmentSailor() throws Exception { final String TEST_NAME = "test133BarbossaDisableAssignmentSailor"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); AssignmentType assignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_SAILOR_OID); // WHEN TestUtil.displayWhen(TEST_NAME); modifyAssignmentAdministrativeStatus(USER_BARBOSSA_OID, assignment.getId(), ActivationStatusType.DISABLED, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertNoDummyAccount(null, USER_BARBOSSA_USERNAME); // WHEN TestUtil.displayWhen(TEST_NAME); waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); assertNoDummyAccount(null, USER_BARBOSSA_USERNAME); PrismObject<UserType> user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 0); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertNotAuthorized(principal, AUTZ_PUNISH_URL); } @Test public void test134BarbossaEnableAssignmentJudge() throws Exception { final String TEST_NAME = "test134BarbossaEnableAssignmentJudge"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); AssignmentType assignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_JUDGE_OID); // WHEN TestUtil.displayWhen(TEST_NAME); modifyAssignmentAdministrativeStatus(USER_BARBOSSA_OID, assignment.getId(), ActivationStatusType.ENABLED, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(null, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); // WHEN TestUtil.displayWhen(TEST_NAME); assertDummyAccount(null, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); assertDummyAccountAttribute(null, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME, ROLE_JUDGE_TITLE); assertDummyAccountAttribute(null, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, RESOURCE_DUMMY_DRINK, ROLE_JUDGE_DRINK); PrismObject<UserType> user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 1); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertAuthorized(principal, AUTZ_PUNISH_URL); } @Test public void test135BarbossaEnableAssignmentSailor() throws Exception { final String TEST_NAME = "test135BarbossaEnableAssignmentSailor"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); AssignmentType assignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_SAILOR_OID); // WHEN TestUtil.displayWhen(TEST_NAME); modifyAssignmentAdministrativeStatus(USER_BARBOSSA_OID, assignment.getId(), ActivationStatusType.ENABLED, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(null, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); // WHEN TestUtil.displayWhen(TEST_NAME); assertDummyAccount(null, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); assertDummyAccountAttribute(null, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME, ROLE_JUDGE_TITLE); assertDummyAccountAttribute(null, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, RESOURCE_DUMMY_DRINK, ROLE_JUDGE_DRINK, ROLE_SAILOR_DRINK); PrismObject<UserType> user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 1); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertAuthorized(principal, AUTZ_PUNISH_URL); } @Test public void test136BarbossaDisableBothAssignments() throws Exception { final String TEST_NAME = "test136BarbossaDisableBothAssignments"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); AssignmentType judgeAssignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_JUDGE_OID); AssignmentType sailorAssignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_SAILOR_OID); ObjectDelta<UserType> objectDelta = ObjectDelta.createModificationReplaceProperty(UserType.class, USER_BARBOSSA_OID, new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(judgeAssignment.getId()), new NameItemPathSegment(AssignmentType.F_ACTIVATION), new NameItemPathSegment(ActivationType.F_ADMINISTRATIVE_STATUS)), prismContext, ActivationStatusType.DISABLED); objectDelta.addModificationReplaceProperty(new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(sailorAssignment.getId()), new NameItemPathSegment(AssignmentType.F_ACTIVATION), new NameItemPathSegment(ActivationType.F_ADMINISTRATIVE_STATUS)), ActivationStatusType.DISABLED); // WHEN TestUtil.displayWhen(TEST_NAME); modelService.executeChanges(MiscSchemaUtil.createCollection(objectDelta), null, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertNoDummyAccount(null, USER_BARBOSSA_USERNAME); // WHEN TestUtil.displayWhen(TEST_NAME); waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); assertNoDummyAccount(null, USER_BARBOSSA_USERNAME); PrismObject<UserType> user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 0); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertNotAuthorized(principal, AUTZ_PUNISH_URL); } @Test public void test137BarbossaEnableBothAssignments() throws Exception { final String TEST_NAME = "test137BarbossaEnableBothAssignments"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); AssignmentType judgeAssignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_JUDGE_OID); AssignmentType sailorAssignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_SAILOR_OID); ObjectDelta<UserType> objectDelta = ObjectDelta.createModificationReplaceProperty(UserType.class, USER_BARBOSSA_OID, new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(judgeAssignment.getId()), new NameItemPathSegment(AssignmentType.F_ACTIVATION), new NameItemPathSegment(ActivationType.F_ADMINISTRATIVE_STATUS)), prismContext, ActivationStatusType.ENABLED); objectDelta.addModificationReplaceProperty(new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(sailorAssignment.getId()), new NameItemPathSegment(AssignmentType.F_ACTIVATION), new NameItemPathSegment(ActivationType.F_ADMINISTRATIVE_STATUS)), ActivationStatusType.ENABLED); // WHEN TestUtil.displayWhen(TEST_NAME); modelService.executeChanges(MiscSchemaUtil.createCollection(objectDelta), null, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(null, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); // WHEN TestUtil.displayWhen(TEST_NAME); waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(null, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); assertDummyAccountAttribute(null, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME, ROLE_JUDGE_TITLE); assertDummyAccountAttribute(null, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, RESOURCE_DUMMY_DRINK, ROLE_JUDGE_DRINK, ROLE_SAILOR_DRINK); PrismObject<UserType> user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 1); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertAuthorized(principal, AUTZ_PUNISH_URL); } /** * Unassign disabled assignments. */ @Test public void test139BarbossaDisableBothAssignmentsUnassign() throws Exception { final String TEST_NAME = "test139BarbossaDisableBothAssignmentsUnassign"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); AssignmentType judgeAssignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_JUDGE_OID); AssignmentType judgeAssignmentLight = new AssignmentType(); judgeAssignmentLight.setId(judgeAssignment.getId()); AssignmentType sailorAssignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_SAILOR_OID); AssignmentType sailorAssignmentLight = new AssignmentType(); sailorAssignmentLight.setId(sailorAssignment.getId()); ObjectDelta<UserType> objectDelta = ObjectDelta.createModificationReplaceProperty(UserType.class, USER_BARBOSSA_OID, new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(judgeAssignment.getId()), new NameItemPathSegment(AssignmentType.F_ACTIVATION), new NameItemPathSegment(ActivationType.F_ADMINISTRATIVE_STATUS)), prismContext, ActivationStatusType.DISABLED); objectDelta.addModificationReplaceProperty(new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(sailorAssignment.getId()), new NameItemPathSegment(AssignmentType.F_ACTIVATION), new NameItemPathSegment(ActivationType.F_ADMINISTRATIVE_STATUS)), ActivationStatusType.DISABLED); modelService.executeChanges(MiscSchemaUtil.createCollection(objectDelta), null, task, result); assertNoDummyAccount(null, USER_BARBOSSA_USERNAME); waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); assertNoDummyAccount(null, USER_BARBOSSA_USERNAME); PrismObject<UserType> user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 0); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertNotAuthorized(principal, AUTZ_PUNISH_URL); objectDelta = ObjectDelta.createModificationDeleteContainer(UserType.class, USER_BARBOSSA_OID, new ItemPath(new NameItemPathSegment(UserType.F_ASSIGNMENT)), prismContext, judgeAssignmentLight); objectDelta.addModificationDeleteContainer( new ItemPath(new NameItemPathSegment(UserType.F_ASSIGNMENT)), sailorAssignmentLight); display("Unassign delta", objectDelta); // WHEN TestUtil.displayWhen(TEST_NAME); modelService.executeChanges(MiscSchemaUtil.createCollection(objectDelta), null, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertNoDummyAccount(null, USER_BARBOSSA_USERNAME); // WHEN TestUtil.displayWhen(TEST_NAME); waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); assertNoDummyAccount(null, USER_BARBOSSA_USERNAME); user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 0); assertNoAssignments(user); principal = userProfileService.getPrincipal(user); assertNotAuthorized(principal, AUTZ_PUNISH_URL); } /** * The 14x tests are similar than test13x tests, they work with two roles for the same resource, enabling/disabling them. * The 14x work with the red dummy resource that does disable instead of account delete. */ @Test public void test140BarbossaAssignRedJudgeEnabled() throws Exception { final String TEST_NAME = "test140BarbossaAssignRedJudgeEnabled"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // preconditions PrismObject<UserType> user = getUser(USER_BARBOSSA_OID); display("User before", user); assertLinks(user, 0); assertNoAssignments(user); assertNoDummyAccount(null, USER_BARBOSSA_USERNAME); // just to be on the safe side assertNoDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME); ActivationType activationType = new ActivationType(); activationType.setAdministrativeStatus(ActivationStatusType.ENABLED); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_BARBOSSA_OID, ROLE_RED_JUDGE_OID, activationType, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); // WHEN TestUtil.displayWhen(TEST_NAME); waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); assertDummyAccountAttribute(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME, ROLE_JUDGE_TITLE); assertDummyAccountAttribute(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, ROLE_JUDGE_DRINK); user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 1); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertAuthorized(principal, AUTZ_PUNISH_URL); } @Test public void test141BarbossaAssignRedSailorEnabled() throws Exception { final String TEST_NAME = "test141BarbossaAssignRedSailorEnabled"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); ActivationType activationType = new ActivationType(); activationType.setAdministrativeStatus(ActivationStatusType.ENABLED); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_BARBOSSA_OID, ROLE_RED_SAILOR_OID, activationType, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); // WHEN TestUtil.displayWhen(TEST_NAME); waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); assertDummyAccountAttribute(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME, ROLE_JUDGE_TITLE); assertDummyAccountAttribute(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, ROLE_JUDGE_DRINK, ROLE_SAILOR_DRINK); PrismObject<UserType> user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 1); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertAuthorized(principal, AUTZ_PUNISH_URL); } @Test public void test142BarbossaDisableAssignmentRedJudge() throws Exception { final String TEST_NAME = "test142BarbossaDisableAssignmentRedJudge"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); AssignmentType assignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_RED_JUDGE_OID); // WHEN TestUtil.displayWhen(TEST_NAME); modifyAssignmentAdministrativeStatus(USER_BARBOSSA_OID, assignment.getId(), ActivationStatusType.DISABLED, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); // WHEN TestUtil.displayWhen(TEST_NAME); waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); assertNoDummyAccountAttribute(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME); assertDummyAccountAttribute(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, ROLE_SAILOR_DRINK); PrismObject<UserType> user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 1); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertNotAuthorized(principal, AUTZ_PUNISH_URL); } @Test public void test143BarbossaDisableAssignmentRedSailor() throws Exception { final String TEST_NAME = "test143BarbossaDisableAssignmentRedSailor"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); AssignmentType assignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_RED_SAILOR_OID); // WHEN TestUtil.displayWhen(TEST_NAME); modifyAssignmentAdministrativeStatus(USER_BARBOSSA_OID, assignment.getId(), ActivationStatusType.DISABLED, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, false); // WHEN TestUtil.displayWhen(TEST_NAME); waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, false); assertNoDummyAccountAttribute(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME); assertNoDummyAccountAttribute(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME); PrismObject<UserType> user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 1); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertNotAuthorized(principal, AUTZ_PUNISH_URL); } @Test public void test144BarbossaEnableAssignmentRedJudge() throws Exception { final String TEST_NAME = "test144BarbossaEnableAssignmentRedJudge"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); AssignmentType assignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_RED_JUDGE_OID); // WHEN TestUtil.displayWhen(TEST_NAME); modifyAssignmentAdministrativeStatus(USER_BARBOSSA_OID, assignment.getId(), ActivationStatusType.ENABLED, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); // WHEN TestUtil.displayWhen(TEST_NAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); assertDummyAccountAttribute(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME, ROLE_JUDGE_TITLE); assertDummyAccountAttribute(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, ROLE_JUDGE_DRINK); PrismObject<UserType> user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 1); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertAuthorized(principal, AUTZ_PUNISH_URL); } @Test public void test145BarbossaEnableAssignmentRedSailor() throws Exception { final String TEST_NAME = "test145BarbossaEnableAssignmentRedSailor"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); AssignmentType assignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_RED_SAILOR_OID); // WHEN TestUtil.displayWhen(TEST_NAME); modifyAssignmentAdministrativeStatus(USER_BARBOSSA_OID, assignment.getId(), ActivationStatusType.ENABLED, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); // WHEN TestUtil.displayWhen(TEST_NAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); assertDummyAccountAttribute(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME, ROLE_JUDGE_TITLE); assertDummyAccountAttribute(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, ROLE_JUDGE_DRINK, ROLE_SAILOR_DRINK); PrismObject<UserType> user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 1); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertAuthorized(principal, AUTZ_PUNISH_URL); } @Test public void test146BarbossaDisableBothRedAssignments() throws Exception { final String TEST_NAME = "test146BarbossaDisableBothRedAssignments"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); AssignmentType judgeAssignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_RED_JUDGE_OID); AssignmentType sailorAssignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_RED_SAILOR_OID); ObjectDelta<UserType> objectDelta = ObjectDelta.createModificationReplaceProperty(UserType.class, USER_BARBOSSA_OID, new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(judgeAssignment.getId()), new NameItemPathSegment(AssignmentType.F_ACTIVATION), new NameItemPathSegment(ActivationType.F_ADMINISTRATIVE_STATUS)), prismContext, ActivationStatusType.DISABLED); objectDelta.addModificationReplaceProperty(new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(sailorAssignment.getId()), new NameItemPathSegment(AssignmentType.F_ACTIVATION), new NameItemPathSegment(ActivationType.F_ADMINISTRATIVE_STATUS)), ActivationStatusType.DISABLED); // WHEN TestUtil.displayWhen(TEST_NAME); modelService.executeChanges(MiscSchemaUtil.createCollection(objectDelta), null, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, false); // WHEN TestUtil.displayWhen(TEST_NAME); waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, false); assertNoDummyAccountAttribute(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME); assertNoDummyAccountAttribute(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME); PrismObject<UserType> user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 1); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertNotAuthorized(principal, AUTZ_PUNISH_URL); } @Test public void test147BarbossaEnableBothRedAssignments() throws Exception { final String TEST_NAME = "test147BarbossaEnableBothRedAssignments"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); AssignmentType judgeAssignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_RED_JUDGE_OID); AssignmentType sailorAssignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_RED_SAILOR_OID); ObjectDelta<UserType> objectDelta = ObjectDelta.createModificationReplaceProperty(UserType.class, USER_BARBOSSA_OID, new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(judgeAssignment.getId()), new NameItemPathSegment(AssignmentType.F_ACTIVATION), new NameItemPathSegment(ActivationType.F_ADMINISTRATIVE_STATUS)), prismContext, ActivationStatusType.ENABLED); objectDelta.addModificationReplaceProperty(new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(sailorAssignment.getId()), new NameItemPathSegment(AssignmentType.F_ACTIVATION), new NameItemPathSegment(ActivationType.F_ADMINISTRATIVE_STATUS)), ActivationStatusType.ENABLED); // WHEN TestUtil.displayWhen(TEST_NAME); modelService.executeChanges(MiscSchemaUtil.createCollection(objectDelta), null, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); // WHEN TestUtil.displayWhen(TEST_NAME); waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, true); assertDummyAccountAttribute(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME, ROLE_JUDGE_TITLE); assertDummyAccountAttribute(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, ROLE_JUDGE_DRINK, ROLE_SAILOR_DRINK); PrismObject<UserType> user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 1); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertAuthorized(principal, AUTZ_PUNISH_URL); } /** * Unassign disabled assignments. */ @Test public void test149BarbossaDisableBothRedAssignmentsUnassign() throws Exception { final String TEST_NAME = "test149BarbossaDisableBothRedAssignmentsUnassign"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); AssignmentType judgeAssignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_RED_JUDGE_OID); AssignmentType judgeAssignmentLight = new AssignmentType(); judgeAssignmentLight.setId(judgeAssignment.getId()); AssignmentType sailorAssignment = getUserAssignment(USER_BARBOSSA_OID, ROLE_RED_SAILOR_OID); AssignmentType sailorAssignmentLight = new AssignmentType(); sailorAssignmentLight.setId(sailorAssignment.getId()); ObjectDelta<UserType> objectDelta = ObjectDelta.createModificationReplaceProperty(UserType.class, USER_BARBOSSA_OID, new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(judgeAssignment.getId()), new NameItemPathSegment(AssignmentType.F_ACTIVATION), new NameItemPathSegment(ActivationType.F_ADMINISTRATIVE_STATUS)), prismContext, ActivationStatusType.DISABLED); objectDelta.addModificationReplaceProperty(new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(sailorAssignment.getId()), new NameItemPathSegment(AssignmentType.F_ACTIVATION), new NameItemPathSegment(ActivationType.F_ADMINISTRATIVE_STATUS)), ActivationStatusType.DISABLED); modelService.executeChanges(MiscSchemaUtil.createCollection(objectDelta), null, task, result); assertNoDummyAccount(null, USER_BARBOSSA_USERNAME); waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); assertNoDummyAccount(null, USER_BARBOSSA_USERNAME); PrismObject<UserType> user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 1); MidPointPrincipal principal = userProfileService.getPrincipal(user); assertNotAuthorized(principal, AUTZ_PUNISH_URL); objectDelta = ObjectDelta.createModificationDeleteContainer(UserType.class, USER_BARBOSSA_OID, new ItemPath(new NameItemPathSegment(UserType.F_ASSIGNMENT)), prismContext, judgeAssignmentLight); objectDelta.addModificationDeleteContainer( new ItemPath(new NameItemPathSegment(UserType.F_ASSIGNMENT)), sailorAssignmentLight); display("Unassign delta", objectDelta); // WHEN TestUtil.displayWhen(TEST_NAME); modelService.executeChanges(MiscSchemaUtil.createCollection(objectDelta), null, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, false); assertNoDummyAccount(null, USER_BARBOSSA_USERNAME); // to be on the safe side // WHEN TestUtil.displayWhen(TEST_NAME); waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, false); assertNoDummyAccountAttribute(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME); assertNoDummyAccountAttribute(RESOURCE_DUMMY_RED_NAME, USER_BARBOSSA_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME); assertNoDummyAccount(null, USER_BARBOSSA_USERNAME); // to be on the safe side user = getUser(USER_BARBOSSA_OID); display("User after", user); assertLinks(user, 1); assertNoAssignments(user); principal = userProfileService.getPrincipal(user); assertNotAuthorized(principal, AUTZ_PUNISH_URL); } @Test public void test190HermanGoesInvalid() throws Exception { final String TEST_NAME = "test190HermanGoesInvalid"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); XMLGregorianCalendar startCal = clock.currentTimeXMLGregorianCalendar(); PrismObject<UserType> userHermanBefore = getUser(USER_HERMAN_OID); XMLGregorianCalendar validTo = userHermanBefore.asObjectable().getActivation().getValidTo(); assertEffectiveActivation(userHermanBefore, ActivationStatusType.ENABLED); assertValidityStatus(userHermanBefore, TimeIntervalStatusType.IN); // Let's move the clock tiny bit after herman's validTo validTo.add(XmlTypeConverter.createDuration(100)); clock.override(validTo); /// WHEN TestUtil.displayWhen(TEST_NAME); waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); // THEN XMLGregorianCalendar endCal = clock.currentTimeXMLGregorianCalendar(); PrismObject<UserType> userHermanAfter = getUser(USER_HERMAN_OID); assertEffectiveActivation(userHermanAfter, ActivationStatusType.DISABLED); assertValidityStatus(userHermanAfter, TimeIntervalStatusType.AFTER); assertLastRecomputeTimestamp(TASK_VALIDITY_SCANNER_OID, startCal, endCal); } @Test public void test200ImportTriggerScannerTask() throws Exception { final String TEST_NAME = "test200ImportTriggerScannerTask"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestTriggerTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); XMLGregorianCalendar startCal = clock.currentTimeXMLGregorianCalendar(); /// WHEN TestUtil.displayWhen(TEST_NAME); importObjectFromFile(TASK_TRIGGER_SCANNER_FILE); waitForTaskStart(TASK_TRIGGER_SCANNER_OID, false); waitForTaskFinish(TASK_TRIGGER_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); XMLGregorianCalendar endCal = clock.currentTimeXMLGregorianCalendar(); assertLastRecomputeTimestamp(TASK_TRIGGER_SCANNER_OID, startCal, endCal); } /** * Explicitly disable Elaine's red account. Do this at the beginning of the test. We will * move time ahead in later tests. This account should remain here exactly like this * at the end of all tests. */ @Test public void test205AccountRedElaineDisable() throws Exception { final String TEST_NAME = "test205AccountRedElaineDisable"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = taskManager.createTaskInstance(TestActivation.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN modifyAccountShadowReplace(ACCOUNT_SHADOW_ELAINE_DUMMY_RED_OID, ACTIVATION_ADMINISTRATIVE_STATUS_PATH, task, result, ActivationStatusType.DISABLED); // THEN result.computeStatus(); TestUtil.assertSuccess("executeChanges result", result); PrismObject<ShadowType> accountShadow = getShadowModel(ACCOUNT_SHADOW_ELAINE_DUMMY_RED_OID); assertDisableReasonShadow(accountShadow, SchemaConstants.MODEL_DISABLE_REASON_EXPLICIT); } /** * Note: red resource disables account on unsassign, does NOT delete it. * Just the recompute trigger is set */ @Test public void test210JackAssignAndUnassignAccountRed() throws Exception { final String TEST_NAME = "test210JackAssignAndUnassignAccountRed"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = taskManager.createTaskInstance(TestMapping.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // assign Collection<ObjectDelta<? extends ObjectType>> deltas = new ArrayList<ObjectDelta<? extends ObjectType>>(); ObjectDelta<UserType> userDelta = createAccountAssignmentUserDelta(USER_JACK_OID, RESOURCE_DUMMY_RED_OID, null, true); deltas.add(userDelta); // WHEN modelService.executeChanges(deltas, null, task, result); // THEN assertDummyAccount(RESOURCE_DUMMY_RED_NAME, ACCOUNT_JACK_DUMMY_USERNAME, "Jack Sparrow", true); // unassign deltas = new ArrayList<ObjectDelta<? extends ObjectType>>(); userDelta = createAccountAssignmentUserDelta(USER_JACK_OID, RESOURCE_DUMMY_RED_OID, null, false); deltas.add(userDelta); // WHEN modelService.executeChanges(deltas, null, task, result); // THEN result.computeStatus(); TestUtil.assertSuccess(result); // Let's wait for the task to give it a change to screw up waitForTaskNextRunAssertSuccess(TASK_TRIGGER_SCANNER_OID, true); PrismObject<UserType> userJack = getUser(USER_JACK_OID); display("Jack", userJack); assertUserJack(userJack, "Jack Sparrow", "Jack", "Sparrow"); String accountRedOid = getLinkRefOid(userJack, RESOURCE_DUMMY_RED_OID); PrismObject<ShadowType> accountRed = getShadowModel(accountRedOid); XMLGregorianCalendar start = clock.currentTimeXMLGregorianCalendar(); start.add(XmlTypeConverter.createDuration(true, 0, 0, 25, 0, 0, 0)); XMLGregorianCalendar end = clock.currentTimeXMLGregorianCalendar(); end.add(XmlTypeConverter.createDuration(true, 0, 0, 35, 0, 0, 0)); assertTrigger(accountRed, RecomputeTriggerHandler.HANDLER_URI, start, end); assertAdministrativeStatusDisabled(accountRed); assertDisableReasonShadow(accountRed, SchemaConstants.MODEL_DISABLE_REASON_DEPROVISION); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, ACCOUNT_JACK_DUMMY_USERNAME, "Jack Sparrow", false); } /** * Move time a month ahead. The account that was disabled in a previous test should be * deleted now. */ @Test public void test215JackDummyAccountDeleteAfterMonth() throws Exception { final String TEST_NAME = "test215JackDummyAccountDeleteAfterMonth"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = taskManager.createTaskInstance(TestMapping.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); XMLGregorianCalendar time = clock.currentTimeXMLGregorianCalendar(); // A month and a day, to make sure we move past the trigger time.add(XmlTypeConverter.createDuration(true, 0, 1, 1, 0, 0, 0)); // WHEN TestUtil.displayWhen(TEST_NAME); clock.override(time); waitForTaskNextRunAssertSuccess(TASK_TRIGGER_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); assertNoDummyAccount(RESOURCE_DUMMY_RED_NAME, ACCOUNT_JACK_DUMMY_USERNAME); } @Test public void test220AddDrake() throws Exception { final String TEST_NAME = "test220AddDrake"; TestUtil.displayTestTile(this, TEST_NAME); XMLGregorianCalendar start = clock.currentTimeXMLGregorianCalendar(); display("Start", start); PrismObject<UserType> userDrake = PrismTestUtil.parseObject(USER_DRAKE_FILE); UserType userDrakeType = userDrake.asObjectable(); // Activation ActivationType activationType = new ActivationType(); userDrakeType.setActivation(activationType); drakeValidFrom = clock.currentTimeXMLGregorianCalendar(); drakeValidFrom.add(XmlTypeConverter.createDuration(true, 0, 0, 10, 0, 0, 0)); activationType.setValidFrom(drakeValidFrom); drakeValidTo = clock.currentTimeXMLGregorianCalendar(); drakeValidTo.add(XmlTypeConverter.createDuration(true, 0, 0, 80, 0, 0, 0)); activationType.setValidTo(drakeValidTo); // Assignment: dummy red AssignmentType assignmentType = new AssignmentType(); userDrakeType.getAssignment().add(assignmentType); ConstructionType constructionType = new ConstructionType(); assignmentType.setConstruction(constructionType); constructionType.setKind(ShadowKindType.ACCOUNT); ObjectReferenceType resourceRedRef = new ObjectReferenceType(); resourceRedRef.setOid(RESOURCE_DUMMY_RED_OID); constructionType.setResourceRef(resourceRedRef); // the following assignments are used only to generate superfluous searches // in validity scanner task AssignmentType dummyAssignmentType1 = new AssignmentType(); userDrakeType.getAssignment().add(dummyAssignmentType1); dummyAssignmentType1.setTargetRef(ObjectTypeUtil.createObjectRef(ROLE_SUPERUSER_OID, ObjectTypes.ROLE)); dummyAssignmentType1.setActivation(activationType.clone()); AssignmentType dummyAssignmentType2 = new AssignmentType(); userDrakeType.getAssignment().add(dummyAssignmentType2); dummyAssignmentType2.setTargetRef(ObjectTypeUtil.createObjectRef(ROLE_SUPERUSER_OID, ObjectTypes.ROLE)); dummyAssignmentType2.setActivation(activationType.clone()); dummyAssignmentType2.setDescription("just to differentiate"); display("Drake before", userDrake); // WHEN TestUtil.displayWhen(TEST_NAME); addObject(userDrake); // THEN // Give the tasks a chance to screw up waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); waitForTaskNextRunAssertSuccess(TASK_TRIGGER_SCANNER_OID, true); // Make sure that it is effectivelly disabled PrismObject<UserType> userDrakeAfter = getUser(USER_DRAKE_OID); display("Drake after", userDrakeAfter); assertEffectiveActivation(userDrakeAfter, ActivationStatusType.DISABLED); assertLinks(userDrakeAfter, 0); assertNoDummyAccount(RESOURCE_DUMMY_RED_NAME, "drake"); } @Test public void test222Drake4DaysBeforeValidFrom() throws Exception { final String TEST_NAME = "test222Drake4DaysBeforeValidFrom"; TestUtil.displayTestTile(this, TEST_NAME); XMLGregorianCalendar start = (XMLGregorianCalendar) drakeValidFrom.clone(); start.add(XmlTypeConverter.createDuration(false, 0, 0, 4, 0, 0, 0)); clock.override(start); display("Start", start); // WHEN // just wait waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); waitForTaskNextRunAssertSuccess(TASK_TRIGGER_SCANNER_OID, true); // THEN // Make sure that it is effectivelly disabled PrismObject<UserType> userDrakeAfter = getUser(USER_DRAKE_OID); display("Drake after", userDrakeAfter); assertEffectiveActivation(userDrakeAfter, ActivationStatusType.DISABLED); String accountRedOid = getLinkRefOid(userDrakeAfter, RESOURCE_DUMMY_RED_OID); PrismObject<ShadowType> accountRed = getShadowModel(accountRedOid); display("Drake account RED after", accountRed); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, "drake", "Francis Drake", false); } @Test public void test224Drake1DaysAfterValidFrom() throws Exception { final String TEST_NAME = "test224Drake1DaysAfterValidFrom"; TestUtil.displayTestTile(this, TEST_NAME); XMLGregorianCalendar start = (XMLGregorianCalendar) drakeValidFrom.clone(); start.add(XmlTypeConverter.createDuration(true, 0, 0, 1, 0, 0, 0)); clock.override(start); display("Start", start); // WHEN // just wait waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); waitForTaskNextRunAssertSuccess(TASK_TRIGGER_SCANNER_OID, true); // THEN PrismObject<UserType> userDrakeAfter = getUser(USER_DRAKE_OID); display("Drake after", userDrakeAfter); assertEffectiveActivation(userDrakeAfter, ActivationStatusType.ENABLED); String accountRedOid = getLinkRefOid(userDrakeAfter, RESOURCE_DUMMY_RED_OID); PrismObject<ShadowType> accountRed = getShadowModel(accountRedOid); display("Drake account RED after", accountRed); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, "drake", "Francis Drake", true); } @Test public void test226Drake1DayBeforeValidTo() throws Exception { final String TEST_NAME = "test226Drake1DayBeforeValidTo"; TestUtil.displayTestTile(this, TEST_NAME); XMLGregorianCalendar start = (XMLGregorianCalendar) drakeValidTo.clone(); start.add(XmlTypeConverter.createDuration(false, 0, 0, 1, 0, 0, 0)); clock.override(start); display("Start", start); // WHEN // just wait waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); waitForTaskNextRunAssertSuccess(TASK_TRIGGER_SCANNER_OID, true); // THEN PrismObject<UserType> userDrakeAfter = getUser(USER_DRAKE_OID); display("Drake after", userDrakeAfter); assertEffectiveActivation(userDrakeAfter, ActivationStatusType.ENABLED); String accountRedOid = getLinkRefOid(userDrakeAfter, RESOURCE_DUMMY_RED_OID); PrismObject<ShadowType> accountRed = getShadowModel(accountRedOid); display("Drake account RED after", accountRed); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, "drake", "Francis Drake", true); } @Test public void test228Drake1DayAfterValidTo() throws Exception { final String TEST_NAME = "test228Drake1DayAfterValidTo"; TestUtil.displayTestTile(this, TEST_NAME); XMLGregorianCalendar start = (XMLGregorianCalendar) drakeValidTo.clone(); start.add(XmlTypeConverter.createDuration(true, 0, 0, 1, 0, 0, 0)); clock.override(start); display("Start", start); // WHEN // just wait waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); waitForTaskNextRunAssertSuccess(TASK_TRIGGER_SCANNER_OID, true); // THEN PrismObject<UserType> userDrakeAfter = getUser(USER_DRAKE_OID); display("Drake after", userDrakeAfter); assertEffectiveActivation(userDrakeAfter, ActivationStatusType.DISABLED); String accountRedOid = getLinkRefOid(userDrakeAfter, RESOURCE_DUMMY_RED_OID); PrismObject<ShadowType> accountRed = getShadowModel(accountRedOid); display("Drake account RED after", accountRed); assertDisableReasonShadow(accountRed, SchemaConstants.MODEL_DISABLE_REASON_MAPPED); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, "drake", "Francis Drake", false); } @Test public void test230Drake20DaysAfterValidTo() throws Exception { final String TEST_NAME = "test230Drake20DaysAfterValidTo"; TestUtil.displayTestTile(this, TEST_NAME); XMLGregorianCalendar start = (XMLGregorianCalendar) drakeValidTo.clone(); start.add(XmlTypeConverter.createDuration(true, 0, 0, 20, 0, 0, 0)); clock.override(start); display("Start", start); // WHEN // just wait waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); waitForTaskNextRunAssertSuccess(TASK_TRIGGER_SCANNER_OID, true); // THEN PrismObject<UserType> userDrakeAfter = getUser(USER_DRAKE_OID); display("Drake after", userDrakeAfter); assertEffectiveActivation(userDrakeAfter, ActivationStatusType.DISABLED); String accountRedOid = getLinkRefOid(userDrakeAfter, RESOURCE_DUMMY_RED_OID); PrismObject<ShadowType> accountRed = getShadowModel(accountRedOid); display("Drake account RED after", accountRed); assertDisableReasonShadow(accountRed, SchemaConstants.MODEL_DISABLE_REASON_MAPPED); assertDummyAccount(RESOURCE_DUMMY_RED_NAME, "drake", "Francis Drake", false); } @Test public void test232Drake40DaysAfterValidTo() throws Exception { final String TEST_NAME = "test232Drake40DaysAfterValidTo"; TestUtil.displayTestTile(this, TEST_NAME); XMLGregorianCalendar start = (XMLGregorianCalendar) drakeValidTo.clone(); start.add(XmlTypeConverter.createDuration(true, 0, 0, 40, 0, 0, 0)); clock.override(start); display("Start", start); // WHEN // just wait waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); waitForTaskNextRunAssertSuccess(TASK_TRIGGER_SCANNER_OID, true); // THEN PrismObject<UserType> userDrakeAfter = getUser(USER_DRAKE_OID); display("Drake after", userDrakeAfter); assertEffectiveActivation(userDrakeAfter, ActivationStatusType.DISABLED); assertLinks(userDrakeAfter, 0); assertNoDummyAccount(RESOURCE_DUMMY_RED_NAME, "drake"); } /** * Elaine's red account was explicitly disabled. We have moved the time ahead in previous tests. * But this account should remain as it is. */ @Test public void test250CheckAccountRedElaine() throws Exception { final String TEST_NAME = "test250CheckAccountRedElaine"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN // WHEN // nothing to do // THEN PrismObject<ShadowType> accountShadow = getShadowModel(ACCOUNT_SHADOW_ELAINE_DUMMY_RED_OID); assertDisableReasonShadow(accountShadow, SchemaConstants.MODEL_DISABLE_REASON_EXPLICIT); } private XMLGregorianCalendar judgeAssignmentValidFrom; private XMLGregorianCalendar judgeAssignmentValidTo; @Test public void test300HermanAssignJudgeNotYetValid() throws Exception { final String TEST_NAME = "test300HermanAssignJudgeNotYetValid"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); ActivationType activationType = new ActivationType(); judgeAssignmentValidFrom = clock.currentTimeXMLGregorianCalendar(); judgeAssignmentValidFrom.add(XmlTypeConverter.createDuration(10*60*1000)); // 10 minutes ahead activationType.setValidFrom(judgeAssignmentValidFrom); judgeAssignmentValidTo = clock.currentTimeXMLGregorianCalendar(); judgeAssignmentValidTo.add(XmlTypeConverter.createDuration(30*60*1000)); // 30 minutes ahead activationType.setValidTo(judgeAssignmentValidTo); display("Assignment validFrom", judgeAssignmentValidFrom); display("Assignment validTo", judgeAssignmentValidTo); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_HERMAN_OID, ROLE_JUDGE_OID, activationType, task, result); // THEN TestUtil.displayThen(TEST_NAME); assertNoDummyAccount(null, USER_HERMAN_USERNAME); } @Test public void test310HermanAssignJudgeBecomesValid() throws Exception { final String TEST_NAME = "test310HermanAssignJudgeBecomesValid"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); PrismObject<UserType> user = getUser(USER_HERMAN_OID); display("User before", user); XMLGregorianCalendar start = (XMLGregorianCalendar) judgeAssignmentValidFrom.clone(); start.add(XmlTypeConverter.createDuration(1*60*1000)); clock.override(start); display("Start", start); // WHEN // just wait waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); assertRoleJudgeValid(TEST_NAME, task, result); } @Test public void test315HermanAssignJudgeBecomesInValid() throws Exception { final String TEST_NAME = "test315HermanAssignJudgeBecomesInValid"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TestValidityRecomputeTask.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); XMLGregorianCalendar start = (XMLGregorianCalendar) judgeAssignmentValidTo.clone(); start.add(XmlTypeConverter.createDuration(1*60*1000)); clock.override(start); display("Start", start); // WHEN // just wait waitForTaskNextRunAssertSuccess(TASK_VALIDITY_SCANNER_OID, true); assertRoleJudgeInValid(TEST_NAME, task, result); } private void assertRoleJudgeValid(final String TEST_NAME, Task task, OperationResult result) throws Exception { assertDummyAccount(null, USER_HERMAN_USERNAME); PrismObject<UserType> user = getUser(USER_HERMAN_OID); display("User after", user); assertLinks(user, 1); } private void assertRoleJudgeInValid(final String TEST_NAME, Task task, OperationResult result) throws Exception { assertNoDummyAccount(null, USER_HERMAN_USERNAME); PrismObject<UserType> user = getUser(USER_HERMAN_OID); display("User after", user); assertLinks(user, 0); } private void modifyAssignmentAdministrativeStatus(String userOid, long assignmentId, ActivationStatusType status, Task task, OperationResult result) throws ObjectNotFoundException, SchemaException, ExpressionEvaluationException, CommunicationException, ConfigurationException, ObjectAlreadyExistsException, PolicyViolationException, SecurityViolationException { if (status == null) { modifyObjectReplaceProperty(UserType.class, userOid, new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(assignmentId), new NameItemPathSegment(AssignmentType.F_ACTIVATION), new NameItemPathSegment(ActivationType.F_ADMINISTRATIVE_STATUS)), task, result); } else { modifyObjectReplaceProperty(UserType.class, userOid, new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(assignmentId), new NameItemPathSegment(AssignmentType.F_ACTIVATION), new NameItemPathSegment(ActivationType.F_ADMINISTRATIVE_STATUS)), task, result, status); } } }