From 8e674419ae61e38a48563c61843fcb09a38243f2 Mon Sep 17 00:00:00 2001
From: tdj_tx <tdj_tx@localhost>
Date: Fri, 09 Mar 2007 22:45:05 +0000
Subject: [PATCH] Added addSchemaTask for issue 367

---
 opends/tests/functional-tests/shared/functions/dsadm.xml |  174 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 173 insertions(+), 1 deletions(-)

diff --git a/opends/tests/functional-tests/shared/functions/dsadm.xml b/opends/tests/functional-tests/shared/functions/dsadm.xml
index bd0ce56..55ae947 100755
--- a/opends/tests/functional-tests/shared/functions/dsadm.xml
+++ b/opends/tests/functional-tests/shared/functions/dsadm.xml
@@ -1735,5 +1735,177 @@
       </loop>
       <return>loopRC</return>
     </sequence>
-  </function> 
+  </function>
+ 
+    <!-- Add Schema Task Function --> 
+    <function name="addSchemaTask">
+
+    <function-prolog>
+        This function performs a dynamic schema add task 
+    </function-prolog>
+
+    <function-map-args>
+        <function-required-arg name="dsInstanceHost">
+            Directory Server host name
+        </function-required-arg>
+        <function-required-arg name="dsInstancePort">
+            Directory Server port number
+        </function-required-arg>
+        <function-required-arg name="dsInstanceDn">
+            Directory Server Manager DN
+        </function-required-arg>
+        <function-required-arg name="dsInstancePswd">
+            Directory Server Manager Password
+        </function-required-arg>
+        <function-required-arg name="taskID">
+            The identifier for the task
+        </function-required-arg>
+        <function-required-arg name="ldifFile">
+            The name of the ldif file that contains the schema updates
+        </function-required-arg>
+    </function-map-args>
+
+      <sequence>
+
+        <script>
+          taskDN='ds-task-id=%s,cn=Scheduled Tasks,cn=Tasks' % taskID
+        </script>
+        
+        <!-- Build the schema task configuration object -->
+        <script>
+          ldifLines=[]
+          ldifLines.append('dn: %s' % taskDN)
+          ldifLines.append('objectclass: top')
+          ldifLines.append('objectclass: ds-task')
+          ldifLines.append('objectclass: ds-task-add-schema-file')
+          ldifLines.append('ds-task-class-name: org.opends.server.tasks.AddSchemaFileTask')
+          ldifLines.append('ds-task-id: %s' % taskID)
+        </script>
+    
+        <script>
+          ldifLines.append('ds-task-schema-file-name: %s' % ldifFile )
+        </script>
+               
+                   
+        <!-- Write out the schema-task ldif -->
+        <script>
+          outfile = open('%s/schema-task.ldif' % TMP_DATA_DIR,"w")
+            
+          for line in ldifLines:
+            outfile.write("%s\n" % line)
+            
+          outfile.close()
+        </script>
+
+        
+        <!-- Copy the schema-task ldif to remote host -->
+        <message>'Copy schema task ldif file.'</message>
+        <call function="'copyFile'">
+          { 'srcfile'    : '%s/schema-task.ldif' % TMP_DATA_DIR,
+            'destfile'   : '%s/schema-task.ldif' % STAGED_DATA_DIR,
+            'remotehost' : STAF_REMOTE_HOSTNAME }
+        </call>
+        
+        <!-- Copy the schema update ldif to remote host's config/schema directory -->
+        <message>'Copy schema update ldif file.'</message>
+        <call function="'copyFile'">
+          { 'srcfile'    : '%s/schema/ldifs/%s' % (STAGED_DATA_DIR,ldifFile),
+            'destfile'   : '%s/%s/config/schema/%s' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME,ldifFile),
+            'remotehost' : STAF_REMOTE_HOSTNAME }
+        </call>
+
+        <!-- On line Schema Task with ldapmodify -->
+        <message>
+          'ldapmodify%s -a -h %s -p %s -D "%s" -w %s' % (fileExt,dsInstanceHost,dsInstancePort,dsInstanceDn,dsInstancePswd)
+        </message>
+        <process name="'On line Schema Task'">
+          <location>'%s' % (STAF_REMOTE_HOSTNAME) </location>
+          <command>'%s/ldapmodify%s' % (OPENDS_BINPATH,fileExt)</command>
+          <parms>'-a -h %s -p %s -D "%s" -w %s' % (dsInstanceHost,dsInstancePort,dsInstanceDn,dsInstancePswd)</parms>
+          <workdir>'%s' % (OPENDS_BINPATH)</workdir>
+          <envs>
+                ['PATH=/bin:/usr/bin:%s' % (OPENDS_BINPATH), 'JAVA_HOME=%s' % (JAVA_HOME)]
+          </envs>
+          <stdin>'%s/schema-task.ldif' % STAGED_DATA_DIR</stdin>
+          <stderr mode="'stdout'"/>
+          <returnstdout/>
+        </process>
+
+        <script>
+          schemaTaskRC=RC
+          schemaTaskResult=STAXResult
+        </script>
+
+        <call function="'checkRC'">
+          { 'returncode' : schemaTaskRC ,
+            'result'     : schemaTaskResult }
+        </call>
+          
+        <!-- Check that the task is completed -->
+        <script>
+          loopRC=1
+        </script>
+
+        <script> 
+          searchre = re.compile('ds-task-state: COMPLETED_SUCCESSFULLY') 
+        </script> 
+
+        <!-- Wait for the task to be COMPLETED_SUCCESSFULLY -->
+        <loop from="1" to="5" while="loopRC != 0">
+
+          <sequence>
+          
+            <message>
+              'ldapsearch%s -h %s -p %s -D "%s" -w %s -s base -b "%s" "objectclass=*" ds-task-state' % (fileExt,dsInstanceHost,dsInstancePort,dsInstanceDn,dsInstancePswd,taskDN)
+            </message>
+            <process name="'Search On line Restore Task'">
+              <location>'%s' % (STAF_REMOTE_HOSTNAME) </location>
+              <command>'%s/ldapsearch%s' % (OPENDS_BINPATH,fileExt)</command>
+              <parms>'-h %s -p %s -D "%s" -w %s -s base -b "%s" "objectclass=*" ds-task-state' % (dsInstanceHost,dsInstancePort,dsInstanceDn,dsInstancePswd,taskDN)</parms>
+              <workdir>'%s' % (OPENDS_BINPATH)</workdir>
+              <envs>
+                    ['PATH=/bin:/usr/bin:%s' % (OPENDS_BINPATH), 'JAVA_HOME=%s' % (JAVA_HOME)]
+              </envs>
+              <stderr mode="'stdout'"/>
+              <returnstdout/>
+            </process>
+            
+            <script>
+              searchRC=RC
+              searchResult=STAXResult
+            </script>
+    
+            <script> 
+              result = STAXResult[0][1]
+            </script> 
+    
+            <if expr='re.search(searchre, result) != None'>
+              <sequence>
+                <script>loopRC=0</script>
+              </sequence>
+            <else>
+              <message log="1" level="'Warning'">
+                'No match on ds-task-state.'
+              </message>
+            </else>
+            </if>
+            
+            <call function="'checkRC'">
+                { 'returncode' : searchRC ,
+                  'result'     : searchResult }
+            </call>
+          
+            <call function="'Sleep'">
+              { 'sleepForMilliSeconds' : '2000' }
+            </call>
+            
+          </sequence>
+          
+        </loop>
+
+        <return>loopRC</return>
+
+      </sequence>
+    </function> 
+    
 </stax>

--
Gitblit v1.10.0