From a85a592c71d6a103c7f68dbb121525620b284339 Mon Sep 17 00:00:00 2001 From: Radovan Semancik Date: Wed, 5 Apr 2017 18:41:05 +0200 Subject: [PATCH] Basic manual connector test skeleton --- .../AbstractProvisioningIntegrationTest.java | 106 +++++++ .../provisioning/impl/TestCsvFile.java | 9 +- .../provisioning/impl/TestManual.java | 262 ++++++++++++++++++ .../test/resources/manual/resource-manual.xml | 89 ++++++ .../provisioning-impl/testng-integration.xml | 5 + .../AbstractManualConnectorInstance.java | 13 +- .../impl/builtin/ManualConnectorInstance.java | 15 +- .../connid/ConnectorInstanceConnIdImpl.java | 28 +- 8 files changed, 498 insertions(+), 29 deletions(-) create mode 100644 provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/AbstractProvisioningIntegrationTest.java create mode 100644 provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/TestManual.java create mode 100644 provisioning/provisioning-impl/src/test/resources/manual/resource-manual.xml diff --git a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/AbstractProvisioningIntegrationTest.java b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/AbstractProvisioningIntegrationTest.java new file mode 100644 index 00000000000..8154b855a3b --- /dev/null +++ b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/AbstractProvisioningIntegrationTest.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2010-2017 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.provisioning.impl; + +import static com.evolveum.midpoint.test.IntegrationTestTools.display; +import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertFalse; +import static org.testng.AssertJUnit.assertNotNull; +import static org.testng.AssertJUnit.assertNull; +import static org.testng.AssertJUnit.assertTrue; + +import java.io.File; +import java.util.List; + +import javax.xml.bind.JAXBElement; + +import com.evolveum.midpoint.common.refinery.RefinedResourceSchemaImpl; +import com.evolveum.midpoint.schema.processor.ResourceSchemaImpl; +import org.apache.commons.io.FileUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.testng.AssertJUnit; +import org.testng.annotations.Test; +import org.w3c.dom.Element; + +import com.evolveum.midpoint.common.refinery.RefinedResourceSchema; +import com.evolveum.midpoint.prism.Containerable; +import com.evolveum.midpoint.prism.PrismContainer; +import com.evolveum.midpoint.prism.PrismContainerDefinition; +import com.evolveum.midpoint.prism.PrismContext; +import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.prism.util.PrismTestUtil; +import com.evolveum.midpoint.prism.xnode.PrimitiveXNode; +import com.evolveum.midpoint.provisioning.api.ProvisioningService; +import com.evolveum.midpoint.provisioning.impl.dummy.TestDummy; +import com.evolveum.midpoint.provisioning.impl.opendj.TestOpenDj; +import com.evolveum.midpoint.schema.CapabilityUtil; +import com.evolveum.midpoint.schema.constants.SchemaConstants; +import com.evolveum.midpoint.schema.processor.ResourceSchema; +import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.schema.util.ObjectTypeUtil; +import com.evolveum.midpoint.schema.util.ResourceTypeUtil; +import com.evolveum.midpoint.task.api.Task; +import com.evolveum.midpoint.test.AbstractIntegrationTest; +import com.evolveum.midpoint.test.IntegrationTestTools; +import com.evolveum.midpoint.test.util.TestUtil; +import com.evolveum.midpoint.util.MiscUtil; +import com.evolveum.midpoint.util.exception.CommunicationException; +import com.evolveum.midpoint.util.exception.ConfigurationException; +import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.SchemaException; +import com.evolveum.midpoint.util.exception.SecurityViolationException; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.xml.ns._public.common.common_3.CachingMetadataType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.CapabilityCollectionType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ConnectorType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectFactory; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ProvisioningScriptArgumentType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ProvisioningScriptHostType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ProvisioningScriptType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.XmlSchemaType; +import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ActivationCapabilityType; +import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ScriptCapabilityType; +import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ScriptCapabilityType.Host; +import com.evolveum.prism.xml.ns._public.types_3.RawType; + +/** + * @author Radovan Semancik + */ +@ContextConfiguration(locations = "classpath:ctx-provisioning-test-main.xml") +@DirtiesContext +public abstract class AbstractProvisioningIntegrationTest extends AbstractIntegrationTest { + + public static final File COMMON_DIR = ProvisioningTestUtil.COMMON_TEST_DIR_FILE; + + private static final Trace LOGGER = TraceManager.getTrace(AbstractProvisioningIntegrationTest.class); + + @Autowired(required=true) + protected ProvisioningService provisioningService; + + @Override + public void initSystem(Task initTask, OperationResult initResult) throws Exception { + provisioningService.postInit(initResult); + } + +} diff --git a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/TestCsvFile.java b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/TestCsvFile.java index 0d33a5b6a40..82ad266872e 100644 --- a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/TestCsvFile.java +++ b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/TestCsvFile.java @@ -92,7 +92,7 @@ */ @ContextConfiguration(locations = "classpath:ctx-provisioning-test-main.xml") @DirtiesContext -public class TestCsvFile extends AbstractIntegrationTest { +public class TestCsvFile extends AbstractProvisioningIntegrationTest { private static final File RESOURCE_CSV_FILE = new File(ProvisioningTestUtil.COMMON_TEST_DIR_FILE, "resource-csv.xml"); private static final String RESOURCE_CSV_OID = "ef2bc95b-76e0-59e2-86d6-9999cccccccc"; @@ -107,13 +107,6 @@ public class TestCsvFile extends AbstractIntegrationTest { private PrismObject resource; private ResourceType resourceType; - @Autowired(required=true) - private ProvisioningService provisioningService; - - public TestCsvFile() { - super(); - } - /* * (non-Javadoc) * diff --git a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/TestManual.java b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/TestManual.java new file mode 100644 index 00000000000..f7a32fd7801 --- /dev/null +++ b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/TestManual.java @@ -0,0 +1,262 @@ +/* + * Copyright (c) 2010-2017 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.provisioning.impl; + +import static com.evolveum.midpoint.test.IntegrationTestTools.display; +import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertFalse; +import static org.testng.AssertJUnit.assertNotNull; +import static org.testng.AssertJUnit.assertNull; +import static org.testng.AssertJUnit.assertTrue; + +import java.io.File; +import java.util.List; + +import javax.xml.namespace.QName; + +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.testng.AssertJUnit; +import org.testng.annotations.Test; +import org.w3c.dom.Element; + +import com.evolveum.midpoint.common.refinery.RefinedResourceSchemaImpl; +import com.evolveum.midpoint.prism.Containerable; +import com.evolveum.midpoint.prism.PrismContainer; +import com.evolveum.midpoint.prism.PrismContainerDefinition; +import com.evolveum.midpoint.prism.PrismContext; +import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.prism.PrismProperty; +import com.evolveum.midpoint.prism.path.ItemPath; +import com.evolveum.midpoint.prism.util.PrismTestUtil; +import com.evolveum.midpoint.provisioning.impl.opendj.TestOpenDj; +import com.evolveum.midpoint.schema.CapabilityUtil; +import com.evolveum.midpoint.schema.constants.SchemaConstants; +import com.evolveum.midpoint.schema.processor.ResourceSchema; +import com.evolveum.midpoint.schema.processor.ResourceSchemaImpl; +import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.schema.util.ObjectTypeUtil; +import com.evolveum.midpoint.schema.util.ResourceTypeUtil; +import com.evolveum.midpoint.task.api.Task; +import com.evolveum.midpoint.test.IntegrationTestTools; +import com.evolveum.midpoint.test.util.TestUtil; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.xml.ns._public.common.common_3.CachingMetadataType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.CapabilitiesType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.CapabilityCollectionType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ConnectorType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.XmlSchemaType; +import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ActivationCapabilityType; +import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.CreateCapabilityType; +import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ReadCapabilityType; +import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ScriptCapabilityType; +import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ScriptCapabilityType.Host; + +/** + * @author Radovan Semancik + */ +@ContextConfiguration(locations = "classpath:ctx-provisioning-test-main.xml") +@DirtiesContext +public class TestManual extends AbstractProvisioningIntegrationTest { + + protected static final File TEST_DIR = new File("src/test/resources/manual/"); + + private static final File RESOURCE_MANUAL_FILE = new File(TEST_DIR, "resource-manual.xml"); + private static final String RESOURCE_MANUAL_OID = "8a8e19de-1a14-11e7-965f-6f995b457a8b"; + + private static final String MANUAL_CONNECTOR_TYPE = "ManualConnector"; + + private static final Trace LOGGER = TraceManager.getTrace(TestManual.class); + + private static final String NS_MANUAL_CONF = "http://midpoint.evolveum.com/xml/ns/public/connector/builtin-1/bundle/com.evolveum.midpoint.provisioning.ucf.impl.builtin/ManualConnector"; + private static final QName CONF_PROPERTY_FAKE_QNAME = new QName(NS_MANUAL_CONF, "fake"); + + private PrismObject resource; + private ResourceType resourceType; + + @Override + public void initSystem(Task initTask, OperationResult initResult) throws Exception { + super.initSystem(initTask, initResult); + + resource = addResourceFromFile(RESOURCE_MANUAL_FILE, MANUAL_CONNECTOR_TYPE, initResult); + resourceType = resource.asObjectable(); + } + + @Test + public void test000Sanity() throws Exception { + final String TEST_NAME = "test000Sanity"; + TestUtil.displayTestTile(TEST_NAME); + + assertNotNull("Resource is null", resource); + assertNotNull("ResourceType is null", resourceType); + + OperationResult result = new OperationResult(TestManual.class.getName() + + "." + TEST_NAME); + + ResourceType repoResource = repositoryService.getObject(ResourceType.class, RESOURCE_MANUAL_OID, + null, result).asObjectable(); + assertNotNull("No connector ref", repoResource.getConnectorRef()); + String connectorOid = repoResource.getConnectorRef().getOid(); + assertNotNull("No connector ref OID", connectorOid); + ConnectorType repoConnector = repositoryService + .getObject(ConnectorType.class, connectorOid, null, result).asObjectable(); + assertNotNull(repoConnector); + display("Manual Connector", repoConnector); + + // Check connector schema + IntegrationTestTools.assertConnectorSchemaSanity(repoConnector, prismContext); + } + + @Test + public void test003Connection() throws Exception { + final String TEST_NAME = "test003Connection"; + TestUtil.displayTestTile(TEST_NAME); + // GIVEN + OperationResult result = new OperationResult(TestManual.class.getName() + "." + TEST_NAME); + + // Check that there is a schema, but no capabilities before test (pre-condition) + ResourceType resourceBefore = repositoryService.getObject(ResourceType.class, RESOURCE_MANUAL_OID, + null, result).asObjectable(); + + Element resourceXsdSchemaElementBefore = ResourceTypeUtil.getResourceXsdSchema(resourceBefore); + AssertJUnit.assertNotNull("No schema before test connection. Bad test setup?", resourceXsdSchemaElementBefore); + + CapabilitiesType capabilities = resourceBefore.getCapabilities(); + AssertJUnit.assertNull("Capabilities present before test connection. Bad test setup?", capabilities); + + // WHEN + OperationResult testResult = provisioningService.testResource(RESOURCE_MANUAL_OID); + + // THEN + display("Test result", testResult); + TestUtil.assertSuccess("Test resource failed (result)", testResult); + + PrismObject resourceRepoAfter = repositoryService.getObject(ResourceType.class, RESOURCE_MANUAL_OID, null, result); + ResourceType resourceTypeRepoAfter = resourceRepoAfter.asObjectable(); + display("Resource after test", resourceTypeRepoAfter); + + XmlSchemaType xmlSchemaTypeAfter = resourceTypeRepoAfter.getSchema(); + assertNotNull("No schema after test connection", xmlSchemaTypeAfter); + Element resourceXsdSchemaElementAfter = ResourceTypeUtil.getResourceXsdSchema(resourceTypeRepoAfter); + assertNotNull("No schema after test connection", resourceXsdSchemaElementAfter); + + String resourceXml = prismContext.serializeObjectToString(resourceRepoAfter, PrismContext.LANG_XML); + display("Resource XML", resourceXml); + + CachingMetadataType cachingMetadata = xmlSchemaTypeAfter.getCachingMetadata(); + assertNotNull("No caching metadata", cachingMetadata); + assertNotNull("No retrievalTimestamp", cachingMetadata.getRetrievalTimestamp()); + assertNotNull("No serialNumber", cachingMetadata.getSerialNumber()); + + Element xsdElement = ObjectTypeUtil.findXsdElement(xmlSchemaTypeAfter); + ResourceSchema parsedSchema = ResourceSchemaImpl.parse(xsdElement, resourceBefore.toString(), prismContext); + assertNotNull("No schema after parsing", parsedSchema); + + // schema will be checked in next test + } + + @Test + public void test004Configuration() throws Exception { + final String TEST_NAME = "test004Configuration"; + TestUtil.displayTestTile(TEST_NAME); + // GIVEN + OperationResult result = new OperationResult(TestManual.class.getName() + + "." + TEST_NAME); + + // WHEN + resource = provisioningService.getObject(ResourceType.class, RESOURCE_MANUAL_OID, null, null, result); + resourceType = resource.asObjectable(); + + PrismContainer configurationContainer = resource.findContainer(ResourceType.F_CONNECTOR_CONFIGURATION); + assertNotNull("No configuration container", configurationContainer); + PrismContainerDefinition confContDef = configurationContainer.getDefinition(); + assertNotNull("No configuration container definition", confContDef); + PrismProperty propFake = configurationContainer.findProperty(CONF_PROPERTY_FAKE_QNAME); + assertNotNull("No fake conf prop", propFake); + +// assertNotNull("No configuration properties container", confingurationPropertiesContainer); +// PrismContainerDefinition confPropDef = confingurationPropertiesContainer.getDefinition(); +// assertNotNull("No configuration properties container definition", confPropDef); + + } + + @Test + public void test005ParsedSchema() throws Exception { + final String TEST_NAME = "test005ParsedSchema"; + TestUtil.displayTestTile(TEST_NAME); + // GIVEN + OperationResult result = new OperationResult(TestManual.class.getName() + "." + TEST_NAME); + + // THEN + // The returned type should have the schema pre-parsed + assertNotNull(RefinedResourceSchemaImpl.hasParsedSchema(resourceType)); + + // Also test if the utility method returns the same thing + ResourceSchema returnedSchema = RefinedResourceSchemaImpl.getResourceSchema(resourceType, prismContext); + + display("Parsed resource schema", returnedSchema); + + // Check whether it is reusing the existing schema and not parsing it all over again + // Not equals() but == ... we want to really know if exactly the same + // object instance is returned + assertTrue("Broken caching", returnedSchema == RefinedResourceSchemaImpl.getResourceSchema(resourceType, prismContext)); + + // TODO: assert schema + } + + @Test + public void test006Capabilities() throws Exception { + final String TEST_NAME = "test006Capabilities"; + TestUtil.displayTestTile(TEST_NAME); + + // GIVEN + OperationResult result = new OperationResult(TestOpenDj.class.getName()+"."+TEST_NAME); + + // WHEN + ResourceType resource = provisioningService.getObject(ResourceType.class, RESOURCE_MANUAL_OID, null, null, result).asObjectable(); + + // THEN + display("Resource from provisioninig", resource); + display("Resource from provisioninig (XML)", PrismTestUtil.serializeObjectToString(resource.asPrismObject(), PrismContext.LANG_XML)); + + CapabilityCollectionType nativeCapabilities = resource.getCapabilities().getNative(); + List nativeCapabilitiesList = nativeCapabilities.getAny(); + assertFalse("Empty capabilities returned",nativeCapabilitiesList.isEmpty()); + + CreateCapabilityType capCreate = CapabilityUtil.getCapability(nativeCapabilitiesList, CreateCapabilityType.class); + assertNotNull("Missing create capability", capCreate); + + ActivationCapabilityType capAct = CapabilityUtil.getCapability(nativeCapabilitiesList, ActivationCapabilityType.class); + assertNotNull("Missing activation capability", capAct); + + ReadCapabilityType capRead = CapabilityUtil.getCapability(nativeCapabilitiesList, ReadCapabilityType.class); + assertNull("Found read capability while not expecting it" ,capRead); + + List effectiveCapabilities = ResourceTypeUtil.getEffectiveCapabilities(resource); + for (Object capability : effectiveCapabilities) { + System.out.println("Capability: "+CapabilityUtil.getCapabilityDisplayName(capability)+" : "+capability); + } + + } + + +} diff --git a/provisioning/provisioning-impl/src/test/resources/manual/resource-manual.xml b/provisioning/provisioning-impl/src/test/resources/manual/resource-manual.xml new file mode 100644 index 00000000000..2ff3e6a24e0 --- /dev/null +++ b/provisioning/provisioning-impl/src/test/resources/manual/resource-manual.xml @@ -0,0 +1,89 @@ + + + + + + Manual Resource + + + + foo + + + + + + + + + + + + + tns:id + tns:username + tns:username + tns:username + + + + + + + + + ID + 100 + + + + + + + Username + 110 + + + + + + + 200 + + + + + + + + + + + + + diff --git a/provisioning/provisioning-impl/testng-integration.xml b/provisioning/provisioning-impl/testng-integration.xml index d352780a1a8..cf87d77a31e 100644 --- a/provisioning/provisioning-impl/testng-integration.xml +++ b/provisioning/provisioning-impl/testng-integration.xml @@ -60,4 +60,9 @@ + + + + + diff --git a/provisioning/ucf-api/src/main/java/com/evolveum/midpoint/provisioning/ucf/api/connectors/AbstractManualConnectorInstance.java b/provisioning/ucf-api/src/main/java/com/evolveum/midpoint/provisioning/ucf/api/connectors/AbstractManualConnectorInstance.java index d311b7d206d..672aadf7053 100644 --- a/provisioning/ucf-api/src/main/java/com/evolveum/midpoint/provisioning/ucf/api/connectors/AbstractManualConnectorInstance.java +++ b/provisioning/ucf-api/src/main/java/com/evolveum/midpoint/provisioning/ucf/api/connectors/AbstractManualConnectorInstance.java @@ -75,6 +75,9 @@ public abstract class AbstractManualConnectorInstance extends AbstractConnectorI private static final String OPERATION_MODIFY = AbstractManualConnectorInstance.class.getName() + ".modifyObject"; private static final String OPERATION_DELETE = AbstractManualConnectorInstance.class.getName() + ".deleteObject"; + private static final com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ObjectFactory CAPABILITY_OBJECT_FACTORY + = new com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ObjectFactory(); + private static final Trace LOGGER = TraceManager.getTrace(AbstractManualConnectorInstance.class); // test(), connect() and dispose() are lifecycle operations to be implemented in the subclasses @@ -191,23 +194,23 @@ public Collection fetchCapabilities(OperationResult parentResult) // make sure there are no read capabilities CreateCapabilityType createCap = new CreateCapabilityType(); - capabilities.add(createCap); + capabilities.add(CAPABILITY_OBJECT_FACTORY.createCreate(createCap)); UpdateCapabilityType updateCap = new UpdateCapabilityType(); - capabilities.add(updateCap); + capabilities.add(CAPABILITY_OBJECT_FACTORY.createUpdate(updateCap)); DeleteCapabilityType deleteCap = new DeleteCapabilityType(); - capabilities.add(deleteCap); + capabilities.add(CAPABILITY_OBJECT_FACTORY.createDelete(deleteCap)); ActivationCapabilityType activationCap = new ActivationCapabilityType(); ActivationStatusCapabilityType activationStatusCap = new ActivationStatusCapabilityType(); activationCap.setStatus(activationStatusCap); - capabilities.add(activationCap); + capabilities.add(CAPABILITY_OBJECT_FACTORY.createActivation(activationCap)); CredentialsCapabilityType credentialsCap = new CredentialsCapabilityType(); PasswordCapabilityType passwordCapabilityType = new PasswordCapabilityType(); credentialsCap.setPassword(passwordCapabilityType); - capabilities.add(credentialsCap); + capabilities.add(CAPABILITY_OBJECT_FACTORY.createCredentials(credentialsCap)); return capabilities; } diff --git a/provisioning/ucf-impl-builtin/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/builtin/ManualConnectorInstance.java b/provisioning/ucf-impl-builtin/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/builtin/ManualConnectorInstance.java index 25f7b3ef531..89577307f79 100644 --- a/provisioning/ucf-impl-builtin/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/builtin/ManualConnectorInstance.java +++ b/provisioning/ucf-impl-builtin/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/builtin/ManualConnectorInstance.java @@ -24,6 +24,7 @@ import com.evolveum.midpoint.provisioning.ucf.api.connectors.AbstractManualConnectorInstance; import com.evolveum.midpoint.repo.api.RepositoryAware; import com.evolveum.midpoint.repo.api.RepositoryService; +import com.evolveum.midpoint.schema.constants.ConnectorTestOperation; import com.evolveum.midpoint.schema.processor.ObjectClassComplexTypeDefinition; import com.evolveum.midpoint.schema.processor.ResourceAttribute; import com.evolveum.midpoint.schema.result.OperationResult; @@ -40,7 +41,7 @@ * @author Radovan Semancik * */ -@ManagedConnector +@ManagedConnector(type="ManualConnector") public class ManualConnectorInstance extends AbstractManualConnectorInstance implements RepositoryAware { private static final Trace LOGGER = TraceManager.getTrace(ManualConnectorInstance.class); @@ -91,7 +92,17 @@ protected void connect(OperationResult result) { @Override public void test(OperationResult parentResult) { - // TODO at least check presence of schema + OperationResult connectionResult = parentResult + .createSubresult(ConnectorTestOperation.CONNECTOR_CONNECTION.getOperation()); + connectionResult.addContext(OperationResult.CONTEXT_IMPLEMENTATION_CLASS, ManualConnectorInstance.class); + connectionResult.addContext("connector", getConnectorObject()); + + if (repositoryService == null) { + connectionResult.recordFatalError("No repository service"); + return; + } + + connectionResult.recordSuccess(); } @Override diff --git a/provisioning/ucf-impl-connid/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/connid/ConnectorInstanceConnIdImpl.java b/provisioning/ucf-impl-connid/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/connid/ConnectorInstanceConnIdImpl.java index df2f0c5e043..e32507a4dbf 100644 --- a/provisioning/ucf-impl-connid/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/connid/ConnectorInstanceConnIdImpl.java +++ b/provisioning/ucf-impl-connid/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/connid/ConnectorInstanceConnIdImpl.java @@ -178,7 +178,7 @@ */ public class ConnectorInstanceConnIdImpl implements ConnectorInstance { - private static final com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ObjectFactory capabilityObjectFactory + private static final com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ObjectFactory CAPABILITY_OBJECT_FACTORY = new com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ObjectFactory(); private static final Trace LOGGER = TraceManager.getTrace(ConnectorInstanceConnIdImpl.class); @@ -794,7 +794,7 @@ private void parseResourceSchema(org.identityconnectors.framework.common.objects // (Currently there is no way how to obtain it from the connector.) // It can be disabled manually. AddRemoveAttributeValuesCapabilityType addRemove = new AddRemoveAttributeValuesCapabilityType(); - capabilities.add(capabilityObjectFactory.createAddRemoveAttributeValues(addRemove)); + capabilities.add(CAPABILITY_OBJECT_FACTORY.createAddRemoveAttributeValues(addRemove)); ActivationCapabilityType capAct = null; @@ -843,7 +843,7 @@ private void parseResourceSchema(org.identityconnectors.framework.common.objects } if (capAct != null) { - capabilities.add(capabilityObjectFactory.createActivation(capAct)); + capabilities.add(CAPABILITY_OBJECT_FACTORY.createActivation(capAct)); } if (passwordAttributeInfo != null) { @@ -856,12 +856,12 @@ private void parseResourceSchema(org.identityconnectors.framework.common.objects capPass.setReadable(true); } capCred.setPassword(capPass); - capabilities.add(capabilityObjectFactory.createCredentials(capCred)); + capabilities.add(CAPABILITY_OBJECT_FACTORY.createCredentials(capCred)); } if (auxiliaryObjectClasseAttributeInfo != null) { AuxiliaryObjectClassesCapabilityType capAux = new AuxiliaryObjectClassesCapabilityType(); - capabilities.add(capabilityObjectFactory.createAuxiliaryObjectClasses(capAux)); + capabilities.add(CAPABILITY_OBJECT_FACTORY.createAuxiliaryObjectClasses(capAux)); } // Create capabilities from supported connector operations @@ -873,32 +873,32 @@ private void parseResourceSchema(org.identityconnectors.framework.common.objects if (supportedOperations.contains(SyncApiOp.class)) { LiveSyncCapabilityType capSync = new LiveSyncCapabilityType(); - capabilities.add(capabilityObjectFactory.createLiveSync(capSync)); + capabilities.add(CAPABILITY_OBJECT_FACTORY.createLiveSync(capSync)); } if (supportedOperations.contains(TestApiOp.class)) { TestConnectionCapabilityType capTest = new TestConnectionCapabilityType(); - capabilities.add(capabilityObjectFactory.createTestConnection(capTest)); + capabilities.add(CAPABILITY_OBJECT_FACTORY.createTestConnection(capTest)); } if (supportedOperations.contains(CreateApiOp.class)){ CreateCapabilityType capCreate = new CreateCapabilityType(); - capabilities.add(capabilityObjectFactory.createCreate(capCreate)); + capabilities.add(CAPABILITY_OBJECT_FACTORY.createCreate(capCreate)); } if (supportedOperations.contains(GetApiOp.class) || supportedOperations.contains(SearchApiOp.class)){ ReadCapabilityType capRead = new ReadCapabilityType(); - capabilities.add(capabilityObjectFactory.createRead(capRead)); + capabilities.add(CAPABILITY_OBJECT_FACTORY.createRead(capRead)); } if (supportedOperations.contains(UpdateApiOp.class)){ UpdateCapabilityType capUpdate = new UpdateCapabilityType(); - capabilities.add(capabilityObjectFactory.createUpdate(capUpdate)); + capabilities.add(CAPABILITY_OBJECT_FACTORY.createUpdate(capUpdate)); } if (supportedOperations.contains(DeleteApiOp.class)){ DeleteCapabilityType capDelete = new DeleteCapabilityType(); - capabilities.add(capabilityObjectFactory.createDelete(capDelete)); + capabilities.add(CAPABILITY_OBJECT_FACTORY.createDelete(capDelete)); } if (supportedOperations.contains(ScriptOnResourceApiOp.class) @@ -916,7 +916,7 @@ private void parseResourceSchema(org.identityconnectors.framework.common.objects capScript.getHost().add(host); // language is unknown here } - capabilities.add(capabilityObjectFactory.createScript(capScript)); + capabilities.add(CAPABILITY_OBJECT_FACTORY.createScript(capScript)); } boolean canPageSize = false; @@ -942,7 +942,7 @@ private void parseResourceSchema(org.identityconnectors.framework.common.objects if (canPageSize || canPageOffset || canSort) { PagedSearchCapabilityType capPage = new PagedSearchCapabilityType(); - capabilities.add(capabilityObjectFactory.createPagedSearch(capPage)); + capabilities.add(CAPABILITY_OBJECT_FACTORY.createPagedSearch(capPage)); } } @@ -2124,7 +2124,7 @@ public void test(OperationResult parentResult) { OperationResult connectionResult = parentResult .createSubresult(ConnectorTestOperation.CONNECTOR_CONNECTION.getOperation()); - connectionResult.addContext(OperationResult.CONTEXT_IMPLEMENTATION_CLASS, ConnectorInstance.class); + connectionResult.addContext(OperationResult.CONTEXT_IMPLEMENTATION_CLASS, ConnectorInstanceConnIdImpl.class); connectionResult.addContext("connector", connectorType); try {