Added an (ignored) performance test for searches done on indexed attrbutes
git-svn-id: https://svn.apache.org/repos/asf/directory/apacheds/branches/index-work@1332206 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/ldap-client-test/src/test/java/org/apache/directory/shared/client/api/operations/search/SearchWithIndexTest.java b/ldap-client-test/src/test/java/org/apache/directory/shared/client/api/operations/search/SearchWithIndexTest.java
new file mode 100644
index 0000000..12f9b06
--- /dev/null
+++ b/ldap-client-test/src/test/java/org/apache/directory/shared/client/api/operations/search/SearchWithIndexTest.java
@@ -0,0 +1,191 @@
+package org.apache.directory.shared.client.api.operations.search;
+
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+
+import org.apache.directory.ldap.client.api.LdapNetworkConnection;
+import org.apache.directory.server.annotations.CreateLdapServer;
+import org.apache.directory.server.annotations.CreateTransport;
+import org.apache.directory.server.core.annotations.ContextEntry;
+import org.apache.directory.server.core.annotations.CreateDS;
+import org.apache.directory.server.core.annotations.CreateIndex;
+import org.apache.directory.server.core.annotations.CreatePartition;
+import org.apache.directory.server.core.integ.AbstractLdapTestUnit;
+import org.apache.directory.server.core.integ.FrameworkRunner;
+import org.apache.directory.shared.client.api.LdapApiIntegrationUtils;
+import org.apache.directory.shared.ldap.model.cursor.EntryCursor;
+import org.apache.directory.shared.ldap.model.entry.DefaultEntry;
+import org.apache.directory.shared.ldap.model.entry.Entry;
+import org.apache.directory.shared.ldap.model.message.SearchScope;
+import org.apache.directory.shared.ldap.model.name.Dn;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(FrameworkRunner.class)
+@CreateDS(
+ name="AddPerfDS",
+ partitions =
+ {
+ @CreatePartition(
+ name = "example",
+ suffix = "dc=example,dc=com",
+ contextEntry = @ContextEntry(
+ entryLdif =
+ "dn: dc=example,dc=com\n" +
+ "dc: example\n" +
+ "objectClass: top\n" +
+ "objectClass: domain\n\n" ),
+ indexes =
+ {
+ @CreateIndex( attribute = "objectClass" ),
+ @CreateIndex( attribute = "sn" ),
+ @CreateIndex( attribute = "cn" ),
+ @CreateIndex( attribute = "displayName" )
+ } )
+
+ },
+ enableChangeLog = false )
+@CreateLdapServer(transports =
+ {
+ @CreateTransport(protocol = "LDAP"),
+ @CreateTransport(protocol = "LDAPS")
+ })
+public class SearchWithIndexTest extends AbstractLdapTestUnit
+{
+ private LdapNetworkConnection connection;
+
+
+ @Before
+ public void setup() throws Exception
+ {
+ connection = (LdapNetworkConnection)LdapApiIntegrationUtils.getPooledAdminConnection( getLdapServer() );
+ }
+
+
+ @After
+ public void shutdown() throws Exception
+ {
+ LdapApiIntegrationUtils.releasePooledAdminConnection( connection, getLdapServer() );
+ }
+
+ /**
+ * Test an add operation performance
+ */
+ @Test
+ @Ignore
+ public void testAddPerf() throws Exception
+ {
+ Dn dn = new Dn( "cn=test,ou=system" );
+ Entry entry = new DefaultEntry( getService().getSchemaManager(), dn,
+ "ObjectClass: top",
+ "ObjectClass: person",
+ "sn: TEST",
+ "cn: test" );
+
+ connection.add( entry );
+ int nbIterations = 800;
+
+ BufferedWriter out = new BufferedWriter( new FileWriter("/tmp/out.txt") );
+
+ long t0 = System.currentTimeMillis();
+ long t00 = 0L;
+ long tt0 = System.currentTimeMillis();
+
+ for ( int i = 0; i < nbIterations; i++ )
+ {
+ if ( i % 1000 == 0 )
+ {
+ long tt1 = System.currentTimeMillis();
+
+ System.out.println( i + ", " + ( tt1 - tt0 ) );
+ tt0 = tt1;
+ }
+
+ if ( i == 5000 )
+ {
+ t00 = System.currentTimeMillis();
+ }
+
+ dn = new Dn( "uid=" + i + ",dc=example,dc=com" );
+ entry = new DefaultEntry( getService().getSchemaManager(), dn,
+ "objectClass: top",
+ "objectClass: person",
+ "objectClass: organizationalPerson",
+ "objectClass: inetOrgPerson",
+ "uid", Integer.toString( i ),
+ "mail: A-A-R.Awg-Rosli@acme.com",
+ "title: Snr Operations Technician (D)",
+ "sn: Awg-Rosli",
+ "departmentNumber: SMDS - UIA/G/MMO52D",
+ "cn: Awg-Rosli, Awg-Abd-Rahim SMDS-UIA/G/MMO52D",
+ "description: UI - S",
+ "telephoneNumber: 555-1212",
+ "givenName: Awg-Abd-Rahim",
+ "businessCategory: Ops MDS (Malaysia) Sdn Bhd",
+ "displayName", i + "Awg-Rosli, Awg-Abd-Rahim SMDS-UIA/G/MMO52D",
+ "employeeNumber: A-A-R.Awg-Rosli",
+ "pwdPolicySubEntry: ads-pwdId=cproint,ou=passwordPolicies,ads-interceptorId=authenticationInterceptor,ou=interceptors,ads-directoryServiceId=default,ou=config" );
+
+ connection.add( entry );
+ }
+
+ long t1 = System.currentTimeMillis();
+
+ Long deltaWarmed = ( t1 - t00 );
+ System.out.println( "Delta : " + deltaWarmed + "( " + ( ( ( nbIterations - 5000 ) * 1000 ) / deltaWarmed ) + " per s ) /" + ( t1 - t0 ) );
+
+ Entry entry1 = null;
+ Entry entry2 = null;
+ Entry entry3 = null;
+
+ long ns0 = System.currentTimeMillis();
+ EntryCursor results = connection.search("dc=example,dc=com", "(displayName=1Awg-Rosli, Awg-Abd-Rahim SMDS-UIA/G/MMO52D)", SearchScope.SUBTREE, "*" );
+
+ while ( results.next() )
+ {
+ entry1 = results.get();
+ break;
+ }
+
+ results.close();
+
+ long ns1 = System.currentTimeMillis();
+
+ System.out.println( "Delta search : " + ( ns1 - ns0 ) );
+
+ long ns2 = System.currentTimeMillis();
+ results = connection.search("dc=example,dc=com", "(displayName=3*)", SearchScope.SUBTREE, "*" );
+
+ while ( results.next() )
+ {
+ entry2 = results.get();
+ break;
+ }
+ results.close();
+ long ns3 = System.currentTimeMillis();
+
+ System.out.println( "Delta search substring : " + ( ns3 - ns2 ) );
+
+ long ns4 = System.currentTimeMillis();
+ results = connection.search("dc=example,dc=com", "(uid=6)", SearchScope.SUBTREE, "*" );
+
+ while ( results.next() )
+ {
+ entry3 = results.get();
+ break;
+ }
+
+ results.close();
+ long ns5 = System.currentTimeMillis();
+
+ System.out.println( "Delta search no index : " + ( ns5 - ns4 ) );
+
+ System.out.println( "Entry 1 : " + entry1 );
+ System.out.println( "Entry 2 : " + entry2 );
+ System.out.println( "Entry 3 : " + entry3 );
+ connection.close();
+ }
+}