From 67316a5084cfe45b725ceb0608ae0b3412ade74f Mon Sep 17 00:00:00 2001
From: ugaston <ugaston@localhost>
Date: Thu, 13 Sep 2007 17:17:34 +0000
Subject: [PATCH] Introduce new replication configuration procedure

---
 opendj-sdk/opends/tests/functional-tests/testcases/replication/replication_setup.xml |   60 ++++++++++-
 opendj-sdk/opends/tests/functional-tests/shared/functions/topology.xml               |  220 +++++++++++++++++++++++++++++++++++++++++++
 opendj-sdk/opends/tests/functional-tests/shared/functions/environment.xml            |    6 +
 3 files changed, 276 insertions(+), 10 deletions(-)

diff --git a/opendj-sdk/opends/tests/functional-tests/shared/functions/environment.xml b/opendj-sdk/opends/tests/functional-tests/shared/functions/environment.xml
index cb43d88..b45fb63 100755
--- a/opendj-sdk/opends/tests/functional-tests/shared/functions/environment.xml
+++ b/opendj-sdk/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' 
diff --git a/opendj-sdk/opends/tests/functional-tests/shared/functions/topology.xml b/opendj-sdk/opends/tests/functional-tests/shared/functions/topology.xml
index ee5ec82..c279ebf 100755
--- a/opendj-sdk/opends/tests/functional-tests/shared/functions/topology.xml
+++ b/opendj-sdk/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>
diff --git a/opendj-sdk/opends/tests/functional-tests/testcases/replication/replication_setup.xml b/opendj-sdk/opends/tests/functional-tests/testcases/replication/replication_setup.xml
index 1a0d3b3..9ed8ace 100644
--- a/opendj-sdk/opends/tests/functional-tests/testcases/replication/replication_setup.xml
+++ b/opendj-sdk/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>

--
Gitblit v1.10.0