/* * Copyright (c) 2010-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.schema; import com.evolveum.midpoint.prism.PrismContainer; import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismObjectDefinition; import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.util.PrismAsserts; import com.evolveum.midpoint.prism.util.PrismTestUtil; import com.evolveum.midpoint.schema.constants.MidPointConstants; import com.evolveum.midpoint.util.PrettyPrinter; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.xml.ns._public.common.common_3.ValuePolicyType; import com.evolveum.prism.xml.ns._public.types_3.PolyStringType; import org.testng.annotations.BeforeSuite; import org.testng.annotations.Test; import org.xml.sax.SAXException; import javax.xml.namespace.QName; import java.io.File; import java.io.IOException; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertTrue; /** * @author semancik * @author mederly * */ public class TestParsePasswordPolicy { public static final File FILE = new File("src/test/resources/common/password-policy.xml"); @BeforeSuite public void setup() throws SchemaException, SAXException, IOException { PrettyPrinter.setDefaultNamespacePrefix(MidPointConstants.NS_MIDPOINT_PUBLIC_PREFIX); PrismTestUtil.resetPrismContext(MidPointPrismContextFactory.FACTORY); } @Test public void testParsePasswordPolicyFile() throws Exception { System.out.println("===[ testParsePasswordPolicyFile ]==="); // GIVEN PrismContext prismContext = PrismTestUtil.getPrismContext(); // WHEN PrismObject<ValuePolicyType> policy = prismContext.parserFor(FILE).xml().parse(); // THEN System.out.println("Parsed policy:"); System.out.println(policy.debugDump()); assertPolicy(policy); } @Test public void testParsePolicyRoundtrip() throws Exception { System.out.println("===[ testParsePolicyRoundtrip ]==="); // GIVEN PrismContext prismContext = PrismTestUtil.getPrismContext(); PrismObject<ValuePolicyType> policy = prismContext.parseObject(FILE); System.out.println("Parsed policy:"); System.out.println(policy.debugDump()); assertPolicy(policy); // SERIALIZE String serializedPolicy = prismContext.serializeObjectToString(policy, PrismContext.LANG_XML); System.out.println("serialized policy:"); System.out.println(serializedPolicy); // RE-PARSE PrismObject<ValuePolicyType> reparsedPolicy = prismContext.parseObject(serializedPolicy); System.out.println("Re-parsed policy:"); System.out.println(reparsedPolicy.debugDump()); // Cannot assert here. It will cause parsing of some of the raw values and diff will fail assertPolicy(reparsedPolicy); ObjectDelta<ValuePolicyType> objectDelta = policy.diff(reparsedPolicy); System.out.println("Delta:"); System.out.println(objectDelta.debugDump()); assertTrue("Delta is not empty", objectDelta.isEmpty()); PrismAsserts.assertEquivalent("Policy re-parsed equivalence", policy, reparsedPolicy); } private void assertPolicy(PrismObject<ValuePolicyType> policy) { policy.checkConsistence(); assertEquals("Wrong oid", "00000000-0000-0000-0000-000000000003", policy.getOid()); PrismObjectDefinition<ValuePolicyType> usedDefinition = policy.getDefinition(); assertNotNull("No definition", usedDefinition); PrismAsserts.assertObjectDefinition(usedDefinition, new QName(SchemaConstantsGenerated.NS_COMMON, "valuePolicy"), ValuePolicyType.COMPLEX_TYPE, ValuePolicyType.class); assertEquals("Wrong class in task", ValuePolicyType.class, policy.getCompileTimeClass()); ValuePolicyType policyType = policy.asObjectable(); assertNotNull("asObjectable resulted in null", policyType); assertPropertyValue(policy, "name", PrismTestUtil.createPolyString("Testing Complex Password Policy")); assertPropertyDefinition(policy, "name", PolyStringType.COMPLEX_TYPE, 0, 1); // TODO... } private void assertPropertyDefinition(PrismContainer<?> container, String propName, QName xsdType, int minOccurs, int maxOccurs) { QName propQName = new QName(SchemaConstantsGenerated.NS_COMMON, propName); PrismAsserts.assertPropertyDefinition(container, propQName, xsdType, minOccurs, maxOccurs); } public static void assertPropertyValue(PrismContainer<?> container, String propName, Object propValue) { QName propQName = new QName(SchemaConstantsGenerated.NS_COMMON, propName); PrismAsserts.assertPropertyValue(container, propQName, propValue); } }