/** * Copyright (c) 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.testing.conntest; import static org.testng.AssertJUnit.assertNotNull; import static com.evolveum.midpoint.test.IntegrationTestTools.display; import static org.testng.AssertJUnit.assertTrue; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import java.io.File; import java.util.Collection; import javax.xml.namespace.QName; import org.testng.annotations.Listeners; import org.testng.annotations.Test; import com.evolveum.midpoint.common.refinery.RefinedResourceSchema; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.util.PrismAsserts; import com.evolveum.midpoint.schema.SearchResultList; import com.evolveum.midpoint.schema.constants.MidPointConstants; import com.evolveum.midpoint.schema.processor.ResourceAttributeDefinition; import com.evolveum.midpoint.schema.processor.ResourceSchema; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.util.ResourceTypeUtil; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.test.util.MidPointTestConstants; import com.evolveum.midpoint.test.util.TestUtil; import com.evolveum.midpoint.util.DOMUtil; import com.evolveum.midpoint.xml.ns._public.common.common_3.ConnectorHostType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ConnectorType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; /** * @author semancik * */ @Listeners({com.evolveum.midpoint.tools.testng.AlphabeticalMethodInterceptor.class}) public abstract class AbstractAdTest extends AbstractLdapTest { protected static final File TEST_DIR = new File(MidPointTestConstants.TEST_RESOURCES_DIR, "ad"); protected ConnectorHostType connectorHostType; protected static final File ROLE_PIRATES_FILE = new File(TEST_DIR, "role-pirate.xml"); protected static final String ROLE_PIRATES_OID = "5dd034e8-41d2-11e5-a123-001e8c717e5b"; protected static final File ROLE_META_ORG_FILE = new File(TEST_DIR, "role-meta-org.xml"); protected static final String ROLE_META_ORG_OID = "f2ad0ace-45d7-11e5-af54-001e8c717e5b"; public static final String ATTRIBUTE_LOCKOUT_LOCKED_NAME = "lockedByIntruder"; public static final String ATTRIBUTE_LOCKOUT_RESET_TIME_NAME = "loginIntruderResetTime"; public static final String ATTRIBUTE_GROUP_MEMBERSHIP_NAME = "groupMembership"; public static final String ATTRIBUTE_EQUIVALENT_TO_ME_NAME = "equivalentToMe"; public static final String ATTRIBUTE_SECURITY_EQUALS_NAME = "securityEquals"; protected static final String ACCOUNT_JACK_UID = "jack"; protected static final String ACCOUNT_JACK_PASSWORD = "qwe123"; private static final String GROUP_PIRATES_NAME = "pirates"; private static final String GROUP_MELEE_ISLAND_NAME = "Mêlée Island"; protected static final int NUMBER_OF_ACCOUNTS = 4; protected static final int LOCKOUT_EXPIRATION_SECONDS = 65; private static final String ASSOCIATION_GROUP_NAME = "group"; protected String jackAccountOid; protected String groupPiratesOid; protected long jackLockoutTimestamp; private String accountBarbossaOid; private String orgMeleeIslandOid; protected String groupMeleeOid; @Override public String getStartSystemCommand() { return null; } @Override public String getStopSystemCommand() { return null; } @Override protected File getBaseDir() { return TEST_DIR; } @Override protected String getResourceOid() { return "188ec322-4bd7-11e5-b919-001e8c717e5b"; } @Override protected File getResourceFile() { return new File(getBaseDir(), "resource-medusa.xml"); } protected String getConnectorHostOid() { return "08e687b6-4bd7-11e5-8484-001e8c717e5b"; } protected abstract File getConnectorHostFile(); @Override protected String getSyncTaskOid() { return null; } @Override protected boolean useSsl() { return true; } @Override protected String getLdapSuffix() { return "dc=win,dc=evolveum,dc=com"; } @Override protected String getLdapBindDn() { return "CN=IDM Administrator,CN=Users,DC=win,DC=evolveum,DC=com"; } @Override protected String getLdapBindPassword() { return "Secret123"; } @Override protected int getSearchSizeLimit() { return -1; } @Override public String getPrimaryIdentifierAttributeName() { return "GUID"; } @Override protected QName getAccountObjectClass() { return new QName(MidPointConstants.NS_RI, "AccountObjectClass"); } @Override protected String getLdapGroupObjectClass() { return "groupOfNames"; } @Override protected String getLdapGroupMemberAttribute() { return "member"; } private QName getAssociationGroupQName() { return new QName(MidPointConstants.NS_RI, ASSOCIATION_GROUP_NAME); } @Override protected boolean isImportResourceAtInit() { return false; } @Override public void initSystem(Task initTask, OperationResult initResult) throws Exception { super.initSystem(initTask, initResult); // binaryAttributeDetector.addBinaryAttribute("GUID"); // Connector host connectorHostType = repoAddObjectFromFile(getConnectorHostFile(), ConnectorHostType.class, initResult).asObjectable(); // Users repoAddObjectFromFile(USER_BARBOSSA_FILE, initResult); repoAddObjectFromFile(USER_GUYBRUSH_FILE, initResult); // Roles // repoAddObjectFromFile(ROLE_PIRATES_FILE, RoleType.class, initResult); // repoAddObjectFromFile(ROLE_META_ORG_FILE, RoleType.class, initResult); } @Test public void test000Sanity() throws Exception { // assertLdapPassword(ACCOUNT_JACK_UID, ACCOUNT_JACK_PASSWORD); // assertEDirGroupMember(ACCOUNT_JACK_UID, GROUP_PIRATES_NAME); // cleanupDelete(toDn(USER_BARBOSSA_USERNAME)); // cleanupDelete(toDn(USER_CPTBARBOSSA_USERNAME)); // cleanupDelete(toDn(USER_GUYBRUSH_USERNAME)); // cleanupDelete(toGroupDn("Mêlée Island")); } @Test public void test001ConnectorHostDiscovery() throws Exception { final String TEST_NAME = "test001ConnectorHostDiscovery"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(this.getClass().getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); modelService.discoverConnectors(connectorHostType, task, result); // THEN result.computeStatus(); TestUtil.assertSuccess(result); SearchResultList<PrismObject<ConnectorType>> connectors = modelService.searchObjects(ConnectorType.class, null, null, task, result); boolean found = false; for (PrismObject<ConnectorType> connector: connectors) { if (CONNECTOR_AD_TYPE.equals(connector.asObjectable().getConnectorType())) { display("Found connector", connector); found = true; } } assertTrue("AD Connector not found", found); } @Test public void test002ImportResource() throws Exception { final String TEST_NAME = "test002ImportResource"; TestUtil.displayTestTile(this, TEST_NAME); Task task = taskManager.createTaskInstance(this.getClass().getName() + "." + TEST_NAME); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); resource = importAndGetObjectFromFile(ResourceType.class, getResourceFile(), getResourceOid(), task, result); // THEN result.computeStatus(); TestUtil.assertSuccess(result); resourceType = resource.asObjectable(); } @Test public void test020Schema() throws Exception { final String TEST_NAME = "test020Schema"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN ResourceSchema resourceSchema = RefinedResourceSchema.getResourceSchema(resource, prismContext); display("Resource schema", resourceSchema); RefinedResourceSchema refinedSchema = RefinedResourceSchema.getRefinedSchema(resource); display("Refined schema", refinedSchema); accountObjectClassDefinition = refinedSchema.findObjectClassDefinition(getAccountObjectClass()); assertNotNull("No definition for object class "+getAccountObjectClass(), accountObjectClassDefinition); display("Account object class def", accountObjectClassDefinition); ResourceAttributeDefinition<String> cnDef = accountObjectClassDefinition.findAttributeDefinition("cn"); PrismAsserts.assertDefinition(cnDef, new QName(MidPointConstants.NS_RI, "cn"), DOMUtil.XSD_STRING, 0, 1); assertTrue("cn read", cnDef.canRead()); assertFalse("cn modify", cnDef.canModify()); assertFalse("cn add", cnDef.canAdd()); ResourceAttributeDefinition<String> userPrincipalNameDef = accountObjectClassDefinition.findAttributeDefinition("userPrincipalName"); PrismAsserts.assertDefinition(userPrincipalNameDef, new QName(MidPointConstants.NS_RI, "userPrincipalName"), DOMUtil.XSD_STRING, 0, 1); assertTrue("o read", userPrincipalNameDef.canRead()); assertTrue("o modify", userPrincipalNameDef.canModify()); assertTrue("o add", userPrincipalNameDef.canAdd()); } @Test public void test050Capabilities() throws Exception { final String TEST_NAME = "test050Capabilities"; TestUtil.displayTestTile(this, TEST_NAME); Collection<Object> nativeCapabilitiesCollection = ResourceTypeUtil.getNativeCapabilitiesCollection(resourceType); display("Native capabilities", nativeCapabilitiesCollection); assertTrue("No native activation capability", ResourceTypeUtil.hasResourceNativeActivationCapability(resourceType)); assertTrue("No native activation status capability", ResourceTypeUtil.hasResourceNativeActivationStatusCapability(resourceType)); assertTrue("No native lockout capability", ResourceTypeUtil.hasResourceNativeActivationLockoutCapability(resourceType)); assertTrue("No native credentias capability", ResourceTypeUtil.isCredentialsCapabilityEnabled(resourceType)); } }