From 0e02964d4df506f9337c34f743e3d6c685633aa6 Mon Sep 17 00:00:00 2001
From: ugaston <ugaston@localhost>
Date: Mon, 11 Aug 2008 15:56:31 +0000
Subject: [PATCH] Replication Conflict Test Suite

---
 opends/tests/functional-tests/testcases/replication/replication_setup.xml |  203 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 195 insertions(+), 8 deletions(-)

diff --git a/opends/tests/functional-tests/testcases/replication/replication_setup.xml b/opends/tests/functional-tests/testcases/replication/replication_setup.xml
index 5b8051c..8949f4a 100644
--- a/opends/tests/functional-tests/testcases/replication/replication_setup.xml
+++ b/opends/tests/functional-tests/testcases/replication/replication_setup.xml
@@ -60,6 +60,23 @@
         </function-arg-description>
         <function-arg-property name="type" value="filename"/>
       </function-arg-def>
+      <function-arg-def name="isolateLdapServers" 
+                        type="optional"
+                        default="None">
+        <function-arg-description>
+          Break the cross-reference between Ldap Servers and Replication Servers
+          (i.e. make LS1 point to RS1 exclusively, LS2 to RS2, etc.)
+        </function-arg-description>
+        <function-arg-property name="type" value="boolean"/>          
+      </function-arg-def>
+      <function-arg-def name="enableDebugLogs" 
+                        type="optional"
+                        default="None">
+        <function-arg-description>
+          Enable de debug logs
+        </function-arg-description>
+        <function-arg-property name="type" value="boolean"/>          
+      </function-arg-def>
     </function-map-args>    
     
     <sequence>
@@ -82,12 +99,14 @@
                  
           <call function="'createTopology'">
             { 'topologyDescFile' : topologyFile,
-              'sharedDataFolder' : 'replication' }
+              'sharedDataFolder' : 'replication'
+            }
           </call>  
       
           <call function="'checkRC'">
             { 'returncode' : RC ,
-              'result'     : STAXResult }
+              'result'     : STAXResult
+            }
           </call>
 
           <!-- Setup variables -->
@@ -108,7 +127,9 @@
             synchroSuffix = master.getSynchronizedSuffixList()[0].getSuffixDn()
             masterBackupDir = '%s/replication/master_backup' % masterDataDir
             
-            consumerList = _topologyServerList[1:]              
+            consumerList = _topologyServerList[1:]
+              
+            domainMap = {}
           </script>       
 
           <if expr="dataFile">
@@ -151,8 +172,8 @@
           <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) 
+               !  (i.e. server is a changelog server and/or has synchronized 
+               !  suffixes) 
               -->
               <if expr="server.requiresSynchronization()">
                 <sequence>          
@@ -200,6 +221,75 @@
             </sequence>              
           </iterate>           
 
+
+          <if expr="isolateLdapServers">
+            <!-- Make each Ldap Server point only to its own Replication
+             !   Server.
+             !   This is used by the Conflict testsuite, in order to be able
+             !   to simulate conflict scenarios -->
+            <paralleliterate var="server" in="_topologyServerList">
+              <sequence>
+                <script>
+                  ldapServer = '%s:%s' % (server.getHostname(), 
+                                          server.getPort())
+                </script>
+      
+                <!-- Retrieve replication-domain name -->
+                <call function="'dsconfig'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : '%s/%s' % (server.getDir(),OPENDSNAME),
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'subcommand'     : 'list-replication-domains',
+                    'objectType'     : 'provider-name',
+                    'objectName'     : 'Multimaster Synchronization',
+                    'optionsString'  : '--script-friendly'
+                  }
+                </call>
+                <if expr='RC == 0'>
+                  <script>
+                    replicationDomains = STAXResult[0][1]
+                    for line in replicationDomains.splitlines():
+                      if line.find(synchroSuffix) != -1:
+                        domain = line
+                        domainMap[ldapServer] = domain
+                        break
+                  </script>
+                </if>
+
+                <script>
+                  replicationServer = server.getChangelogServer()
+                  replServer = '%s:%s' % (server.getHostname(),
+                                          replicationServer.getPort())
+                  options = '--domain-name "%s" --set replication-server:%s' \
+                            % (domainMap[ldapServer], replServer)
+                </script>
+                <message>
+                  'Removing references to other replication servers \nfor \
+                  domain: %s \nfrom server: %s \nkeep replication server: %s' \
+                  % (domain, ldapServer, replServer)
+                </message>
+                <!-- Remove peer RS from replicated domain -->
+                <call function="'dsconfig'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : '%s/%s' % (server.getDir(),OPENDSNAME),
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'subcommand'     : 'set-replication-domain-prop',
+                    'objectType'     : 'provider-name',
+                    'objectName'     : 'Multimaster Synchronization',
+                    'optionsString'  : options
+                  }
+                </call>
+              </sequence>
+            </paralleliterate>
+          </if>
+
+
           <if expr="dataFile">
             <sequence>
               <message>
