From c00d85c3c1ce93ffdd2188f953618513fd1f8046 Mon Sep 17 00:00:00 2001 From: Katarina Valalikova Date: Tue, 11 Sep 2018 16:21:40 +0200 Subject: [PATCH] fixing MID-4504 --- .../impl/expr/MidpointFunctionsImpl.java | 2 + .../midpoint/model/intest/TestMisc.java | 98 +++++++++++++++++++ .../resources/misc/resource-dummy-scripty.xml | 4 +- .../src/test/resources/misc/role-ship.xml | 34 +++++++ 4 files changed, 135 insertions(+), 3 deletions(-) create mode 100644 model/model-intest/src/test/resources/misc/role-ship.xml diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/expr/MidpointFunctionsImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/expr/MidpointFunctionsImpl.java index 62d899a9c4f..58177a51c77 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/expr/MidpointFunctionsImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/expr/MidpointFunctionsImpl.java @@ -481,6 +481,7 @@ public ShadowType getLinkedShadow(FocusType focus, String resourceOid, boolean r // It is safe to ignore this error in this method. LOGGER.trace("Ignoring shadow " + linkRef.getOid() + " linked in " + focus + " because it no longer exists in repository"); + getCurrentResult().muteLastSubresultError(); continue; } if (shadowType.getResourceRef().getOid().equals(resourceOid)) { @@ -493,6 +494,7 @@ public ShadowType getLinkedShadow(FocusType focus, String resourceOid, boolean r // It is safe to ignore this error in this method. LOGGER.trace("Ignoring shadow " + linkRef.getOid() + " linked in " + focus + " because it no longer exists on resource"); + getCurrentResult().muteLastSubresultError(); continue; } } diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMisc.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMisc.java index dec58f899f1..54aa9e7796d 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMisc.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMisc.java @@ -37,12 +37,14 @@ import com.evolveum.icf.dummy.resource.DummyAccount; import com.evolveum.midpoint.prism.Objectable; import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.prism.PrismReference; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.util.PrismAsserts; import com.evolveum.midpoint.schema.GetOperationOptions; import com.evolveum.midpoint.schema.RepositoryDiag; import com.evolveum.midpoint.schema.SelectorOptions; import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.schema.util.ShadowUtil; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.test.DummyResourceContoller; import com.evolveum.midpoint.test.util.TestUtil; @@ -63,6 +65,9 @@ public class TestMisc extends AbstractInitializedModelIntegrationTest { protected static final File ROLE_IMPORT_FILTERS_FILE = new File(TEST_DIR, "role-import-filters.xml"); protected static final String ROLE_IMPORT_FILTERS_OID = "aad19b9a-d511-11e7-8bf7-cfecde275e59"; + protected static final File ROLE_SHIP_FILE = new File(TEST_DIR, "role-ship.xml"); + protected static final String ROLE_SHIP_OID = "bbd19b9a-d511-11e7-8bf7-cfecde275e59"; + protected static final File RESOURCE_SCRIPTY_FILE = new File(TEST_DIR, "resource-dummy-scripty.xml"); protected static final String RESOURCE_SCRIPTY_OID = "399f5308-0447-11e8-91e9-a7f9c4100ffb"; protected static final String RESOURCE_DUMMY_SCRIPTY_NAME = "scripty"; @@ -82,6 +87,8 @@ public void initSystem(Task initTask, OperationResult initResult) initDummyResourcePirate(RESOURCE_DUMMY_SCRIPTY_NAME, RESOURCE_SCRIPTY_FILE, RESOURCE_SCRIPTY_OID, initTask, initResult); + + importObjectFromFile(ROLE_SHIP_FILE); } @Test @@ -327,4 +334,95 @@ public void test500AddHocProvisioningScriptAssignJackResourceScripty() throws Ex "Mr. POLY JACK SPARROW"); } + + /** + * MID-4504 + * midpoint.getLinkedShadow fails recomputing without throwing exception during shadow delete + * + * the ship attribute in the role "Ship" has mapping with calling midpoint.getLinkedShadow() on the reosurce which doesn't exist + */ + @Test + public void test600jackAssignRoleShip() throws Exception { + final String TEST_NAME = "test600jackAssignRoleShip"; + displayTestTitle(TEST_NAME); + + // GIVEN + Task task = createTask(TEST_NAME); + OperationResult result = task.getResult(); + + + // WHEN + displayWhen(TEST_NAME); + assignRole(USER_JACK_OID, ROLE_SHIP_OID); + + //THEN + displayThen(TEST_NAME); + PrismObject userAfter = getUser(USER_JACK_OID); + display("User before", userAfter); + assertAssignments(userAfter, 2); + assertLinks(userAfter, 1); + + PrismReference linkRef = userAfter.findReference(UserType.F_LINK_REF); + assertTrue(!linkRef.isEmpty()); + +// PrismObject shadowModel = getShadowModel(linkRef.getOid()); + + assertDummyAccountAttribute(RESOURCE_DUMMY_SCRIPTY_NAME, USER_JACK_USERNAME, "ship", "ship"); + + } + + @Test + public void test601jackUnassignResourceAccount() throws Exception { + final String TEST_NAME = "test601jackUnassignResourceAccount"; + displayTestTitle(TEST_NAME); + + // GIVEN + Task task = createTask(TEST_NAME); + OperationResult result = task.getResult(); + PrismObject userBefore = getUser(USER_JACK_OID); + display("User before", userBefore); + assertAssignments(userBefore, 2); + + // WHEN + displayWhen(TEST_NAME); + unassignAccount(USER_JACK_OID, RESOURCE_SCRIPTY_OID, null); + + //THEN + displayThen(TEST_NAME); + PrismObject userAfter = getUser(USER_JACK_OID); + display("User after", userAfter); + assertAssignments(userAfter, 1); + assertLinks(userAfter, 1); + } + + + /** + * MID-4504 + * midpoint.getLinkedShadow fails recomputing without throwing exception during shadow delete + * + * first assign role ship, the ship attribute in the role has mapping with calling midpoint.getLinkedShadow() + */ + @Test + public void test602jackUnssigndRoleShip() throws Exception { + final String TEST_NAME = "test602jackUnssigndRoleShip"; + displayTestTitle(TEST_NAME); + + // GIVEN + Task task = createTask(TEST_NAME); + OperationResult result = task.getResult(); + + + // WHEN + displayWhen(TEST_NAME); + unassignRole(USER_JACK_OID, ROLE_SHIP_OID); + + //THEN + displayThen(TEST_NAME); + PrismObject userAfter = getUser(USER_JACK_OID); + display("User before", userAfter); + assertAssignments(userAfter, 0); + assertLinks(userAfter, 0); + + } + } diff --git a/model/model-intest/src/test/resources/misc/resource-dummy-scripty.xml b/model/model-intest/src/test/resources/misc/resource-dummy-scripty.xml index 3c91bc7d07b..bb1ceeb8eb6 100644 --- a/model/model-intest/src/test/resources/misc/resource-dummy-scripty.xml +++ b/model/model-intest/src/test/resources/misc/resource-dummy-scripty.xml @@ -21,7 +21,7 @@ xmlns="http://midpoint.evolveum.com/xml/ns/public/common/common-3" xmlns:q="http://prism.evolveum.com/xml/ns/public/query-3" xmlns:icfs="http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/resource-schema-3" - xmlns:ri="http://midpoint.evolveum.com/xml/ns/public/resource/instance/10000000-0000-0000-0000-000000000004" + xmlns:ri="http://midpoint.evolveum.com/xml/ns/public/resource/instance-3" xmlns:mr="http://prism.evolveum.com/xml/ns/public/matching-rule-3" xmlns:t="http://prism.evolveum.com/xml/ns/public/types-3" xmlns:piracy="http://midpoint.evolveum.com/xml/ns/samples/piracy" @@ -62,8 +62,6 @@ - http://midpoint.evolveum.com/xml/ns/public/resource/instance/10000000-0000-0000-0000-000000000004 - account diff --git a/model/model-intest/src/test/resources/misc/role-ship.xml b/model/model-intest/src/test/resources/misc/role-ship.xml new file mode 100644 index 00000000000..3e591c6fda8 --- /dev/null +++ b/model/model-intest/src/test/resources/misc/role-ship.xml @@ -0,0 +1,34 @@ + + + Space Ship + MID-4504 + + + + account + + ri:ship + + strong + + + + + + + + \ No newline at end of file