/* * * Copyright (c) 2010 ForgeRock Inc. All Rights Reserved * * The contents of this file are subject to the terms * of the Common Development and Distribution License * (the License). You may not use this file except in * compliance with the License. * * You can obtain a copy of the License at * http://www.opensource.org/licenses/cddl1.php or * OpenIDM/legal/CDDLv1.0.txt * See the License for the specific language governing * permission and limitations under the License. * * When distributing Covered Code, include this CDDL * Header Notice in each file and include the License file * at OpenIDM/legal/CDDLv1.0.txt. * If applicable, add the following below the CDDL Header, * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted 2010 [name of copyright owner]" * * Portions Copyrighted 2011 Viliam Repan (lazyman) * Portions Copyrighted 2011 Radovan Semancik * * $Id$ */ package com.evolveum.polygon.csvfile; import org.identityconnectors.common.logging.Log; import org.testng.annotations.AfterMethod; import static org.testng.Assert.*; import java.lang.reflect.Method; import java.util.Iterator; import org.identityconnectors.framework.common.objects.ObjectClass; import java.util.Set; import org.identityconnectors.common.security.GuardedString; import org.identityconnectors.framework.common.exceptions.ConfigurationException; import org.identityconnectors.framework.common.objects.AttributeInfo; import org.identityconnectors.framework.common.objects.ObjectClassInfo; import org.identityconnectors.framework.common.objects.Schema; import org.testng.annotations.Test; import com.evolveum.polygon.csvfile.CSVFileConfiguration; import com.evolveum.polygon.csvfile.CSVFileConnector; import com.evolveum.polygon.csvfile.util.TestUtils; /** * @author Viliam Repan (lazyman) */ public class SchemaOpTest extends AbstractCsvTest { private static final Log LOG = Log.getLog(SchemaOpTest.class); private CSVFileConnector connector; public SchemaOpTest() { super(LOG); } @Override public void customAfterMethod(Method method) throws Exception { connector.dispose(); connector = null; } @Test(expectedExceptions = ConfigurationException.class) public void badPwdFileSchema() throws Exception { CSVFileConfiguration config = new CSVFileConfiguration(); config.setFilePath(TestUtils.getTestFile("schema-bad-pwd.csv")); config.setUniqueAttribute("uid"); config.setPasswordAttribute("password"); connector = new CSVFileConnector(); connector.init(config); connector.schema(); } @Test(expectedExceptions = ConfigurationException.class) public void badUniqueFileSchema() throws Exception { CSVFileConfiguration config = new CSVFileConfiguration(); // URL testFile = UtilsTest.class.getResource("/files/update-attribute.csv"); // config.setFilePath(new File(testFile.toURI())); config.setFilePath(TestUtils.getTestFile("schema-bad-unique.csv")); config.setUniqueAttribute("uid"); connector = new CSVFileConnector(); connector.init(config); connector.schema(); } @Test public void goodFileSchema() throws Exception { CSVFileConfiguration config = new CSVFileConfiguration(); // URL testFile = UtilsTest.class.getResource("/files/update-attribute.csv"); // config.setFilePath(new File(testFile.toURI())); config.setFilePath(TestUtils.getTestFile("schema-good.csv")); config.setUniqueAttribute("uid"); config.setPasswordAttribute("password"); connector = new CSVFileConnector(); connector.init(config); Schema schema = connector.schema(); assertNotNull(schema); Set<ObjectClassInfo> objClassInfos = schema.getObjectClassInfo(); assertNotNull(objClassInfos); assertEquals(1, objClassInfos.size()); ObjectClassInfo info = objClassInfos.iterator().next(); assertNotNull(info); assertEquals(ObjectClass.ACCOUNT.getObjectClassValue(), info.getType()); assertFalse(info.isContainer()); Set<AttributeInfo> attrInfos = info.getAttributeInfo(); assertNotNull(attrInfos); assertEquals(4, attrInfos.size()); testAttribute("firstName", attrInfos, false, false); testAttribute("lastName", attrInfos, false, false); testAttribute("__NAME__", attrInfos, true, false); testAttribute("__PASSWORD__", attrInfos, false, true); } @Test(enabled = false) private void testAttribute(String name, Set<AttributeInfo> attrInfos, boolean unique, boolean password) { Iterator<AttributeInfo> iterator = attrInfos.iterator(); boolean found = false; while (iterator.hasNext()) { AttributeInfo info = iterator.next(); assertNotNull(info); if (!name.equals(info.getName())) { continue; } found = true; if (password) { assertEquals(GuardedString.class, info.getType()); } else { assertEquals(String.class, info.getType()); } if (unique) { assertTrue(info.isRequired()); } } assertTrue(found); } }