| opends/tests/staf-tests/shared/functions/ldap.xml | ●●●●● patch | view | raw | blame | history | |
| opends/tests/staf-tests/shared/functions/topology.xml | ●●●●● patch | view | raw | blame | history | |
| opends/tests/staf-tests/shared/java/ldapjdk/PSearch.java | ●●●●● patch | view | raw | blame | history | |
| opends/tests/staf-tests/shared/java/ldapjdk/PSearchOperations.java | ●●●●● patch | view | raw | blame | history | |
| opends/tests/staf-tests/shared/java/ldapjdk/ldapjdk.jar | patch | view | raw | blame | history | |
| opends/tests/staf-tests/shared/java/ldapjndi/addAnEntry.java | patch | view | raw | blame | history | |
| opends/tests/staf-tests/shared/java/ldapjndi/modifyAnAttribute.java | patch | view | raw | blame | history | |
| opends/tests/staf-tests/shared/java/ldapjndi/saslSearchClient.java | patch | view | raw | blame | history |
opends/tests/staf-tests/shared/functions/ldap.xml
@@ -2821,8 +2821,8 @@ 'command' : '%s/bin/java' % JAVA_HOME, 'arguments' : '%s %s' % (STAFCmd,STAFCmdParams), 'location' : location, 'envCmd' : ['CLASSPATH=%s/../%s/ldap' % (dsPath,remote.reljavadir)], 'path' : '%s/../%s/ldap' % (dsPath,remote.reljavadir), 'envCmd' : ['CLASSPATH=%s/../%s/ldapjndi' % (dsPath,remote.reljavadir)], 'path' : '%s/../%s/ldapjndi' % (dsPath,remote.reljavadir), 'expectedRC': expectedRC, 'knownIssue': knownIssue } @@ -3071,8 +3071,8 @@ 'command' : '%s/bin/java' % JAVA_HOME, 'arguments' : '%s %s' % (STAFCmd,STAFCmdParams), 'location' : location, 'envCmd' : ['CLASSPATH=%s/../%s/ldap' % (dsPath,remote.reljavadir)], 'path' : '%s/../%s/ldap' % (dsPath,remote.reljavadir), 'envCmd' : ['CLASSPATH=%s/../%s/ldapjndi' % (dsPath,remote.reljavadir)], 'path' : '%s/../%s/ldapjndi' % (dsPath,remote.reljavadir), 'expectedRC': expectedRC, 'knownIssue': knownIssue } @@ -3083,127 +3083,6 @@ </sequence> </function> <!-- Modify an attribute --> <function name="modifyDn"> <function-prolog> This function rename the rdn </function-prolog> <function-map-args> <function-arg-def name="location" type="optional" default="STAF_REMOTE_HOSTNAME"> <function-arg-description> Location of target host </function-arg-description> <function-arg-property name="type" value="hostname"/> </function-arg-def> <function-arg-def name="dsPath" type="optional" default="'%s/%s' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)"> <function-arg-description> Pathname to installation root </function-arg-description> <function-arg-property name="type" value="filepath"/> </function-arg-def> <function-arg-def name="dsInstanceHost" type="optional" default="STAF_REMOTE_HOSTNAME"> <function-arg-description> Directory server hostname or IP address </function-arg-description> <function-arg-property name="type" value="hostname"/> </function-arg-def> <function-arg-def name="dsInstancePort" type="required"> <function-arg-description> Directory server port number </function-arg-description> <function-arg-property name="type" value="Port number"/> </function-arg-def> <function-arg-def name="dsInstanceDn" type="required"> <function-arg-description> Bind DN </function-arg-description> <function-arg-property name="type" value="DN"/> </function-arg-def> <function-arg-def name="dsInstancePswd" type="required"> <function-arg-description> Bind password </function-arg-description> <function-arg-property name="type" value="string"/> </function-arg-def> <function-arg-def name="DNToModify" type="required"> <function-arg-description> DN to modify </function-arg-description> <function-arg-property name="type" value="DN"/> </function-arg-def> <function-arg-def name="newRDN" type="optional"> <function-arg-description> new rdn name : ie uid=jdoe_bis </function-arg-description> <function-arg-property name="type" value="string"/> </function-arg-def> <function-arg-def name="deleteOldRDN" type="optional"> <function-arg-description> 1 : delete old rdn, 0 do not delete old rdn, default value is 1 </function-arg-description> <function-arg-property name="type" value="integer"/> </function-arg-def> <function-arg-def name="expectedRC" type="optional" default="0"> <function-arg-description> Expected return code value. Default value is 0 Wildcard 'noCheck' to not check the RC </function-arg-description> <function-arg-property name="type" value="integer"/> </function-arg-def> <function-arg-def name="knownIssue" type="optional" default="None"> <function-arg-description> Known issue. Corresponds to an issue number. </function-arg-description> <function-arg-property name="type" value="string" /> </function-arg-def> </function-map-args> <sequence> <!-- Local variables --> <script> mylocation=location #Build the Command STAFCmdParamsList=[] STAFCmdParams='' STAFCmd='' </script> <!-- Set common ldap arguments --> <call function="'_ldapCommonArgs'" /> <script> if DNToModify: STAFCmdParamsList.append('-d "%s"' % DNToModify) if newRDN: STAFCmdParamsList.append('-e "%s"' % newRDN) if deleteOldRDN: STAFCmdParamsList.append('-f "%s"' % deleteOldRDN) STAFCmdParams=' '.join(STAFCmdParamsList) STAFCmd='modifyDn' </script> <call function="'runCommand'" > { 'name' : 'Modify DN', 'command' : '%s/bin/java' % JAVA_HOME, 'arguments' : '%s %s' % (STAFCmd,STAFCmdParams), 'location' : location, 'envCmd' : ['CLASSPATH=%s/../%s/ldap' % (dsPath,remote.reljavadir)], 'path' : '%s/../%s/ldap' % (dsPath,remote.reljavadir), 'expectedRC': expectedRC, 'knownIssue': knownIssue } </call> <return> STAXResult </return> </sequence> </function> <!-- Modify an attribute --> <function name="saslSearch"> <function-prolog> @@ -3406,8 +3285,8 @@ 'command' : '%s/bin/java' % JAVA_HOME, 'arguments' : '%s %s' % (STAFCmd,STAFCmdParams), 'location' : location, 'envCmd' : ['CLASSPATH=%s/../%s/ldap' % (dsPath,remote.reljavadir)], 'path' : '%s/../%s/ldap' % (dsPath,remote.reljavadir), 'envCmd' : ['CLASSPATH=%s/../%s/ldapjndi' % (dsPath,remote.reljavadir)], 'path' : '%s/../%s/ldapjndi' % (dsPath,remote.reljavadir), 'expectedRC': expectedRC, 'knownIssue': knownIssue } opends/tests/staf-tests/shared/functions/topology.xml
@@ -298,10 +298,10 @@ } </call> <!-- Archive (ldap/.java) files --> <!-- Archive (ldapjndi/.java) files --> <script> javaSharedDir='%s/ldap' % source.java javaLocalDir ='%s/ldap' % local.java javaSharedDir='%s/ldapjndi' % source.java javaLocalDir ='%s/ldapjndi' % local.java </script> <message> 'Copy java files locally from %s to %s.' % \ @@ -316,7 +316,7 @@ } </call> <!--- Check if ldap java files are already compiled --> <!--- Check if ldapjndi java files are already compiled --> <call function="'listFolderByExtension'" > { 'location' : STAXServiceMachine, @@ -326,7 +326,7 @@ </call> <if expr="len(STAXResult) == 0"> <sequence> <!--- Compile ldap java files on controler host --> <!--- Compile ldapjndi java files on controler host --> <message> 'Compile Java files under %s on %s' \ % (javaLocalDir, STAXServiceMachine) @@ -339,7 +339,69 @@ </call> </sequence> </if> <!-- Archive (ldapjdk/.java) files --> <script> javaSharedDir='%s/ldapjdk' % source.java javaLocalDir ='%s/ldapjdk' % local.java </script> <message> 'Copy java files locally from %s to %s.' % \ (javaSharedDir,javaLocalDir) </message> <call function="'CopyFolderByExtension'"> { 'location' : STAXServiceMachine, 'srcfolder' : javaSharedDir, 'destfolder' : javaLocalDir, 'extension' : 'java' } </call> <call function="'CopyFolderByExtension'"> { 'location' : STAXServiceMachine, 'srcfolder' : javaSharedDir, 'destfolder' : javaLocalDir, 'extension' : 'jar' } </call> <!--- Check if ldapjdk java files are already compiled --> <call function="'listFolderByExtension'" > { 'location' : STAXServiceMachine, 'foldername' : javaLocalDir, 'extension' : 'class' } </call> <if expr="len(STAXResult) == 0"> <sequence> <!--- Compile ldapjdk java files on controller host --> <message> 'Compile Java files under %s on %s' \ % (javaLocalDir, STAXServiceMachine) </message> <script> if is_windows_platform(STAXServiceMachine): separator=';' jstaf_jarfile='%s\\bin\\JSTAF.jar' % LOCAL_STAF_ROOT else: separator=':' jstaf_jarfile='%s/lib/JSTAF.jar' % LOCAL_STAF_ROOT ldapjdk_jarfile='%s/ldapjdk.jar' % javaLocalDir </script> <call function="'compileJava'" > { 'location' : STAXServiceMachine, 'foldername' : '%s' % javaLocalDir, 'classpath' : '%s%s%s' \ % (ldapjdk_jarfile,separator,jstaf_jarfile) } </call> </sequence> </if> <!-- Archive (.security) files --> <message> 'Copy security data files locally from %s to %s.' % \ opends/tests/staf-tests/shared/java/ldapjdk/PSearch.java
New file @@ -0,0 +1,130 @@ /* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at * trunk/opends/resource/legal-notices/OpenDS.LICENSE * or https://OpenDS.dev.java.net/OpenDS.LICENSE. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, * add the following below this CDDL HEADER, with the fields enclosed * by brackets "[]" replaced with your own identifying information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Copyright 2009 Sun Microsystems, Inc. */ import netscape.ldap.util.GetOpt; public class PSearch { public static void main(String[] args) { String usage = "Usage: psearch -h <hostname> -p <port> -b <suffix>" + "[-D bindDN] [-w bindPW]" + "-f <fileURL+file name>" + "-l <y>" + "-n <number of thread>" + " -o <add,modify,delete,moddn>"; String hostname = "localhost"; int portnumber = 1389; //LDAPv3.DEFAULT_PORT; int nbThreads = 1;//number of thread by default // Check for these options. -H means to print out a usage message. GetOpt options = new GetOpt("h:p:b:D:w:H:f:n:o:l", args); // Get the arguments specified for each option. String host = options.getOptionParam('h'); // host if (options.hasOption('h')) { if (host == null) { // usage System.out.println(usage); System.exit(1); } else { hostname = host; } } String port = options.getOptionParam('p'); // If a port number was specified, convert the port value // to an integer. if (port != null) { try { portnumber = java.lang.Integer.parseInt(port); } catch (java.lang.Exception e) { System.out.println("Invalid port number: " + port); System.out.println(usage); System.exit(1); } } //number of thread String nbT = options.getOptionParam('n'); if (nbT != null) { try { nbThreads = java.lang.Integer.parseInt(nbT); } catch (java.lang.Exception e) { System.out.println("Invalid Thread number: " + nbT); System.out.println(usage); System.exit(1); } } // PSearch suffix String suffix = options.getOptionParam('b'); String bindDN = options.getOptionParam('D'); String bindPW = options.getOptionParam('w'); //operations all by default String operation = PSearchOperations.ALL; if (options.hasOption('o')) { String opParam = options.getOptionParam('o'); if (opParam.equals("add")) { operation = PSearchOperations.ADD; } else if (opParam.equals("modify")) { operation = PSearchOperations.MODIFY; } else if (opParam.equals("delete")) { operation = PSearchOperations.DELETE; } else if (opParam.equals("moddn")) { operation = PSearchOperations.MODDN; }else if (opParam.equals("all")) { operation = PSearchOperations.ALL;; } else { System.out.println("Invalid operation type: " + opParam); System.out.println(usage); System.exit(1); } } // to disable the log files boolean useFile = false; String fileName = "logLile"; if (options.hasOption('f')) { useFile = options.hasOption('f'); fileName = options.getOptionParam('f'); } // to enable system out logs boolean output = options.hasOption('l'); System.out.println("Connecting to " + hostname + ":" + portnumber + " as \"" + bindDN + "\"" + " on suffix \"" + suffix + "\"" + " on operation \"" + operation + "\"" + " use file: \"" + useFile + "\" output: \"" + output + "\""); //start all thread for (int i = 0; i < nbThreads; i++) { PSearchOperations ps = new PSearchOperations(i, hostname, portnumber, bindDN, bindPW, suffix); if (useFile) { ps.useLogFile(useFile); ps.setLogFile(fileName); } ps.setOutput(output); ps.setOperation(operation); ps.start(); } } } opends/tests/staf-tests/shared/java/ldapjdk/PSearchOperations.java
New file @@ -0,0 +1,297 @@ /* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at * trunk/opends/resource/legal-notices/OpenDS.LICENSE * or https://OpenDS.dev.java.net/OpenDS.LICENSE. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, * add the following below this CDDL HEADER, with the fields enclosed * by brackets "[]" replaced with your own identifying information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Copyright 2009 Sun Microsystems, Inc. */ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Calendar; import java.util.Enumeration; import netscape.ldap.LDAPAttribute; import netscape.ldap.LDAPAttributeSet; import netscape.ldap.LDAPConnection; import netscape.ldap.LDAPEntry; import netscape.ldap.LDAPException; import netscape.ldap.LDAPSearchConstraints; import netscape.ldap.LDAPSearchResults; import netscape.ldap.LDAPv3; import netscape.ldap.controls.LDAPPersistSearchControl; public class PSearchOperations extends Thread { public static final String ADD = "ADD"; public static final String MODIFY = "MODIFY"; public static final String DELETE = "DELETE"; public static final String MODDN = "MODDN"; public static final String ALL = "ALL"; private LDAPConnection connection; private String hostname; private int portnumber; private String bindDN; private String bindPW; private String suffix; private int threadId; private String fileName; private boolean output; private boolean logFile; private String operation; /** * constructor * @param id * @param hostname * @param portnumber * @param bindDN * @param bindPW * @param suffix */ public PSearchOperations(int id, String hostname, int portnumber, String bindDN, String bindPW, String suffix) { this.hostname = hostname; this.portnumber = portnumber; this.bindDN = bindDN; this.bindPW = bindPW; this.suffix = suffix; this.threadId = id; this.output = false; this.logFile = false; //by default all operation this.operation = ALL; } /** * to use systeme.out * @param output boolean */ public void setOutput(boolean output) { this.output = output; } /** * to use the log file * @param logFile boolean */ public void useLogFile(boolean logFile) { this.logFile = logFile; } /** * to define the log file and URI * @param file String */ public void setLogFile(String file) { //if there one thread the thread id are not add in the file name this.fileName = file; //in multy thread for each thread the thread id are add in the file name if (threadId!=0) { String ext = file.substring(file.lastIndexOf("."), file.length()); this.fileName = file.substring(0, file.lastIndexOf(".")) + threadId + ext; } //delete old log file if logFile is present and enable File fileToDelete = new File(fileName); if (fileToDelete.isFile() && logFile) { fileToDelete.delete(); } } /** * to define the PSearch operation * @param operation String */ public void setOperation(String operation) { this.operation = operation; } /** *Connect to server. */ private void connect() { try { connection = new LDAPConnection(); connection.connect(3, hostname, portnumber, "", ""); connection.authenticate(3, bindDN, bindPW); write("[Thread id: " + threadId + "] \n" + getDate() + connection); } catch (LDAPException ex) { System.out.println("[Thread id: " + threadId + "]Connection :" + ex.getMessage()); System.exit(0); } } /** * to instanciate new LDAPPersistSearchControl * @return LDAPPersistSearchControl */ private LDAPPersistSearchControl PSearchControl() { int op = 0; if (operation.equals(ALL)) { op = LDAPPersistSearchControl.ADD | LDAPPersistSearchControl.MODIFY | LDAPPersistSearchControl.DELETE | LDAPPersistSearchControl.MODDN; } else if (operation.equals(ADD)) { op = LDAPPersistSearchControl.ADD; } else if (operation.equals(MODIFY)) { op = LDAPPersistSearchControl.MODIFY; } else if (operation.equals(DELETE)) { op = LDAPPersistSearchControl.DELETE; } else if (operation.equals(MODDN)) { op = LDAPPersistSearchControl.MODDN; } boolean changesOnly = true; boolean returnControls = true; boolean isCritical = true; LDAPPersistSearchControl persistCtrl = new LDAPPersistSearchControl( op, changesOnly, returnControls, isCritical); return persistCtrl; } /** * LDAP Search * @return LDAPSearchResults */ public LDAPSearchResults LDAPSearch() { LDAPSearchResults res = null; try { LDAPPersistSearchControl persistCtrl = PSearchControl(); LDAPSearchConstraints cons = connection.getSearchConstraints(); cons.setBatchSize(1); cons.setServerControls(persistCtrl); // Start the persistent search. res = connection.search(suffix, LDAPv3.SCOPE_SUB, "(objectclass=*)", null, false, cons); } catch (LDAPException ex) { System.out.println("[Thread id: " + threadId + "]LDAPSearch :" + ex.getMessage()); System.exit(0); } return res; } /** * return the date and time * @return String */ public static String getDate() { // Initialize the today's date string String DATE_FORMAT = "yyyy/MM/dd:HH:mm:ss"; java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT); Calendar c1 = Calendar.getInstance(); // today return ("[" + sdf.format(c1.getTime()) + "]"); } /** * * @param b byte off control operation * @return */ public String controlName(byte b) { String control; switch (b) { case LDAPPersistSearchControl.ADD: control = "ADD"; break; case LDAPPersistSearchControl.DELETE: control = "DELETE"; break; case LDAPPersistSearchControl.MODDN: control = "MODDN"; break; case LDAPPersistSearchControl.MODIFY: control = "MODIFY"; break; default: control = String.valueOf(b); break; } return control; } /** * to write on the log file or to use syteme out * @param msg String */ public void write(String msg) { if (output) { System.out.println(msg); } if (logFile) { FileWriter aWriter = null; try { aWriter = new FileWriter(fileName, true); aWriter.write(msg + "\n"); aWriter.flush(); aWriter.close(); } catch (IOException ex) { System.out.println("[Thread id: " + threadId + "]Write :" + ex.getMessage()); } finally { try { aWriter.close(); } catch (IOException ex) { System.out.println("[Thread id: " + threadId + "]Write :" + ex.getMessage()); } } } } /** * run thread methode */ public void run() { connect(); LDAPSearchResults result = LDAPSearch(); while (result.hasMoreElements() && connection.isConnected()) { byte[] arr = result.getResponseControls()[0].getValue(); LDAPEntry entry = (LDAPEntry) result.nextElement(); LDAPAttributeSet attrSet = entry.getAttributeSet(); Enumeration attrs = attrSet.getAttributes(); if (entry.getDN().contains("break")) { String message = "\n[Thread id: " + threadId + "] " + getDate() + " [BREAK]"; write(message); System.exit(0); } else if (entry.getDN().contains("stop")) { try { connection.disconnect(); String message = "\n[Thread id: " + threadId + "] " + getDate() + "[STOP]"; write(message); System.exit(0); } catch (LDAPException ex) { System.out.println("[Thread id: " + threadId + "]run :" + ex.getLDAPErrorMessage()); } } String message = "[Thread id: " + threadId + "] " + getDate() + " [" + controlName(arr[4]) + "]"; write("\n" + message); String dn = "dn: " + entry.getDN(); write(dn); while (attrs.hasMoreElements()) { LDAPAttribute attr = (LDAPAttribute) attrs.nextElement(); String name = attr.getName(); Enumeration values = attr.getStringValues(); while (values.hasMoreElements()) { String attribute = name + ": " + values.nextElement(); write(attribute); } } } if (!connection.isConnected()) { String message = "\n[Thread id: " + threadId + "] " + getDate() + "[CONNECTION CLOSE]"; write(message); } } } opends/tests/staf-tests/shared/java/ldapjdk/ldapjdk.jarBinary files differ
opends/tests/staf-tests/shared/java/ldapjndi/addAnEntry.java
opends/tests/staf-tests/shared/java/ldapjndi/modifyAnAttribute.java
opends/tests/staf-tests/shared/java/ldapjndi/saslSearchClient.java