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

ugaston
13.17.2007 edc92640cc86d3b05570daf50084ddd6f0d68e46
Introduce new replication configuration procedure
3 files modified
286 ■■■■■ changed files
opends/tests/functional-tests/shared/functions/environment.xml 6 ●●●● patch | view | raw | blame | history
opends/tests/functional-tests/shared/functions/topology.xml 220 ●●●●● patch | view | raw | blame | history
opends/tests/functional-tests/testcases/replication/replication_setup.xml 60 ●●●● patch | view | raw | blame | history
opends/tests/functional-tests/shared/functions/environment.xml
@@ -152,9 +152,13 @@
        True = 1
        False = 0     
        DSCONFIG = 'dsconfig'
        DSCONFIG = 'dsconfig'
        DSREPLICATION = 'dsreplication'
        NO_CHECK = 'noCheck'  
          
        AdminUID = 'admin'
        AdminPswd = 'admin'
        # Replication configuration default names
        MultimasterSync = 'Multimaster Synchronization'
        MultimasterType = 'multimaster' 
opends/tests/functional-tests/shared/functions/topology.xml
@@ -111,7 +111,7 @@
                <!-- Configure replication if required so by the server
                     !  (i.e. server is a changelog server and/or has synchronized suffixes) 
                -->
                <if expr="server.requiresSynchronization()">
<!--                <if expr="server.requiresSynchronization()">
                  <sequence>          
                    <message>
                      'Instance requires REPLICATION configuration.'
@@ -121,6 +121,7 @@
                    </call>
                  </sequence>
                </if>
-->
              </sequence>
            </iterate>
          </sequence>
@@ -700,7 +701,222 @@
    </sequence>
  </function>
  
  <!-- Enable replication between servers using dsreplication -->
  <function name="enableReplication">
    <function-prolog>
      This function enables replication between servers using dsreplication.
    </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="dsReplicationPort" type="required">
        <function-arg-description>
          Replication port number
        </function-arg-description>
        <function-arg-property name="type" value="Port number" />
      </function-arg-def>
      <function-arg-def name="refInstanceHost"
                        type="optional"
                        default="STAF_REMOTE_HOSTNAME">
        <function-arg-description>
          Reference Directory server hostname or IP address
        </function-arg-description>
        <function-arg-property name="type" value="hostname" />
      </function-arg-def>
      <function-arg-def name="refInstancePort" type="required">
        <function-arg-description>
          Reference Directory server port number
        </function-arg-description>
        <function-arg-property name="type" value="Port number" />
      </function-arg-def>
      <function-arg-def name="refInstanceDn" type="required">
        <function-arg-description>
          Reference server Bind DN
        </function-arg-description>
        <function-arg-property name="type" value="DN" />
      </function-arg-def>
      <function-arg-def name="refInstancePswd" type="required">
        <function-arg-description>
          Reference server Bind password
        </function-arg-description>
        <function-arg-property name="type" value="string" />
      </function-arg-def>
      <function-arg-def name="refReplicationPort" type="required">
        <function-arg-description>
          Reference server Replication port number
        </function-arg-description>
        <function-arg-property name="type" value="Port number" />
      </function-arg-def>
      <function-arg-def name="replicationDnList" type="required">
        <function-arg-description>
          DN of the replicated suffix
        </function-arg-description>
        <function-arg-property name="type" value="DN list" />
      </function-arg-def>
      <function-arg-def name="adminUID"
                                   type="optional"
                                   default="AdminUID">
        <function-arg-description>
          Global Administrator UID
        </function-arg-description>
        <function-arg-property name="type" value="UID" />
      </function-arg-def>
      <function-arg-def name="adminPswd"
                                   type="optional"
                                   default="AdminPswd">
        <function-arg-description>
          Global Administrator password
        </function-arg-description>
        <function-arg-property name="type" value="string" />
      </function-arg-def>
      <function-arg-def name="expectedRC" type="optional" default="0">
        <function-arg-description>
        Expected return code value. Default value is 0
        </function-arg-description>
        <function-arg-property name="type" value="string" />
      </function-arg-def>
    </function-map-args>
    <sequence>
      <!-- Local variables -->
      <script>
        mylocation=location
        STAFCmdParams=''
        STAFCmd=''
        if dsPath:
          dsBinPath='%s/%s' % (dsPath,fileFolder)
          STAFCmd='%s/%s%s' % (dsBinPath,DSREPLICATION,fileExt)
        STAFCmdParamsList=[]
        STAFCmdParamsList.append('enable')
        STAFCmdParamsList.append('-n')
        STAFCmdParamsList.append('-Q')
        if dsInstanceHost:
          STAFCmdParamsList.append('-h %s' % dsInstanceHost)
        if dsInstancePort:
          STAFCmdParamsList.append('-p %s' % dsInstancePort)
        if dsInstanceDn:
          STAFCmdParamsList.append('-D "%s"' % dsInstanceDn)
        if dsInstancePswd:
          STAFCmdParamsList.append('--bindPassword1 "%s"' % dsInstancePswd)
        if dsReplicationPort:
          STAFCmdParamsList.append('-r %s' % dsReplicationPort)
        if refInstanceHost:
          STAFCmdParamsList.append('-O %s' % refInstanceHost)
        if refInstancePort:
          STAFCmdParamsList.append('--port2 %s' % refInstancePort)
        if refInstanceDn:
          STAFCmdParamsList.append('--bindDN2 "%s"' % refInstanceDn)
        if refInstancePswd:
          STAFCmdParamsList.append('--bindPassword2 "%s"' % refInstancePswd)
        if refReplicationPort:
          STAFCmdParamsList.append('-R %s' % refReplicationPort)
        if replicationDnList:
          for dn in replicationDnList:
            STAFCmdParamsList.append('-b "%s"' % dn)
        if adminUID:
          STAFCmdParamsList.append('-I "%s"' % adminUID)
        if adminPswd:
          STAFCmdParamsList.append('-w "%s"' % adminPswd)
        STAFCmdParams=' '.join(STAFCmdParamsList)
      </script>
      <call function="'runCommand'">
        { 'name'      : 'Enable Replication',
          'location'  : location,
          'command'   : STAFCmd,
          'arguments' : STAFCmdParams
        }
      </call>
      <script>
        STAXCode=RC
        STAXReason=STAXResult
      </script>
      <call function="'checktestRC'">
        { 'returncode' : STAXCode,
          'result'     : STAXReason,
          'expected'   : expectedRC
        }
      </call>
      <return>
        STAXReason
      </return>
    </sequence>
  </function>
  
  <function name="readTopology">
    <function-prolog>
