Skip to content

Commit

Permalink
Performance tests. Some LDAP test cleanup.
Browse files Browse the repository at this point in the history
  • Loading branch information
semancik committed Apr 29, 2019
1 parent 3b4507b commit 24ed71d
Show file tree
Hide file tree
Showing 15 changed files with 867 additions and 62 deletions.
Expand Up @@ -510,6 +510,22 @@ public Entry searchSingle(String filter) throws DirectoryException {
}
return op.getSearchEntries().get(0);
}

public List<? extends Entry> search(String filter) throws DirectoryException {
return search(getSuffix(), SearchScope.WHOLE_SUBTREE, filter);
}

public List<? extends Entry> search(String baseDn, String filter) throws DirectoryException {
return search(baseDn, SearchScope.WHOLE_SUBTREE, filter);
}

public List<? extends Entry> search(String baseDn, SearchScope scope, String filter) throws DirectoryException {
InternalSearchOperation op = getInternalConnection().processSearch(
baseDn, scope, DereferencePolicy.NEVER_DEREF_ALIASES, 0,
0, false, filter, getSearchAttributes());

return op.getSearchEntries();
}

public Entry searchByUid(String string) throws DirectoryException {
return searchSingle("(uid=" + string + ")");
Expand Down Expand Up @@ -1022,4 +1038,8 @@ public void assertHasNoObjectClass(Entry entry, String expectedObjectclass) {
}
}

public int getNumberOfDefaultAccounts() {
return 4;
}

}
Expand Up @@ -2131,30 +2131,34 @@ protected <F extends FocusType> void assertNoRoleMembershipRef(PrismObject<F> fo
}

protected void generateRoles(int numberOfRoles, String nameFormat, String oidFormat, BiConsumer<RoleType,Integer> mutator, OperationResult result) throws Exception {
generateRoles(numberOfRoles, nameFormat, oidFormat, mutator, role -> repositoryService.addObject(role, null, result), result);
generateObjects(RoleType.class, numberOfRoles, nameFormat, oidFormat, mutator, role -> repositoryService.addObject(role, null, result), result);
}

protected void generateUsers(int numberOfUsers, String nameFormat, String oidFormat, BiConsumer<UserType,Integer> mutator, OperationResult result) throws Exception {
generateObjects(UserType.class, numberOfUsers, nameFormat, oidFormat, mutator, user -> repositoryService.addObject(user, null, result), result);
}

