public void checkConsistence() { if (objectDelta != null) { objectDelta.checkConsistence(); } }
public static void checkConsistence(Collection<? extends ObjectDelta<?>> deltas) { for (ObjectDelta<?> delta: deltas) { delta.checkConsistence(); } } }
public void checkConsistence(boolean requireOid, String shortDesc) { for (int wave = 0; wave < waves.size(); wave++) { ObjectDelta<O> delta = waves.get(wave); if (delta == null) { continue; } try { delta.checkConsistence(requireOid, true, true, ConsistencyCheckScope.THOROUGH); } catch (IllegalArgumentException e) { throw new IllegalArgumentException(e.getMessage()+"; in "+shortDesc+", wave "+wave, e); } catch (IllegalStateException e) { throw new IllegalStateException(e.getMessage()+"; in "+shortDesc+", wave "+wave, e); } } }
protected void checkConsistence(ObjectDelta<O> delta, boolean requireOid, String contextDesc) { try { delta.checkConsistence(requireOid, true, true, ConsistencyCheckScope.THOROUGH); } catch (IllegalArgumentException e) { throw new IllegalArgumentException(e.getMessage()+"; in "+contextDesc, e); } catch (IllegalStateException e) { throw new IllegalStateException(e.getMessage()+"; in "+contextDesc, e); } if (delta.isAdd()) { checkConsistence(delta.getObjectToAdd(), "add object", contextDesc); } }
private void assertConfigurationPropertyChange(ObjectDelta<ResourceType> resourceDelta, String propName) { resourceDelta.checkConsistence(); PropertyDelta propertyDelta = resourceDelta.findPropertyDelta(pathConfigProperties(propName)); assertNotNull("No delta for configuration property "+propName, propertyDelta); // TODO resourceDelta.checkConsistence(); }
@Test public void testAddDelta() throws SchemaException, SAXException, IOException { System.out.println("===[ testAddDelta ]==="); // WHEN ObjectDelta<UserType> userDelta = DiffUtil.diff(null,new File(TEST_DIR, "user-jack-after.xml"), UserType.class, getPrismContext()); //THEN System.out.println("DELTA:"); System.out.println(userDelta.debugDump()); userDelta.checkConsistence(); assertEquals("Wrong delta OID", "deadbeef-c001-f00d-1111-222233330001", userDelta.getOid()); assertEquals("Wrong change type", ChangeType.ADD, userDelta.getChangeType()); // TODO }
private void validate(ResourceObjectShadowChangeDescription change) { Validate.notNull(change, "Resource object shadow change description must not be null."); Validate.isTrue(change.getCurrentShadow() != null || change.getObjectDelta() != null, "Object delta and current shadow are null. At least one must be provided."); Validate.notNull(change.getResource(), "Resource in change must not be null."); if (consistencyChecks) { if (change.getCurrentShadow() != null) { change.getCurrentShadow().checkConsistence(); ShadowUtil.checkConsistence(change.getCurrentShadow(), "current shadow in change description"); } if (change.getObjectDelta() != null) { change.getObjectDelta().checkConsistence(); } } }
@Test public void testRefWithObject() throws SchemaException, IOException, JAXBException { System.out.println("===[ testRefWithObject ]===="); ObjectModificationType objectChange = PrismTestUtil.parseAtomicValue(new File(TEST_DIR, "user-modify-add-account.xml"), ObjectModificationType.COMPLEX_TYPE); ObjectDelta<UserType> objectDelta = DeltaConvertor.createObjectDelta(objectChange, UserType.class, getPrismContext()); System.out.println("delta: " + objectDelta.debugDump()); assertNotNull("No object delta", objectDelta); objectDelta.checkConsistence(); assertEquals("Wrong OID", "c0c010c0-d34d-b33f-f00d-111111111111", objectDelta.getOid()); ReferenceDelta accoutRefDelta = objectDelta.findReferenceModification(UserType.F_LINK_REF); assertNotNull("No accountRef delta", accoutRefDelta); Collection<PrismReferenceValue> valuesToAdd = accoutRefDelta.getValuesToAdd(); assertEquals("Wrong number of values to add", 1, valuesToAdd.size()); PrismReferenceValue accountRefVal = valuesToAdd.iterator().next(); assertNotNull("No object in accountRef value", accountRefVal.getObject()); objectDelta.assertDefinitions(); }
@Test public void testResourceNsChangeLiteral() throws SchemaException, SAXException, IOException, JAXBException { System.out.println("===[ testResourceNsChangeLiteral ]==="); PrismObject<ResourceType> resourceBefore = PrismTestUtil.parseObject(RESOURCE_BEFORE_FILE); PrismObject<ResourceType> resourceAfter = PrismTestUtil.parseObject(RESOURCE_AFTER_NS_CHANGE_FILE); resourceBefore.checkConsistence(); resourceAfter.checkConsistence(); // WHEN ObjectDelta<ResourceType> resourceDelta = resourceBefore.diff(resourceAfter, EquivalenceStrategy.LITERAL_IGNORE_METADATA); // THEN System.out.println("DELTA:"); System.out.println(resourceDelta.debugDump()); resourceDelta.checkConsistence(); resourceDelta.assertDefinitions(true); resourceBefore.checkConsistence(); resourceAfter.checkConsistence(); assertFalse("The delta is empty", resourceDelta.isEmpty()); }
@Test public void testModifyInducement() throws Exception { System.out.println("===[ testModifyInducement ]===="); ObjectModificationType objectChange = PrismTestUtil.parseAtomicValue(new File(TEST_DIR, "role-modify-inducement.xml"), ObjectModificationType.COMPLEX_TYPE); // WHEN ObjectDelta<RoleType> objectDelta = DeltaConvertor.createObjectDelta(objectChange, RoleType.class, getPrismContext()); System.out.println("Delta:"); System.out.println(objectDelta.debugDump()); // THEN assertNotNull("No object delta", objectDelta); objectDelta.checkConsistence(); assertEquals("Wrong OID", "00000000-8888-6666-0000-100000000005", objectDelta.getOid()); ReferenceDelta targetRefDelta = objectDelta.findReferenceModification(ItemPath.create(RoleType.F_INDUCEMENT, 5L, AssignmentType.F_TARGET_REF)); assertNotNull("No targetRef delta", targetRefDelta); Collection<PrismReferenceValue> valuesToAdd = targetRefDelta.getValuesToAdd(); assertEquals("Wrong number of values to add", 1, valuesToAdd.size()); PrismReferenceValue targetRefVal = valuesToAdd.iterator().next(); assertNotNull("Null value in targetRef delta", targetRefVal); assertEquals("wrong OID in targetRef", "12345678-d34d-b33f-f00d-987987987987", targetRefVal.getOid()); assertEquals("wrong target type in targetRef", RoleType.COMPLEX_TYPE, targetRefVal.getTargetType()); }
private PropertyDelta<PolyString> getCheckedPropertyDeltaFromUnion(ObjectDelta<UserType> userDeltaUnion) { userDeltaUnion.checkConsistence(); assertEquals("Wrong OID", USER_FOO_OID, userDeltaUnion.getOid()); PrismAsserts.assertIsModify(userDeltaUnion); PrismAsserts.assertModifications(userDeltaUnion, 1); PropertyDelta<PolyString> fullNameDeltaUnion = userDeltaUnion.findPropertyDelta(UserType.F_FULL_NAME); assertNotNull("No fullName delta after union", fullNameDeltaUnion); return fullNameDeltaUnion; }
@Test public void testUserReal() throws SchemaException, SAXException, IOException, JAXBException { System.out.println("===[ testUserReal ]==="); String userBeforeXml = MiscUtil.readFile(new File(TEST_DIR, "user-real-before.xml")); String userAfterXml = MiscUtil.readFile(new File(TEST_DIR, "user-real-after.xml")); // WHEN ObjectDelta<UserType> userDelta = DiffUtil.diff(userBeforeXml, userAfterXml, UserType.class, getPrismContext()); // THEN System.out.println("DELTA:"); System.out.println(userDelta.debugDump()); userDelta.checkConsistence(); assertEquals("Wrong delta OID", "2f9b9299-6f45-498f-bc8e-8d17c6b93b20", userDelta.getOid()); assertEquals("Wrong change type", ChangeType.MODIFY, userDelta.getChangeType()); Collection<? extends ItemDelta> modifications = userDelta.getModifications(); assertEquals("Unexpected number of modifications", 4, modifications.size()); PrismAsserts.assertPropertyReplace(userDelta, new ItemName(SchemaConstants.NS_C,"emailAddress"), "jack@blackpearl.com"); PrismAsserts.assertPropertyReplace(userDelta, new ItemName(SchemaConstants.NS_C,"locality"), new PolyString("World's End", "worlds end")); PrismAsserts.assertPropertyReplace(userDelta, SchemaConstants.PATH_ACTIVATION_ADMINISTRATIVE_STATUS, ActivationStatusType.DISABLED); PrismAsserts.assertPropertyAdd(userDelta, new ItemName(SchemaConstants.NS_C,"organizationalUnit"), new PolyString("Brethren of the Coast", "brethren of the coast")); }
@Test public void test105ApplyDefinitionModifyDelta() throws Exception { final String TEST_NAME = "test105ApplyDefinitionModifyDelta"; displayTestTitle(TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); ObjectModificationType changeAddRoleCaptain = PrismTestUtil.parseAtomicValue(MODIFY_ACCOUNT_FILE, ObjectModificationType.COMPLEX_TYPE); ObjectDelta<ShadowType> accountDelta = DeltaConvertor.createObjectDelta(changeAddRoleCaptain, ShadowType.class, prismContext); // WHEN provisioningService.applyDefinition(accountDelta, task, result); // THEN assertSuccess(result); accountDelta.checkConsistence(true, true, true); assertSteadyResource(); }
@Test public void testUserCredentialsDiff() throws Exception { System.out.println("===[ testUserCredentialsDiff ]==="); PrismObject<UserType> userBefore = PrismTestUtil.parseObject(USER_BEFORE_FILE); userBefore.checkConsistence(); PrismObject<UserType> userAfter = PrismTestUtil.parseObject(USER_AFTER_FILE); userAfter.checkConsistence(); ObjectDelta<UserType> userDelta = userBefore.diff(userAfter); System.out.println("DELTA:"); System.out.println(userDelta.debugDump()); userBefore.checkConsistence(); userAfter.checkConsistence(); userDelta.checkConsistence(); userDelta.assertDefinitions(); ItemPath path = ItemPath.create(SchemaConstantsGenerated.C_CREDENTIALS, CredentialsType.F_PASSWORD, PasswordType.F_FAILED_LOGINS); PrismAsserts.assertPropertyAdd(userDelta, path, 1); path = ItemPath.create(SchemaConstantsGenerated.C_CREDENTIALS, CredentialsType.F_PASSWORD, PasswordType.F_FAILED_LOGINS); PropertyDelta propertyDelta = userDelta.findPropertyDelta(path); assertNotNull("Property delta for "+path+" not found",propertyDelta); assertEquals(1, propertyDelta.getValuesToAdd().size()); }
@Test public void testModifyGivenName() throws Exception { System.out.println("===[ testModifyGivenName ]===="); ObjectModificationType objectChange = PrismTestUtil.parseAtomicValue(new File(TEST_DIR, "user-modify-givenname.xml"), ObjectModificationType.COMPLEX_TYPE); // WHEN ObjectDelta<UserType> objectDelta = DeltaConvertor.createObjectDelta(objectChange, UserType.class, getPrismContext()); // THEN assertNotNull("No object delta", objectDelta); objectDelta.checkConsistence(); assertEquals("Wrong OID", "c0c010c0-d34d-b33f-f00d-111111111111", objectDelta.getOid()); PropertyDelta<String> givenNameDelta = objectDelta.findPropertyDelta(UserType.F_GIVEN_NAME); assertNotNull("No givenName delta", givenNameDelta); Collection<PrismPropertyValue<String>> valuesToReplace = givenNameDelta.getValuesToReplace(); assertEquals("Wrong number of values to replace", 0, valuesToReplace.size()); PrismObject<UserType> user = PrismTestUtil.parseObject(USER_JACK_FILE); // apply to user objectDelta.applyTo(user); PrismProperty<String> protectedStringProperty = user.findProperty(UserType.F_GIVEN_NAME); assertNull("givenName porperty sneaked in after delta was applied", protectedStringProperty); objectDelta.assertDefinitions(); }
@Test public void testUserSimplePropertyDiffNoChange() throws Exception { System.out.println("\n\n===[ testUserSimplePropertyDiffNoChange ]===\n"); // GIVEN PrismObjectDefinition<UserType> userDef = getUserTypeDefinition(); PrismObject<UserType> user1 = userDef.instantiate(); user1.setOid(USER_JACK_OID); user1.setPropertyRealValue(UserType.F_NAME, PrismTestUtil.createPolyString("test name")); PrismObject<UserType> user2 = userDef.instantiate(); user2.setOid(USER_JACK_OID); user2.setPropertyRealValue(UserType.F_NAME, PrismTestUtil.createPolyString("test name")); // WHEN ObjectDelta<UserType> delta = user1.diff(user2); // THEN assertNotNull(delta); assertEquals("Unexpected number of midifications", 0, delta.getModifications().size()); assertEquals("Wrong OID", USER_JACK_OID, delta.getOid()); delta.checkConsistence(); }
@Test public void testUserSimplePropertyDiffReplace() throws Exception { System.out.println("\n\n===[ testUserSimplePropertyDiffReplace ]===\n"); // GIVEN PrismObjectDefinition<UserType> userDef = getUserTypeDefinition(); PrismObject<UserType> user1 = userDef.instantiate(); user1.setOid(USER_JACK_OID); user1.setPropertyRealValue(UserType.F_NAME, PrismTestUtil.createPolyString("test name")); PrismObject<UserType> user2 = userDef.instantiate(); user2.setOid(USER_JACK_OID); user2.setPropertyRealValue(UserType.F_NAME, PrismTestUtil.createPolyString("other name")); // WHEN ObjectDelta<UserType> delta = user1.diff(user2); // THEN assertNotNull(delta); System.out.println(delta.debugDump()); assertEquals("Unexpected number of midifications", 1, delta.getModifications().size()); PrismAsserts.assertPropertyReplace(delta, UserType.F_NAME, PrismTestUtil.createPolyString("other name")); assertEquals("Wrong OID", USER_JACK_OID, delta.getOid()); delta.checkConsistence(); }
@Test public void testDiffPatchRoundTrip() throws SchemaException, SAXException, IOException { final String TEST_NAME="testDiffPatchRoundTrip"; displayTestTitle(TEST_NAME); // GIVEN PrismContext prismContext = constructInitializedPrismContext(); PrismObject<UserType> jackOriginal = prismContext.parseObject(getFile(USER_JACK_FILE_BASENAME)); PrismObject<UserType> jackModified = prismContext.parseObject(getFile(USER_JACK_MODIFIED_FILE_BASENAME)); ObjectDelta<UserType> jackDelta = jackOriginal.diff(jackModified); // System.out.println("jackOriginal:\n" + prismContext.getXnodeProcessor().serializeObject(jackOriginal).debugDump(1)); // System.out.println("jackModified:\n" + prismContext.getXnodeProcessor().serializeObject(jackModified).debugDump(1)); // System.out.println("jackDelta:\n" + jackDelta.debugDump()); jackDelta.assertDefinitions(); jackDelta.checkConsistence(true, true, true); // WHEN jackDelta.applyTo(jackOriginal); // System.out.println("jackOriginal after applying delta:\n" + prismContext.getXnodeProcessor().serializeObject(jackOriginal).debugDump(1)); // THEN assertTrue("Roundtrip failed", jackOriginal.equivalent(jackModified)); }
@Test public void testUserSimpleDiffMultiNoChange() throws Exception { System.out.println("\n\n===[ testUserSimpleDiffMultiNoChange ]===\n"); // GIVEN PrismObjectDefinition<UserType> userDef = getUserTypeDefinition(); PrismObject<UserType> user1 = userDef.instantiate(); user1.setOid(USER_JACK_OID); PrismProperty<String> anamesProp1 = user1.findOrCreateProperty(UserType.F_ADDITIONAL_NAMES); anamesProp1.addRealValue("foo"); anamesProp1.addRealValue("bar"); PrismObject<UserType> user2 = userDef.instantiate(); user2.setOid(USER_JACK_OID); PrismProperty<String> anamesProp2 = user2.findOrCreateProperty(UserType.F_ADDITIONAL_NAMES); anamesProp2.addRealValue("foo"); anamesProp2.addRealValue("bar"); // WHEN ObjectDelta<UserType> delta = user1.diff(user2); // THEN assertNotNull(delta); assertEquals("Unexpected number of midifications", 0, delta.getModifications().size()); assertEquals("Wrong OID", USER_JACK_OID, delta.getOid()); delta.checkConsistence(); }
@Test public void test041ApplyDefinitionAddShadowDelta() throws Exception { final String TEST_NAME = "test041ApplyDefinitionAddShadowDelta"; displayTestTitle(TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); PrismObject<ShadowType> account = PrismTestUtil.parseObject(getAccountWillFile()); ObjectDelta<ShadowType> delta = account.createAddDelta(); // WHEN provisioningService.applyDefinition(delta, task, result); // THEN result.computeStatus(); display("applyDefinition result", result); TestUtil.assertSuccess(result); delta.checkConsistence(true, true, true); TestUtil.assertSuccess("applyDefinition(add delta) result", result); assertSteadyResource(); }