opends/tests/functional-tests/testcases/replication/replication_setup.xml
@@ -49,14 +49,14 @@
             'Create DS topology as described in %s' % topologyFile
          </message>
        
      <call function="'createTopology'">
        { 'topologyDescFile' : topologyFile,
          <call function="'createTopology'">
            { 'topologyDescFile' : topologyFile,
              'sharedDataFolder' : 'replication' }
      </call>
          </call>
      
      <call function="'checkRC'">
                { 'returncode' : RC ,
                  'result'     : STAXResult }
          <call function="'checkRC'">
            { 'returncode' : RC ,
              'result'     : STAXResult }
          </call>
          <!-- Setup variables -->
@@ -71,6 +71,7 @@
              
            master = _topologyServerList[0]
            masterHost = master.getHostname()
            masterReplicationServer = master.getChangelogServer()
            masterPath = '%s/%s' % (master.getDir(),OPENDSNAME)
            masterDataDir = '%s/%s' % (master.getDir(),relativeDataDir)
@@ -81,7 +82,52 @@
          <call function="'startServers'">
            [_topologyServerList]
          </call>            
          <iterate var="server" in="consumerList">
            <sequence>
              <!-- Configure replication if required so by the server
              !  (i.e. server is a changelog server and/or has synchronized suffixes)
              -->
              <if expr="server.requiresSynchronization()">
                <sequence>
                  <message>
                    'Instance requires REPLICATION configuration.'
                  </message>
                  <script>
                    replicationServer = server.getChangelogServer()
                    replicatedSuffixList = server.getSynchronizedSuffixList()
                    replicatedDnList = []
                    for suffix in replicatedSuffixList:
                      replicatedDnList.append(suffix.getSuffixDn())
                  </script>
                  <message>
                    'Enable replication for server:\nHost: %s\nLdap port: %s\nReplication port: %s\nReplicated DN list: %s' % (server.getHostname(), server.getPort(), replicationServer.getPort(), replicatedDnList)
                  </message>
                  <call function="'enableReplication'">
                    { 'location'  :  clientHost,
                      'dsPath'  :  clientPath,
                      'dsInstanceHost'  :  server.getHostname(),
                      'dsInstancePort'  :  server.getPort(),
                      'dsInstanceDn'  :  server.getRootDn(),
                      'dsInstancePswd'  :  server.getRootPwd(),
                      'dsReplicationPort'  :  replicationServer.getPort(),
                      'refInstanceHost'  :  masterHost,
                      'refInstancePort'  :  master.getPort(),
                      'refInstanceDn'  :  master.getRootDn(),
                      'refInstancePswd'  :  master.getRootPwd(),
                      'refReplicationPort'  :  masterReplicationServer.getPort(),
                      'replicationDnList'  :  replicatedDnList }
                  </call>
                </sequence>
              </if>
            </sequence>
          </iterate>
        </sequence>
      </block>