@@ -215,11 +305,108 @@
                   'sourceInstancePort' : master.getPort(),
                   'replicationDnList'  : [synchroSuffix]
                 }
-              </call>                   
+              </call>
+              <if expr="0">
+              <iterate var="server" in="consumerList">
+                <sequence>
+<!--                  <call function="'initializeReplication'">
+                    { 'location'           : clientHost,
+                      'dsPath'             : clientPath,
+                      'dsInstanceHost'     : server.getHostname(),
+                      'dsInstancePort'     : server.getPort(),
+                      'sourceInstanceHost' : masterHost,
+                      'sourceInstancePort' : master.getPort(),
+                      'replicationDnList'  : [synchroSuffix]
+                    }
+                  </call> -->
+
+                  <!-- Search initialisation task to check its status -->
+                  <call function="'ldapSearchWithScript'">
+                    {
+                      'location'       : server.getHostname(),
+                      'dsPath'         : '%s/%s' \
+                                         % (server.getDir(), OPENDSNAME),
+                      'dsInstanceHost' : server.getHostname(),
+                      'dsInstancePort' : server.getPort(),
+                      'dsInstanceDn'   : server.getRootDn(),
+                      'dsInstancePswd' : server.getRootPwd(),
+                      'dsBaseDN'       : 'cn=Tasks',
+                      'dsFilter'       : 'ds-task-initialize-domain-dn=%s' \
+                                         % synchroSuffix
+                    }                
+                  </call>                
+                  <script>
+                    searchRC = STAXResult[0][0]
+                    searchResult = STAXResult[0][1]
+                    resultLength = len(searchResult) > 0
+                  </script>
+                  <if expr="resultLength != 0">
+                    <sequence>
+                      <message>
+                        '++++++++ INITIALISATION TASK for %s:%s ++++++++\n%s' \
+                        % (server.getHostname(), server.getPort(), searchResult)
+                      </message>
+                    </sequence>
+                  </if>
+                </sequence>
+              </iterate>                        
+              </if>
               
             </sequence>              
-          </if>                                                       
-                                                                                                                                    
+          </if>
+            
+          <if expr="enableDebugLogs">
+            <paralleliterate var="server" in="_topologyServerList">
+              <sequence>
+                <!-- Set the debug logger to "enabled" -->
+                <call function="'dsconfigSet'">
+                  { 'location'         : server.getHostname(),
+                    'dsPath'           : '%s/%s' % (server.getDir(),OPENDSNAME),
+                    'dsInstanceHost'   : server.getHostname(),
+                    'dsInstancePort'   : server.getPort(),
+                    'dsInstanceDn'     : server.getRootDn(),
+                    'dsInstancePswd'   : server.getRootPwd(),
+                    'objectName'       : 'log-publisher',
+                    'propertyType'     : 'publisher',
+                    'propertyName'     : 'File-based Debug Logger',
+                    'attributeName'    : 'enabled',
+                    'attributeValue'   : 'true'
+                  }
+                </call>
+                <!-- Set the debug level to "info" -->
+                <call function="'dsconfigSet'">
+                  { 'location'         : server.getHostname(),
+                    'dsPath'           : '%s/%s' % (server.getDir(),OPENDSNAME),
+                    'dsInstanceHost'   : server.getHostname(),
+                    'dsInstancePort'   : server.getPort(),
+                    'dsInstanceDn'     : server.getRootDn(),
+                    'dsInstancePswd'   : server.getRootPwd(),
+                    'objectName'       : 'log-publisher',
+                    'propertyType'     : 'publisher',
+                    'propertyName'     : 'File-based Debug Logger',
+                    'attributeName'    : 'default-debug-level',
+                    'attributeValue'   : 'info'
+                  }
+                </call>
+                <!-- Set the debug logger log file to "logs/errors" -->              
+                <call function="'dsconfigSet'">
+                  { 'location'         : server.getHostname(),
+                    'dsPath'           : '%s/%s' % (server.getDir(),OPENDSNAME),
+                    'dsInstanceHost'   : server.getHostname(),
+                    'dsInstancePort'   : server.getPort(),
+                    'dsInstanceDn'     : server.getRootDn(),
+                    'dsInstancePswd'   : server.getRootPwd(),
+                    'objectName'       : 'log-publisher',
+                    'propertyType'     : 'publisher',
+                    'propertyName'     : 'File-based Debug Logger',
+                    'attributeName'    : 'log-file',
+                    'attributeValue'   : 'logs/errors'
+                  }
+                </call>
+              </sequence>
+            </paralleliterate>
+          </if>
+
         </sequence>
 
       </block>

--
Gitblit v1.10.0