From 2aa8aee407d3ba221e1fd24e143b916b2d0be3c0 Mon Sep 17 00:00:00 2001
From: Gary Williams <gary.williams@forgerock.com>
Date: Wed, 28 Mar 2012 14:02:43 +0000
Subject: [PATCH] refactor replication functional tests to be one test per function

---
 opends/tests/staf-tests/functional-tests/testcases/replication/changelog/changelog.xml | 1532 ++++------------------------------------------------------
 1 files changed, 111 insertions(+), 1,421 deletions(-)

diff --git a/opends/tests/staf-tests/functional-tests/testcases/replication/changelog/changelog.xml b/opends/tests/staf-tests/functional-tests/testcases/replication/changelog/changelog.xml
index a3ef9c5..a718d9e 100644
--- a/opends/tests/staf-tests/functional-tests/testcases/replication/changelog/changelog.xml
+++ b/opends/tests/staf-tests/functional-tests/testcases/replication/changelog/changelog.xml
@@ -7,1454 +7,144 @@
  ! Common Development and Distribution License, Version 1.0 only
  ! (the "License").  You may not use this file except in compliance
  ! with the License.
- !
+ ! 
  ! You can obtain a copy of the license at
- ! trunk/opends/resource/legal-notices/OpenDS.LICENSE
- ! or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ ! trunk/opends/resource/legal-notices/CDDLv1_0.txt
+ ! or http://forgerock.org/license/CDDLv1.0.html.
  ! See the License for the specific language governing permissions
  ! and limitations under the License.
- !
+ ! 
  ! When distributing Covered Code, include this CDDL HEADER in each
  ! file and include the License file at
- ! trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
+ ! trunk/opends/resource/legal-notices/CDDLv1_0.txt.  If applicable,
  ! add the following below this CDDL HEADER, with the fields enclosed
  ! by brackets "[]" replaced with your own identifying information:
  !      Portions Copyright [yyyy] [name of copyright owner]
  !
  ! CDDL HEADER END
  !
- !      Copyright 2008-2009 Sun Microsystems, Inc.
- !      Portions Copyright 2011-2012 ForgeRock AS.
+ !      Copyright 2012 ForgeRock AS.
  ! -->
 <stax>
-    
   <defaultcall function="replication_changelog"/>
-    
-  <function name="replication_changelog">
+  <function name="replication_changelog" scope="local">
     <sequence>
-      <block name="'changelog'">
-        <sequence>
-          <script>
-            if not CurrentTestPath.has_key('group'):
-              CurrentTestPath['group']='replication'
-            CurrentTestPath['suite']=STAXCurrentBlock
-          </script>
-            
-          <call function="'testSuite_Preamble'"/>
-            
-          <!--- Test Suite information
-          #@TestSuiteName       Replication Changelog Tests
-          #@TestSuitePurpose    Test the accessibility of the changelog through
-                                search, export, backup and restore operations.
-                                Also, test other replication features using 
-                                changelog properties.
-          #@TestSuiteID         Changelog Tests
-          #@TestSuiteGroup      Changelog
-          #@TestGroup           Replication
-          #@TestScript          replication_changelog.xml
-          #@TestHTMLLink        http://opends.dev.java.net/
-          -->
-          
-          <import machine="STAF_LOCAL_HOSTNAME"
-                  file="'%s/testcases/replication/replication_setup.xml' 
-                        % (TESTS_DIR)"/>
-          <call function="'replication_setup'">
-            { 'dataFile' : 'Example.ldif',
-              'label'    : 'Replication Changelog' }
-          </call>         
+      <block name="'replication_changelog'">
+        <try>
+          <sequence>
+            <script>
+              CurrentTestPath['group'] = 'replication'        
+              CurrentTestPath['suite'] = 'changelog'
+              
+              _group=CurrentTestPath['group']
+              _groupdir='%s/testcases/%s' % (TESTS_DIR,_group)
+              _label = 'Replication Changelog'
+            </script>
 
+            <!--- Test Suite information
+            #@TestSuiteName       Replication Changelog Tests
+            #@TestSuitePurpose    Verify that the changelog operations are replicated
+                                  correctly between two servers.
+            #@TestSuiteID         Changelog Tests
+            #@TestSuiteGroup      Changelog
+            #@TestGroup           Replication
+            #@TestScript          replication_changelog.xml
+            #@TestHTMLLink        http://www.forgerock.org/
+              -->
+                  
+            <call function="'testSuite_Preamble'"/>
 
-                        
-          <!--- Test Case information
-          #@TestMarker          Replication Changelog Tests
-          #@TestName            Replication: Changelog: Search
-          #@TestID              Search
-          #@TestPurpose         Check replication changelog can be searched and
-                                look up changes
-          #@TestPreamble
-          #@TestSteps           Add entry to server A
-          #@TestSteps           Modify entry on server A
-          #@TestSteps           Search changelogs and check for made changes
-          #@TestPostamble
-          #@TestResult          Success if the corresponding changes can be 
-                                found in the changelog
-          -->               
-          <testcase name="getTestCaseName('Search')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Changelog: Search. \
-                Check replication changelog can be searched and look up changes'
-              </message>
+            <try>
+              <sequence> 
 
-              <!-- Add entry to "master" server -->
-              <script>
-                userDn = 'uid=iabizen.0, ou=People, %s' % synchroSuffix
-                
-                listAttr = []
-                listAttr.append('objectclass:top')
-                listAttr.append('objectclass:organizationalperson')
-                listAttr.append('objectclass:inetorgperson')
-                listAttr.append('objectclass:person')
-                listAttr.append('givenname:Izen.0')
-                listAttr.append('sn:Abizen.0')
-                listAttr.append('cn:Izen Abizen.0')
-                listAttr.append('l:ICNC')
-              </script>
-          
-              <call function="'addAnEntry'">
-                { 'location'       : masterHost,
-                  'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToAdd'        : userDn,
-                  'listAttributes' : listAttr,
-                  'expectedRC'     : 0
-                }
-              </call>
+                <import machine="STAF_LOCAL_HOSTNAME"
+                        file="'%s/testcases/replication/replication_setup.xml' 
+                              % (TESTS_DIR)"/>
+                <call function="'replication_setup'">
+                  { 'dataFile' : 'Example.ldif',
+                    'label'    : _label }
+                </call>
 
