@Test public void test100ObjectAdd() throws Exception { System.out.println("===[ test100ObjectAdd ]===="); UserType user = new UserType(getPrismContext()); user.setName(PolyStringType.fromOrig("john")); user.setOid("1234567890"); ObjectDelta delta = DeltaFactory.Object.createAddDelta(user.asPrismObject()); roundTrip(delta); }
<T extends ObjectType> void modifyObjectPreAuthorized(Class<T> objectClass, String oid, Collection<ItemDelta<?,?>> itemDeltas, Task task, OperationResult result) throws ObjectAlreadyExistsException, SchemaException, ObjectNotFoundException { ObjectDelta<T> objectDelta = prismContext.deltaFactory().object().createModifyDelta(oid, itemDeltas, objectClass ); try { ModelExecuteOptions options = ModelExecuteOptions.createRaw().setPreAuthorized(); modelService.executeChanges(Collections.singletonList(objectDelta), options, task, result); } catch (SecurityViolationException|ExpressionEvaluationException|CommunicationException|ConfigurationException|PolicyViolationException e) { throw new SystemException("Unexpected exception when modifying " + objectClass.getSimpleName() + " " + oid + ": " + e.getMessage(), e); } }
@Test public void testObjectDeltaApplyToReplaceEmpty() throws Exception { final String TEST_NAME="testObjectDeltaApplyToReplaceEmpty"; displayTestTitle(TEST_NAME); // GIVEN PrismObject<UserType> user = PrismTestUtil.parseObject(USER_JACK_FILE_XML); //Delta ObjectDelta<UserType> userDelta = PrismTestUtil.getPrismContext().deltaFactory().object() .createModificationReplaceProperty(UserType.class, USER_FOO_OID, UserType.F_ADDITIONAL_NAMES); // WHEN userDelta.applyTo(user); // THEN PrismAsserts.assertNoItem(user, UserType.F_ADDITIONAL_NAMES); user.checkConsistence(); }
@Test public void testScriptFullNameDeleteGivenNameFromNull() throws Exception { final String TEST_NAME = "testScriptFullNameDeleteGivenNameFromNull"; TestUtil.displayTestTitle(TEST_NAME); // GIVEN ObjectDelta<UserType> delta = evaluator.getPrismContext().deltaFactory().object() .createModificationDeleteProperty(UserType.class, evaluator.USER_OLD_OID, UserType.F_GIVEN_NAME, PrismTestUtil.createPolyString("Jack")); PrismObject<UserType> userOld = evaluator.getUserOld(); userOld.asObjectable().setGivenName(null); MappingImpl<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( "mapping-script-fullname.xml", TEST_NAME, "fullName", // target delta, userOld); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); outputTriple.checkConsistence(); PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, PrismTestUtil.createPolyString("Sparrow")); PrismAsserts.assertTripleMinus(outputTriple, PrismTestUtil.createPolyString("Jack Sparrow")); }
@Test public void test103DeleteUserEmployeeTypeBartender() throws Exception { final String TEST_NAME = "test103ModifyUserEmployeeTypeBartender"; displayTestTitle(TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); Collection<ObjectDelta<? extends ObjectType>> deltas = new ArrayList<>(); ObjectDelta<UserType> userDelta = prismContext.deltaFactory().object().createModificationDeleteProperty(UserType.class, USER_JACK_OID, UserType.F_SUBTYPE, "BUCCANEER"); deltas.add(userDelta); // WHEN modelService.executeChanges(deltas, null, task, result); // THEN PrismObject<UserType> userJack = modelService.getObject(UserType.class, USER_JACK_OID, null, task, result); display("User after", userJack); PrismAsserts.assertPropertyValue(userJack, UserType.F_DESCRIPTION, "Where's the rum?"); assertNotAssignedRole(userJack, ROLE_PIRATE_GREEN_OID); assertNotAssignedRole(userJack, ROLE_BUCCANEER_GREEN_OID); assertNoAssignments(userJack); UserType userJackType = userJack.asObjectable(); assertEquals("Unexpected number of accountRefs", 0, userJackType.getLinkRef().size()); result.computeStatus(); TestUtil.assertSuccess(result); assertEquals("Employee number has changed", jackEmployeeNumber, userJackType.getEmployeeNumber()); }
@Test public void test123ModifyObjectDeletePirate() throws Exception { final String TEST_NAME = "test123ModifyObjectDeletePirate"; displayTestTitle(TEST_NAME); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); syncServiceMock.reset(); ObjectDelta<ShadowType> delta = prismContext.deltaFactory().object().createModificationDeleteProperty(ShadowType.class, ACCOUNT_WILL_OID, dummyResourceCtl.getAttributePath(DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME), "Pirate"); display("ObjectDelta", delta); delta.checkConsistence(); // WHEN displayWhen(TEST_NAME); provisioningService.modifyObject(ShadowType.class, delta.getOid(), delta.getModifications(), new OperationProvisioningScriptsType(), null, task, result); // THEN displayThen(TEST_NAME); assertSuccess(result); delta.checkConsistence(); // check if attribute was changed assertDummyAccountAttributeValues(transformNameFromResource(ACCOUNT_WILL_USERNAME), willIcfUid, DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME, "Captain"); syncServiceMock.assertNotifySuccessOnly(); assertSteadyResource(); }
@Test public void testAddAssignmentSameNullIdApplyToObject() throws Exception { final String TEST_NAME="testAddAssignmentSameNullIdApplyToObject"; displayTestTitle(TEST_NAME); // GIVEN // User PrismObject<UserType> user = createUserFooPatlama(); //Delta PrismContainerValue<AssignmentType> assignmentValue = getPrismContext().itemFactory().createContainerValue(); // The value id is null assignmentValue.setPropertyRealValue(AssignmentType.F_DESCRIPTION, ASSIGNMENT_PATLAMA_DESCRIPTION, PrismTestUtil.getPrismContext()); ObjectDelta<UserType> userDelta = PrismTestUtil.getPrismContext().deltaFactory().object() .createModificationAddContainer(UserType.class, USER_FOO_OID, UserType.F_ASSIGNMENT, assignmentValue); // WHEN userDelta.applyTo(user); // THEN System.out.println("User after delta application:"); System.out.println(user.debugDump()); assertEquals("Wrong OID", USER_FOO_OID, user.getOid()); PrismAsserts.assertPropertyValue(user, UserType.F_ADDITIONAL_NAMES, PrismTestUtil.createPolyString("foobar")); PrismContainer<AssignmentType> assignment = user.findContainer(UserType.F_ASSIGNMENT); assertNotNull("No assignment", assignment); assertEquals("Unexpected number of assignment values", 1, assignment.size()); }
@Test public void testScriptFullNameDeleteGivenNameFamilyName() throws Exception { final String TEST_NAME = "testScriptFullNameDeleteGivenNameFamilyName"; TestUtil.displayTestTitle(TEST_NAME); // GIVEN ObjectDelta<UserType> delta = evaluator.getPrismContext().deltaFactory().object() .createModificationDeleteProperty(UserType.class, evaluator.USER_OLD_OID, UserType.F_GIVEN_NAME, PrismTestUtil.createPolyString("Jack")); delta.addModificationDeleteProperty(UserType.F_FAMILY_NAME, PrismTestUtil.createPolyString("Sparrow")); MappingImpl<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( "mapping-script-fullname.xml", TEST_NAME, "fullName", // target delta); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); outputTriple.checkConsistence(); PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, PrismTestUtil.createPolyString("John Doe")); PrismAsserts.assertTripleMinus(outputTriple, PrismTestUtil.createPolyString("Jack Sparrow")); }
protected void modifyRoleAddInducementTarget(String roleOid, String targetOid, boolean reconcileAffected, ModelExecuteOptions defaultOptions, Task task) throws SchemaException, ObjectAlreadyExistsException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, PolicyViolationException, SecurityViolationException { if (task == null) { task = createTask(AbstractModelIntegrationTest.class.getName() + ".modifyRoleAddInducementTarget"); } OperationResult result = task.getResult(); AssignmentType inducement = new AssignmentType(); ObjectReferenceType targetRef = new ObjectReferenceType(); targetRef.setOid(targetOid); inducement.setTargetRef(targetRef); ObjectDelta<RoleType> roleDelta = prismContext.deltaFactory().object() .createModificationAddContainer(RoleType.class, roleOid, RoleType.F_INDUCEMENT, inducement); ModelExecuteOptions options = nullToEmpty(defaultOptions); options.setReconcileAffected(reconcileAffected); executeChanges(roleDelta, options, task, result); result.computeStatus(); if (reconcileAffected) { TestUtil.assertInProgressOrSuccess(result); } else { TestUtil.assertSuccess(result); } }
@Test(enabled=false) public void testAddAssignmentDifferentIdConflictSwallow() throws Exception { final String TEST_NAME="testAddAssignmentDifferentIdConflictSwallow"; displayTestTitle(TEST_NAME); // GIVEN //Delta 1 PrismContainerValue<AssignmentType> assignmentValue1 = getPrismContext().itemFactory().createContainerValue(); assignmentValue1.setId(USER_ASSIGNMENT_1_ID); assignmentValue1.setPropertyRealValue(AssignmentType.F_DESCRIPTION, ASSIGNMENT_PATLAMA_DESCRIPTION, PrismTestUtil.getPrismContext()); ObjectDelta<UserType> userDelta1 = PrismTestUtil.getPrismContext().deltaFactory().object() .createModificationAddContainer(UserType.class, USER_FOO_OID, UserType.F_ASSIGNMENT, assignmentValue1); //Delta 2 PrismContainerValue<AssignmentType> assignmentValue2 = getPrismContext().itemFactory().createContainerValue(); assignmentValue2.setId(USER_ASSIGNMENT_1_ID); assignmentValue2.setPropertyRealValue(AssignmentType.F_DESCRIPTION, ASSIGNMENT_ABRAKADABRA_DESCRIPTION, PrismTestUtil.getPrismContext()); ContainerDelta<AssignmentType> containerDelta2 = ContainerDeltaImpl.createDelta(UserType.F_ASSIGNMENT, getUserTypeDefinition()); containerDelta2.addValueToAdd(assignmentValue2); // WHEN userDelta1.swallow(containerDelta2); AssertJUnit.fail("Unexpected success"); }
@Test public void testScriptFullNameDeleteGivenName() throws Exception { final String TEST_NAME = "testScriptFullNameDeleteGivenName"; TestUtil.displayTestTitle(TEST_NAME); // GIVEN ObjectDelta<UserType> delta = evaluator.getPrismContext().deltaFactory().object() .createModificationDeleteProperty(UserType.class, evaluator.USER_OLD_OID, UserType.F_GIVEN_NAME, PrismTestUtil.createPolyString("Jack")); MappingImpl<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( "mapping-script-fullname.xml", TEST_NAME, "fullName", // target delta); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); outputTriple.checkConsistence(); PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, PrismTestUtil.createPolyString("Sparrow")); PrismAsserts.assertTripleMinus(outputTriple, PrismTestUtil.createPolyString("Jack Sparrow")); }
protected void modifyRoleDeleteInducement(String roleOid, long inducementId, boolean reconcileAffected, ModelExecuteOptions defaultOptions, Task task) throws SchemaException, ObjectAlreadyExistsException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, PolicyViolationException, SecurityViolationException { if (task == null) { task = createTask(AbstractModelIntegrationTest.class.getName() + ".modifyRoleDeleteInducement"); } OperationResult result = task.getResult(); AssignmentType inducement = new AssignmentType(); inducement.setId(inducementId); ObjectDelta<RoleType> roleDelta = prismContext.deltaFactory().object() .createModificationDeleteContainer(RoleType.class, roleOid, RoleType.F_INDUCEMENT, inducement); ModelExecuteOptions options = nullToEmpty(defaultOptions); options.setReconcileAffected(reconcileAffected); executeChanges(roleDelta, options, task, result); result.computeStatus(); if (reconcileAffected) { TestUtil.assertInProgressOrSuccess(result); } else { TestUtil.assertSuccess(result); } }
@Test public void testObjectDeltaNarrow03() throws Exception { final String TEST_NAME="testObjectDeltaNarrow03"; displayTestTitle(TEST_NAME); // GIVEN ObjectDelta<UserType> userDelta = getPrismContext().deltaFactory().object() .createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_ADDITIONAL_NAMES, "blabla", "bubu"); display("userDelta", userDelta); PrismObject<UserType> user = createUserFoo(); user.setPropertyRealValues(UserType.F_ADDITIONAL_NAMES, "bubu", "blabla"); display("user", user); // WHEN displayWhen(TEST_NAME); ObjectDelta<UserType> narrowedDelta = userDelta.narrow(user); // THEN displayThen(TEST_NAME); display("Narrowed delta", narrowedDelta); PrismAsserts.assertIsModify(narrowedDelta); PrismAsserts.assertModifications(narrowedDelta, 0); }
@Test public void testAddPropertyMulti() throws Exception { final String TEST_NAME="testAddPropertyMulti"; displayTestTitle(TEST_NAME); // GIVEN // User PrismObject<UserType> user = createUserFooPatlama(); //Delta ObjectDelta<UserType> userDelta = PrismTestUtil.getPrismContext().deltaFactory().object() .createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_ADDITIONAL_NAMES, PrismTestUtil.createPolyString("baz")); // WHEN userDelta.applyTo(user); // THEN assertEquals("Wrong OID", USER_FOO_OID, user.getOid()); PrismAsserts.assertPropertyValue(user, UserType.F_ADDITIONAL_NAMES, PrismTestUtil.createPolyString("baz"), PrismTestUtil.createPolyString("foobar")); PrismContainer<AssignmentType> assignment = user.findContainer(UserType.F_ASSIGNMENT); assertNotNull("No assignment", assignment); assertEquals("Unexpected number of assignment values", 1, assignment.size()); }
public PrismValueDeltaSetTriple<PrismPropertyValue<String>> employeeTypeDeltaDelete(final String TEST_NAME, String delVal, String... oldVals) throws Exception { TestUtil.displayTestTitle(TEST_NAME); // GIVEN ObjectDelta<UserType> delta = evaluator.getPrismContext().deltaFactory().object() .createModificationDeleteProperty(UserType.class, evaluator.USER_OLD_OID, UserType.F_EMPLOYEE_TYPE, delVal); MappingImpl<PrismPropertyValue<String>,PrismPropertyDefinition<String>> mapping = evaluator.createMapping( "mapping-script-system-variables-employee-type.xml", TEST_NAME, "employeeType", delta); PrismObject<UserType> user = (PrismObject<UserType>) mapping.getSourceContext().getOldObject(); setEmployeeType(user.asObjectable(), oldVals); mapping.getSourceContext().recompute(); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN evaluator.assertResult(opResult); return mapping.getOutputTriple(); }
private ObjectDelta<UserType> createDeltaForFindItem(boolean containerReplace) throws SchemaException { ObjectDelta<UserType> userDelta = PrismTestUtil.getPrismContext().deltaFactory().object() .createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_LOCALITY, "Caribbean"); userDelta.addModificationReplaceProperty(UserType.F_GIVEN_NAME, "Guybrush"); ContainerDelta<ActivationType> activationDelta = userDelta.createContainerModification(UserType.F_ACTIVATION); PrismContainerValue<ActivationType> activationCVal = getPrismContext().itemFactory().createContainerValue(); if (containerReplace) { activationDelta.addValueToReplace(activationCVal); } else { activationDelta.addValueToAdd(activationCVal); } PrismProperty<Boolean> enabledProperty = activationCVal.createProperty(ActivationType.F_ENABLED); enabledProperty.setRealValue(Boolean.TRUE); PrismProperty<XMLGregorianCalendar> validFromProperty = activationCVal.createProperty(ActivationType.F_VALID_FROM); validFromProperty.setRealValue(XmlTypeConverter.createXMLGregorianCalendar(20016, 5, 16, 19, 8, 33)); userDelta.addModification(activationDelta); return userDelta; }
/** * MODIFY/add + MODIFY/add */ @Test public void testObjectDeltaUnion01Simple() throws Exception { final String TEST_NAME="testObjectDeltaUnion01Simple"; displayTestTitle(TEST_NAME); // GIVEN //Delta ObjectDelta<UserType> userDelta1 = PrismTestUtil.getPrismContext().deltaFactory().object() .createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_FULL_NAME, PrismTestUtil.createPolyString("baz")); ObjectDelta<UserType> userDelta2 = PrismTestUtil.getPrismContext().deltaFactory().object() .createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_FULL_NAME, PrismTestUtil.createPolyString("baz")); // WHEN ObjectDelta<UserType> userDeltaUnion = ObjectDeltaCollectionsUtil.union(userDelta1, userDelta2); // THEN assertUnion01Delta(userDeltaUnion); }
public PrismValueDeltaSetTriple<PrismPropertyValue<String>> employeeTypeDeltaABAdd( final String TEST_NAME, String addVal, String... oldVals) throws Exception { TestUtil.displayTestTitle(TEST_NAME); // GIVEN ObjectDelta<UserType> delta = evaluator.getPrismContext().deltaFactory().object() .createModificationAddProperty(UserType.class, evaluator.USER_OLD_OID, UserType.F_EMPLOYEE_TYPE, addVal); MappingImpl<PrismPropertyValue<String>,PrismPropertyDefinition<String>> mapping = evaluator.createMapping( "mapping-script-system-variables-employee-type.xml", TEST_NAME, "employeeType", delta); PrismObject<UserType> user = (PrismObject<UserType>) mapping.getSourceContext().getOldObject(); setEmployeeType(user.asObjectable(), oldVals); mapping.getSourceContext().recompute(); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN evaluator.assertResult(opResult); return mapping.getOutputTriple(); }
public void applyProjectionWaveSecondaryDeltas(Collection<ItemDelta<?,?>> itemDeltas) throws SchemaException { ObjectDelta<O> wavePrimaryDelta = getProjectionWavePrimaryDelta(); ObjectDelta<O> waveSecondaryDelta = getProjectionWaveSecondaryDelta(); for (ItemDelta<?,?> itemDelta: itemDeltas) { if (itemDelta != null && !itemDelta.isEmpty()) { if (wavePrimaryDelta == null || !wavePrimaryDelta.containsModification(itemDelta)) { if (waveSecondaryDelta == null) { waveSecondaryDelta = getPrismContext().deltaFactory().object().create(getObjectTypeClass(), ChangeType.MODIFY); if (getObjectNew() != null && getObjectNew().getOid() != null){ waveSecondaryDelta.setOid(getObjectNew().getOid()); } setProjectionWaveSecondaryDelta(waveSecondaryDelta); } waveSecondaryDelta.mergeModification(itemDelta); } } } }
public static <T extends Objectable> ObjectDelta<T> diff(PrismObject<T> oldObject, PrismObject<T> newObject) { if (oldObject == null) { if (newObject == null) { return null; } PrismContext prismContext = getPrismContext(oldObject, newObject); if (prismContext == null) { throw new IllegalStateException("No prismContext in DiffUtil.diff!"); } ObjectDelta<T> objectDelta = prismContext.deltaFactory().object().create(newObject.getCompileTimeClass(), ChangeType.ADD); objectDelta.setOid(newObject.getOid()); objectDelta.setObjectToAdd(newObject); return objectDelta; } else { return oldObject.diff(newObject); } }