/*
* ====================
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 2008-2009 Sun Microsystems, Inc. All rights reserved.
*
* The contents of this file are subject to the terms of the Common Development
* and Distribution License("CDDL") (the "License"). You may not use this file
* except in compliance with the License.
*
* You can obtain a copy of the License at
* http://opensource.org/licenses/cddl1.php
* See the License for the specific language governing permissions and limitations
* under the License.
*
* When distributing the Covered Code, include this CDDL Header Notice in each file
* and include the License file at http://opensource.org/licenses/cddl1.php.
* If applicable, add the following below this CDDL Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyrighted [year] [name of copyright owner]"
* ====================
*/
package org.identityconnectors.oracleerp;
import static org.identityconnectors.oracleerp.OracleERPUtil.DEFAULT_DRIVER;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.identityconnectors.common.CollectionUtil;
import org.identityconnectors.common.logging.Log;
import org.identityconnectors.contract.data.DataProvider;
import org.identityconnectors.contract.data.GroovyDataProvider;
import org.identityconnectors.framework.api.APIConfiguration;
import org.identityconnectors.framework.api.ConnectorFacade;
import org.identityconnectors.framework.api.ConnectorFacadeFactory;
import org.identityconnectors.framework.common.objects.Attribute;
import org.identityconnectors.framework.common.objects.AttributeBuilder;
import org.identityconnectors.framework.common.objects.AttributeInfo;
import org.identityconnectors.framework.common.objects.AttributeInfo.Flags;
import org.identityconnectors.framework.common.objects.AttributeUtil;
import org.identityconnectors.framework.common.objects.Name;
import org.identityconnectors.framework.common.objects.OperationOptionsBuilder;
import org.identityconnectors.framework.common.objects.Schema;
import org.identityconnectors.framework.common.objects.Uid;
import org.identityconnectors.test.common.TestHelpers;
import org.testng.Assert;
import org.testng.AssertJUnit;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
/**
* @author Petr Jung
* @since 1.0
*/
abstract public class OracleERPTestsBase {
private static final Log LOG = Log.getLog(OracleERPTestsBase.class);
protected static final String ACCOUNT_ALL_ATTRS = "account.all";
protected static final String ACCOUNT_AUDITOR = "account.auditor";
protected static final String ACCOUNT_MODIFY_ATTRS = "account.modify";
protected static final String ACCOUNT_OPTIONS = "account.options";
protected static final String ACCOUNT_REQUIRED_ATTRS = "account.required";
protected static final String ACCOUNT_USER_ATTRS = "account.required";
protected static final String ACCOUNT_ENABLED = "account.enabled";
protected static final String ACCOUNT_DISSABLED = "account.dissabled";
protected static final String CONFIG_SYSADM = "configuration.sysadm";
protected static final String CONFIG_TST = "configuration.tst";
protected static final String CONFIG_USER = "configuration.user";
protected static final String GROOVY = "GROOVY";
protected static final String RUN_ERROR_ACTION =
"org.identityconnectors.oracleerp.OracleERPConnector/config/RunErrorAction.groovy";
/**
* Load configurations and attibuteSets Data provides
*/
static DataProvider dataProvider = null;
/**
* The class load method
*/
@BeforeClass
public static void setUpClass() {
dataProvider = new GroovyDataProvider(OracleERPConnector.class.getName());
}
/**
*
*/
public OracleERPTestsBase() {
super();
}
/**
*
* @param oob
* @param attrInfos
*/
protected void addAllAttributesToGet(OperationOptionsBuilder oob, Set<AttributeInfo> attrInfos) {
Set<String> attrNames = CollectionUtil.newCaseInsensitiveSet();
for (AttributeInfo ai : attrInfos) {
if (ai.isReadable()) {
attrNames.add(ai.getName());
}
}
oob.setAttributesToGet(attrNames);
}
/**
* Add one option converted from the attribute set
*
* @param oob
* option builder {@link OperationOptionsBuilder}
* @param attrsOpt
* the attribute {@link Attribute} set
*/
protected void addAuditorDataOptions(OperationOptionsBuilder oob, Set<Attribute> attrsOpt) {
for (Attribute attr : attrsOpt) {
oob.setOption(attr.getName(), AttributeUtil.getSingleValue(attr));
}
}
/**
* Add default attribute to get to operation option builder from the
* attribute info set It select all attributes with are {@link Flags}
* readable and returned by default
*
* @param oob
* oob option builder {@link OperationOptionsBuilder}
* @param attrInfos
* The attribute {@link AttributeInfo} info set from the schema
* {@link Schema}
*/
protected void addDefaultAttributesToGet(OperationOptionsBuilder oob,
Set<AttributeInfo> attrInfos) {
Set<String> attrNames = CollectionUtil.newCaseInsensitiveSet();
for (AttributeInfo ai : attrInfos) {
if (ai.isReadable() && ai.isReturnedByDefault()) {
attrNames.add(ai.getName());
}
}
oob.setAttributesToGet(attrNames);
}
/**
* Replace name attribute in the attribute set by generated value
*
* @param attrs
* a set of attributes {@link Attribute}
* @return replaced String name
*/
protected String replaceNameByRandom(Set<Attribute> attrs) {
Name attr = AttributeUtil.getNameFromAttributes(attrs);
String value = null;
if (attr != null) {
attrs.remove(attr);
value = AttributeUtil.getStringValue(attr) + System.currentTimeMillis();
Attribute add = AttributeBuilder.build(Name.NAME, value);
attrs.add(add);
}
return value;
}
/**
*
* @param ret
* @param value
*/
protected void replaceNameByValue(Set<Attribute> ret, String value) {
Name attr = AttributeUtil.getNameFromAttributes(ret);
if (attr != null) {
ret.remove(attr);
}
Attribute add = AttributeBuilder.build(Name.NAME, value);
ret.add(add);
}
/**
*
* @param setName
* @return attribute Set
*/
protected Set<Attribute> getAttributeSet(String setName) {
Set<Attribute> ret = CollectionUtil.newSet(dataProvider.getAttributeSet(setName));
return ret;
}
/**
*
* @param configName
* @return OracleERPConfiguration
*/
protected OracleERPConfiguration getConfiguration(String configName) {
OracleERPConfiguration config = new OracleERPConfiguration();
try {
dataProvider.loadConfiguration(configName, config);
} catch (Exception e) {
Assert.fail("load configuration " + configName + " error:" + e.getMessage());
}
AssertJUnit.assertNotNull(config);
AssertJUnit.assertEquals(
"The driver is not defined, the dataprovider is not initialized. Set up:"
+ "-Dproject.name=connector-oracleerp "
+ "-Ddata-provider=org.identityconnectors.contract.data.GroovyDataProvider"
+ "-DbundleJar=dist/org.identityconnectors.oracleerp-1.0.1.jar"
+ "-DbundleName=org.identityconnectors.oracleerp"
+ "-DbundleVersion=1.0.1 ", DEFAULT_DRIVER, config.getDriver());
config.setConnectorMessages(TestHelpers.createDummyMessages());
return config;
}
/**
*
* @param config
* @return OracleERPConnector
*/
protected OracleERPConnector getConnector(OracleERPConfiguration config) {
AssertJUnit.assertNotNull(config);
OracleERPConnector c = new OracleERPConnector();
AssertJUnit.assertNotNull(c);
c.init(config);
return c;
}
/**
*
* @param configName
* @return OracleERPConnector
*/
protected OracleERPConnector getConnector(String configName) {
OracleERPConfiguration config = getConfiguration(configName);
AssertJUnit.assertNotNull(config);
return getConnector(config);
}
/**
*
* @param config
* @return ConnectorFacade
*/
protected ConnectorFacade getFacade(OracleERPConfiguration config) {
final ConnectorFacadeFactory factory = ConnectorFacadeFactory.getInstance();
AssertJUnit.assertNotNull(factory);
final APIConfiguration impl =
TestHelpers.createTestConfiguration(OracleERPConnector.class, config);
AssertJUnit.assertNotNull(impl);
final ConnectorFacade facade = factory.newInstance(impl);
AssertJUnit.assertNotNull(facade);
return facade;
}
/**
*
* @param configName
* @return ConnectorFacade
*/
protected ConnectorFacade getFacade(String configName) {
OracleERPConfiguration config = getConfiguration(configName);
AssertJUnit.assertNotNull(config);
return getFacade(config);
}
/**
* Test two attribute sets
*
* @param expMap
* expected
* @param currMap
* current
* @param fullMatch
* true for both side match, false for test those in expected are
* exist and equal in actual
* @param ignoreSet
* {@link Set} attribute names being ignores
*/
@Test
protected void testAttrSet(final Map<String, Attribute> expMap,
final Map<String, Attribute> currMap, boolean fullMatch, Set<String> ignoreSet) {
LOG.info("attributeSetsEquals");
Set<String> names = CollectionUtil.newCaseInsensitiveSet();
names.addAll(expMap.keySet());
if (fullMatch) {
names.addAll(currMap.keySet());
}
names.removeAll(ignoreSet);
names.remove(Uid.NAME);
List<String> mis = new ArrayList<String>();
List<String> ext = new ArrayList<String>();
for (String attrName : names) {
final Attribute expAttr = expMap.get(attrName);
final Attribute currAttr = currMap.get(attrName);
if (expAttr != null && currAttr != null) {
testAttribute(attrName, expAttr, currAttr);
} else {
if (expAttr == null && currAttr != null) {
ext.add(currAttr.getName());
}
if (currAttr == null && expAttr != null) {
mis.add(expAttr.getName());
}
}
}
AssertJUnit.assertEquals("missing attriburtes " + mis, mis.size(), 0);
AssertJUnit.assertEquals("extra attriburtes " + ext, 0, ext.size());
LOG.info("expected attributes are equal to current");
}
/**
* @param attrName
* @param expAttr
* @param currAttr
*/
@Test(enabled = false)
private void testAttribute(String attrName, final Attribute expAttr, final Attribute currAttr) {
final List<Object> expVals =
expAttr.getValue() == null ? new ArrayList<Object>() : expAttr.getValue();
final List<Object> currVals =
currAttr.getValue() == null ? new ArrayList<Object>() : currAttr.getValue();
final int expValSize = expVals.size();
final int currValSize = currVals.size();
AssertJUnit.assertEquals("Size of attribute:" + attrName, expValSize, currValSize);
for (int i = 0; i < expValSize; i++) {
if (expVals.get(i) == currVals.get(i)) {
continue;
}
String exp = expVals.get(i) == null ? "null" : expVals.get(i).toString();
String curr = currVals.get(i) == null ? "null" : currVals.get(i).toString();
if (attrName.contains("date")) {
AssertJUnit.assertEquals(attrName + ":[" + i + "]", OracleERPUtil
.normalizeStrDate(exp), OracleERPUtil.normalizeStrDate(curr));
} else {
AssertJUnit.assertEquals(attrName + ":[" + i + "]", exp, curr);
}
}
}
/**
*
* @param expected
* @param actual
* @param fullMatch
* @param ignore
*/
@Test
protected void testAttrSet(Set<Attribute> expected, Set<Attribute> actual, boolean fullMatch,
String... ignore) {
testAttrSet(AttributeUtil.toMap(expected), AttributeUtil.toMap(actual), fullMatch,
new HashSet<String>(Arrays.asList(ignore)));
}
/**
*
* @param expected
* @param actual
* @param ignore
*/
@Test
protected void testAttrSet(Set<Attribute> expected, Set<Attribute> actual, String... ignore) {
testAttrSet(AttributeUtil.toMap(expected), AttributeUtil.toMap(actual), false,
new HashSet<String>(Arrays.asList(ignore)));
}
}