-              <!-- Modify entry on one of the servers -->
-              <call function="'modifyAnAttribute'">
-                { 'location'          : masterHost,
-                  'dsPath'            : masterPath,
-                  'dsInstanceHost'    : masterHost,
-                  'dsInstancePort'    : master.getPort(),
-                  'dsInstanceDn'      : master.getRootDn(),
-                  'dsInstancePswd'    : master.getRootPwd(),
-                  'DNToModify'        : userDn,
-                  'attributeName'     : 'l',
-                  'newAttributeValue' : 'GEC',
-                  'changetype'        : 'replace',
-                  'expectedRC'        : 0
-                }
-              </call>                                                                                 
+                <!-- List of Import of Test Functions -->
+                <script>
+                  importList=[]
+                  importList.append('changelog/changelog_tests')
+                </script>
 
-              <!-- Let some time for the change to propagate -->
-              <call function="'Sleep'">
-                { 'sleepForMilliSeconds' :  2000 }
-              </call>
+                <!-- Import the files for this test suite -->
+                <iterate var="_import" in="importList">
+                  <import machine="STAF_LOCAL_HOSTNAME"
+                    file="'%s/%s.xml' % (_groupdir,_import)"/>
+                </iterate>                                                                       
+
+                <!-- Specific to replication tests -->
+                <script>
+                  msg1 = 'Replication: Changelog:'
+                </script>
+                                                    
+                <!-- List of Test Cases -->
+                <script>
+                  testsList=[]
+                  testsList.append('replication_changelog_001')
+                  testsList.append('replication_changelog_002')
+                  testsList.append('replication_changelog_003')
+                  testsList.append('replication_changelog_004')
+                  #OOS: testsList.append('replication_changelog_005')
+                  testsList.append('replication_changelog_006')
+                </script>
+
+                <!-- Execute the Tests -->
+                <iterate var="__test" in="testsList">
+                  <sequence>
+                    <call function="'%s' % (__test)" />
+                  </sequence>
+                </iterate>                
                                 
-              <!-- Search changelog in the various replication servers -->                                                           
-              <paralleliterate var="server" 
-                               in="_topologyServerList" 
-                               indexvar="i">
-                <sequence>                    
-                  <script>
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
+              </sequence>
 
-                    replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
-                  </script>
-                    
-                  <!-- Search for entry add -->
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : replServer.getHostname(),
-                      'dsPath'           : replServerPath,
-                      'dsInstanceHost'   : replServer.getHostname(),
-                      'dsInstancePort'   : replServer.getPort(),
-                      'dsInstanceDn'     : replServer.getRootDn(),
-                      'dsInstancePswd'   : replServer.getRootPwd(),
-                      'dsBaseDN'         : 'dc=replicationChanges',
-                      'dsFilter'         : 'uid=iabizen.0',
-                      'dsAttributes'     : 'dn'
-                    }                
-                  </call>
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <!-- expect entry returned => len(searchResult) > 0 
-                    =====> resultLength = 1 -->
-                  <call function="'checktestRC'">
-                    { 'returncode' : resultLength ,
-                      'result'     : searchResult ,
-                      'expected'   : 1
-                    }
-                  </call>
-
-                  <!-- Search for entry modify -->
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : replServer.getHostname(),
-                      'dsPath'           : replServerPath,
-                      'dsInstanceHost'   : replServer.getHostname(),
-                      'dsInstancePort'   : replServer.getPort(),
-                      'dsInstanceDn'     : replServer.getRootDn(),
-                      'dsInstancePswd'   : replServer.getRootPwd(),
-                      'dsBaseDN'         : 'dc=replicationChanges',
-                      'dsFilter'         : 'l=GEC',
-                      'dsAttributes'     : 'dn'
-                    }                
-                  </call>
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <!-- expect entry returned => len(searchResult) > 0 
-                    =====> resultLength = 1 -->
-                  <call function="'checktestRC'">
-                    { 'returncode' : resultLength ,
-                      'result'     : searchResult ,
-                      'expected'   : 1
-                    }
-                  </call>
-                                        
-                </sequence>                  
-              </paralleliterate>
-                                        
-                
-              <!-- Verify the synchronization of the trees among the servers in
-                the topology -->          
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, master, consumerList, synchroSuffix ]
-              </call> 
-                                
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>                     
-                                
-
-                                                                                    
-          <!--- Test Case information
-          #@TestMarker          Replication Changelog Tests
-          #@TestName            Replication: Changelog: Export (on-line)
-          #@TestID              Export (on-line)
-          #@TestPurpose         Check replication changelog can be exported
-                                on-line and look up changes
-          #@TestPreamble
-          #@TestSteps           Add entry to server A
-          #@TestSteps           Export every changelog to ldif file              
-          #@TestSteps           Check for added entry in each exported changelog
-                                file
-          #@TestPostamble       
-          #@TestResult          Success if the corresponding change can be found
-                                in the exported changelog files
-          -->               
-          <testcase name="getTestCaseName('Export (on-line)')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Changelog: Export (on-line). \
-                Check replication changelog can be exported on-line and look \
-                up changes'
-              </message>
-
-              <!-- Add entry to "master" server -->
-              <script>
-                userDn = 'uid=iabizen.2, ou=People, %s' % synchroSuffix
-                
-                listAttr = []
-                listAttr.append('objectclass:top')
-                listAttr.append('objectclass:organizationalperson')
-                listAttr.append('objectclass:inetorgperson')
-                listAttr.append('objectclass:person')
-                listAttr.append('givenname:Izen.2')
-                listAttr.append('sn:Abizen.2')
-                listAttr.append('cn:Izen Abizen.2')
-              </script>
-          
-              <call function="'addAnEntry'">
-                { 'location'       : masterHost,
-                  'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToAdd'        : userDn,
-                  'listAttributes' : listAttr,
-                  'expectedRC'     : 0
-                }
-              </call>                                          
-                                              
-              <!-- Let some time for the change to propagate -->
-              <call function="'Sleep'">
-                { 'sleepForMilliSeconds' :  2000 }
-              </call>
-                              
-              <!-- Export changelog in the various replication servers, then
-                check for added entry in the exported files -->                                                           
-              <paralleliterate var="server" 
-                               in="_topologyServerList" 
-                               indexvar="i">
+              <catch exception="'STAFException.TestSuite.SetupException'">
                 <sequence>
