/* * Copyright (c) 2010-2017 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 static com.evolveum.midpoint.test.IntegrationTestTools.display; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.function.Consumer; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; import org.testng.AssertJUnit; import org.testng.annotations.Test; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.delta.ItemDelta; import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.util.MiscSchemaUtil; 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.exception.PolicyViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; import com.evolveum.midpoint.xml.ns._public.common.common_3.PolicyExceptionType; import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; /** * @author semancik * */ @ContextConfiguration(locations = {"classpath:ctx-model-intest-test-main.xml"}) @DirtiesContext(classMode = ClassMode.AFTER_CLASS) public class TestSegregationOfDuties extends AbstractInitializedModelIntegrationTest { protected static final File TEST_DIR = new File("src/test/resources", "rbac"); // Gold, silver and bronze: mutual exclusion (prune), directly in the roles protected static final File ROLE_PRIZE_GOLD_FILE = new File(TEST_DIR, "role-prize-gold.xml"); protected static final String ROLE_PRIZE_GOLD_OID = "bbc22f82-df21-11e6-aa6b-4b1408befd10"; protected static final String ROLE_PRIZE_GOLD_SHIP = "Gold"; protected static final File ROLE_PRIZE_SILVER_FILE = new File(TEST_DIR, "role-prize-silver.xml"); protected static final String ROLE_PRIZE_SILVER_OID = "dfb5fffe-df21-11e6-bb4f-ef02bdbc9d71"; protected static final String ROLE_PRIZE_SILVER_SHIP = "Silver"; protected static final File ROLE_PRIZE_BRONZE_FILE = new File(TEST_DIR, "role-prize-bronze.xml"); protected static final String ROLE_PRIZE_BRONZE_OID = "19f11686-df22-11e6-b0e9-835ed7ca08a5"; protected static final String ROLE_PRIZE_BRONZE_SHIP = "Bronze"; // Red, green and blue: mutual exclusion (prune) in the metarole protected static final File ROLE_META_COLOR_FILE = new File(TEST_DIR, "role-meta-color.xml"); protected static final String ROLE_META_COLOR_OID = "0b759ce2-df29-11e6-a84c-9b213183a815"; protected static final File ROLE_COLOR_RED_FILE = new File(TEST_DIR, "role-color-red.xml"); protected static final String ROLE_COLOR_RED_OID = "eaa4ec3e-df28-11e6-9cca-336e0346d5cc"; protected static final String ROLE_COLOR_RED_SHIP = "Red"; protected static final File ROLE_COLOR_GREEN_FILE = new File(TEST_DIR, "role-color-green.xml"); protected static final String ROLE_COLOR_GREEN_OID = "2fd9e8f4-df29-11e6-9605-cfcedd703b9e"; protected static final String ROLE_COLOR_GREEN_SHIP = "Green"; protected static final File ROLE_COLOR_BLUE_FILE = new File(TEST_DIR, "role-color-blue.xml"); protected static final String ROLE_COLOR_BLUE_OID = "553e8df2-df29-11e6-a7ca-cb7c1f38d89f"; protected static final String ROLE_COLOR_BLUE_SHIP = "Blue"; protected static final File ROLE_COLOR_NONE_FILE = new File(TEST_DIR, "role-color-none.xml"); protected static final String ROLE_COLOR_NONE_OID = "662a997e-df2b-11e6-9bb3-5f235d1a8e60"; @Override public void initSystem(Task initTask, OperationResult initResult) throws Exception { super.initSystem(initTask, initResult); repoAddObjectFromFile(ROLE_PRIZE_GOLD_FILE, initResult); repoAddObjectFromFile(ROLE_PRIZE_SILVER_FILE, initResult); repoAddObjectFromFile(ROLE_PRIZE_BRONZE_FILE, initResult); repoAddObjectFromFile(ROLE_META_COLOR_FILE, initResult); repoAddObjectFromFile(ROLE_COLOR_RED_FILE, initResult); repoAddObjectFromFile(ROLE_COLOR_GREEN_FILE, initResult); repoAddObjectFromFile(ROLE_COLOR_BLUE_FILE, initResult); repoAddObjectFromFile(ROLE_COLOR_NONE_FILE, initResult); } @Test public void test110SimpleExclusion1() throws Exception { final String TEST_NAME = "test110SimpleExclusion1"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestSegregationOfDuties.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // This should go well assignRole(USER_JACK_OID, ROLE_PIRATE_OID, task, result); try { // This should die assignRole(USER_JACK_OID, ROLE_JUDGE_OID, task, result); AssertJUnit.fail("Expected policy violation after adding judge role, but it went well"); } catch (PolicyViolationException e) { // This is expected } unassignRole(USER_JACK_OID, ROLE_PIRATE_OID, task, result); assertAssignedNoRole(USER_JACK_OID, task, result); } @Test public void test112SimpleExclusion1Deprecated() throws Exception { final String TEST_NAME = "test112SimpleExclusion1Deprecated"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestSegregationOfDuties.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // This should go well assignRole(USER_JACK_OID, ROLE_PIRATE_OID, task, result); try { // This should die assignRole(USER_JACK_OID, ROLE_JUDGE_DEPRECATED_OID, task, result); AssertJUnit.fail("Expected policy violation after adding judge role, but it went well"); } catch (PolicyViolationException e) { // This is expected } unassignRole(USER_JACK_OID, ROLE_PIRATE_OID, task, result); assertAssignedNoRole(USER_JACK_OID, task, result); } /** * Same thing as before but other way around */ @Test public void test120SimpleExclusion2() throws Exception { final String TEST_NAME = "test120SimpleExclusion2"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestSegregationOfDuties.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // This should go well assignRole(USER_JACK_OID, ROLE_JUDGE_OID, task, result); try { // This should die assignRole(USER_JACK_OID, ROLE_PIRATE_OID, task, result); AssertJUnit.fail("Expected policy violation after adding pirate role, but it went well"); } catch (PolicyViolationException e) { // This is expected } unassignRole(USER_JACK_OID, ROLE_JUDGE_OID, task, result); assertAssignedNoRole(USER_JACK_OID, task, result); } /** * Same thing as before but other way around */ @Test public void test122SimpleExclusion2Deprecated() throws Exception { final String TEST_NAME = "test122SimpleExclusion2Deprecated"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestSegregationOfDuties.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // This should go well assignRole(USER_JACK_OID, ROLE_JUDGE_DEPRECATED_OID, task, result); try { // This should die assignRole(USER_JACK_OID, ROLE_PIRATE_OID, task, result); AssertJUnit.fail("Expected policy violation after adding pirate role, but it went well"); } catch (PolicyViolationException e) { // This is expected } unassignRole(USER_JACK_OID, ROLE_JUDGE_DEPRECATED_OID, task, result); assertAssignedNoRole(USER_JACK_OID, task, result); } @Test public void test130SimpleExclusionBoth1() throws Exception { final String TEST_NAME = "test130SimpleExclusionBoth1"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestSegregationOfDuties.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); Collection<ItemDelta<?,?>> modifications = new ArrayList<>(); modifications.add((createAssignmentModification(ROLE_JUDGE_OID, RoleType.COMPLEX_TYPE, null, null, null, true))); modifications.add((createAssignmentModification(ROLE_PIRATE_OID, RoleType.COMPLEX_TYPE, null, null, null, true))); ObjectDelta<UserType> userDelta = ObjectDelta.createModifyDelta(USER_JACK_OID, modifications, UserType.class, prismContext); try { modelService.executeChanges(MiscSchemaUtil.createCollection(userDelta), null, task, result); AssertJUnit.fail("Expected policy violation, but it went well"); } catch (PolicyViolationException e) { // This is expected } assertAssignedNoRole(USER_JACK_OID, task, result); } @Test public void test132SimpleExclusionBoth1Deprecated() throws Exception { final String TEST_NAME = "test132SimpleExclusionBoth1Deprecated"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestSegregationOfDuties.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); Collection<ItemDelta<?,?>> modifications = new ArrayList<>(); modifications.add((createAssignmentModification(ROLE_JUDGE_DEPRECATED_OID, RoleType.COMPLEX_TYPE, null, null, null, true))); modifications.add((createAssignmentModification(ROLE_PIRATE_OID, RoleType.COMPLEX_TYPE, null, null, null, true))); ObjectDelta<UserType> userDelta = ObjectDelta.createModifyDelta(USER_JACK_OID, modifications, UserType.class, prismContext); try { modelService.executeChanges(MiscSchemaUtil.createCollection(userDelta), null, task, result); AssertJUnit.fail("Expected policy violation, but it went well"); } catch (PolicyViolationException e) { // This is expected } assertAssignedNoRole(USER_JACK_OID, task, result); } @Test public void test140SimpleExclusionBoth2() throws Exception { final String TEST_NAME = "test140SimpleExclusionBoth2"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestSegregationOfDuties.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); Collection<ItemDelta<?,?>> modifications = new ArrayList<>(); modifications.add((createAssignmentModification(ROLE_PIRATE_OID, RoleType.COMPLEX_TYPE, null, null, null, true))); modifications.add((createAssignmentModification(ROLE_JUDGE_OID, RoleType.COMPLEX_TYPE, null, null, null, true))); ObjectDelta<UserType> userDelta = ObjectDelta.createModifyDelta(USER_JACK_OID, modifications, UserType.class, prismContext); try { modelService.executeChanges(MiscSchemaUtil.createCollection(userDelta), null, task, result); AssertJUnit.fail("Expected policy violation, but it went well"); } catch (PolicyViolationException e) { // This is expected } assertAssignedNoRole(USER_JACK_OID, task, result); } @Test public void test142SimpleExclusionBoth2Deprecated() throws Exception { final String TEST_NAME = "test142SimpleExclusionBoth2Deprecated"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestSegregationOfDuties.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); Collection<ItemDelta<?,?>> modifications = new ArrayList<>(); modifications.add((createAssignmentModification(ROLE_PIRATE_OID, RoleType.COMPLEX_TYPE, null, null, null, true))); modifications.add((createAssignmentModification(ROLE_JUDGE_DEPRECATED_OID, RoleType.COMPLEX_TYPE, null, null, null, true))); ObjectDelta<UserType> userDelta = ObjectDelta.createModifyDelta(USER_JACK_OID, modifications, UserType.class, prismContext); try { modelService.executeChanges(MiscSchemaUtil.createCollection(userDelta), null, task, result); AssertJUnit.fail("Expected policy violation, but it went well"); } catch (PolicyViolationException e) { // This is expected } assertAssignedNoRole(USER_JACK_OID, task, result); } @Test public void test150SimpleExclusionBothBidirectional1() throws Exception { final String TEST_NAME = "test150SimpleExclusionBothBidirectional1"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestSegregationOfDuties.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); Collection<ItemDelta<?,?>> modifications = new ArrayList<>(); modifications.add((createAssignmentModification(ROLE_THIEF_OID, RoleType.COMPLEX_TYPE, null, null, null, true))); modifications.add((createAssignmentModification(ROLE_JUDGE_OID, RoleType.COMPLEX_TYPE, null, null, null, true))); ObjectDelta<UserType> userDelta = ObjectDelta.createModifyDelta(USER_JACK_OID, modifications, UserType.class, prismContext); try { modelService.executeChanges(MiscSchemaUtil.createCollection(userDelta), null, task, result); AssertJUnit.fail("Expected policy violation, but it went well"); } catch (PolicyViolationException e) { // This is expected } assertAssignedNoRole(USER_JACK_OID, task, result); } @Test public void test160SimpleExclusionBothBidirectional2() throws Exception { final String TEST_NAME = "test160SimpleExclusionBothBidirectional2"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestSegregationOfDuties.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); Collection<ItemDelta<?,?>> modifications = new ArrayList<>(); modifications.add((createAssignmentModification(ROLE_JUDGE_OID, RoleType.COMPLEX_TYPE, null, null, null, true))); modifications.add((createAssignmentModification(ROLE_THIEF_OID, RoleType.COMPLEX_TYPE, null, null, null, true))); ObjectDelta<UserType> userDelta = ObjectDelta.createModifyDelta(USER_JACK_OID, modifications, UserType.class, prismContext); try { modelService.executeChanges(MiscSchemaUtil.createCollection(userDelta), null, task, result); AssertJUnit.fail("Expected policy violation, but it went well"); } catch (PolicyViolationException e) { // This is expected } assertAssignedNoRole(USER_JACK_OID, task, result); } @Test public void test171SimpleExclusion1WithPolicyException() throws Exception { final String TEST_NAME = "test171SimpleExclusion1WithPolicyException"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestSegregationOfDuties.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); assignRole(USER_JACK_OID, ROLE_JUDGE_OID, task, result); assignRole(USER_JACK_OID, ROLE_PIRATE_OID, null, getJudgeExceptionBlock(), task, result); PrismObject<UserType> userJackIn = getUser(USER_JACK_OID); assertAssignedRoles(userJackIn, ROLE_JUDGE_OID, ROLE_PIRATE_OID); unassignRole(USER_JACK_OID, ROLE_JUDGE_OID, task, result); unassignRole(USER_JACK_OID, ROLE_PIRATE_OID, null, getJudgeExceptionBlock(), task, result); assertAssignedNoRole(USER_JACK_OID, task, result); } @Test public void test172SimpleExclusion2WithPolicyException() throws Exception { final String TEST_NAME = "test172SimpleExclusion2WithPolicyException"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestSegregationOfDuties.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); assignRole(USER_JACK_OID, ROLE_PIRATE_OID, null, getJudgeExceptionBlock(), task, result); assignRole(USER_JACK_OID, ROLE_JUDGE_OID, task, result); PrismObject<UserType> userJackIn = getUser(USER_JACK_OID); assertAssignedRoles(userJackIn, ROLE_JUDGE_OID, ROLE_PIRATE_OID); unassignRole(USER_JACK_OID, ROLE_JUDGE_OID, task, result); unassignRole(USER_JACK_OID, ROLE_PIRATE_OID, null, getJudgeExceptionBlock(), task, result); assertAssignedNoRole(USER_JACK_OID, task, result); } @Test public void test173SimpleExclusion3WithPolicyException() throws Exception { final String TEST_NAME = "test173SimpleExclusion3WithPolicyException"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestSegregationOfDuties.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); assignRole(USER_JACK_OID, ROLE_PIRATE_OID, task, result); assignRole(USER_JACK_OID, ROLE_JUDGE_OID, null, getJudgeExceptionBlock(), task, result); PrismObject<UserType> userJackIn = getUser(USER_JACK_OID); assertAssignedRoles(userJackIn, ROLE_JUDGE_OID, ROLE_PIRATE_OID); unassignRole(USER_JACK_OID, ROLE_PIRATE_OID, task, result); unassignRole(USER_JACK_OID, ROLE_JUDGE_OID, null, getJudgeExceptionBlock(), task, result); assertAssignedNoRole(USER_JACK_OID, task, result); } @Test public void test174SimpleExclusion4WithPolicyException() throws Exception { final String TEST_NAME = "test174SimpleExclusion4WithPolicyException"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestSegregationOfDuties.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); assignRole(USER_JACK_OID, ROLE_JUDGE_OID, null, getJudgeExceptionBlock(), task, result); assignRole(USER_JACK_OID, ROLE_PIRATE_OID, task, result); PrismObject<UserType> userJackIn = getUser(USER_JACK_OID); assertAssignedRoles(userJackIn, ROLE_JUDGE_OID, ROLE_PIRATE_OID); unassignRole(USER_JACK_OID, ROLE_PIRATE_OID, task, result); unassignRole(USER_JACK_OID, ROLE_JUDGE_OID, null, getJudgeExceptionBlock(), task, result); assertAssignedNoRole(USER_JACK_OID, task, result); } /** * Add pirate role to judge. But include policy exception in the pirate assignment, so it * should go OK. The assign thief (without exception). The exception in the pirate assignment * should only apply to that assignment. The assignment of thief should fail. */ @Test public void test180JudgeExceptionalPirateAndThief() throws Exception { final String TEST_NAME = "test180JudgeExceptionalPirateAndThief"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(TestSegregationOfDuties.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); assignRole(USER_JACK_OID, ROLE_JUDGE_OID, task, result); assignRole(USER_JACK_OID, ROLE_PIRATE_OID, null, getJudgeExceptionBlock(), task, result); PrismObject<UserType> userJackIn = getUser(USER_JACK_OID); assertAssignedRoles(userJackIn, ROLE_JUDGE_OID, ROLE_PIRATE_OID); try { // This should die assignRole(USER_JACK_OID, ROLE_THIEF_OID, task, result); AssertJUnit.fail("Expected policy violation after adding thief role, but it went well"); } catch (PolicyViolationException e) { // This is expected } // Cleanup unassignRole(USER_JACK_OID, ROLE_JUDGE_OID, task, result); unassignRole(USER_JACK_OID, ROLE_PIRATE_OID, null, getJudgeExceptionBlock(), task, result); assertAssignedNoRole(USER_JACK_OID, task, result); } Consumer<AssignmentType> getJudgeExceptionBlock() { return assignment -> { PolicyExceptionType policyException = new PolicyExceptionType(); policyException.setRuleName(ROLE_JUDGE_POLICY_RULE_EXCLUSION_NAME); assignment.getPolicyException().add(policyException); }; } /** * MID-3685 */ @Test public void test200GuybrushAssignRoleGold() throws Exception { final String TEST_NAME = "test200GuybrushAssignRoleGold"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_GUYBRUSH_OID, ROLE_PRIZE_GOLD_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); PrismObject<UserType> userAfter = getUser(USER_GUYBRUSH_OID); display("User after", userAfter); assertAssignedRole(userAfter, ROLE_PRIZE_GOLD_OID); assertNotAssignedRole(userAfter, ROLE_PRIZE_SILVER_OID); assertNotAssignedRole(userAfter, ROLE_PRIZE_BRONZE_OID); assertDummyAccount(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME); assertDummyAccountAttribute(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_SHIP_NAME, ROLE_PRIZE_GOLD_SHIP); assertDummyAccountAttribute(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, RESOURCE_DUMMY_DRINK); } /** * MID-3685 */ @Test public void test202GuybrushAssignRoleSilver() throws Exception { final String TEST_NAME = "test202GuybrushAssignRoleSilver"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_GUYBRUSH_OID, ROLE_PRIZE_SILVER_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); PrismObject<UserType> userAfter = getUser(USER_GUYBRUSH_OID); display("User after", userAfter); assertNotAssignedRole(userAfter, ROLE_PRIZE_GOLD_OID); assertAssignedRole(userAfter, ROLE_PRIZE_SILVER_OID); assertNotAssignedRole(userAfter, ROLE_PRIZE_BRONZE_OID); assertDummyAccount(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME); assertDummyAccountAttribute(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_SHIP_NAME, ROLE_PRIZE_SILVER_SHIP); assertDummyAccountAttribute(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, RESOURCE_DUMMY_DRINK); } /** * Mix in ordinary role to check for interferences. * MID-3685 */ @Test public void test204GuybrushAssignRoleSailor() throws Exception { final String TEST_NAME = "test204GuybrushAssignRoleSailor"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_GUYBRUSH_OID, ROLE_SAILOR_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); PrismObject<UserType> userAfter = getUser(USER_GUYBRUSH_OID); display("User after", userAfter); assertNotAssignedRole(userAfter, ROLE_PRIZE_GOLD_OID); assertAssignedRole(userAfter, ROLE_PRIZE_SILVER_OID); assertNotAssignedRole(userAfter, ROLE_PRIZE_BRONZE_OID); assertAssignedRole(userAfter, ROLE_SAILOR_OID); assertDummyAccount(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME); assertDummyAccountAttribute(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_SHIP_NAME, ROLE_PRIZE_SILVER_SHIP); assertDummyAccountAttribute(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, RESOURCE_DUMMY_DRINK, ROLE_SAILOR_DRINK); } /** * MID-3685 */ @Test public void test206GuybrushAssignRoleBronze() throws Exception { final String TEST_NAME = "test206GuybrushAssignRoleBronze"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_GUYBRUSH_OID, ROLE_PRIZE_BRONZE_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); PrismObject<UserType> userAfter = getUser(USER_GUYBRUSH_OID); display("User after", userAfter); assertNotAssignedRole(userAfter, ROLE_PRIZE_GOLD_OID); assertNotAssignedRole(userAfter, ROLE_PRIZE_SILVER_OID); assertAssignedRole(userAfter, ROLE_PRIZE_BRONZE_OID); assertAssignedRole(userAfter, ROLE_SAILOR_OID); assertDummyAccount(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME); assertDummyAccountAttribute(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_SHIP_NAME, ROLE_PRIZE_BRONZE_SHIP); assertDummyAccountAttribute(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, RESOURCE_DUMMY_DRINK, ROLE_SAILOR_DRINK); } /** * MID-3685 */ @Test public void test208GuybrushUnassignRoleBronze() throws Exception { final String TEST_NAME = "test209GuybrushUnassignRoleSilver"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); unassignRole(USER_GUYBRUSH_OID, ROLE_PRIZE_BRONZE_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); PrismObject<UserType> userAfter = getUser(USER_GUYBRUSH_OID); display("User after", userAfter); assertNotAssignedRole(userAfter, ROLE_PRIZE_GOLD_OID); assertNotAssignedRole(userAfter, ROLE_PRIZE_SILVER_OID); assertNotAssignedRole(userAfter, ROLE_PRIZE_BRONZE_OID); assertAssignedRole(userAfter, ROLE_SAILOR_OID); assertDummyAccount(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME); assertDummyAccountAttribute(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, RESOURCE_DUMMY_DRINK, ROLE_SAILOR_DRINK); } /** * MID-3685 */ @Test public void test209GuybrushUnassignRoleSailor() throws Exception { final String TEST_NAME = "test209GuybrushUnassignRoleSailor"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); unassignRole(USER_GUYBRUSH_OID, ROLE_SAILOR_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); PrismObject<UserType> userAfter = getUser(USER_GUYBRUSH_OID); display("User after", userAfter); assertAssignedNoRole(userAfter); assertNoDummyAccount(ACCOUNT_GUYBRUSH_DUMMY_USERNAME); } /** * MID-3685 */ @Test public void test210GuybrushAssignRoleRed() throws Exception { final String TEST_NAME = "test210GuybrushAssignRoleRed"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_GUYBRUSH_OID, ROLE_COLOR_RED_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); PrismObject<UserType> userAfter = getUser(USER_GUYBRUSH_OID); display("User after", userAfter); assertAssignedRole(userAfter, ROLE_COLOR_RED_OID); assertNotAssignedRole(userAfter, ROLE_COLOR_GREEN_OID); assertNotAssignedRole(userAfter, ROLE_COLOR_BLUE_OID); assertNotAssignedRole(userAfter, ROLE_COLOR_NONE_OID); assertDummyAccount(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME); assertDummyAccountAttribute(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_SHIP_NAME, ROLE_COLOR_RED_SHIP); } /** * MID-3685 */ @Test public void test212GuybrushAssignRoleGreen() throws Exception { final String TEST_NAME = "test212GuybrushAssignRoleGreen"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_GUYBRUSH_OID, ROLE_COLOR_GREEN_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); PrismObject<UserType> userAfter = getUser(USER_GUYBRUSH_OID); display("User after", userAfter); assertNotAssignedRole(userAfter, ROLE_COLOR_RED_OID); assertAssignedRole(userAfter, ROLE_COLOR_GREEN_OID); assertNotAssignedRole(userAfter, ROLE_COLOR_BLUE_OID); assertNotAssignedRole(userAfter, ROLE_COLOR_NONE_OID); assertDummyAccount(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME); assertDummyAccountAttribute(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_SHIP_NAME, ROLE_COLOR_GREEN_SHIP); } /** * MID-3685 */ @Test public void test214GuybrushAssignRoleColorNone() throws Exception { final String TEST_NAME = "test214GuybrushAssignRoleColorNone"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_GUYBRUSH_OID, ROLE_COLOR_NONE_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); PrismObject<UserType> userAfter = getUser(USER_GUYBRUSH_OID); display("User after", userAfter); assertNotAssignedRole(userAfter, ROLE_COLOR_RED_OID); assertNotAssignedRole(userAfter, ROLE_COLOR_GREEN_OID); assertNotAssignedRole(userAfter, ROLE_COLOR_BLUE_OID); assertAssignedRole(userAfter, ROLE_COLOR_NONE_OID); assertNoDummyAccount(ACCOUNT_GUYBRUSH_DUMMY_USERNAME); } /** * MID-3685 */ @Test public void test216GuybrushAssignRoleBlue() throws Exception { final String TEST_NAME = "test216GuybrushAssignRoleBlue"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); assignRole(USER_GUYBRUSH_OID, ROLE_COLOR_BLUE_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); PrismObject<UserType> userAfter = getUser(USER_GUYBRUSH_OID); display("User after", userAfter); assertNotAssignedRole(userAfter, ROLE_COLOR_RED_OID); assertNotAssignedRole(userAfter, ROLE_COLOR_GREEN_OID); assertAssignedRole(userAfter, ROLE_COLOR_BLUE_OID); assertNotAssignedRole(userAfter, ROLE_COLOR_NONE_OID); assertDummyAccount(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME); assertDummyAccountAttribute(null, ACCOUNT_GUYBRUSH_DUMMY_USERNAME, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_SHIP_NAME, ROLE_COLOR_BLUE_SHIP); } }