protected void generateRoles(int numberOfRoles, String nameFormat, String oidFormat, BiConsumer<RoleType,Integer> mutator, FailableProcessor<PrismObject<RoleType>> adder, OperationResult result) throws Exception {
protected <O extends ObjectType> void generateObjects(Class<O> type, int numberOfObjects, String nameFormat, String oidFormat, BiConsumer<O,Integer> mutator, FailableProcessor<PrismObject<O>> adder, OperationResult result) throws Exception {
long startMillis = System.currentTimeMillis();

PrismObjectDefinition<RoleType> roleDefinition = getRoleDefinition();
for(int i=0; i < numberOfRoles; i++) {
PrismObject<RoleType> role = roleDefinition.instantiate();
RoleType roleType = role.asObjectable();
PrismObjectDefinition<O> objectDefinition = getObjectDefinition(type);
for(int i=0; i < numberOfObjects; i++) {
PrismObject<O> object = objectDefinition.instantiate();
O objectType = object.asObjectable();
String name = String.format(nameFormat, i);
String oid = String.format(oidFormat, i);
roleType.setName(createPolyStringType(name));
roleType.setOid(oid);
objectType.setName(createPolyStringType(name));
objectType.setOid(oid);
if (mutator != null) {
mutator.accept(roleType, i);
mutator.accept(objectType, i);
}
LOGGER.info("Adding {}:\n{}", role, role.debugDump(1));
adder.process(role);
LOGGER.info("Adding {}:\n{}", object, object.debugDump(1));
adder.process(object);
}

long endMillis = System.currentTimeMillis();
long duration = (endMillis - startMillis);
display("Roles import", "import of "+numberOfRoles+" roles took "+(duration/1000)+" seconds ("+(duration/numberOfRoles)+"ms per role)");
display(type.getSimpleName() + " import", "import of "+numberOfObjects+" roles took "+(duration/1000)+" seconds ("+(duration/numberOfObjects)+"ms per object)");
}

protected String assignmentSummary(PrismObject<UserType> user) {
Expand Down
Expand Up @@ -18,10 +18,13 @@


import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertEquals;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.xml.namespace.QName;

Expand All @@ -39,8 +42,11 @@
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.delta.ItemDelta;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.path.ItemName;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.schema.constants.MidPointConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.statistics.ConnectorOperationalStatus;
import com.evolveum.midpoint.schema.util.MiscSchemaUtil;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.test.util.MidPointTestConstants;
Expand Down Expand Up @@ -84,9 +90,19 @@ public abstract class AbstractLdapTest extends AbstractStoryTest {

public static final File LDAP_TEST_DIR = new File(MidPointTestConstants.TEST_RESOURCES_DIR, "ldap");

protected static final String NS_EXT_LDAP = "http://midpoint.evolveum.com/xml/ns/story/ldap/ext";
protected static final ItemName TITLE_MAP_QNAME = new ItemName(NS_EXT_LDAP, "titleMap");
protected static final ItemName TITLE_MAP_KEY_QNAME = new ItemName(NS_EXT_LDAP, "key");
protected static final ItemName TITLE_MAP_VALUE_QNAME = new ItemName(NS_EXT_LDAP, "value");
protected static final ItemPath PATH_EXTENSION_TITLE_MAP = ItemPath.create(ObjectType.F_EXTENSION, TITLE_MAP_QNAME);

protected static final String LDAP_ATTRIBUTE_DESCRIPTION = "description";
protected static final String LDAP_ATTRIBUTE_CN = "cn";

protected static final String OBJECTCLASS_INETORGPERSON = "inetOrgPerson";

protected abstract String getLdapResourceOid();

protected void dumpLdap() throws DirectoryException {
display("LDAP server tree", openDJController.dumpTree());
display("LDAP server content", openDJController.dumpEntries());
Expand Down Expand Up @@ -160,6 +176,35 @@ protected <F extends FocusType> void assertNotAssigned(PrismObject<F> focus, Str
}
}
}

protected void assertLdapConnectorInstances(int expectedConnectorInstances) throws NumberFormatException, IOException, InterruptedException, SchemaException, ObjectNotFoundException, CommunicationException, ConfigurationException, ExpressionEvaluationException {
assertLdapConnectorInstances(expectedConnectorInstances, expectedConnectorInstances);
}

protected void assertLdapConnectorInstances(int expectedConnectorInstancesMin, int expectedConnectorInstancesMax) throws NumberFormatException, IOException, InterruptedException, SchemaException, ObjectNotFoundException, CommunicationException, ConfigurationException, ExpressionEvaluationException {
Task task = createTask(TestLdapSyncMassive.class.getName() + ".assertLdapConnectorInstances");
OperationResult result = task.getResult();
List<ConnectorOperationalStatus> stats = provisioningService.getConnectorOperationalStatus(getLdapResourceOid(), task, result);
display("Resource connector stats", stats);
assertSuccess(result);

assertEquals("unexpected number of stats", 1, stats.size());
ConnectorOperationalStatus stat = stats.get(0);

int actualConnectorInstances = stat.getPoolStatusNumIdle() + stat.getPoolStatusNumActive();

if (actualConnectorInstances < expectedConnectorInstancesMin) {
fail("Number of LDAP connector instances too low: "+actualConnectorInstances+", expected at least "+expectedConnectorInstancesMin);
}
if (actualConnectorInstances > expectedConnectorInstancesMax) {
fail("Number of LDAP connector instances too high: "+actualConnectorInstances+", expected at most "+expectedConnectorInstancesMax);
}
}


protected void assertLdapAccounts(int expectedNumber) throws DirectoryException {
List<? extends Entry> entries = openDJController.search("objectclass="+OBJECTCLASS_INETORGPERSON);
assertEquals("Wrong number of LDAP accounts ("+OBJECTCLASS_INETORGPERSON+")", expectedNumber, entries.size());
}

}
Expand Up @@ -111,6 +111,10 @@ public class TestLdapDependency extends AbstractLdapTest {

private PrismObject<ResourceType> resourceOpenDj;

@Override
protected String getLdapResourceOid() {
return RESOURCE_OPENDJ_OID;
}

@Override
protected String getTopOrgOid() {
Expand Down
Expand Up @@ -45,7 +45,6 @@
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.test.ldap.OpenDJController;
import com.evolveum.midpoint.test.util.TestUtil;
import com.evolveum.midpoint.testing.story.TestTrafo;
import com.evolveum.midpoint.util.DebugUtil;
import com.evolveum.midpoint.util.MiscUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
Expand Down Expand Up @@ -118,12 +117,6 @@ public class TestLdapPolyString extends AbstractLdapTest {
"hr", "kapetan"
};

private static final String NS_LDAP = "http://midpoint.evolveum.com/xml/ns/story/ldap/ext";
protected static final ItemName TITLE_MAP_QNAME = new ItemName(NS_LDAP, "titleMap");
protected static final ItemName TITLE_MAP_KEY_QNAME = new ItemName(NS_LDAP, "key");
protected static final ItemName TITLE_MAP_VALUE_QNAME = new ItemName(NS_LDAP, "value");
private static final ItemPath PATH_EXTENSION_TITLE_MAP = ItemPath.create(ObjectType.F_EXTENSION, TITLE_MAP_QNAME);

private static final String USER_JACK_BLAHBLAH = "BlahBlahBlah!";


Expand Down Expand Up @@ -151,12 +144,17 @@ public void initSystem(Task initTask, OperationResult initResult) throws Excepti

DebugUtil.setDetailedDebugDump(true);
}

@Override
protected String getLdapResourceOid() {
return RESOURCE_OPENDJ_OID;
}

@Test
public void test000Sanity() throws Exception {
final String TEST_NAME = "test000Sanity";
displayTestTitle(TEST_NAME);
Task task = taskManager.createTaskInstance(TestTrafo.class.getName() + "." + TEST_NAME);
Task task = createTask(TEST_NAME);

OperationResult testResultOpenDj = modelService.testResource(RESOURCE_OPENDJ_OID, task);
TestUtil.assertSuccess(testResultOpenDj);
Expand Down

0 comments on commit 24ed71d

Please sign in to comment.