-                    
-                  <script>
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
+                  <message log="1" level="'fatal'">
+                    'Setup of test suite failed.'
+                  </message>
+                  <rethrow/>
+                </sequence>
+              </catch>
+  
+              <finally>
+                <message>'Test Cases Completed.'</message>
+              </finally>
 
-                    replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
+            </try>
 
-                    replServerBackupDir = '%s' % replServer.getTmpDir()
-
-                  </script>
-
-                  <!-- Export changelog data from server -->
-                  <call function="'exportLdifWithScript'">
-                    { 'location'       : replServer.getHostname(),
-                      'dsPath'         : replServerPath,
-                      'dsInstanceHost' : replServer.getHostname(),
-                      'dsInstanceAdminPort' : replServer.getAdminPort(),
-                      'dsInstanceDn'   : replServer.getRootDn(),
-                      'dsInstancePswd' : replServer.getRootPwd(),
-                      'ldifFile'       : '%s/replication/changelog_export_online.ldif' \
-                                         % replServerBackupDir,
-                      'backEnd'        : 'replicationChanges'
-                    }
-                  </call>
-
-                  <!-- Check for the added entry inside the exported file -->
-                  <call function="'grep'">
-                    {
-                      'location'   : replServer.getHostname(),
-                      'filename'   : '%s/replication/changelog_export_online.ldif' \
-                                         % replServerBackupDir,
-                      'testString' : 'uid=iabizen.2'
-                    }
-                  </call>
-                    
-                </sequence>                  
-              </paralleliterate>
-                                                
-              <!-- Verify the synchronization of the trees among the servers in
-                the topology -->          
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, master, consumerList, synchroSuffix ]
-              </call> 
-                                
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>                     
+          </sequence>
           
+          <finally>
+            <sequence>
+              <!-- Test Suite Cleanup -->
+              <message>'Finally: Replication Cleanup.'</message>
+              <try>
+                <sequence>
+                  <import machine="STAF_LOCAL_HOSTNAME"
+                    file="'%s/testcases/replication/replication_cleanup.xml' 
+                          % (TESTS_DIR)"/>
+                  <call function="'replication_cleanup'">
+                    { 'label'    : _label }
+                  </call>
+              </sequence>
+              <catch exception="'STAFException'">
+                <sequence>
+                  <message log="1" level="'fatal'">'Cleanup of test suite failed.'</message>
+                </sequence>
+              </catch>
+              <finally>
+                <call function="'testSuite_Postamble'"/>
+              </finally>
+              </try>
+            </sequence>
+          </finally>
  
