mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

tdj_tx
09.45.2007 8e674419ae61e38a48563c61843fcb09a38243f2
Added addSchemaTask for issue 367
1 files modified
172 ■■■■■ changed files
opends/tests/functional-tests/shared/functions/dsadm.xml 172 ●●●●● patch | view | raw | blame | history
opends/tests/functional-tests/shared/functions/dsadm.xml
@@ -1736,4 +1736,176 @@
      <return>loopRC</return>
    </sequence>
  </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>