From 329da17b1170028faa64e0b0c5fbd9b71d120444 Mon Sep 17 00:00:00 2001
From: Gary Williams <gary.williams@forgerock.com>
Date: Wed, 01 Jun 2011 14:35:41 +0000
Subject: [PATCH] Add test library for OpenDJ SDK common functions

---
 opendj-sdk/opends/tests/staf-tests/shared/functions/sdk.xml |  172 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 172 insertions(+), 0 deletions(-)

diff --git a/opendj-sdk/opends/tests/staf-tests/shared/functions/sdk.xml b/opendj-sdk/opends/tests/staf-tests/shared/functions/sdk.xml
new file mode 100644
index 0000000..acd729d
--- /dev/null
+++ b/opendj-sdk/opends/tests/staf-tests/shared/functions/sdk.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../stax.dtd">
+<!--
+ ! 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 2011 ForgeRock AS
+ ! -->
+<stax>
+  <!-- SDK ldapsearch Function -->
+  <function name="SDKldapSearch">
+    <function-prolog>
+      This function performs an ldapsearch using the SDK java API
+    </function-prolog>  
+    <function-map-args>
+      <function-arg-def name="dsInstanceHost" type="optional">
+        <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="optional">
+        <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="optional">
+        <function-arg-description>
+          Bind DN
+        </function-arg-description>
+        <function-arg-property name="type" value="DN"/>
+      </function-arg-def> 
+      <function-arg-def name="dsInstancePswd" type="optional">
+        <function-arg-description>
+          Bind password
+        </function-arg-description>
+        <function-arg-property name="type" value="string"/>
+      </function-arg-def>
+      <function-arg-def name="dsScope" type="optional">
+        <function-arg-description>
+          The scope of the search operation
+        </function-arg-description>
+        <function-arg-property name="type" value="string"/>
+      </function-arg-def>        
+      <function-arg-def name="dsBaseDN" type="optional">
+        <function-arg-description>
+          The baseDN for the search operation
+        </function-arg-description>
+        <function-arg-property name="type" value="dn"/>
+      </function-arg-def>
+      <function-arg-def name="dsFilter" type="optional">
+        <function-arg-description>
+          The filter for the search operation
+        </function-arg-description>
+        <function-arg-property name="type" value="filter"/>
+      </function-arg-def>
+      <function-arg-def name="dsAttributes" type="optional">
+        <function-arg-description>
+          Only return these attributes
+        </function-arg-description>
+        <function-arg-property name="type" value="string"/>
+      </function-arg-def> 
+    </function-map-args>
+    
+    <sequence>
+ 
+      <!-- Build the Command -->
+      <script>
+        from org.forgerock.opendj.ldap import *
+        from org.forgerock.opendj.ldap.responses import *
+        from org.forgerock.opendj.ldif import *              
+        
+        myHost=String(dsInstanceHost)
+        myPort=int(dsInstancePort)
+        myBaseDn=String(dsBaseDN)
+        myDn=String(dsInstanceDn)
+        myPassword=String(dsInstancePswd).toCharArray()
+
+        if dsScope == 'base':
+          myScope = SearchScope.BASE_OBJECT
+        elif dsScope == 'one':
+          myScope = SearchScope.SINGLE_LEVEL
+        elif dsScope == 'sub':
+          myScope = SearchScope.WHOLE_SUBTREE
+        else:
+          myScope = SearchScope.WHOLE_SUBTREE
+
+        if dsFilter:
+          myFilter = dsFilter
+        else:
+          myFilter = '(objectClass=*)'
+        
+        if dsAttributes:
+          myAttrs = dsAttributes
+        else:
+          myAttrs = []
+
+        writer = LDIFEntryWriter(System.out)
+        factory = LDAPConnectionFactory(myHost,myPort)
+        connection = None
+
+        try:
+          try:        
+            connection = factory.getConnection()
+            
+            connection.bind(myDn, myPassword)
+            
+            reader = connection.search(myBaseDn, myScope, myFilter, myAttrs)
+
+            #TODO: handle search result references
+            #TODO: not really a need to use writer to write to stdout   
+            while (reader.hasNext()):
+              if not reader.isReference():
+                entry = reader.readEntry()
+                writer.writeComment("Search result entry: %s" % entry.getName().toString())
+                writer.writeEntry(entry)
+              else:
+                ref = reader.readReference()
+                writer.writeComment("Search result reference: %s " % ref.getURIs().toString())        
+        
+            writer.flush()
+
+          except ErrorResultException, e:
+            System.err.println(e.getMessage())
+            System.exit(e.getResult().getResultCode().intValue())
+        
+          except ErrorResultIOException, e:
+            System.err.println(e.getMessage())
+            System.exit(e.getCause().getResult().getResultCode().intValue())
+        
+          except InterruptedException, e:
+            System.err.println(e.getMessage())
+            System.exit(ResultCode.CLIENT_SIDE_USER_CANCELLED.intValue())
+        
+          except IOException, e:
+            System.err.println(e.getMessage())
+            System.exit(ResultCode.CLIENT_SIDE_LOCAL_ERROR.intValue()) 
+
+        finally:        
+          connection.close()
+      
+        SDKResult = [[0,'%s' % entry.getAllAttributes().toString()]]
+      </script>
+      <message>
+        'Result = %s' % entry.getAllAttributes().toString()
+      </message>
+      <return>
+        SDKResult
+      </return>
+    </sequence>
+  </function>
+</stax>
\ No newline at end of file

--
Gitblit v1.10.0