-
-          <!--- Test Case information
-          #@TestMarker          Replication Changelog Tests
-          #@TestName            Replication: Changelog: 
-                                Backup-restore (off-line)
-          #@TestID              Backup-restore (off-line)
-          #@TestPurpose         Check replication changelog can be backuped and
-                                restored off-line
-          #@TestPreamble        Backup server suffix
-          #@TestSteps           Add entry A to server
-          #@TestSteps           Stop servers
-          #@TestSteps           Backup every changelog
-          #@TestSteps           Start servers
-          #@TestSteps           Add entry B to server
-          #@TestSteps           Stop servers
-          #@TestSteps           Restore server suffix (without entries A and B)
-          #@TestSteps           Restore every changelog
-          #@TestSteps           Start servers
-          #@TestSteps           Check for added entry A in changelog and server
-          #@TestSteps           Check for added entry B in changelog and server
-          #@TestPostamble       
-          #@TestResult          Success if the search for entry A succeeds and
-                                the search for entry B fails
-          -->               
-          <testcase name="getTestCaseName('Backup-restore (off-line)')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Changelog: Backup-restore (off-line). \
-                Check replication changelog can be backed up and restored \
-                off-line'
-              </message>
-
-              <!-- Backup "master" server -->
-              <message>
-                '+++++ binary copy off-line: back-up server %s:%s' \
-                % (masterHost, master.getPort())
-              </message>
-              <call function="'backup'">
-                { 'location'  : masterHost,
-                  'dsPath'    : masterPath,
-                  'backupDir' : '%s/replication/master_backup' % masterBackupDir
-                }
-              </call>
-
-              <!-- Add entry A to "master" server -->
-              <script>
-                userDnA = 'uid=iabizen.A, ou=People, %s' % synchroSuffix
-                
-                listAttr = []
-                listAttr.append('objectclass:top')
-                listAttr.append('objectclass:organizationalperson')
-                listAttr.append('objectclass:inetorgperson')
-                listAttr.append('objectclass:person')
-                listAttr.append('givenname:Izen.A')
-                listAttr.append('sn:Abizen.A')
-                listAttr.append('cn:Izen Abizen.A')
-              </script>
-          
-              <call function="'addAnEntry'">
-                { 'location'       : masterHost,
-                  'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToAdd'        : userDnA,
-                  'listAttributes' : listAttr,
-                  'expectedRC'     : 0
-                }
-              </call>                                          
-
-              <!-- Let some time for the change to propagate -->
-              <call function="'Sleep'">
-                { 'sleepForMilliSeconds' :  2000 }
-              </call>
-                                
-              <!-- Stop the servers in the topology -->
-              <script>
-                if globalSplitServers:
-                  serverList = _topologyReplServerList
-                else:
-                  serverList = _topologyServerList
-              </script>
-              <call function="'stopServers'">
-                [serverList]
-              </call>
-                                              
-              <!-- Backup changelog in the various replication servers -->                                                           
-              <paralleliterate var="server" 
-                               in="_topologyServerList" 
-                               indexvar="i">
-                <sequence>                    
-                  <script>
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
-
-                    replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
-                    replServerDataDir = '%s' % replServer.getDataDir()
-                    replServerBackupDir = '%s' % replServer.getTmpDir()           
-                  </script>
-
-                  <call function="'backup'">
-                    { 'location'  : replServer.getHostname(),
-                      'dsPath'    : replServerPath,
-                      'backupDir' : '%s/replication/changelog_backup' \
-                                         % replServerBackupDir,
-                      'backEnd'   : 'replicationChanges'
-                    }
-                  </call>                    
-                </sequence>                  
-              </paralleliterate>
-                                        
-              <!-- Start the servers in the topology -->
-              <script>
-                if globalSplitServers:
-                  serverList = _topologyReplServerList
-                else:
-                  serverList = _topologyServerList
-              </script>
-              <call function="'startServers'">
-                [serverList]
-              </call>                
-
-              <!-- Add entry B to "master" server -->
-              <script>
-                userDnB = 'uid=iabizen.B, ou=People, %s' % synchroSuffix
-                
-                listAttr = []
-                listAttr.append('objectclass:top')
-                listAttr.append('objectclass:organizationalperson')
-                listAttr.append('objectclass:inetorgperson')
-                listAttr.append('objectclass:person')
-                listAttr.append('givenname:Izen.B')
-                listAttr.append('sn:Abizen.B')
-                listAttr.append('cn:Izen Abizen.B')
-              </script>
-          
-              <call function="'addAnEntry'">
-                { 'location'       : masterHost,
-                  'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToAdd'        : userDnB,
-                  'listAttributes' : listAttr,
-                  'expectedRC'     : 0
-                }
-              </call>                                          
-
-              <!-- Let some time for the change to propagate -->
-              <call function="'Sleep'">
-                { 'sleepForMilliSeconds' :  2000 }
-              </call>
-                                
-              <!-- Stop the servers in the topology -->
-              <call function="'stopServers'">
-                [_splitServerList]
-              </call>
-                                              
-
-              <!-- Restore master_backup in every server, then restore 
-                changelog_backup in the various replication servers -->                                                           
-              <paralleliterate var="server" 
-                               in="_topologyServerList" 
-                               indexvar="i">
-                <sequence>
-                    
-                  <script>
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
-
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                    
-                    replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
-
-                    serverBackupDir = '%s' % server.getTmpDir()
-                    replServerDataDir = '%s' % replServer.getDataDir()
-                    replServerBackupDir = '%s' % replServer.getTmpDir()     
-                  </script>
-
-                  <!-- Restore master_backup -->  
-                  <if expr="i != 0">
-                    <!-- _topologyServerList[0] corresponds to "master", so
-                      no need to copy the files for that case -->
-                    <sequence>
-                      <!-- TODO: check what schematokens.dat files are? -->
-                      <if expr="os.path.exists
-                                ('%s/config/schematokens.dat' % dsPath)" >
-                        <call function="'copyFile'">
-                          { 'location'   : masterHost,
-                            'remotehost' : server.getHostname(),
-                            'srcfile'    : '%s/config/schematokens.dat' \
-                                           % masterPath,
-                            'destfile'   : '%s/config/schematokens.dat' \
-                                           % serverPath
-                          }
-                        </call>
-                      </if>
-                      <call function="'CopyFolderByExtension'">
-                        { 'location'   : masterHost,
-                          'remotehost' : server.getHostname(),
-                          'srcfolder'  : masterBackupDir,
-                          'destfolder' : '%s/replication/master_backup' \
-                                         % serverBackupDir,
-                          'extension'  : '*'
-                        }
-                      </call>                      
-                    </sequence>
-                  </if>                    
-                  <call function="'restore'">
-                    { 'location'  : server.getHostname(),
-                      'dsPath'    : serverPath,
-                      'backupDir' : '%s/replication/master_backup' \
-                                    % serverBackupDir
-                    }
-                  </call>                    
-                                                            
-                  <!-- Restore changelog_backup -->
-                  <call function="'restore'">
-                    { 'location'  : replServer.getHostname(),
-                      'dsPath'    : replServerPath,
-                      'backupDir' : '%s/replication/changelog_backup' \
-                                         % replServerBackupDir
-                    }
-                  </call>                    
-                </sequence>                  
-              </paralleliterate>
-                                        
-              <!-- Start the servers in the topology -->
-              <call function="'startServers'">
-                [_splitServerList]
-              </call>                                
-
-                
-                
-              <!-- Search synchroSuffix and changelog in the various servers,
-                looking for entries A (should be there) and B (shouldn't be) -->                                                           
-              <paralleliterate var="server" 
-                               in="_topologyServerList" 
-                               indexvar="i">
-                <sequence>
-                  <script>
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
-
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                    replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)      
-                  </script>
-
-                  <!-- Search for entry A (should be there) -->
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : server.getHostname(),
-                      'dsPath'           : serverPath,
-                      'dsInstanceHost'   : server.getHostname(),
-                      'dsInstancePort'   : server.getPort(),
-                      'dsInstanceDn'     : server.getRootDn(),
-                      'dsInstancePswd'   : server.getRootPwd(),
-                      'dsBaseDN'         : userDnA,
-                      'dsFilter'         : 'objectclass=*',
-                      'dsAttributes'     : 'dn',
-                      'expectedRC'       : 0
-                    }                
-                  </call>                                                        
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : replServer.getHostname(),
-                      'dsPath'           : replServerPath,
-                      'dsInstanceHost'   : replServer.getHostname(),
-                      'dsInstancePort'   : replServer.getPort(),
-                      'dsInstanceDn'     : replServer.getRootDn(),
-                      'dsInstancePswd'   : replServer.getRootPwd(),
-                      'dsBaseDN'         : 'dc=replicationChanges',
-                      'dsFilter'         : 'uid=iabizen.A',
-                      'dsAttributes'     : 'dn',
-                      'expectedRC'       : 0
-                    }                
-                  </call>
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <!-- expect entry returned => len(searchResult) > 0 
-                    =====> resultLength = 1 -->
-                  <call function="'checktestRC'">
-                    { 'returncode' : resultLength ,
-                      'result'     : searchResult ,
-                      'expected'   : 1
-                    }
-                  </call>        
-                    
-                  <!-- Search for entry B (should NOT be there) -->
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : server.getHostname(),
-                      'dsPath'           : serverPath,
-                      'dsInstanceHost'   : server.getHostname(),
-                      'dsInstancePort'   : server.getPort(),
-                      'dsInstanceDn'     : server.getRootDn(),
-                      'dsInstancePswd'   : server.getRootPwd(),
-                      'dsBaseDN'         : userDnB,
-                      'dsFilter'         : 'objectclass=*',
-                      'dsAttributes'     : 'dn',
-                      'expectedRC'       : 32
-                    }                
-                  </call>                                                        
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : replServer.getHostname(),
-                      'dsPath'           : replServerPath,
-                      'dsInstanceHost'   : replServer.getHostname(),
-                      'dsInstancePort'   : replServer.getPort(),
-                      'dsInstanceDn'     : replServer.getRootDn(),
-                      'dsInstancePswd'   : replServer.getRootPwd(),
-                      'dsBaseDN'         : 'dc=replicationChanges',
-                      'dsFilter'         : 'uid=iabizen.B',
-                      'dsAttributes'     : 'dn',
-                      'expectedRC'       : 0
-                    }                
-                  </call>
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <!-- expect NO entry returned => len(searchResult) = 0 
-                    =====> resultLength = 0 -->
-                  <call function="'checktestRC'">
-                    { 'returncode' : resultLength ,
-                      'result'     : searchResult ,
-                      'expected'   : 0
-                    }
-                  </call>                                           
-                                    
-                </sequence>                  
-              </paralleliterate>
-                                                    
-                                                                
-              <!-- Verify the synchronization of the trees among the servers in
-                the topology -->          
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, master, consumerList, synchroSuffix ]
-              </call> 
-                                
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>                     
-                      
-                                  
-
-<if expr="0">
-  <!-- Due to the impossibility to ensure all the restore operations (of both
-       db and changelogs) are done at the very same time, there's no controlling
-       the output of this testcase.
-  -->
-          <!--- Test Case information
-          #@TestMarker          Replication Changelog Tests
-          #@TestName            Replication: Changelog: Backup-restore (on-line)
-          #@TestID              Backup-restore (on-line)
-          #@TestPurpose         Check replication changelog can be backuped and
-                                restored on-line
-          #@TestPreamble        Backup server suffix (done at the beginning of
-                                the test suite)
-          #@TestSteps           Add entry AA to server
-          #@TestSteps           Backup every changelog
-          #@TestSteps           Add entry BB to server
-          #@TestSteps           Restore every changelog              
-          #@TestSteps           Restore server suffix (without entries AA and BB)
-          #@TestSteps           Check for added entry AA in changelog and server
-          #@TestSteps           Check for added entry BB in changelog and server
-          #@TestPostamble       
-          #@TestResult          Success if the search for entry AA succeeds and
-                                the search for entry BB fails
-          -->               
-          <testcase name="getTestCaseName('Backup-restore (on-line)')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Changelog: Backup-restore (on-line). \
-                Check replication changelog can be backuped and restored \
-                on-line'
-              </message>
-
-              <!-- Add entry AA to "master" server -->
-              <script>
-                userDnAA = 'uid=iabizen.AA, ou=People, %s' % synchroSuffix
-                
-                listAttr = []
-                listAttr.append('objectclass:top')
-                listAttr.append('objectclass:organizationalperson')
-                listAttr.append('objectclass:inetorgperson')
-                listAttr.append('objectclass:person')
-                listAttr.append('givenname:Izen.AA')
-                listAttr.append('sn:Abizen.AA')
-                listAttr.append('cn:Izen Abizen.AA')
-              </script>
-          
-              <call function="'addAnEntry'">
-                { 'location'       : masterHost,
-                  'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToAdd'        : userDnAA,
-                  'listAttributes' : listAttr,
-                  'expectedRC'     : 0
-                }
-              </call>                                          
-
-              <!-- Let some time for the change to propagate -->
-              <call function="'Sleep'">
-                { 'sleepForMilliSeconds' :  2000 }
-              </call>                
-                
-              <!-- Backup changelog in the various replication servers -->
-              <paralleliterate var="server" 
-                               in="_topologyServerList" 
-                               indexvar="i">
-                <sequence>                    
-                  <script>
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
-
-                    replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
-
-                    replServerBackupDir = '%s' % replServer.getTmpDir()                 
-                  </script>
-
-                  <call function="'backupTask'">
-                    { 'location'       : replServer.getHostname(),
-                      'dsPath'         : replServerPath,
-                      'dsInstanceHost' : replServer.getHostname(),
-                      'dsInstancePort' : replServer.getPort(),
-                      'dsInstanceDn'   : replServer.getRootDn(),
-                      'dsInstancePswd' : replServer.getRootPwd(),
-                      'taskID'         : 'changelog backup task',
-                      'backupDir'      : '%s/replication/changelog_backup_online' \
-                                          % replServerBackupDir,
-                      'backEnd'        : 'replicationChanges'
-                    }
-                  </call>
-                </sequence>                  
-              </paralleliterate>
-
-
-              <!-- Add entry BB to "master" server -->
-              <script>
-                userDnBB = 'uid=iabizen.BB, ou=People, %s' % synchroSuffix
-                
-                listAttr = []
-                listAttr.append('objectclass:top')
-                listAttr.append('objectclass:organizationalperson')
-                listAttr.append('objectclass:inetorgperson')
-                listAttr.append('objectclass:person')
-                listAttr.append('givenname:Izen.BB')
-                listAttr.append('sn:Abizen.BB')
-                listAttr.append('cn:Izen Abizen.BB')
-              </script>
-          
-              <call function="'addAnEntry'">
-                { 'location'       : masterHost,
-                  'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToAdd'        : userDnBB,
-                  'listAttributes' : listAttr,
-                  'expectedRC'     : 0
-                }
-              </call>                                          
-
-              <!-- Let some time for the change to propagate -->
-              <call function="'Sleep'">
-                { 'sleepForMilliSeconds' :  2000 }
-              </call>                                                              
-
-              <!-- Restore changelog_backup_online in the various replication 
-                servers, then restore master_backup in every server -->
-              <paralleliterate var="server" 
-                               in="_topologyServerList" 
-                               indexvar="i">
-                <sequence>
-                    
-                  <script>
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
-
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                    
-                    replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
-
-                    serverBackupDir = '%s' % server.getTmpDir()
-                    replServerBackupDir = '%s' % replServer.getTmpDir()
-                   
-                  </script>
-
-                  <!-- Restore changelog_backup -->
-                  <call function="'restoreTask'">
-                    { 'location'       : replServer.getHostname(),
-                      'dsPath'         : replServerPath,
-                      'dsInstanceHost' : replServer.getHostname(),
-                      'dsInstancePort' : replServer.getPort(),
-                      'dsInstanceDn'   : replServer.getRootDn(),
-                      'dsInstancePswd' : replServer.getRootPwd(),
-                      'taskID'         : 'changelog restore task',
-                      'backupDir'      : '%s/replication/changelog_backup_online' \
-                                          % replServerBackupDir
-                    }
-                  </call>                    
-                                        
-                  <!-- Restore master_backup -->  
-                  <if expr="i != 0">
-                    <!-- _topologyServerList[0] corresponds to "master", so
-                      no need to copy the files for that case -->
-                    <sequence>
-                      <if expr="os.path.exists
-                                ('%s/config/schematokens.dat' % dsPath)" >
-                        <call function="'copyFile'">
-                          { 'location'   : masterHost,
-                            'remotehost' : server.getHostname(),
-                            'srcfile'    : '%s/config/schematokens.dat' \
-                                           % masterPath,
-                            'destfile'   : '%s/config/schematokens.dat' \
-                                           % serverPath
-                          }
-                        </call>
-                      </if>
-                      <call function="'CopyFolderByExtension'">
-                        { 'location'   : masterHost,
-                          'remotehost' : server.getHostname(),
-                          'srcfolder'  : masterBackupDir,
-                          'destfolder' : '%s/replication/master_backup' \
-                                         % serverBackupDir,
-                          'extension'  : '*'
-                        }
-                      </call>                      
-                    </sequence>
-                  </if>                    
-                  <call function="'restoreTask'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : serverPath,
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'taskID'         : 'restore task',
-                      'backupDir'      : '%s/replication/master_backup' \
-                                         % serverBackupDir
-                    }
-                  </call>                             
-                                                            
-                </sequence>                  
-              </paralleliterate>
-                
-                
-              <!-- Search synchroSuffix and changelog in the various servers,
-                looking for entries AA (should be there) and BB (shouldn't be) 
-                -->                                                           
-              <paralleliterate var="server" 
-                               in="_topologyServerList" 
-                               indexvar="i">
-                <sequence>                    
-                  <script>
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
-
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                    replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
-                  </script>
-
-
-                  <!-- Search for entry AA (should be there) -->
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : server.getHostname(),
-                      'dsPath'           : serverPath,
-                      'dsInstanceHost'   : server.getHostname(),
-                      'dsInstancePort'   : server.getPort(),
-                      'dsInstanceDn'     : server.getRootDn(),
-                      'dsInstancePswd'   : server.getRootPwd(),
-                      'dsBaseDN'         : userDnAA,
-                      'dsFilter'         : 'objectclass=*',
-                      'dsAttributes'     : 'dn',
-                      'expectedRC'       : 0
-                    }                
-                  </call>                                                        
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : replServer.getHostname(),
-                      'dsPath'           : replServerPath,
-                      'dsInstanceHost'   : replServer.getHostname(),
-                      'dsInstancePort'   : replServer.getPort(),
-                      'dsInstanceDn'     : replServer.getRootDn(),
-                      'dsInstancePswd'   : replServer.getRootPwd(),
-                      'dsBaseDN'         : 'dc=replicationChanges',
-                      'dsFilter'         : 'uid=iabizen.AA',
-                      'dsAttributes'     : 'dn',
-                      'expectedRC'       : 0
-                    }                
-                  </call>
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <!-- expect entry returned => len(searchResult) > 0 
-                    =====> resultLength = 1 -->
-                  <call function="'checktestRC'">
-                    { 'returncode' : resultLength ,
-                      'result'     : searchResult ,
-                      'expected'   : 1
-                    }
-                  </call>        
-                    
-                  <!-- Search for entry BB (should NOT be there) -->
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : server.getHostname(),
-                      'dsPath'           : serverPath,
-                      'dsInstanceHost'   : server.getHostname(),
-                      'dsInstancePort'   : server.getPort(),
-                      'dsInstanceDn'     : server.getRootDn(),
-                      'dsInstancePswd'   : server.getRootPwd(),
-                      'dsBaseDN'         : userDnBB,
-                      'dsFilter'         : 'objectclass=*',
-                      'dsAttributes'     : 'dn',
-                      'expectedRC'       : 32
-                    }                
-                  </call>                                                        
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : replServer.getHostname(),
-                      'dsPath'           : replServerPath,
-                      'dsInstanceHost'   : replServer.getHostname(),
-                      'dsInstancePort'   : replServer.getPort(),
-                      'dsInstanceDn'     : replServer.getRootDn(),
-                      'dsInstancePswd'   : replServer.getRootPwd(),
-                      'dsBaseDN'         : 'dc=replicationChanges',
-                      'dsFilter'         : 'uid=iabizen.BB',
-                      'dsAttributes'     : 'dn',
-                      'expectedRC'       : 0
-                    }                
-                  </call>
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <!-- expect NO entry returned => len(searchResult) = 0 
-                    =====> resultLength = 0 -->
-                  <call function="'checktestRC'">
-                    { 'returncode' : resultLength ,
-                      'result'     : searchResult ,
-                      'expected'   : 0
-                    }
-                  </call>                                           
-                                    
-                </sequence>                  
-              </paralleliterate>
-                                                    
-                                                                
-              <!-- Verify the synchronization of the trees among the servers in
-                the topology -->          
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, master, consumerList, synchroSuffix ]
-              </call> 
-                                
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>                     
-</if>    
-
-          <!--- Test Case information
-          #@TestMarker          Replication Changelog Tests
-          #@TestName            Replication: Changelog: Changelog Reset
-          #@TestID              Changelog Reset
-          #@TestPurpose         Check replication changelog is reset by 
-                                dsreplication pre/post-external-initialize
-          #@TestPreamble
-          #@TestSteps           Add entry to server A
-          #@TestSteps           Search changelogs and check for made change
-          #@TestSteps           Reset changelog (call pre/post-external init)
-          #@TestSteps           Search changelogs and check for made change
-          #@TestPostamble
-          #@TestResult          Success if the corresponding change can be found
-                                in the changelog prior to the reset but not any
-                                more after the reset
-          -->               
-          <testcase name="getTestCaseName('Changelog Reset')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Changelog: Changelog Reset. \
-                Check replication changelog is reset by \
-                dsreplication pre/post-external-initialize'
-              </message>
-
-              <!-- Add entry to "master" server -->
-              <script>
-                userDn = 'uid=iabizen.3, ou=People, %s' % synchroSuffix
-                
-                listAttr = []
-                listAttr.append('objectclass:top')
-                listAttr.append('objectclass:organizationalperson')
-                listAttr.append('objectclass:inetorgperson')
-                listAttr.append('objectclass:person')
-                listAttr.append('givenname:Izen.3')
-                listAttr.append('sn:Abizen.3')
-                listAttr.append('cn:Izen Abizen.3')
-              </script>
-          
-              <call function="'addAnEntry'">
-                { 'location'       : masterHost,
-                  'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToAdd'        : userDn,
-                  'listAttributes' : listAttr,
-                  'expectedRC'     : 0
-                }
-              </call>
-                                          
-              <!-- Let some time for the change to propagate -->
-              <call function="'Sleep'">
-                { 'sleepForMilliSeconds' :  2000 }
-              </call>
-                
-              <!-- Search changelog in the various replication servers -->                                                           
-              <paralleliterate var="server" 
-                               in="_topologyServerList" 
-                               indexvar="i">
-                <sequence>
-                    
-                  <script>
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
-
-                    replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
-                  </script>
-
-                    
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : replServer.getHostname(),
-                      'dsPath'           : replServerPath,
-                      'dsInstanceHost'   : replServer.getHostname(),
-                      'dsInstancePort'   : replServer.getPort(),
-                      'dsInstanceDn'     : replServer.getRootDn(),
-                      'dsInstancePswd'   : replServer.getRootPwd(),
-                      'dsBaseDN'         : 'dc=replicationChanges' ,
-                      'dsFilter'         : 'uid=iabizen.3',
-                      'dsAttributes'     : 'dn'
-                    }                
-                  </call>
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <!-- expect entry returned => len(searchResult) > 0 
-                    =====> resultLength = 1 -->
-                  <call function="'checktestRC'">
-                    { 'returncode' : resultLength ,
-                      'result'     : searchResult ,
-                      'expected'   : 1
-                    }
-                  </call>                                                             
-                    
-                </sequence>                  
-              </paralleliterate>
-
-
-              <!-- Reset the changelog (call pre/post-external-init) -->
-              <call function="'resetReplicationData'">
-                { 'location'                : clientHost,
-                  'dsPath'                  : clientPath,
-                  'sourceInstanceHost'      : masterHost,
-                  'sourceInstancePort'      : master.getPort(),                 
-                  'sourceInstanceAdminPort' : master.getAdminPort(),
-                  'sourceInstanceDn'        : master.getRootDn(),
-                  'sourceInstancePswd'      : master.getRootPwd(),
-                  'backupDir'               : masterBackupDir,
-                  'suffixDn'                : synchroSuffix
-                }
-              </call>                
-
-              <!-- Search changelog in the various replication servers -->                                                           
-              <paralleliterate var="server" 
-                               in="_topologyServerList" 
-                               indexvar="i">
-                <sequence>
-                  <script>
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
-
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                    replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
-                  </script>
-                                                                         
-                  <!-- Search for entry in the suffix (should NOT be there) -->
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : server.getHostname(),
-                      'dsPath'           : serverPath,
-                      'dsInstanceHost'   : server.getHostname(),
-                      'dsInstancePort'   : server.getPort(),
-                      'dsInstanceDn'     : server.getRootDn(),
-                      'dsInstancePswd'   : server.getRootPwd(),
-                      'dsBaseDN'         : userDn,
-                      'dsFilter'         : 'objectclass=*',
-                      'dsAttributes'     : 'dn',
-                      'expectedRC'       : 32
-                    }                
-                  </call>
-                  <!-- Search for corresponding change in the changelog
-                    (should NOT be there) -->                                               
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : replServer.getHostname(),
-                      'dsPath'           : replServerPath,
-                      'dsInstanceHost'   : replServer.getHostname(),
-                      'dsInstancePort'   : replServer.getPort(),
-                      'dsInstanceDn'     : replServer.getRootDn(),
-                      'dsInstancePswd'   : replServer.getRootPwd(),
-                      'dsBaseDN'         : 'dc=replicationChanges',
-                      'dsFilter'         : 'uid=iabizen.3',
-                      'dsAttributes'     : 'dn',
-                      'expectedRC'       : 0
-                    }                
-                  </call>
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <!-- expect NO entry returned => len(searchResult) = 0 
-                    =====> resultLength = 0 -->
-                  <call function="'checktestRC'">
-                    { 'returncode' : resultLength ,
-                      'result'     : searchResult ,
-                      'expected'   : 0
-                    }
-                  </call>                                           
-                               
-                </sequence>                  
-              </paralleliterate>
-                                                
-              <!-- Verify the synchronization of the trees among the servers in
-                the topology -->          
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, master, consumerList, synchroSuffix ]
-              </call> 
-                                
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>                     
-                      
-
-
-          <!--- Test Case information
-          #@TestMarker          Replication Changelog Tests
-          #@TestName            Replication: Changelog: Changelog Purge
-          #@TestID              Changelog Purge
-          #@TestPurpose         Check replication changelog is purged after the
-                                purge delay specified in the conf expires
-          #@TestPreamble
-          #@TestSteps           Set purge delay to 20 seconds on server A
-          #@TestSteps           Add entry X to server A
-          #@TestSteps           Add entry Y to server A
-          #@TestSteps           Search changelogs and check for made change
-          #@TestSteps           Let purge delay expire (sleep for 30 seconds)
-          #@TestSteps           Search changelogs and check for made change
-          #@TestPostamble
-          #@TestResult          Success if the corresponding change for entry X
-                                can be found in every changelog before the purge
-                                delay expires but not any more on server A's 
-                                after the delay expires (entry Y will still be
-                                there though since the last change is always
-                                kept)
-          -->               
-          <testcase name="getTestCaseName('Changelog Purge')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Changelog: Changelog Purge. \
-                Check replication changelog is purged after the purge delay \
-                specified in the conf expires'
-              </message>
-
-              <script>
-                if globalSplitServers:
-                  masterReplServer = _topologyReplServerList[0]
-                else:
-                  masterReplServer = master
-
-                masterReplServerHost = masterReplServer.getHostname()
-                masterReplServerPath = '%s/%s' % \
-                                       (masterReplServer.getDir(), OPENDSNAME)
-              </script>
-
-              <message>
-                'Set purge delay to 20 seconds on server %s:%s' \
-                % (masterReplServerHost, masterReplServer.getPort())
-              </message>
-
-              <!-- Set purge delay to 20s on "master" server -->              
-              <call function="'dsconfigSet'">
-                { 'location'            : masterReplServerHost,
-                  'dsPath'              : masterReplServerPath,
-                  'dsInstanceHost'      : masterReplServerHost,
-                  'dsInstanceAdminPort' : masterReplServer.getAdminPort(),
-                  'dsInstanceDn'        : masterReplServer.getRootDn(),
-                  'dsInstancePswd'      : masterReplServer.getRootPwd(),
-                  'objectName'          : 'replication-server' ,
-                  'propertyType'        : 'provider',
-                  'propertyName'        : 'Multimaster Synchronization',
-                  'attributeName'       : 'replication-purge-delay' ,
-                  'attributeValue'      : '20s'
-                }
-              </call>
-                
-              <!-- Add entry X to "master" server -->
-              <script>
-                userDnX = 'uid=iabizen.X, ou=People, %s' % synchroSuffix
-                
-                listAttr = []
-                listAttr.append('objectclass:top')
-                listAttr.append('objectclass:organizationalperson')
-                listAttr.append('objectclass:inetorgperson')
-                listAttr.append('objectclass:person')
-                listAttr.append('givenname:Izen.X')
-                listAttr.append('sn:Abizen.X')
-                listAttr.append('cn:Izen Abizen.X')
-              </script>
-          
-              <call function="'addAnEntry'">
-                { 'location'       : masterHost,
-                  'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToAdd'        : userDnX,
-                  'listAttributes' : listAttr,
-                  'expectedRC'     : 0
-                }
-              </call>
-
-              <!-- Add entry Y to "master" server -->
-              <script>
-                userDnY = 'uid=iabizen.Y, ou=People, %s' % synchroSuffix
-                
-                listAttr = []
-                listAttr.append('objectclass:top')
-                listAttr.append('objectclass:organizationalperson')
-                listAttr.append('objectclass:inetorgperson')
-                listAttr.append('objectclass:person')
-                listAttr.append('givenname:Izen.Y')
-                listAttr.append('sn:Abizen.Y')
-                listAttr.append('cn:Izen Abizen.Y')
-              </script>
-          
-              <call function="'addAnEntry'">
-                { 'location'       : masterHost,
-                  'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToAdd'        : userDnY,
-                  'listAttributes' : listAttr,
-                  'expectedRC'     : 0
-                }
-              </call>
-                                                  
-              <!-- Let some time for the changes to propagate -->
-              <call function="'Sleep'">
-                { 'sleepForMilliSeconds' :  2000 }
-              </call>
-                
-              <!-- Search changelog in the various replication servers -->
-              <paralleliterate var="server" 
-                               in="_topologyServerList" 
-                               indexvar="i">
-                <sequence>                    
-                  <script>
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
-
-                    replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)                    
-                  </script>
-
-                  <call function="'ldapSearchWithScript'">
-                    {
-                      'location'         : replServer.getHostname(),
-                      'dsPath'           : replServerPath,
-                      'dsInstanceHost'   : replServer.getHostname(),
-                      'dsInstancePort'   : replServer.getPort(),
-                      'dsInstanceDn'     : replServer.getRootDn(),
-                      'dsInstancePswd'   : replServer.getRootPwd(),
-                      'dsBaseDN'         : 'dc=replicationChanges' ,
-                      'dsFilter'         : 'uid=iabizen.X',
-                      'dsAttributes'     : 'dn'
-                    }                
-                  </call>
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <!-- expect entry returned => len(searchResult) > 0 
-                    =====> resultLength = 1 -->
-                  <call function="'checktestRC'">
-                    { 'returncode' : resultLength ,
-                      'result'     : searchResult ,
-                      'expected'   : 1
-                    }
-                  </call>                                                             
-                    
-                </sequence>                  
-              </paralleliterate>
-
-
-              <!-- Let the purge delay expire: sleep for 60s -->
-              <call function="'Sleep'">
-                { 'sleepForMilliSeconds' :  60000 }
-              </call>
-                
-              <!-- Search changelog in the various replication servers -->                                                           
-              <paralleliterate var="server" 
-                               in="_topologyServerList" 
-                               indexvar="i">
-                <sequence>                    
-                  <script>
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
-
-                    replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)                    
-                  </script>
-                                                                                                                        
-                  <call function="'ldapSearchWithScript'">
-                    {
-                      'location'         : replServer.getHostname(),
-                      'dsPath'           : replServerPath,
-                      'dsInstanceHost'   : replServer.getHostname(),
-                      'dsInstancePort'   : replServer.getPort(),
-                      'dsInstanceDn'     : replServer.getRootDn(),
-                      'dsInstancePswd'   : replServer.getRootPwd(),
-                      'dsBaseDN'         : 'dc=replicationChanges',
-                      'dsFilter'         : 'uid=iabizen.X',
-                      'dsAttributes'     : 'dn',
-                      'expectedRC'       : 0
-                    }                
-                  </call>
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-
-                    if i == 0:
-                      # index [0] corresponds to "master" repl server
-                      # => purge delay expired => changelog purged
-                      # => expect NO entry returned
-                      # => len(searchResult) = 0 => resultLength = 0
-                      myExpectedRC = 0
-                      # if entry not purged => we may have run into Issue 3736
-                      # (Dynamic purge delay change not taken into account)
-                      myKnownIssue = '3736'
-                    else:
-                      # purge delay not expired (default purge delay: 1 day)
-                      # => expect entry returned
-                      # => len(searchResult) > 0 => resultLength = 1
-                      myExpectedRC = 1
-                      myKnownIssue = None
-                  </script>
-                  <call function="'checktestRC'">
-                    { 'returncode' : resultLength ,
-                      'result'     : searchResult ,
-                      'expected'   : myExpectedRC,
-                      'issue'      : myKnownIssue
-                    }
-                  </call>                                           
-                               
-                </sequence>                  
-              </paralleliterate>
-                                                
-              <!-- Verify the synchronization of the trees among the servers in
-                the topology -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, master, consumerList, synchroSuffix ]
-              </call>
-
-             
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>                        
-        
-          <import machine="STAF_LOCAL_HOSTNAME"
-                  file="'%s/testcases/replication/replication_cleanup.xml' 
-                        % (TESTS_DIR)"/>
-          <call function="'replication_cleanup'" >
-            { 'label'    : 'Replication Changelog' }
-          </call>
-
-          <call function="'testSuite_Postamble'"/>
-        </sequence>
+        </try>
       </block>
     </sequence>
   </function>

--
Gitblit v1.10.0