From 1c5ba9d48fb1f055921e98b3d50f4b78e93aaa58 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

---
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/basic/basic_tests.xml                         | 2482 +++++
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/binarycopy/binarycopy_tests.xml               |  422 
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/encryption/encryption_tests.xml               | 1088 ++
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/totalupdate/totalupdate_tests.xml             |  565 +
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/changelog/changelog_tests.xml                 | 1529 +++
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/resynchronization/resynchronization_tests.xml |  897 +
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/totalupdate/totalupdate.xml                   |  624 -
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/encryption/encryption.xml                     | 1055 -
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/binarycopy/binarycopy.xml                     |  497 
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/aci/aci_tests.xml                             | 1162 ++
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/basic/basic.xml                               | 2168 ----
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/conflict/conflict.xml                         | 3715 -------
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/ldifimport/ldifimport_tests.xml               |  421 
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/resynchronization/resynchronization.xml       |  916 -
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/conflict/conflict_tests.xml                   | 3820 ++++++++
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/failover/failover.xml                         |  617 -
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/schema/schema_tests.xml                       | 1131 ++
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/failover/failover_tests.xml                   |  611 +
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/changelog/changelog.xml                       | 1532 ---
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/ldifimport/ldifimport.xml                     |  521 
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/aci/aci.xml                                   | 1167 --
 opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/schema/schema.xml                             | 1141 --
 22 files changed, 15,489 insertions(+), 12,592 deletions(-)

diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/aci/aci.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/aci/aci.xml
index d79f07e..fc6f3d2 100644
--- a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/aci/aci.xml
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/aci/aci.xml
@@ -7,1079 +7,164 @@
  ! 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 2010 Sun Microsystems, Inc.
- !      Portions Copyright 2011-2012 ForgeRock AS.
+ !      Copyright 2012 ForgeRock AS.
  ! -->
 <stax>
-
   <defaultcall function="replication_aci"/>
-
-  <function name="replication_aci">
-
+  <function name="replication_aci" scope="local">
     <sequence>
+      <block name="'replication_aci'">
+        <try>
+          <sequence>
+            <script>
+              CurrentTestPath['group'] = 'replication'        
+              CurrentTestPath['suite'] = 'aci'
+              
+              _group=CurrentTestPath['group']
+              _groupdir='%s/testcases/%s' % (TESTS_DIR,_group)
+              _label = 'Replication ACI'
+            </script>
 
-      <block name="'aci'">
+            <!--- Test Suite information
+            #@TestSuiteName       Replication ACI Tests
+            #@TestSuitePurpose    Verify that the ACI operations are replicated
+                                  correctly between two servers.
+            #@TestSuiteID         ACI Tests
+            #@TestSuiteGroup      ACI
+            #@TestGroup           Replication
+            #@TestScript          replication_aci.xml
+            #@TestHTMLLink        http://www.forgerock.org/
+              -->
+                  
+            <call function="'testSuite_Preamble'"/>
 
-        <sequence>
-            
-          <script>
-            if not CurrentTestPath.has_key('group'):
-              CurrentTestPath['group']='aci'                 
-            CurrentTestPath['suite']=STAXCurrentBlock
-          </script>            
-
-          <call function="'testSuite_Preamble'"/>
-
-          <!--- Test Suite information
-          #@TestSuiteName       Replication ACI Tests
-          #@TestSuitePurpose    Verify that updates on ACIs are replicated all
-                                right and are applied accordingly across the
-                                topology.  
-          #@TestSuiteID         ACI Tests
-          #@TestSuiteGroup      ACI
-          #@TestGroup           Replication
-          #@TestScript          replication_aci.xml
-          #@TestHTMLLink        http://opends.dev.java.net/
-          -->
-            
+            <try>
+              <sequence> 
                                                                         
-          <import machine="STAF_LOCAL_HOSTNAME"
-            file="'%s/testcases/replication/replication_setup.xml'
-                  % (TESTS_DIR)"/>
-          <call function="'replication_setup'">
-            { 'dataFile' : 'Short_Example.ldif' ,
-              'label'    : 'Replication ACI' }
-          </call>
-                                    
-          <script>
-            class Entry:
-              def __init__(self, rdn, suffix):
-                self.userDn = '%s,ou=People,%s' \
-                              % (rdn, suffix)
-                self.suffix = suffix
-                self.listAttr = []
-                self.listAttr.append('objectclass:top')
-                self.listAttr.append('objectclass:organizationalperson')
-                self.listAttr.append('objectclass:inetorgperson')
-                self.listAttr.append('objectclass:person')
-              def getDn(self):
-                return self.userDn
-              def getSuffix(self):
-                return self.suffix
-              def getAttrList(self):
-                return self.listAttr
-              def addAttr(self, attrType, attrValue):
-                self.listAttr.append('%s:%s' % (attrType, attrValue))
-          </script>
+                <import machine="STAF_LOCAL_HOSTNAME"
+                  file="'%s/testcases/replication/replication_setup.xml'
+                        % (TESTS_DIR)"/>
+                <call function="'replication_setup'">
+                  { 'dataFile' : 'Short_Example.ldif' ,
+                    'label'    : _label }
+                </call>
 
+                <!-- List of Import of Test Functions -->
+                <script>
+                  importList=[]
+                  importList.append('aci/aci_tests')
+                </script>
 
-                        
-          <!--- Test Case information
-          #@TestMarker          Replication ACI Tests
-          #@TestName            Replication: ACI: Add entry with ACI
-          #@TestID              Add entry with ACI
-          #@TestPurpose         Check ACI replication over an entry add
-          #@TestPreamble
-          #@TestSteps           Add entry with ACI: deny self description write
-          #@TestSteps           Binding as entry, add givenname to entry
-                                (expect SUCCESS)
-          #@TestSteps           Binding as entry, add description to entry
-                                (expect ERROR 50)
-          #@TestPostamble
-          #@TestResult          Success if the servers synchronised and the aci
-                                correctly applied after replication
-          -->               
-          <testcase name="getTestCaseName('Add entry with ACI')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: ACI: Add entry with ACI. Check ACI replication \
-                over an entry add.'
-              </message>
-    
-              <script>
-                myAci = "(targetattr=\"description\")(version 3.0; acl \"Deny Self Description Write\"; deny (write) userdn=\"ldap:///self\";)"
-                myUserpassword = 'entryPwd' 
+                <!-- Import the files for this test suite -->
+                <iterate var="_import" in="importList">
+                  <import machine="STAF_LOCAL_HOSTNAME"
+                    file="'%s/%s.xml' % (_groupdir,_import)"/>
+                </iterate>                                                                       
 
-                myEntry = Entry('cn=ACI entry', synchroSuffix)
-                myEntry.addAttr('sn', 'ACI repl tests')
-                myEntry.addAttr('aci', myAci)
-                myEntry.addAttr('userpassword', myUserpassword)
-              </script>
-              
-              <!-- Add entry to "master" server with aci:
-               !   (targetattr="description")(version 3.0; acl 
-               !   "Deny Self Description Write"; deny (write)
-               !   userdn="ldap:///self";)  
-              -->
-              <message>
-                'Add entry %s with ACI: \n%s' % (myEntry.getDn(), myAci)
-              </message>
-              <call function="'addAnEntry'">
-                { 'location'       : masterHost,
-                  'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToAdd'        : myEntry.getDn(),
-                  'listAttributes' : myEntry.getAttrList()
-                }
-              </call>
-              
-              <message>
-                '+++ New ACI +++\nDeny "%s" the access to write its own \
-                description attribute.' % myEntry.getDn() 
-              </message>
-              
-              <iterate var="server" in="_topologyServerList" indexvar="i">
+                <!-- Specific to replication tests -->
+                <script>
+                  msg1 = 'Replication: ACI:'
+                  class Entry:
+                    def __init__(self, rdn, suffix):
+                      self.userDn = '%s,ou=People,%s' \
+                                    % (rdn, suffix)
+                      self.suffix = suffix
+                      self.listAttr = []
+                      self.listAttr.append('objectclass:top')
+                      self.listAttr.append('objectclass:organizationalperson')
+                      self.listAttr.append('objectclass:inetorgperson')
+                      self.listAttr.append('objectclass:person')
+                    def getDn(self):
+                      return self.userDn
+                    def getSuffix(self):
+                      return self.suffix
+                    def getAttrList(self):
+                      return self.listAttr
+                    def addAttr(self, attrType, attrValue):
+                      self.listAttr.append('%s:%s' % (attrType, attrValue))
+                </script>
+                                                    
+                <!-- List of Test Cases -->
+                <script>
+                  testsList=[]
+                  testsList.append('replication_aci_001')
+                  testsList.append('replication_aci_002')
+                  testsList.append('replication_aci_003')
+                  testsList.append('replication_aci_004')
+                  testsList.append('replication_aci_005')
+                  testsList.append('replication_aci_006')
+                  testsList.append('replication_aci_007')
+                </script>
+
+                <!-- Execute the Tests -->
+                <iterate var="__test" in="testsList">
+                  <sequence>
+                    <call function="'%s' % (__test)" />
+                  </sequence>
+                </iterate>                
+                                
+              </sequence>
+
+              <catch exception="'STAFException.TestSuite.SetupException'">
                 <sequence>
-                  <script>
-                    serverPath    = '%s/%s' % (server.getDir(), OPENDSNAME)
-                    
-                    myGivenname   = 'My own GIVENNAME value %s' % i
-                    myDescription = 'My own DESCRIPTION value %s' % i
-                  </script>
-                        
-                  <message>
-                    'Binding as "%s", add givenname %s to entry %s on server \
-                    %s:%s. -- Expect: SUCCESS' % \
-                    (myEntry.getDn(), myGivenname, myEntry.getDn(),
-                     server.getHostname(), server.getPort())
+                  <message log="1" level="'fatal'">
+                    'Setup of test suite failed.'
                   </message>
-                  <!-- Modify entry on one of the servers -->
-                  <call function="'modifyAnAttribute'">
-                    { 'location'          : server.getHostname(),
-                      'dsPath'            : serverPath,
-                      'dsInstanceHost'    : server.getHostname(),
-                      'dsInstancePort'    : server.getPort(),
-                      'dsInstanceDn'      : myEntry.getDn(),
-                      'dsInstancePswd'    : myUserpassword,
-                      'DNToModify'        : myEntry.getDn(),
-                      'attributeName'     : 'givenname',
-                      'newAttributeValue' : myGivenname,
-                      'changetype'        : 'add'
-                    }
-                  </call>
-                  
-                  <message>
-                    'Binding as "%s", add description %s to entry %s on \
-                    server %s:%s. -- Expect: ERROR 50 (Insufficient Access \
-                    Rights)' % \
-                    (myEntry.getDn(), myDescription, myEntry.getDn(), 
-                     server.getHostname(), server.getPort())
-                  </message>
-                  <!-- Modify entry on one of the servers -->
-                  <call function="'modifyAnAttribute'">
-                    { 'location'          : server.getHostname(),
-                      'dsPath'            : serverPath,
-                      'dsInstanceHost'    : server.getHostname(),
-                      'dsInstancePort'    : server.getPort(),
-                      'dsInstanceDn'      : myEntry.getDn(),
-                      'dsInstancePswd'    : myUserpassword,
-                      'DNToModify'        : myEntry.getDn(),
-                      'attributeName'     : 'description',
-                      'newAttributeValue' : myDescription,
-                      'changetype'        : 'add',
-                      'expectedRC'        : 50
-                    }
-                  </call>
+                  <rethrow/>
                 </sequence>
-              </iterate>
-                
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->          
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, master, consumerList, synchroSuffix ]
-              </call> 
+              </catch>
+  
+              <finally>
+                <message>'Test Cases Completed.'</message>
+              </finally>
 
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>
+            </try>
+
+          </sequence>
           
-
-
-          <!--- Test Case information
-          #@TestMarker          Replication ACI Tests
-          #@TestName            Replication: ACI: Modify_add ACI
-          #@TestID              Modify_add ACI
-          #@TestPurpose         Check ACI replication over a modify_add
-          #@TestPreamble        Add a user entry to suffix
-          #@TestSteps           Binding as user, add description to child entry
-                                (expect ERROR 50)
-          #@TestSteps           Add ACI to parent entry: allow user full access
-                                to all description attributes
-          #@TestSteps           Binding as user, add description to child entry
-                                (expect SUCCESS)
-          #@TestPostamble
-          #@TestResult          Success if the servers synchronised and the aci
-                                correctly applied after replication
-          -->               
-          <testcase name="getTestCaseName('Modify_add ACI')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: ACI: Modify_add ACI. Check ACI replication \
-                over a modify_add.'
-              </message>
-              
-              <script>
-                myAci = "(targetattr=\"description\")(version 3.0; acl \"Allow ACI-user access to description\"; allow (all) userdn=\"ldap:///cn=ACI user,ou=People,%s\";)" % synchroSuffix
-                mySn = 'ACI repl user'
-                myUserpassword = 'userPwd'
-
-                myEntry = Entry('cn=ACI user', synchroSuffix)
-                myEntry.addAttr('sn', mySn)
-                myEntry.addAttr('userpassword', myUserpassword)
-                
-                myTargetEntryDn = 'uid=sholmes,ou=People,%s' % synchroSuffix
-              </script>
-              
-              <!-- Add user entry to "master" server -->
-              <message>
-                'Add user entry %s' % myEntry.getDn()
-              </message>
-              <call function="'addAnEntry'">
-                { 'location'       : masterHost,
-                  'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToAdd'        : myEntry.getDn(),
-                  'listAttributes' : myEntry.getAttrList()
-                }
-              </call>
-
-              <iterate var="server" in="_topologyServerList" indexvar="i">
+          <finally>
+            <sequence>
+              <!-- Test Suite Cleanup -->
+              <message>'Finally: Replication Cleanup.'</message>
+              <try>
                 <sequence>
-                  <script>
-                    serverPath    = '%s/%s' % (server.getDir(), OPENDSNAME)
-                    
-                    myDescription = 'He was a serious opium adict - %s' % i
-                  </script>
-                  
-                  <message>
-                    'Binding as "%s", add description %s to entry %s on \
-                    server %s:%s. -- Expect: ERROR 50 (Insufficient Access \
-                    Rights)' % \
-                    (myEntry.getDn(), myDescription, myTargetEntryDn, 
-                     server.getHostname(), server.getPort())
-                  </message>
-                  <!-- Modify entry on one of the servers -->
-                  <call function="'modifyAnAttribute'">
-                    { 'location'          : server.getHostname(),
-                      'dsPath'            : serverPath,
-                      'dsInstanceHost'    : server.getHostname(),
-                      'dsInstancePort'    : server.getPort(),
-                      'dsInstanceDn'      : myEntry.getDn(),
-                      'dsInstancePswd'    : myUserpassword,
-                      'DNToModify'        : myTargetEntryDn,
-                      'attributeName'     : 'description',
-                      'newAttributeValue' : myDescription,
-                      'changetype'        : 'add',
-                      'expectedRC'        : 50
-                    }
+                  <import machine="STAF_LOCAL_HOSTNAME"
+                    file="'%s/testcases/replication/replication_cleanup.xml' 
+                          % (TESTS_DIR)"/>
+                  <call function="'replication_cleanup'">
+                    { 'label'    : _label }
                   </call>
-                </sequence>
-              </iterate>
-                  
-              <!-- Add aci to entry ou=People,o=example on "master" server:
-               !   (targetattr="description")(version 3.0; acl 
-               !   "Allow ACI-user access to description"; allow (all)
-               !   userdn="ldap:///cn=ACI user,ou=People,o=example";)  
-              -->
-              <message>
-                'Add ACI to entry ou=People,%s: \n%s' % (synchroSuffix, myAci)
-              </message>
-              <call function="'modifyAnAttribute'">
-                { 'location'          : masterHost,
-                  'dsPath'            : masterPath,
-                  'dsInstanceHost'    : masterHost,
-                  'dsInstancePort'    : master.getPort(),
-                  'dsInstanceDn'      : master.getRootDn(),
-                  'dsInstancePswd'    : master.getRootPwd(),
-                  'DNToModify'        : 'ou=People,%s' % synchroSuffix,
-                  'attributeName'     : 'aci',
-                  'newAttributeValue' : myAci,
-                  'changetype'        : 'add'
-                }
-              </call>
-                                          
-              <message>
-                '+++ New ACI +++\nAllow "%s" full access to all description \
-                attributes under ou=People,%s.' % \
-                (myEntry.getDn(), synchroSuffix) 
-              </message>
-              
-              <iterate var="server" in="_topologyServerList" indexvar="i">
+              </sequence>
+              <catch exception="'STAFException'">
                 <sequence>
-                  <script>
-                    serverPath    = '%s/%s' % (server.getDir(), OPENDSNAME)
-                    
-                    myDescription = 'He was a serious opium adict - %s' % i
-                  </script>
-                  
-                  <message>
-                    'Binding as "%s", add description %s to entry %s on \
-                    server %s:%s. -- Expect: SUCCESS' % \
-                    (myEntry.getDn(), myDescription, myTargetEntryDn, 
-                     server.getHostname(), server.getPort())
-                  </message>
-                  <!-- Modify entry on one of the servers -->
-                  <call function="'modifyAnAttribute'">
-                    { 'location'          : server.getHostname(),
-                      'dsPath'            : serverPath,
-                      'dsInstanceHost'    : server.getHostname(),
-                      'dsInstancePort'    : server.getPort(),
-                      'dsInstanceDn'      : myEntry.getDn(),
-                      'dsInstancePswd'    : myUserpassword,
-                      'DNToModify'        : myTargetEntryDn,
-                      'attributeName'     : 'description',
-                      'newAttributeValue' : myDescription,
-                      'changetype'        : 'add'
-                    }
-                  </call>
+                  <message log="1" level="'fatal'">'Cleanup of test suite failed.'</message>
                 </sequence>
-              </iterate>
-              
-              <!-- 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'"/>
+              </catch>
+              <finally>
+                <call function="'testSuite_Postamble'"/>
+              </finally>
+              </try>
             </sequence>
-          </testcase>
-
-
-          
-          <!--- Test Case information
-          #@TestMarker          Replication ACI Tests
-          #@TestName            Replication: ACI: Modify_replace ACI target
-          #@TestID              Modify_replace ACI target
-          #@TestPurpose         Check ACI replication over a modify_replace of
-                                the ACI target
-          #@TestPreamble
-          #@TestSteps           Binding as user, add telephonenumber to child
-                                entry (expect ERROR 50)
-          #@TestSteps           Replace ACI on parent entry: allow user full
-                                access to all telephonenumber attributes
-          #@TestSteps           Binding as user, add telephonenumber to child
-                                entry (expect SUCCESS)
-          #@TestPostamble
-          #@TestResult          Success if the servers synchronised and the aci
-                                correctly applied after replication
-          -->               
-          <testcase name="getTestCaseName('Modify_replace ACI target')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: ACI: Modify_replace ACI target. Check ACI \
-                replication over a modify_replace of the ACI target.'
-              </message>
-              
-              <script>
-                myAci = "(targetattr=\"telephonenumber\")(version 3.0; acl \"Allow ACI-user access to telephonenumber\"; allow (all) userdn=\"ldap:///cn=ACI user,ou=People,%s\";)" % synchroSuffix
-                myUserpassword = 'userPwd'
-
-                myEntry = Entry('cn=ACI user', synchroSuffix)
-                
-                myTargetEntryDn = 'uid=sholmes,ou=People,%s' % synchroSuffix
-              </script>
-              
-              <iterate var="server" in="_topologyServerList" indexvar="i">
-                <sequence>
-                  <script>
-                    serverPath        = '%s/%s' % (server.getDir(), OPENDSNAME)
-                    
-                    myTelephonenumber = '221-221-221-%s' % i
-                  </script>
-                  
-                  <message>
-                    'Binding as "%s", add telephonenumber %s to entry %s on \
-                    server %s:%s. -- Expect: ERROR 50 (Insufficient Access \
-                    Rights)' % \
-                    (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
-                     server.getHostname(), server.getPort())
-                  </message>
-                  <!-- Modify entry on one of the servers -->
-                  <call function="'modifyAnAttribute'">
-                    { 'location'          : server.getHostname(),
-                      'dsPath'            : serverPath,
-                      'dsInstanceHost'    : server.getHostname(),
-                      'dsInstancePort'    : server.getPort(),
-                      'dsInstanceDn'      : myEntry.getDn(),
-                      'dsInstancePswd'    : myUserpassword,
-                      'DNToModify'        : myTargetEntryDn,
-                      'attributeName'     : 'telephonenumber',
-                      'newAttributeValue' : myTelephonenumber,
-                      'changetype'        : 'add',
-                      'expectedRC'        : 50
-                    }
-                  </call>
-                </sequence>
-              </iterate>
-                  
-              <!-- Replace aci on entry ou=People,o=example on "master" server:
-               !   (targetattr="telephonenumber")(version 3.0; acl 
-               !   "Allow ACI-user access to telephonenumber"; allow (all)
-               !   userdn="ldap:///cn=ACI user,ou=People,o=example";)  
-              -->
-              <message>
-                'Replace ACI on entry ou=People,%s: \n%s' % \
-                (synchroSuffix, myAci)
-              </message>
-              <call function="'modifyAnAttribute'">
-                { 'location'          : masterHost,
-                  'dsPath'            : masterPath,
-                  'dsInstanceHost'    : masterHost,
-                  'dsInstancePort'    : master.getPort(),
-                  'dsInstanceDn'      : master.getRootDn(),
-                  'dsInstancePswd'    : master.getRootPwd(),
-                  'DNToModify'        : 'ou=People,%s' % synchroSuffix,
-                  'attributeName'     : 'aci',
-                  'newAttributeValue' : myAci,
-                  'changetype'        : 'replace'
-                }
-              </call>
-                                          
-              <message>
-                '+++ New ACI +++\nAllow "%s" full access to all telephonenumber\
-                 attributes under ou=People,%s.' % \
-                (myEntry.getDn(), synchroSuffix) 
-              </message>
-              
-              <iterate var="server" in="_topologyServerList" indexvar="i">
-                <sequence>
-                  <script>
-                    serverPath        = '%s/%s' % (server.getDir(), OPENDSNAME)
-                    
-                    myTelephonenumber = '221-221-221-%s' % i
-                  </script>
-                  
-                  <message>
-                    'Binding as "%s", add description %s to entry %s on \
-                    server %s:%s. -- Expect: SUCCESS' % \
-                    (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
-                     server.getHostname(), server.getPort())
-                  </message>
-                  <!-- Modify entry on one of the servers -->
-                  <call function="'modifyAnAttribute'">
-                    { 'location'          : server.getHostname(),
-                      'dsPath'            : serverPath,
-                      'dsInstanceHost'    : server.getHostname(),
-                      'dsInstancePort'    : server.getPort(),
-                      'dsInstanceDn'      : myEntry.getDn(),
-                      'dsInstancePswd'    : myUserpassword,
-                      'DNToModify'        : myTargetEntryDn,
-                      'attributeName'     : 'telephonenumber',
-                      'newAttributeValue' : myTelephonenumber,
-                      'changetype'        : 'add'
-                    }
-                  </call>
-                </sequence>
-              </iterate>
-              
-              <!-- 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 ACI Tests
-          #@TestName            Replication: ACI: Modify_replace ACI permission
-          #@TestID              Modify_replace ACI permission
-          #@TestPurpose         Check ACI replication over a modify_replace of
-                                the ACI permission
-          #@TestPreamble
-          #@TestSteps           Binding as user, compare telephonenumber value
-                                to child entry (expect SUCCESS)
-          #@TestSteps           Replace ACI on parent entry: deny user access to
-                                telephonenumber attributes
-          #@TestSteps           Binding as user, compare telephonenumber value
-                                to child entry (expect ERROR 50)
-          #@TestPostamble
-          #@TestResult          Success if the servers synchronised and the aci
-                                correctly applied after replication
-          -->               
-          <testcase name="getTestCaseName('Modify_replace ACI permission')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: ACI: Modify_replace ACI permission. Check ACI \
-                replication over a modify_replace of the ACI permission.'
-              </message>
-              
-              <script>
-                myAci = "(targetattr=\"telephonenumber\")(version 3.0; acl \"Deny ACI-user access to telephonenumber\"; deny (all) userdn=\"ldap:///cn=ACI user,ou=People,%s\";)" % synchroSuffix
-                myUserpassword = 'userPwd'
-
-                myEntry = Entry('cn=ACI user', synchroSuffix)
-                
-                myTargetEntryDn   = 'uid=sholmes,ou=People,%s' % synchroSuffix
-                myTelephonenumber = '+1 408 555 6789'
-              </script>
-              
-              <iterate var="server" in="_topologyServerList" indexvar="i">
-                <sequence>
-                  <script>
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                  </script>
-                  
-                  <message>
-                    'Binding as "%s", compare telephonenumber:%s value to \
-                    entry %s on server %s:%s. -- Expect: SUCCESS' % \
-                    (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
-                     server.getHostname(), server.getPort())
-                  </message>
-                      
-                  <!-- Compare 'telephonenumber:+1 408 555 6789' value to entry 
-                   !   uid=sholmes,ou=People,o=example -->
-                  <call function="'ldapCompareWithScript'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : serverPath,
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : myEntry.getDn(),
-                      'dsInstancePswd' : myUserpassword,
-                      'dsDn'           : ['telephonenumber:%s' % \
-                                          myTelephonenumber, myTargetEntryDn],
-                      'expectedRC'     : 0
-                    }                
-                  </call>
-                </sequence>
-              </iterate>
-                  
-              <!-- Replace aci on entry ou=People,o=example on "master" server:
-               !   (targetattr="telephonenumber")(version 3.0; acl 
-               !   "Deny ACI-user access to telephonenumber"; deny (all)
-               !   userdn="ldap:///cn=ACI user,ou=People,o=example";)  
-              -->
-              <message>
-                'Replace ACI on entry ou=People,%s: \n%s' % \
-                (synchroSuffix, myAci)
-              </message>
-              <call function="'modifyAnAttribute'">
-                { 'location'          : masterHost,
-                  'dsPath'            : masterPath,
-                  'dsInstanceHost'    : masterHost,
-                  'dsInstancePort'    : master.getPort(),
-                  'dsInstanceDn'      : master.getRootDn(),
-                  'dsInstancePswd'    : master.getRootPwd(),
-                  'DNToModify'        : 'ou=People,%s' % synchroSuffix,
-                  'attributeName'     : 'aci',
-                  'newAttributeValue' : myAci,
-                  'changetype'        : 'replace'
-                }
-              </call>
-                                          
-              <message>
-                '+++ New ACI +++\nDeny "%s" access to all telephonenumber \
-                attributes under ou=People,%s.' % \
-                (myEntry.getDn(), synchroSuffix) 
-              </message>
-              
-              <iterate var="server" in="_topologyServerList" indexvar="i">
-                <sequence>
-                  <script>
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                  </script>
-                  
-                  <message>
-                    'Binding as "%s", compare telephonenumber:%s value to \
-                    entry %s on server %s:%s. -- Expect: ERROR 50 \
-                    (Insufficient Access Rights)' % \
-                    (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
-                     server.getHostname(), server.getPort())
-                  </message>
-                      
-                  <!-- Compare 'telephonenumber:+1 408 555 6789' value to entry 
-                   !   uid=sholmes,ou=People,o=example -->
-                  <call function="'ldapCompareWithScript'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : serverPath,
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : myEntry.getDn(),
-                      'dsInstancePswd' : myUserpassword,
-                      'dsDn'           : ['telephonenumber:%s' % \
-                                          myTelephonenumber, myTargetEntryDn],
-                      'expectedRC'     : 50
-                    }                
-                  </call>
-                </sequence>
-              </iterate>
-              
-              <!-- 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 ACI Tests
-          #@TestName            Replication: ACI: Modify_replace ACI bind rule
-          #@TestID              Modify_replace ACI bind rule
-          #@TestPurpose         Check ACI replication over a modify_replace of
-                                the ACI bind rule
-          #@TestPreamble        Add new user entry
-          #@TestSteps           Binding as new user, compare telephonenumber
-                                value to child entry  (expect SUCCESS)
-          #@TestSteps           Replace ACI on parent entry: deny users with
-                                a given sn access to telephonenumber attributes
-          #@TestSteps           Binding as new user, compare telephonenumber
-                                value to child entry  (expect ERROR 50)
-          #@TestPostamble
-          #@TestResult          Success if the servers synchronised and the aci
-                                correctly applied after replication
-          -->               
-          <testcase name="getTestCaseName('Modify_replace ACI bind rule')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: ACI: Modify_replace ACI bind rule. Check ACI \
-                replication over a modify_replace of the ACI bind rule.'
-              </message>
-              
-              <script>
-                mySn  = 'ACI repl user'
-                myAci = "(targetattr=\"telephonenumber\")(version 3.0; acl \"Deny ACI repl users access to telephonenumber\"; deny (all) userdn=\"ldap:///%s??sub?(sn=%s)\";)" % (synchroSuffix, mySn)
-                myUserpassword = 'secondUserPwd'
-
-                myEntry = Entry('cn=Second ACI user', synchroSuffix)
-                myEntry.addAttr('sn', mySn)
-                myEntry.addAttr('userpassword', myUserpassword)
-                
-                myTargetEntryDn   = 'uid=sholmes,ou=People,%s' % synchroSuffix
-                myTelephonenumber = '+1 408 555 6789'
-              </script>
-              
-              <!-- Add user entry to "master" server -->
-              <message>
-                'Add user entry %s' % myEntry.getDn()
-              </message>
-              <call function="'addAnEntry'">
-                { 'location'       : masterHost,
-                  'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToAdd'        : myEntry.getDn(),
-                  'listAttributes' : myEntry.getAttrList()
-                }
-              </call>
-              
-              <iterate var="server" in="_topologyServerList" indexvar="i">
-                <sequence>
-                  <script>
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                  </script>
-                  
-                  <message>
-                    'Binding as "%s", compare telephonenumber:%s value to \
-                    entry %s on server %s:%s. -- Expect: SUCCESS' % \
-                    (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
-                     server.getHostname(), server.getPort())
-                  </message>
-                      
-                  <!-- Compare 'telephonenumber:+1 408 555 6789' value to entry 
-                   !   uid=sholmes,ou=People,o=example -->
-                  <call function="'ldapCompareWithScript'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : serverPath,
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : myEntry.getDn(),
-                      'dsInstancePswd' : myUserpassword,
-                      'dsDn'           : ['telephonenumber:%s' % \
-                                          myTelephonenumber, myTargetEntryDn],
-                      'expectedRC'     : 0
-                    }                
-                  </call>
-                </sequence>
-              </iterate>
-                  
-              <!-- Replace aci on entry ou=People,o=example on "master" server:
-               !   (targetattr="telephonenumber")(version 3.0; acl 
-               !   "Deny ACI repl users access to telephonenumber"; deny (all)
-               !   userdn="ldap:///o=example??sub?(sn=ACI repl user)";)  
-              -->
-              <message>
-                'Replace ACI on entry ou=People,%s: \n%s' % \
-                (synchroSuffix, myAci)
-              </message>
-              <call function="'modifyAnAttribute'">
-                { 'location'          : masterHost,
-                  'dsPath'            : masterPath,
-                  'dsInstanceHost'    : masterHost,
-                  'dsInstancePort'    : master.getPort(),
-                  'dsInstanceDn'      : master.getRootDn(),
-                  'dsInstancePswd'    : master.getRootPwd(),
-                  'DNToModify'        : 'ou=People,%s' % synchroSuffix,
-                  'attributeName'     : 'aci',
-                  'newAttributeValue' : myAci,
-                  'changetype'        : 'replace'
-                }
-              </call>
-                                          
-              <message>
-                '+++ New ACI +++\nDeny users with (sn=%s) access to all \
-                telephonenumber attributes under ou=People,%s.' % \
-                (mySn, synchroSuffix) 
-              </message>
-              
-              <iterate var="server" in="_topologyServerList" indexvar="i">
-                <sequence>
-                  <script>
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                  </script>
-                  
-                  <message>
-                    'Binding as "%s", compare telephonenumber:%s value to \
-                    entry %s on server %s:%s. -- Expect: ERROR 50 \
-                    (Insufficient Access Rights)' % \
-                    (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
-                     server.getHostname(), server.getPort())
-                  </message>
-                      
-                  <!-- Compare 'telephonenumber:+1 408 555 6789' value to entry 
-                   !   uid=sholmes,ou=People,o=example -->
-                  <call function="'ldapCompareWithScript'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : serverPath,
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : myEntry.getDn(),
-                      'dsInstancePswd' : myUserpassword,
-                      'dsDn'           : ['telephonenumber:%s' % \
-                                          myTelephonenumber, myTargetEntryDn],
-                      'expectedRC'     : 50
-                    }                
-                  </call>
-                </sequence>
-              </iterate>
-              
-              <!-- 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 ACI Tests
-          #@TestName            Replication: ACI: Bypass-acl privilege
-          #@TestID              Bypass-acl privilege
-          #@TestPurpose         Check the bypass-acl privilege is replicated and
-                                successfully applied over the topology
-          #@TestPreamble
-          #@TestSteps           Binding as new user, compare telephonenumber
-                                value to child entry  (expect ERROR 50)
-          #@TestSteps           Add ds-privilege-name:bypass-acl to new user
-          #@TestSteps           Binding as new user, compare telephonenumber
-                                value to child entry  (expect SUCCESS)
-          #@TestPostamble
-          #@TestResult          Success if the servers synchronised and the aci
-                                correctly applied after replication
-          -->               
-          <testcase name="getTestCaseName('Bypass-acl privilege')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: ACI: Bypass-acl privilege. Check the bypass-acl \
-                privilege is replicated and successfully applied over the \
-                topology'
-              </message>
-              
-              <script>
-                myAci = "(targetattr=\"telephonenumber\")(version 3.0; acl \"Deny ACI repl users access to telephonenumber\"; deny (all) userdn=\"ldap:///%s??sub?(sn=%s)\";)" % (synchroSuffix, mySn)
-                myUserpassword = 'secondUserPwd'
-                myPrivilege  = 'bypass-acl'
-
-                myEntry = Entry('cn=Second ACI user', synchroSuffix)
-                
-                myTargetEntryDn   = 'uid=sholmes,ou=People,%s' % synchroSuffix
-                myTelephonenumber = '+1 408 555 6789'
-              </script>
-              
-              <iterate var="server" in="_topologyServerList" indexvar="i">
-                <sequence>
-                  <script>
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                  </script>
-                  
-                  <message>
-                    'Binding as "%s", compare telephonenumber:%s value to \
-                    entry %s on server %s:%s. -- Expect: ERROR 50 \
-                    (Insufficient Access Rights)' % \
-                    (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
-                     server.getHostname(), server.getPort())
-                  </message>
-                      
-                  <!-- Compare 'telephonenumber:+1 408 555 6789' value to entry 
-                   !   uid=sholmes,ou=People,o=example -->
-                  <call function="'ldapCompareWithScript'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : serverPath,
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : myEntry.getDn(),
-                      'dsInstancePswd' : myUserpassword,
-                      'dsDn'           : ['telephonenumber:%s' % \
-                                          myTelephonenumber, myTargetEntryDn],
-                      'expectedRC'     : 50
-                    }                
-                  </call>
-                </sequence>
-              </iterate>
-                  
-              <!-- Add bypass-acl privilege to new user entry -->
-              <message>
-                'Add %s privilege to entry %s: \n' % \
-                (myPrivilege, myEntry.getDn())
-              </message>
-              <call function="'modifyAnAttribute'">
-                { 'location'          : masterHost,
-                  'dsPath'            : masterPath,
-                  'dsInstanceHost'    : masterHost,
-                  'dsInstancePort'    : master.getPort(),
-                  'dsInstanceDn'      : master.getRootDn(),
-                  'dsInstancePswd'    : master.getRootPwd(),
-                  'DNToModify'        : myEntry.getDn(),
-                  'attributeName'     : 'ds-privilege-name',
-                  'newAttributeValue' : myPrivilege,
-                  'changetype'        : 'add'
-                }
-              </call>
-                                          
-              <message>
-                '+++ Active ACI +++\nDeny users with (sn=%s) access to all \
-                telephonenumber attributes under ou=People,%s.' % \
-                (mySn, synchroSuffix) 
-              </message>
-              
-              <iterate var="server" in="_topologyServerList" indexvar="i">
-                <sequence>
-                  <script>
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                  </script>
-                  
-                  <message>
-                    'Binding as "%s", compare telephonenumber:%s value to \
-                    entry %s on server %s:%s. -- Expect: SUCCESS' % \
-                    (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
-                     server.getHostname(), server.getPort())
-                  </message>
-                      
-                  <!-- Compare 'telephonenumber:+1 408 555 6789' value to entry 
-                   !   uid=sholmes,ou=People,o=example -->
-                  <call function="'ldapCompareWithScript'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : serverPath,
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : myEntry.getDn(),
-                      'dsInstancePswd' : myUserpassword,
-                      'dsDn'           : ['telephonenumber:%s' % \
-                                          myTelephonenumber, myTargetEntryDn],
-                      'expectedRC'     : 0
-                    }                
-                  </call>
-                </sequence>
-              </iterate>
-              
-              <!-- 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 ACI Tests
-          #@TestName            Replication: ACI: Modify_delete ACI
-          #@TestID              Modify_delete ACI
-          #@TestPurpose         Check ACI replication over a modify_delete
-          #@TestPreamble
-          #@TestSteps           Binding as user, compare telephonenumber value
-                                to child entry  (expect ERROR 50)
-          #@TestSteps           Delete ACI on parent entry
-          #@TestSteps           Binding as user, compare telephonenumber value
-                                to child entry  (expect SUCCESS)
-          #@TestPostamble
-          #@TestResult          Success if the servers synchronised and the aci
-                                correctly applied after replication
-          -->               
-          <testcase name="getTestCaseName('Modify_delete ACI')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: ACI: Modify_delete ACI. Check ACI \
-                replication over a modify_delete.'
-              </message>
-              
-              <script>
-                myAci = "(targetattr=\"telephonenumber\")(version 3.0; acl \"Deny ACI repl users access to telephonenumber\"; deny (all) userdn=\"ldap:///%s??sub?(sn=%s)\";)" % (synchroSuffix, mySn)
-                myUserpassword = 'userPwd'
-
-                myEntry = Entry('cn=ACI user', synchroSuffix)
-                
-                myTargetEntryDn   = 'uid=sholmes,ou=People,%s' % synchroSuffix
-                myTelephonenumber = '+1 408 555 6789'
-              </script>
-              
-              <iterate var="server" in="_topologyServerList" indexvar="i">
-                <sequence>
-                  <script>
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                  </script>
-                  
-                  <message>
-                    'Binding as "%s", compare telephonenumber:%s value to \
-                    entry %s on server %s:%s. -- Expect: ERROR 50 \
-                    (Insufficient Access Rights)' % \
-                    (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
-                     server.getHostname(), server.getPort())
-                  </message>
-                      
-                  <!-- Compare 'telephonenumber:+1 408 555 6789' value to entry 
-                   !   uid=sholmes,ou=People,o=example -->
-                  <call function="'ldapCompareWithScript'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : serverPath,
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : myEntry.getDn(),
-                      'dsInstancePswd' : myUserpassword,
-                      'dsDn'           : ['telephonenumber:%s' % \
-                                          myTelephonenumber, myTargetEntryDn],
-                      'expectedRC'     : 50
-                    }                
-                  </call>
-                </sequence>
-              </iterate>
-                  
-              <!-- Delete aci on entry ou=People,o=example on "master" server:
-               !   (targetattr="telephonenumber")(version 3.0; acl 
-               !   "Deny ACI repl users access to telephonenumber"; deny (all)
-               !   userdn="ldap:///o=example??sub?(sn=ACI repl user)";)  
-              -->
-              <message>
-                'Delete ACI on entry ou=People,%s: \n%s' % \
-                (synchroSuffix, myAci)
-              </message>
-              <call function="'modifyAnAttribute'">
-                { 'location'          : masterHost,
-                  'dsPath'            : masterPath,
-                  'dsInstanceHost'    : masterHost,
-                  'dsInstancePort'    : master.getPort(),
-                  'dsInstanceDn'      : master.getRootDn(),
-                  'dsInstancePswd'    : master.getRootPwd(),
-                  'DNToModify'        : 'ou=People,%s' % synchroSuffix,
-                  'attributeName'     : 'aci',
-                  'newAttributeValue' : myAci,
-                  'changetype'        : 'delete'
-                }
-              </call>
-                                          
-              <message>
-                '+++ New ACI +++\nNo aci in ou=People,%s.' % synchroSuffix 
-              </message>
-              
-              <iterate var="server" in="_topologyServerList" indexvar="i">
-                <sequence>
-                  <script>
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                  </script>
-                  
-                  <message>
-                    'Binding as "%s", compare telephonenumber:%s value to \
-                    entry %s on server %s:%s. -- Expect: SUCCESS' % \
-                    (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
-                     server.getHostname(), server.getPort())
-                  </message>
-                      
-                  <!-- Compare 'telephonenumber:+1 408 555 6789' value to entry 
-                   !   uid=sholmes,ou=People,o=example -->
-                  <call function="'ldapCompareWithScript'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : serverPath,
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : myEntry.getDn(),
-                      'dsInstancePswd' : myUserpassword,
-                      'dsDn'           : ['telephonenumber:%s' % \
-                                          myTelephonenumber, myTargetEntryDn],
-                      'expectedRC'     : 0
-                    }                
-                  </call>
-                </sequence>
-              </iterate>
-              
-              <!-- 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 ACI' }
-          </call>
-
-          <call function="'testSuite_Postamble'"/>
-                  
-        </sequence>
-
+          </finally>
+ 
+        </try>
       </block>
-    
     </sequence>
-
   </function>
-
 </stax>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/aci/aci_tests.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/aci/aci_tests.xml
new file mode 100644
index 0000000..fd6faaa
--- /dev/null
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/aci/aci_tests.xml
@@ -0,0 +1,1162 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../../../shared/stax.dtd">
+<!--
+ ! CDDL HEADER START
+ !
+ ! The contents of this file are subject to the terms of the
+ ! 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.
+ ! 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,
+ ! 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 2010 Sun Microsystems, Inc.
+ !      Portions Copyright 2011-2012 ForgeRock AS.
+ ! -->
+<stax>
+                        
+  <!--- Test Case information
+  #@TestMarker          Replication ACI Tests
+  #@TestName            Replication: ACI: Add entry with ACI
+  #@TestID              Add entry with ACI
+  #@TestPurpose         Check ACI replication over an entry add
+  #@TestPreamble
+  #@TestSteps           Add entry with ACI: deny self description write
+  #@TestSteps           Binding as entry, add givenname to entry
+                        (expect SUCCESS)
+  #@TestSteps           Binding as entry, add description to entry
+                        (expect ERROR 50)
+  #@TestPostamble
+  #@TestResult          Success if the servers synchronised and the aci
+                        correctly applied after replication
+  -->
+  <function name="replication_aci_001" scope="local">
+    <testcase name="getTestCaseName('Add entry with ACI')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+            
+            <message>
+              'Replication: ACI: Add entry with ACI. Check ACI replication \
+              over an entry add.'
+            </message>
+  
+            <script>
+              myAci = "(targetattr=\"description\")(version 3.0; acl \"Deny Self Description Write\"; deny (write) userdn=\"ldap:///self\";)"
+              myUserpassword = 'entryPwd' 
+
+              myEntry = Entry('cn=ACI entry', synchroSuffix)
+              myEntry.addAttr('sn', 'ACI repl tests')
+              myEntry.addAttr('aci', myAci)
+              myEntry.addAttr('userpassword', myUserpassword)
+            </script>
+            
+            <!-- Add entry to "master" server with aci:
+             !   (targetattr="description")(version 3.0; acl 
+             !   "Deny Self Description Write"; deny (write)
+             !   userdn="ldap:///self";)  
+            -->
+            <message>
+              'Add entry %s with ACI: \n%s' % (myEntry.getDn(), myAci)
+            </message>
+            <call function="'addAnEntry'">
+              { 'location'       : masterHost,
+                'dsPath'         : masterPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'DNToAdd'        : myEntry.getDn(),
+                'listAttributes' : myEntry.getAttrList()
+              }
+            </call>
+            
+            <message>
+              '+++ New ACI +++\nDeny "%s" the access to write its own \
+              description attribute.' % myEntry.getDn() 
+            </message>
+            
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                <script>
+                  serverPath    = '%s/%s' % (server.getDir(), OPENDSNAME)
+                  
+                  myGivenname   = 'My own GIVENNAME value %s' % i
+                  myDescription = 'My own DESCRIPTION value %s' % i
+                </script>
+                      
+                <message>
+                  'Binding as "%s", add givenname %s to entry %s on server \
+                  %s:%s. -- Expect: SUCCESS' % \
+                  (myEntry.getDn(), myGivenname, myEntry.getDn(),
+                   server.getHostname(), server.getPort())
+                </message>
+                <!-- Modify entry on one of the servers -->
+                <call function="'modifyAnAttribute'">
+                  { 'location'          : server.getHostname(),
+                    'dsPath'            : serverPath,
+                    'dsInstanceHost'    : server.getHostname(),
+                    'dsInstancePort'    : server.getPort(),
+                    'dsInstanceDn'      : myEntry.getDn(),
+                    'dsInstancePswd'    : myUserpassword,
+                    'DNToModify'        : myEntry.getDn(),
+                    'attributeName'     : 'givenname',
+                    'newAttributeValue' : myGivenname,
+                    'changetype'        : 'add'
+                  }
+                </call>
+                
+                <message>
+                  'Binding as "%s", add description %s to entry %s on \
+                  server %s:%s. -- Expect: ERROR 50 (Insufficient Access \
+                  Rights)' % \
+                  (myEntry.getDn(), myDescription, myEntry.getDn(), 
+                   server.getHostname(), server.getPort())
+                </message>
+                <!-- Modify entry on one of the servers -->
+                <call function="'modifyAnAttribute'">
+                  { 'location'          : server.getHostname(),
+                    'dsPath'            : serverPath,
+                    'dsInstanceHost'    : server.getHostname(),
+                    'dsInstancePort'    : server.getPort(),
+                    'dsInstanceDn'      : myEntry.getDn(),
+                    'dsInstancePswd'    : myUserpassword,
+                    'DNToModify'        : myEntry.getDn(),
+                    'attributeName'     : 'description',
+                    'newAttributeValue' : myDescription,
+                    'changetype'        : 'add',
+                    'expectedRC'        : 50
+                  }
+                </call>
+              </sequence>
+            </iterate>
+              
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+          
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication ACI Tests
+  #@TestName            Replication: ACI: Modify_add ACI
+  #@TestID              Modify_add ACI
+  #@TestPurpose         Check ACI replication over a modify_add
+  #@TestPreamble        Add a user entry to suffix
+  #@TestSteps           Binding as user, add description to child entry
+                        (expect ERROR 50)
+  #@TestSteps           Add ACI to parent entry: allow user full access
+                        to all description attributes
+  #@TestSteps           Binding as user, add description to child entry
+                        (expect SUCCESS)
+  #@TestPostamble
+  #@TestResult          Success if the servers synchronised and the aci
+                        correctly applied after replication
+  -->
+  <function name="replication_aci_002" scope="local">
+    <testcase name="getTestCaseName('Modify_add ACI')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: ACI: Modify_add ACI. Check ACI replication \
+              over a modify_add.'
+            </message>
+            
+            <script>
+              myAci = "(targetattr=\"description\")(version 3.0; acl \"Allow ACI-user access to description\"; allow (all) userdn=\"ldap:///cn=ACI user,ou=People,%s\";)" % synchroSuffix
+              mySn = 'ACI repl user'
+              myUserpassword = 'userPwd'
+
+              myEntry = Entry('cn=ACI user', synchroSuffix)
+              myEntry.addAttr('sn', mySn)
+              myEntry.addAttr('userpassword', myUserpassword)
+              
+              myTargetEntryDn = 'uid=sholmes,ou=People,%s' % synchroSuffix
+            </script>
+            
+            <!-- Add user entry to "master" server -->
+            <message>
+              'Add user entry %s' % myEntry.getDn()
+            </message>
+            <call function="'addAnEntry'">
+              { 'location'       : masterHost,
+                'dsPath'         : masterPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'DNToAdd'        : myEntry.getDn(),
+                'listAttributes' : myEntry.getAttrList()
+              }
+            </call>
+
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                <script>
+                  serverPath    = '%s/%s' % (server.getDir(), OPENDSNAME)
+                  
+                  myDescription = 'He was a serious opium adict - %s' % i
+                </script>
+                
+                <message>
+                  'Binding as "%s", add description %s to entry %s on \
+                  server %s:%s. -- Expect: ERROR 50 (Insufficient Access \
+                  Rights)' % \
+                  (myEntry.getDn(), myDescription, myTargetEntryDn, 
+                   server.getHostname(), server.getPort())
+                </message>
+                <!-- Modify entry on one of the servers -->
+                <call function="'modifyAnAttribute'">
+                  { 'location'          : server.getHostname(),
+                    'dsPath'            : serverPath,
+                    'dsInstanceHost'    : server.getHostname(),
+                    'dsInstancePort'    : server.getPort(),
+                    'dsInstanceDn'      : myEntry.getDn(),
+                    'dsInstancePswd'    : myUserpassword,
+                    'DNToModify'        : myTargetEntryDn,
+                    'attributeName'     : 'description',
+                    'newAttributeValue' : myDescription,
+                    'changetype'        : 'add',
+                    'expectedRC'        : 50
+                  }
+                </call>
+              </sequence>
+            </iterate>
+                
+            <!-- Add aci to entry ou=People,o=example on "master" server:
+             !   (targetattr="description")(version 3.0; acl 
+             !   "Allow ACI-user access to description"; allow (all)
+             !   userdn="ldap:///cn=ACI user,ou=People,o=example";)  
+            -->
+            <message>
+              'Add ACI to entry ou=People,%s: \n%s' % (synchroSuffix, myAci)
+            </message>
+            <call function="'modifyAnAttribute'">
+              { 'location'          : masterHost,
+                'dsPath'            : masterPath,
+                'dsInstanceHost'    : masterHost,
+                'dsInstancePort'    : master.getPort(),
+                'dsInstanceDn'      : master.getRootDn(),
+                'dsInstancePswd'    : master.getRootPwd(),
+                'DNToModify'        : 'ou=People,%s' % synchroSuffix,
+                'attributeName'     : 'aci',
+                'newAttributeValue' : myAci,
+                'changetype'        : 'add'
+              }
+            </call>
+                                        
+            <message>
+              '+++ New ACI +++\nAllow "%s" full access to all description \
+              attributes under ou=People,%s.' % \
+              (myEntry.getDn(), synchroSuffix) 
+            </message>
+            
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                <script>
+                  serverPath    = '%s/%s' % (server.getDir(), OPENDSNAME)
+                  
+                  myDescription = 'He was a serious opium adict - %s' % i
+                </script>
+                
+                <message>
+                  'Binding as "%s", add description %s to entry %s on \
+                  server %s:%s. -- Expect: SUCCESS' % \
+                  (myEntry.getDn(), myDescription, myTargetEntryDn, 
+                   server.getHostname(), server.getPort())
+                </message>
+                <!-- Modify entry on one of the servers -->
+                <call function="'modifyAnAttribute'">
+                  { 'location'          : server.getHostname(),
+                    'dsPath'            : serverPath,
+                    'dsInstanceHost'    : server.getHostname(),
+                    'dsInstancePort'    : server.getPort(),
+                    'dsInstanceDn'      : myEntry.getDn(),
+                    'dsInstancePswd'    : myUserpassword,
+                    'DNToModify'        : myTargetEntryDn,
+                    'attributeName'     : 'description',
+                    'newAttributeValue' : myDescription,
+                    'changetype'        : 'add'
+                  }
+                </call>
+              </sequence>
+            </iterate>
+            
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+          
+  <!--- Test Case information
+  #@TestMarker          Replication ACI Tests
+  #@TestName            Replication: ACI: Modify_replace ACI target
+  #@TestID              Modify_replace ACI target
+  #@TestPurpose         Check ACI replication over a modify_replace of
+                        the ACI target
+  #@TestPreamble
+  #@TestSteps           Binding as user, add telephonenumber to child
+                        entry (expect ERROR 50)
+  #@TestSteps           Replace ACI on parent entry: allow user full
+                        access to all telephonenumber attributes
+  #@TestSteps           Binding as user, add telephonenumber to child
+                        entry (expect SUCCESS)
+  #@TestPostamble
+  #@TestResult          Success if the servers synchronised and the aci
+                        correctly applied after replication
+  -->
+  <function name="replication_aci_003" scope="local">
+    <testcase name="getTestCaseName('Modify_replace ACI target')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: ACI: Modify_replace ACI target. Check ACI \
+              replication over a modify_replace of the ACI target.'
+            </message>
+            
+            <script>
+              myAci = "(targetattr=\"telephonenumber\")(version 3.0; acl \"Allow ACI-user access to telephonenumber\"; allow (all) userdn=\"ldap:///cn=ACI user,ou=People,%s\";)" % synchroSuffix
+              myUserpassword = 'userPwd'
+
+              myEntry = Entry('cn=ACI user', synchroSuffix)
+              
+              myTargetEntryDn = 'uid=sholmes,ou=People,%s' % synchroSuffix
+            </script>
+            
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                <script>
+                  serverPath        = '%s/%s' % (server.getDir(), OPENDSNAME)
+                  
+                  myTelephonenumber = '221-221-221-%s' % i
+                </script>
+                
+                <message>
+                  'Binding as "%s", add telephonenumber %s to entry %s on \
+                  server %s:%s. -- Expect: ERROR 50 (Insufficient Access \
+                  Rights)' % \
+                  (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
+                   server.getHostname(), server.getPort())
+                </message>
+                <!-- Modify entry on one of the servers -->
+                <call function="'modifyAnAttribute'">
+                  { 'location'          : server.getHostname(),
+                    'dsPath'            : serverPath,
+                    'dsInstanceHost'    : server.getHostname(),
+                    'dsInstancePort'    : server.getPort(),
+                    'dsInstanceDn'      : myEntry.getDn(),
+                    'dsInstancePswd'    : myUserpassword,
+                    'DNToModify'        : myTargetEntryDn,
+                    'attributeName'     : 'telephonenumber',
+                    'newAttributeValue' : myTelephonenumber,
+                    'changetype'        : 'add',
+                    'expectedRC'        : 50
+                  }
+                </call>
+              </sequence>
+            </iterate>
+                
+            <!-- Replace aci on entry ou=People,o=example on "master" server:
+             !   (targetattr="telephonenumber")(version 3.0; acl 
+             !   "Allow ACI-user access to telephonenumber"; allow (all)
+             !   userdn="ldap:///cn=ACI user,ou=People,o=example";)  
+            -->
+            <message>
+              'Replace ACI on entry ou=People,%s: \n%s' % \
+              (synchroSuffix, myAci)
+            </message>
+            <call function="'modifyAnAttribute'">
+              { 'location'          : masterHost,
+                'dsPath'            : masterPath,
+                'dsInstanceHost'    : masterHost,
+                'dsInstancePort'    : master.getPort(),
+                'dsInstanceDn'      : master.getRootDn(),
+                'dsInstancePswd'    : master.getRootPwd(),
+                'DNToModify'        : 'ou=People,%s' % synchroSuffix,
+                'attributeName'     : 'aci',
+                'newAttributeValue' : myAci,
+                'changetype'        : 'replace'
+              }
+            </call>
+                                        
+            <message>
+              '+++ New ACI +++\nAllow "%s" full access to all telephonenumber\
+               attributes under ou=People,%s.' % \
+              (myEntry.getDn(), synchroSuffix) 
+            </message>
+            
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                <script>
+                  serverPath        = '%s/%s' % (server.getDir(), OPENDSNAME)
+                  
+                  myTelephonenumber = '221-221-221-%s' % i
+                </script>
+                
+                <message>
+                  'Binding as "%s", add description %s to entry %s on \
+                  server %s:%s. -- Expect: SUCCESS' % \
+                  (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
+                   server.getHostname(), server.getPort())
+                </message>
+                <!-- Modify entry on one of the servers -->
+                <call function="'modifyAnAttribute'">
+                  { 'location'          : server.getHostname(),
+                    'dsPath'            : serverPath,
+                    'dsInstanceHost'    : server.getHostname(),
+                    'dsInstancePort'    : server.getPort(),
+                    'dsInstanceDn'      : myEntry.getDn(),
+                    'dsInstancePswd'    : myUserpassword,
+                    'DNToModify'        : myTargetEntryDn,
+                    'attributeName'     : 'telephonenumber',
+                    'newAttributeValue' : myTelephonenumber,
+                    'changetype'        : 'add'
+                  }
+                </call>
+              </sequence>
+            </iterate>
+            
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+          
+          
+  <!--- Test Case information
+  #@TestMarker          Replication ACI Tests
+  #@TestName            Replication: ACI: Modify_replace ACI permission
+  #@TestID              Modify_replace ACI permission
+  #@TestPurpose         Check ACI replication over a modify_replace of
+                        the ACI permission
+  #@TestPreamble
+  #@TestSteps           Binding as user, compare telephonenumber value
+                        to child entry (expect SUCCESS)
+  #@TestSteps           Replace ACI on parent entry: deny user access to
+                        telephonenumber attributes
+  #@TestSteps           Binding as user, compare telephonenumber value
+                        to child entry (expect ERROR 50)
+  #@TestPostamble
+  #@TestResult          Success if the servers synchronised and the aci
+                        correctly applied after replication
+  -->
+  <function name="replication_aci_004" scope="local">
+    <testcase name="getTestCaseName('Modify_replace ACI permission')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: ACI: Modify_replace ACI permission. Check ACI \
+              replication over a modify_replace of the ACI permission.'
+            </message>
+            
+            <script>
+              myAci = "(targetattr=\"telephonenumber\")(version 3.0; acl \"Deny ACI-user access to telephonenumber\"; deny (all) userdn=\"ldap:///cn=ACI user,ou=People,%s\";)" % synchroSuffix
+              myUserpassword = 'userPwd'
+
+              myEntry = Entry('cn=ACI user', synchroSuffix)
+              
+              myTargetEntryDn   = 'uid=sholmes,ou=People,%s' % synchroSuffix
+              myTelephonenumber = '+1 408 555 6789'
+            </script>
+            
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                <script>
+                  serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+                </script>
+                
+                <message>
+                  'Binding as "%s", compare telephonenumber:%s value to \
+                  entry %s on server %s:%s. -- Expect: SUCCESS' % \
+                  (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
+                   server.getHostname(), server.getPort())
+                </message>
+                    
+                <!-- Compare 'telephonenumber:+1 408 555 6789' value to entry 
+                 !   uid=sholmes,ou=People,o=example -->
+                <call function="'ldapCompareWithScript'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : serverPath,
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : myEntry.getDn(),
+                    'dsInstancePswd' : myUserpassword,
+                    'dsDn'           : ['telephonenumber:%s' % \
+                                        myTelephonenumber, myTargetEntryDn],
+                    'expectedRC'     : 0
+                  }                
+                </call>
+              </sequence>
+            </iterate>
+                
+            <!-- Replace aci on entry ou=People,o=example on "master" server:
+             !   (targetattr="telephonenumber")(version 3.0; acl 
+             !   "Deny ACI-user access to telephonenumber"; deny (all)
+             !   userdn="ldap:///cn=ACI user,ou=People,o=example";)  
+            -->
+            <message>
+              'Replace ACI on entry ou=People,%s: \n%s' % \
+              (synchroSuffix, myAci)
+            </message>
+            <call function="'modifyAnAttribute'">
+              { 'location'          : masterHost,
+                'dsPath'            : masterPath,
+                'dsInstanceHost'    : masterHost,
+                'dsInstancePort'    : master.getPort(),
+                'dsInstanceDn'      : master.getRootDn(),
+                'dsInstancePswd'    : master.getRootPwd(),
+                'DNToModify'        : 'ou=People,%s' % synchroSuffix,
+                'attributeName'     : 'aci',
+                'newAttributeValue' : myAci,
+                'changetype'        : 'replace'
+              }
+            </call>
+                                        
+            <message>
+              '+++ New ACI +++\nDeny "%s" access to all telephonenumber \
+              attributes under ou=People,%s.' % \
+              (myEntry.getDn(), synchroSuffix) 
+            </message>
+            
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                <script>
+                  serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+                </script>
+                
+                <message>
+                  'Binding as "%s", compare telephonenumber:%s value to \
+                  entry %s on server %s:%s. -- Expect: ERROR 50 \
+                  (Insufficient Access Rights)' % \
+                  (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
+                   server.getHostname(), server.getPort())
+                </message>
+                    
+                <!-- Compare 'telephonenumber:+1 408 555 6789' value to entry 
+                 !   uid=sholmes,ou=People,o=example -->
+                <call function="'ldapCompareWithScript'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : serverPath,
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : myEntry.getDn(),
+                    'dsInstancePswd' : myUserpassword,
+                    'dsDn'           : ['telephonenumber:%s' % \
+                                        myTelephonenumber, myTargetEntryDn],
+                    'expectedRC'     : 50
+                  }                
+                </call>
+              </sequence>
+            </iterate>
+            
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication ACI Tests
+  #@TestName            Replication: ACI: Modify_replace ACI bind rule
+  #@TestID              Modify_replace ACI bind rule
+  #@TestPurpose         Check ACI replication over a modify_replace of
+                        the ACI bind rule
+  #@TestPreamble        Add new user entry
+  #@TestSteps           Binding as new user, compare telephonenumber
+                        value to child entry  (expect SUCCESS)
+  #@TestSteps           Replace ACI on parent entry: deny users with
+                        a given sn access to telephonenumber attributes
+  #@TestSteps           Binding as new user, compare telephonenumber
+                        value to child entry  (expect ERROR 50)
+  #@TestPostamble
+  #@TestResult          Success if the servers synchronised and the aci
+                        correctly applied after replication
+  -->
+  <function name="replication_aci_005" scope="local">
+    <testcase name="getTestCaseName('Modify_replace ACI bind rule')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: ACI: Modify_replace ACI bind rule. Check ACI \
+              replication over a modify_replace of the ACI bind rule.'
+            </message>
+            
+            <script>
+              mySn  = 'ACI repl user'
+              myAci = "(targetattr=\"telephonenumber\")(version 3.0; acl \"Deny ACI repl users access to telephonenumber\"; deny (all) userdn=\"ldap:///%s??sub?(sn=%s)\";)" % (synchroSuffix, mySn)
+              myUserpassword = 'secondUserPwd'
+
+              myEntry = Entry('cn=Second ACI user', synchroSuffix)
+              myEntry.addAttr('sn', mySn)
+              myEntry.addAttr('userpassword', myUserpassword)
+              
+              myTargetEntryDn   = 'uid=sholmes,ou=People,%s' % synchroSuffix
+              myTelephonenumber = '+1 408 555 6789'
+            </script>
+            
+            <!-- Add user entry to "master" server -->
+            <message>
+              'Add user entry %s' % myEntry.getDn()
+            </message>
+            <call function="'addAnEntry'">
+              { 'location'       : masterHost,
+                'dsPath'         : masterPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'DNToAdd'        : myEntry.getDn(),
+                'listAttributes' : myEntry.getAttrList()
+              }
+            </call>
+            
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                <script>
+                  serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+                </script>
+                
+                <message>
+                  'Binding as "%s", compare telephonenumber:%s value to \
+                  entry %s on server %s:%s. -- Expect: SUCCESS' % \
+                  (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
+                   server.getHostname(), server.getPort())
+                </message>
+                    
+                <!-- Compare 'telephonenumber:+1 408 555 6789' value to entry 
+                 !   uid=sholmes,ou=People,o=example -->
+                <call function="'ldapCompareWithScript'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : serverPath,
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : myEntry.getDn(),
+                    'dsInstancePswd' : myUserpassword,
+                    'dsDn'           : ['telephonenumber:%s' % \
+                                        myTelephonenumber, myTargetEntryDn],
+                    'expectedRC'     : 0
+                  }                
+                </call>
+              </sequence>
+            </iterate>
+                
+            <!-- Replace aci on entry ou=People,o=example on "master" server:
+             !   (targetattr="telephonenumber")(version 3.0; acl 
+             !   "Deny ACI repl users access to telephonenumber"; deny (all)
+             !   userdn="ldap:///o=example??sub?(sn=ACI repl user)";)  
+            -->
+            <message>
+              'Replace ACI on entry ou=People,%s: \n%s' % \
+              (synchroSuffix, myAci)
+            </message>
+            <call function="'modifyAnAttribute'">
+              { 'location'          : masterHost,
+                'dsPath'            : masterPath,
+                'dsInstanceHost'    : masterHost,
+                'dsInstancePort'    : master.getPort(),
+                'dsInstanceDn'      : master.getRootDn(),
+                'dsInstancePswd'    : master.getRootPwd(),
+                'DNToModify'        : 'ou=People,%s' % synchroSuffix,
+                'attributeName'     : 'aci',
+                'newAttributeValue' : myAci,
+                'changetype'        : 'replace'
+              }
+            </call>
+                                        
+            <message>
+              '+++ New ACI +++\nDeny users with (sn=%s) access to all \
+              telephonenumber attributes under ou=People,%s.' % \
+              (mySn, synchroSuffix) 
+            </message>
+            
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                <script>
+                  serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+                </script>
+                
+                <message>
+                  'Binding as "%s", compare telephonenumber:%s value to \
+                  entry %s on server %s:%s. -- Expect: ERROR 50 \
+                  (Insufficient Access Rights)' % \
+                  (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
+                   server.getHostname(), server.getPort())
+                </message>
+                    
+                <!-- Compare 'telephonenumber:+1 408 555 6789' value to entry 
+                 !   uid=sholmes,ou=People,o=example -->
+                <call function="'ldapCompareWithScript'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : serverPath,
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : myEntry.getDn(),
+                    'dsInstancePswd' : myUserpassword,
+                    'dsDn'           : ['telephonenumber:%s' % \
+                                        myTelephonenumber, myTargetEntryDn],
+                    'expectedRC'     : 50
+                  }                
+                </call>
+              </sequence>
+            </iterate>
+            
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+          
+
+  <!--- Test Case information
+  #@TestMarker          Replication ACI Tests
+  #@TestName            Replication: ACI: Bypass-acl privilege
+  #@TestID              Bypass-acl privilege
+  #@TestPurpose         Check the bypass-acl privilege is replicated and
+                        successfully applied over the topology
+  #@TestPreamble
+  #@TestSteps           Binding as new user, compare telephonenumber
+                        value to child entry  (expect ERROR 50)
+  #@TestSteps           Add ds-privilege-name:bypass-acl to new user
+  #@TestSteps           Binding as new user, compare telephonenumber
+                        value to child entry  (expect SUCCESS)
+  #@TestPostamble
+  #@TestResult          Success if the servers synchronised and the aci
+                        correctly applied after replication
+  -->
+  <function name="replication_aci_006" scope="local">
+    <testcase name="getTestCaseName('Bypass-acl privilege')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: ACI: Bypass-acl privilege. Check the bypass-acl \
+              privilege is replicated and successfully applied over the \
+              topology'
+            </message>
+            
+            <script>
+              mySn = 'ACI repl user'
+              myAci = "(targetattr=\"telephonenumber\")(version 3.0; acl \"Deny ACI repl users access to telephonenumber\"; deny (all) userdn=\"ldap:///%s??sub?(sn=%s)\";)" % (synchroSuffix, mySn)
+              myUserpassword = 'secondUserPwd'
+              myPrivilege  = 'bypass-acl'
+
+              myEntry = Entry('cn=Second ACI user', synchroSuffix)
+              
+              myTargetEntryDn   = 'uid=sholmes,ou=People,%s' % synchroSuffix
+              myTelephonenumber = '+1 408 555 6789'
+            </script>
+            
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                <script>
+                  serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+                </script>
+                
+                <message>
+                  'Binding as "%s", compare telephonenumber:%s value to \
+                  entry %s on server %s:%s. -- Expect: ERROR 50 \
+                  (Insufficient Access Rights)' % \
+                  (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
+                   server.getHostname(), server.getPort())
+                </message>
+                    
+                <!-- Compare 'telephonenumber:+1 408 555 6789' value to entry 
+                 !   uid=sholmes,ou=People,o=example -->
+                <call function="'ldapCompareWithScript'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : serverPath,
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : myEntry.getDn(),
+                    'dsInstancePswd' : myUserpassword,
+                    'dsDn'           : ['telephonenumber:%s' % \
+                                        myTelephonenumber, myTargetEntryDn],
+                    'expectedRC'     : 50
+                  }                
+                </call>
+              </sequence>
+            </iterate>
+                
+            <!-- Add bypass-acl privilege to new user entry -->
+            <message>
+              'Add %s privilege to entry %s: \n' % \
+              (myPrivilege, myEntry.getDn())
+            </message>
+            <call function="'modifyAnAttribute'">
+              { 'location'          : masterHost,
+                'dsPath'            : masterPath,
+                'dsInstanceHost'    : masterHost,
+                'dsInstancePort'    : master.getPort(),
+                'dsInstanceDn'      : master.getRootDn(),
+                'dsInstancePswd'    : master.getRootPwd(),
+                'DNToModify'        : myEntry.getDn(),
+                'attributeName'     : 'ds-privilege-name',
+                'newAttributeValue' : myPrivilege,
+                'changetype'        : 'add'
+              }
+            </call>
+                                        
+            <message>
+              '+++ Active ACI +++\nDeny users with (sn=%s) access to all \
+              telephonenumber attributes under ou=People,%s.' % \
+              (mySn, synchroSuffix) 
+            </message>
+            
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                <script>
+                  serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+                </script>
+                
+                <message>
+                  'Binding as "%s", compare telephonenumber:%s value to \
+                  entry %s on server %s:%s. -- Expect: SUCCESS' % \
+                  (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
+                   server.getHostname(), server.getPort())
+                </message>
+                    
+                <!-- Compare 'telephonenumber:+1 408 555 6789' value to entry 
+                 !   uid=sholmes,ou=People,o=example -->
+                <call function="'ldapCompareWithScript'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : serverPath,
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : myEntry.getDn(),
+                    'dsInstancePswd' : myUserpassword,
+                    'dsDn'           : ['telephonenumber:%s' % \
+                                        myTelephonenumber, myTargetEntryDn],
+                    'expectedRC'     : 0
+                  }                
+                </call>
+              </sequence>
+            </iterate>
+            
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+          
+          
+  <!--- Test Case information
+  #@TestMarker          Replication ACI Tests
+  #@TestName            Replication: ACI: Modify_delete ACI
+  #@TestID              Modify_delete ACI
+  #@TestPurpose         Check ACI replication over a modify_delete
+  #@TestPreamble
+  #@TestSteps           Binding as user, compare telephonenumber value
+                        to child entry  (expect ERROR 50)
+  #@TestSteps           Delete ACI on parent entry
+  #@TestSteps           Binding as user, compare telephonenumber value
+                        to child entry  (expect SUCCESS)
+  #@TestPostamble
+  #@TestResult          Success if the servers synchronised and the aci
+                        correctly applied after replication
+  -->
+  <function name="replication_aci_007" scope="local">
+    <testcase name="getTestCaseName('Modify_delete ACI')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: ACI: Modify_delete ACI. Check ACI \
+              replication over a modify_delete.'
+            </message>
+            
+            <script>
+              mySn = 'ACI repl user'
+              myAci = "(targetattr=\"telephonenumber\")(version 3.0; acl \"Deny ACI repl users access to telephonenumber\"; deny (all) userdn=\"ldap:///%s??sub?(sn=%s)\";)" % (synchroSuffix, mySn)
+              myUserpassword = 'userPwd'
+
+              myEntry = Entry('cn=ACI user', synchroSuffix)
+              
+              myTargetEntryDn   = 'uid=sholmes,ou=People,%s' % synchroSuffix
+              myTelephonenumber = '+1 408 555 6789'
+            </script>
+            
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                <script>
+                  serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+                </script>
+                
+                <message>
+                  'Binding as "%s", compare telephonenumber:%s value to \
+                  entry %s on server %s:%s. -- Expect: ERROR 50 \
+                  (Insufficient Access Rights)' % \
+                  (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
+                   server.getHostname(), server.getPort())
+                </message>
+                    
+                <!-- Compare 'telephonenumber:+1 408 555 6789' value to entry 
+                 !   uid=sholmes,ou=People,o=example -->
+                <call function="'ldapCompareWithScript'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : serverPath,
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : myEntry.getDn(),
+                    'dsInstancePswd' : myUserpassword,
+                    'dsDn'           : ['telephonenumber:%s' % \
+                                        myTelephonenumber, myTargetEntryDn],
+                    'expectedRC'     : 50
+                  }                
+                </call>
+              </sequence>
+            </iterate>
+                
+            <!-- Delete aci on entry ou=People,o=example on "master" server:
+             !   (targetattr="telephonenumber")(version 3.0; acl 
+             !   "Deny ACI repl users access to telephonenumber"; deny (all)
+             !   userdn="ldap:///o=example??sub?(sn=ACI repl user)";)  
+            -->
+            <message>
+              'Delete ACI on entry ou=People,%s: \n%s' % \
+              (synchroSuffix, myAci)
+            </message>
+            <call function="'modifyAnAttribute'">
+              { 'location'          : masterHost,
+                'dsPath'            : masterPath,
+                'dsInstanceHost'    : masterHost,
+                'dsInstancePort'    : master.getPort(),
+                'dsInstanceDn'      : master.getRootDn(),
+                'dsInstancePswd'    : master.getRootPwd(),
+                'DNToModify'        : 'ou=People,%s' % synchroSuffix,
+                'attributeName'     : 'aci',
+                'newAttributeValue' : myAci,
+                'changetype'        : 'delete'
+              }
+            </call>
+                                        
+            <message>
+              '+++ New ACI +++\nNo aci in ou=People,%s.' % synchroSuffix 
+            </message>
+            
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                <script>
+                  serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+                </script>
+                
+                <message>
+                  'Binding as "%s", compare telephonenumber:%s value to \
+                  entry %s on server %s:%s. -- Expect: SUCCESS' % \
+                  (myEntry.getDn(), myTelephonenumber, myTargetEntryDn, 
+                   server.getHostname(), server.getPort())
+                </message>
+                    
+                <!-- Compare 'telephonenumber:+1 408 555 6789' value to entry 
+                 !   uid=sholmes,ou=People,o=example -->
+                <call function="'ldapCompareWithScript'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : serverPath,
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : myEntry.getDn(),
+                    'dsInstancePswd' : myUserpassword,
+                    'dsDn'           : ['telephonenumber:%s' % \
+                                        myTelephonenumber, myTargetEntryDn],
+                    'expectedRC'     : 0
+                  }                
+                </call>
+              </sequence>
+            </iterate>
+            
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+</stax>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/basic/basic.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/basic/basic.xml
index 847fd34..3b97692 100644
--- a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/basic/basic.xml
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/basic/basic.xml
@@ -7,2061 +7,165 @@
  ! 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 2007-2010 Sun Microsystems, Inc.
- !      Portions Copyright 2011-2012 ForgeRock AS.
+ !      Copyright 2012 ForgeRock AS.
  ! -->
 <stax>
-
   <defaultcall function="replication_basic"/>
-
-  <function name="replication_basic">
-
+  <function name="replication_basic" scope="local">
     <sequence>
+      <block name="'replication_basic'">
+        <try>
+          <sequence>
+            <script>
+              CurrentTestPath['group'] = 'replication'        
+              CurrentTestPath['suite'] = 'basic'
+              
+              _group=CurrentTestPath['group']
+              _groupdir='%s/testcases/%s' % (TESTS_DIR,_group)
+              _label = 'Replication Basic'
+            </script>
 
-      <block name="'basic'">
-
-        <sequence>
-    
-          <script>
-            if not CurrentTestPath.has_key('group'):
-              CurrentTestPath['group']='replication'
-            CurrentTestPath['suite']=STAXCurrentBlock
-          </script>
-    
-          <call function="'testSuite_Preamble'"/>
-
-          <!--- Test Suite information
-          #@TestSuiteName       Replication Basic Tests
-          #@TestSuitePurpose    Verify that the basic operations are replicated
-                                correctly between two serrvers.
-          #@TestSuiteID         Basic Tests
-          #@TestSuiteGroup      Basic
-          #@TestGroup           Replication
-          #@TestScript          replication_basic.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'" >
-            { 'label'    : 'Replication Basic' }
-          </call>
-    
-          <import machine="STAF_LOCAL_HOSTNAME"
-            file="'%s/testcases/replication/basic/replication_basic_setup.xml'
-              % (TESTS_DIR)"/>
-          <call function="'replication_basic_setup'" />
-
-                                          
-          <!--- Test Case information
-          #@TestMarker          Replication Basic Tests
-          #@TestName            Replication: Basic: Add Entry
-          #@TestID              Add Entry
-          #@TestPurpose         Check that an entry add is well propagated by
-                                replication.
-          #@TestPreamble
-          #@TestSteps           Add root suffix entry
-          #@TestPostamble
-          #@TestResult          Success if trees synchronised over the topology
-          -->                  
-          <testcase name="getTestCaseName('Add Entry')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Add Entry. Check that an added entry is \
-                well propagated by replication.'
-              </message>
- 
-              <!-- Modify "master" server -->   
-              <call function="'addEntry'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(), 
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'entryToBeAdded' : '%s/replication_add_root_suffix.ldif' \
-                                     % client.getTmpDir()
-                }
-              </call>
-
-                
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Modify Entry
-          #@TestID              Modify Entry
-          #@TestPurpose         Check that an entry modify is well propagated by
-                                replication.
-          #@TestPreamble
-          #@TestSteps           Add entry on server
-          #@TestSteps           Modify entry
-          #@TestSteps           Check modify worked on server
-          #@TestPostamble
-          #@TestResult          Success if modify worked and trees synchronised
-                                over the topology
-          -->                      
-          <testcase name="getTestCaseName('Modify Entry')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Modify Entry. Check that an entry modify \
-                is well propagated by replication.'
-              </message>
- 
-
-              <!-- Modify "master" server -->   
-              <call function="'addEntry'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'entryToBeAdded' : '%s/replication_add_single.ldif' \
-                                     % client.getTmpDir()
-                }
-              </call>
-              <call function="'ldapModifyWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsFilename'     : '%s/replication_mod.ldif' \
-                                     % client.getTmpDir()
-                }
-              </call>
-
-              <!-- Check modify worked on "master" server -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : entryDn,
-                  'dsFilter'       : '%s=%s' % (attr_type,attr_value)
-                }
-              </call>
-              <script>
-                searchRC = STAXResult[0][0]
-                searchResult = STAXResult[0][1]
-                resultLength = len(searchResult) > 0
-              </script>
-              <call function="'checktestRC'">
-                { 'returncode' : resultLength ,
-                  'result'     : searchResult ,
-                  'expected'   : 1
-                }
-              </call>                       
-
-                
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Delete Entry
-          #@TestID              Delete Entry
-          #@TestPurpose         Check that an entry delete is well propagated by
-                                replication.
-          #@TestPreamble
-          #@TestSteps           Delete entry
-          #@TestSteps           Check delete worked on server
-          #@TestPostamble
-          #@TestResult          Success if delete worked and trees synchronised
-                                over the topology
-          -->                      
-          <testcase name="getTestCaseName('Delete Entry')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Delete Entry. Check that an entry delete \
-                is well propagated by replication.'
-              </message>
-
-
-              <!-- Modify "master" server -->    
-              <call function="'DeleteEntry'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : entryDn
-                }
-              </call>
-
-              <!-- Check modify worked on "master" server -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'         : clientHost,
-                  'dsPath'           : clientPath,
-                  'dsInstanceHost'   : masterHost,
-                  'dsInstancePort'   : master.getPort(),
-                  'dsInstanceDn'     : master.getRootDn(),
-                  'dsInstancePswd'   : master.getRootPwd(),
-                  'dsBaseDN'         : entryDn,
-                  'dsFilter'         : 'objectclass=*',
-                  'expectedRC'       : 32
-                }                  
-              </call>                      
-
-                
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Add Multiple Entries
-          #@TestID              Add Multiple Entries
-          #@TestPurpose         Check that a multiple-entry add is well
-                                propagated by replication.
-          #@TestPreamble        Delete root suffix entry
-          #@TestSteps           Add multiple entries
-          #@TestPostamble
-          #@TestResult          Success if trees synchronised over the topology
-          -->                  
-          <testcase name="getTestCaseName('Add Multiple Entries')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Add Multiple Entries. Check that a \
-                multiple-entry add is well propagated by replication.'
-              </message>
-
-              <!-- Delete the root entry, as it is already present in 
-                Example.ldif file -->
-              <call function="'DeleteEntry'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : synchroSuffix
-                }
-              </call>
-
-              <!-- Modify "master" server -->
-              <call function="'addEntry'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(), 
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'entryToBeAdded' : '%s/replication/Example.ldif' \
-                                     % master.getDataDir()
-                }
-              </call>             
-
-                
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Modify Entry - add single 
-                                attribute
-          #@TestID              Modify Entry - add single attribute
-          #@TestPurpose         Check that an entry modify is well propagated by
-                                replication.
-          #@TestPreamble
-          #@TestSteps           Add description attribute to entry
-          #@TestSteps           Check modify worked
-          #@TestPostamble
-          #@TestResult          Success if modify worked and trees synchronised
-                                over the topology
-          -->
-          <testcase name="getTestCaseName
-                          ('Modify Entry - add single attribute')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Modify Entry - add single attribute. \
-                Check that an entry modify is well propagated by replication.'
-              </message>
-
-               <!-- Modify "master" server -->
-              <call function="'modifyAnAttribute'">
-                { 'dsPath'            : masterPath,
-                  'dsInstanceHost'    : masterHost ,
-                  'dsInstancePort'    : master.getPort(),
-                  'dsInstanceDn'      : master.getRootDn(),
-                  'dsInstancePswd'    : master.getRootPwd(),
-                  'DNToModify'        : 'uid=tmorris, ou=People,%s' \
-                                        % synchroSuffix,
-                  'attributeName'     : 'description',
-                  'newAttributeValue' : ' ',
-                  'changetype'        : 'add'
-                }
-              </call>       
-
-              <!-- Check modify worked on "master" server -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort() ,
-                  'dsInstanceDn'   : master.getRootDn() ,
-                  'dsInstancePswd' : master.getRootPwd() ,
-                  'dsBaseDN'       : 'uid=tmorris, ou=People,%s' \
-                                     % synchroSuffix,
-                  'dsFilter'       : 'description=*'
-                }
-              </call>
-              <script>
-                searchRC = STAXResult[0][0]
-                searchResult = STAXResult[0][1]
-                resultLength = len(searchResult) > 0
-              </script>
-              <call function="'checktestRC'">
-                { 'returncode' : resultLength ,
-                  'result'     : searchResult ,
-                  'expected'   : 1
-                }
-              </call>                       
-
-                
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Modify Entry - add single 
-                                value
-          #@TestID              Modify Entry - add single value
-          #@TestPurpose         Check that an entry modify is well propagated by
-                                replication.
-          #@TestPreamble
-          #@TestSteps           Add single-valued attribute to entry
-          #@TestSteps           Check modify worked
-          #@TestPostamble
-          #@TestResult          Success if modify worked and trees synchronised
-                                over the topology
-          -->
-          <testcase name="getTestCaseName('Modify Entry - add single value')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Modify Entry - add single value. Check \
-                that an entry modify is well propagated by replication.'
-              </message>
-
-              <!-- Modify "master" server -->
-              <call function="'modifyAnAttribute'">
-                { 'dsPath'            : masterPath,
-                  'dsInstanceHost'    : masterHost ,
-                  'dsInstancePort'    : master.getPort(),
-                  'dsInstanceDn'      : master.getRootDn(),
-                  'dsInstancePswd'    : master.getRootPwd(),
-                  'DNToModify'        : 'uid=tmorris, ou=People,%s' \
-                                        % synchroSuffix,
-                  'attributeName'     : 'departmentnumber',
-                  'newAttributeValue' : '5203214400',
-                  'changetype'        : 'add'
-                }
-              </call>
-
-              <!-- Check modify worked on "master" server -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : 'uid=tmorris, ou=People,%s' \
-                                     % synchroSuffix,
-                  'dsFilter'       : 'departmentnumber=5203214400'
-                }
-              </call>
-              <script>
-                searchRC = STAXResult[0][0]
-                searchResult = STAXResult[0][1]
-                resultLength = len(searchResult) > 0
-              </script>
-              <call function="'checktestRC'">
-                { 'returncode' : resultLength,
-                  'result'     : searchResult,
-                  'expected'   : 1
-                }
-              </call>                       
-
-                                
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Modify Entry - delete single
-                                attribute
-          #@TestID              Modify Entry - delete single attribute
-          #@TestPurpose         Check that an entry modify is well propagated by
-                                replication.
-          #@TestPreamble
-          #@TestSteps           Delete attribute in entry
-          #@TestSteps           Check delete worked
-          #@TestPostamble
-          #@TestResult          Success if delete worked and trees synchronised
-                                over the topology
-          -->                      
-          <testcase name="getTestCaseName
-                          ('Modify Entry - delete single attribute')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Modify Entry - delete single attribute. \
-                Check that an entry modify is well propagated by replication.'
-              </message>
-
-
-              <script>
-                filename = 'replication_mod_delete.ldif'
-                filePath = '%s/%s' % (local.temp,filename)
-                dn = 'uid=smason, ou=People,%s' % synchroSuffix
-                modif = 'delete'
-                attrType = 'roomNumber'
-                attrValue = None
-                write_replication_mod_ldif_file(filePath, dn, modif, attrType,
-                                                attrValue)
-              </script>
-
-              <!-- Copy the replication_mod ldif to client host -->
-              <message>
-                'Copy %s file from %s to %s' \
-                % (filename,local.temp,client.getTmpDir())
-              </message>
-              <call function="'copyFile'">
-                { 'srcfile'    : filePath,
-                  'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
-                  'remotehost' : client.getHostname()
-                }
-              </call>                    
-
-              <!-- Modify "master" server -->                                
-              <call function="'ldapModifyWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
-                }
-              </call>
-                                
-              <!-- Check modify worked on "master" server -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : 'uid=smason, ou=People,%s' % synchroSuffix,
-                  'dsFilter'       : 'roomNumber=*'
-                }
-              </call>
-              <script>
-                searchRC = STAXResult[0][0]
-                searchResult = STAXResult[0][1]
-                resultLength = len(searchResult) > 0
-              </script>
-              <call function="'checktestRC'">
-                { 'returncode' : resultLength,
-                  'result'     : searchResult,
-                  'expected'   : 0
-                }
-              </call>
-
-
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Modify Entry - delete single
-                                value
-          #@TestID              Modify Entry - delete single value
-          #@TestPurpose         Check that an entry modify is well propagated by
-                                replication.
-          #@TestPreamble
-          #@TestSteps           Delete single attribute value in entry
-          #@TestSteps           Check delete worked
-          #@TestPostamble
-          #@TestResult          Success if delete worked and trees synchronised
-                                over the topology
-          -->                      
-          <testcase name="getTestCaseName
-                          ('Modify Entry - delete single value')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Modify Entry - delete single value. \
-                Check that an entry modify is well propagated by replication.'
-              </message>
-
-              <!-- Modify "master" server -->
-              <call function="'modifyAnAttribute'">
-                { 'dsPath'            : masterPath,
-                  'dsInstanceHost'    : masterHost ,
-                  'dsInstancePort'    : master.getPort(),
-                  'dsInstanceDn'      : master.getRootDn(),
-                  'dsInstancePswd'    : master.getRootPwd(),
-                  'DNToModify'        : 'uid=jwalker, ou=People,%s' \
-                                        % synchroSuffix,
-                  'attributeName'     : 'roomNumber',
-                  'newAttributeValue' : '3915',
-                  'changetype'        : 'delete'
-                }
-              </call>
-
-              <!-- Check modify worked on "master" server -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : 'uid=jwalker, ou=People,%s' \
-                                     % synchroSuffix,
-                  'dsFilter'       : 'roomNumber=3915'
-                }
-              </call>
-              <script>
-                searchRC = STAXResult[0][0]
-                searchResult = STAXResult[0][1]
-                resultLength = len(searchResult) > 0
-              </script>
-              <call function="'checktestRC'">
-                { 'returncode' : resultLength,
-                  'result'     : searchResult,
-                  'expected'   : 0
-                }
-              </call>       
-                
-                    
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Modify Entry - add multiple
-                                values
-          #@TestID              Modify Entry - add multiple values
-          #@TestPurpose         Check that an entry modify is well propagated by
-                                replication.
-          #@TestPreamble
-          #@TestSteps           Add multiple-valued attribute to entry
-          #@TestSteps           Check add worked
-          #@TestPostamble
-          #@TestResult          Success if add worked and trees synchronised
-                                over the topology
-          -->
-          <testcase name="getTestCaseName
-                          ('Modify Entry - add multiple values')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Modify Entry - add multiple values. \
-                Check that an entry modify is well propagated by replication.'
-              </message>
-                
-              <script>
-                valuesToAdd = []
-                valuesToAdd.append('postaladdress:Residence Parc Europe')
-                valuesToAdd.append('postaladdress:Appartement #6')
-                valuesToAdd.append('postaladdress:31 Rue General Mangin')
-                valuesToAdd.append('postaladdress:38100 Grenoble')
-              </script>
-
-              <!-- Modify "master" server -->
-              <call function="'modifyAnAttribute'">
-                { 'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToModify'     : 'uid=jwallace, ou=People,%s' \
-                                     % synchroSuffix,
-                  'listAttributes' : valuesToAdd,
-                  'changetype'     : 'add'
-                }
-              </call>
-
-              <script>
-                filter1 = '(postaladdress=Residence Parc Europe)'
-                filter2 = '(postaladdress=Appartement #6)'
-                filter3 = '(postaladdress=31 Rue General Mangin)'
-                filter4 = '(postaladdress=38100 Grenoble)'
-              </script>
-              <!-- Check modify worked on "master" server -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : 'uid=jwallace, ou=People,%s' \
-                                     % synchroSuffix,
-                  'dsFilter'       : '&amp;%s%s%s%s' \
-                                     % (filter1, filter2, filter3, filter4)
-                }
-              </call>
-              <script>
-                searchRC = STAXResult[0][0]
-                searchResult = STAXResult[0][1]
-                resultLength = len(searchResult) > 0
-              </script>
-              <call function="'checktestRC'">
-                { 'returncode' : resultLength,
-                  'result'     : searchResult,
-                  'expected'   : 1
-                }
-              </call>                       
-    
-                
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Modify Entry - delete
-                                multiple values
-          #@TestID              Modify Entry - delete multiple values
-          #@TestPurpose         Check that an entry modify is well propagated by
-                                replication.
-          #@TestPreamble
-          #@TestSteps           Delete multiple values in same attribute
-          #@TestSteps           Check delete worked
-          #@TestPostamble
-          #@TestResult          Success if delete worked and trees synchronised
-                                over the topology
-          -->                      
-          <testcase name="getTestCaseName
-                          ('Modify Entry - delete multiple values')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Modify Entry - delete multiple values. \
-                Check that an entry modify is well propagated by replication.'
-              </message>
-
-                
-              <script>
-                valuesToDelete = []
-                valuesToDelete.append('postaladdress:Appartement #6')
-                valuesToDelete.append('postaladdress:38100 Grenoble')
-              </script>
-
-              <!-- Modify "master" server -->
-              <call function="'modifyAnAttribute'">
-                { 'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToModify'     : 'uid=jwallace, ou=People,%s' \
-                                     % synchroSuffix,
-                  'listAttributes' : valuesToDelete,
-                  'changetype'     : 'delete'
-                }
-              </call>
-
-              <script>
-                filter1 = '(postaladdress=Appartement #6)'
-                filter2 = '(postaladdress=38100 Grenoble)'
-              </script>
-              <!-- Check modify worked on "master" server -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : 'uid=jwallace, ou=People,%s' \
-                                     % synchroSuffix,
-                  'dsFilter'       : '|%s%s' % (filter1, filter2)
-                }
-              </call>
-              <script>
-                searchRC = STAXResult[0][0]
-                searchResult = STAXResult[0][1]
-                resultLength = len(searchResult) > 0
-              </script>
-              <call function="'checktestRC'">
-                { 'returncode' : resultLength,
-                  'result'     : searchResult,
-                  'expected'   : 0
-                }
-              </call>                 
-
-
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Modify Entry - replace
-                                multiple values
-          #@TestID              Modify Entry - replace multiple values
-          #@TestPurpose         Check that an entry modify is well propagated by
-                                replication.
-          #@TestPreamble
-          #@TestSteps           Replace multiple values in same attribute
-          #@TestSteps           Check replace worked
-          #@TestPostamble
-          #@TestResult          Success if replace worked and trees synchronised
-                                over the topology
-          -->                      
-          <testcase name="getTestCaseName
-                          ('Modify Entry - replace multiple values')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Modify Entry - replace multiple values. \
-                Check that an entry modify is well propagated by replication.'
-              </message>
-
-                
-              <script>
-                valuesToReplace = []
-                valuesToReplace.append('postaladdress: Residence Letilleuil')
-                valuesToReplace.append('postaladdress: 18 rue Nicolas Chorier')
-              </script>
-
-              <!-- Modify "master" server -->
-              <call function="'modifyAnAttribute'">
-                { 'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToModify'     : 'uid=jwallace, ou=People,%s' \
-                                     % synchroSuffix,
-                  'listAttributes' : valuesToReplace,
-                  'changetype'     : 'replace'
-                }
-              </call>
-
-              <script>
-                filter1 = '(postaladdress=Residence Letilleuil)'
-                filter2 = '(postaladdress=18 rue Nicolas Chorier)'
-              </script>                
-              <!-- Check modify worked on "master" server -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : 'uid=jwallace, ou=People,%s' \
-                                     % synchroSuffix,
-                  'dsFilter'       : '&amp;%s%s' % (filter1, filter2)
-                }
-              </call>
-              <script>
-                searchRC = STAXResult[0][0]
-                searchResult = STAXResult[0][1]
-                resultLength = len(searchResult) > 0
-              </script>
-              <call function="'checktestRC'">
-                { 'returncode' : resultLength ,
-                  'result'     : searchResult ,
-                  'expected'   : 1
-                }
-              </call>                 
-
-
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Modify Entry - add single
-                                value to multiple valued attribute
-          #@TestID              Modify Entry - add single value to multiple
-                                valued attribute
-          #@TestPurpose         Check that an entry modify is well propagated by
-                                replication.
-          #@TestPreamble
-          #@TestSteps           Add single value to multiple-valued attribute
-          #@TestSteps           Check value add worked
-          #@TestPostamble
-          #@TestResult          Success if value add worked and trees 
-                                synchronised over the topology
-          -->                      
-          <testcase name="getTestCaseName
-              ('Modify Entry - add single value to multiple valued attribute')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Modify Entry - add single value to \
-                multiple valued attribute. Check that an entry modify is well \
-                propagated by replication.'
-              </message>
-
-                
-              <script>
-                valuesToAdd = []
-                valuesToAdd.append('postaladdress:38000 Grenoble')
-              </script>
-
-              <!-- Modify "master" server -->
-              <call function="'modifyAnAttribute'">
-                { 'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToModify'     : 'uid=jwallace, ou=People,%s' \
-                                     % synchroSuffix,
-                  'listAttributes' : valuesToAdd,
-                  'changetype'     : 'add'
-                }
-              </call>
-
-              <!-- Check modify worked on "master" server -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : 'uid=jwallace, ou=People,%s' \
-                                     % synchroSuffix,
-                  'dsFilter'       : 'postaladdress=38000 Grenoble'
-                }
-              </call>
-              <script>
-                searchRC = STAXResult[0][0]
-                searchResult = STAXResult[0][1]
-                resultLength = len(searchResult) > 0
-              </script>
-              <call function="'checktestRC'">
-                { 'returncode' : resultLength,
-                  'result'     : searchResult,
-                  'expected'   : 1
-                }
-              </call>                 
-
-
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Modify Entry - delete single
-                                value from multiple valued attribute
-          #@TestID              Modify Entry - delete single value from multiple
-                                valued attribute
-          #@TestPurpose         Check that an entry modify is well propagated by
-                                replication.
-          #@TestPreamble
-          #@TestSteps           Delete single value from multiple-valued
-                                attribute
-          #@TestSteps           Check value delete worked
-          #@TestPostamble
-          #@TestResult          Success if value delete worked and trees 
-                                synchronised over the topology
-          -->                      
-          <testcase name="getTestCaseName
-           ('Modify Entry - delete single value from multiple valued attribute')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Modify Entry - delete single value from \
-                multiple valued attribute. Check that an entry modify is well \
-                propagated by replication.'
-              </message>
-
-                      
-              <script>
-                valuesToDelete = []
-                valuesToDelete.append('postaladdress: Residence Letilleuil')
-              </script>
-
-              <!-- Modify "master" server -->                
-              <call function="'modifyAnAttribute'">
-                { 'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToModify'     : 'uid=jwallace, ou=People,%s' \
-                                     % synchroSuffix,
-                  'listAttributes' : valuesToDelete,
-                  'changetype'     : 'delete'
-                }
-              </call>
-
-              <!-- Check modify worked on "master" server -->        
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : 'uid=jwallace, ou=People,%s' \
-                                     % synchroSuffix,
-                  'dsFilter'       : 'postaladdress=Residence Letilleuil'
-                }
-              </call>
-              <script>
-                searchRC = STAXResult[0][0]
-                searchResult = STAXResult[0][1]
-                resultLength = len(searchResult) > 0
-              </script>
-              <call function="'checktestRC'">
-                { 'returncode' : resultLength,
-                  'result'     : searchResult,
-                  'expected'   : 0
-                }
-              </call>                 
-
-
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Modify Entry - replace case
-                                sensitive attribute
-          #@TestID              Modify Entry - replace case sensitive attribute
-          #@TestPurpose         Check that case sensitive attribute
-                                modifications are replicated.
-          #@TestPreamble        
-          #@TestSteps           Add entry 
-          #@TestSteps           Replace description attribute in entry
-          #@TestSteps           Check replace worked
-          #@TestPostamble
-          #@TestResult          Success if replace worked and trees synchronised
-                                over the topology
-          -->                      
-          <testcase name="getTestCaseName
-                          ('Modify Entry - replace case sensitive attribute')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Modify Entry - replace case sensitive \
-                attribute. Check that case sensitive attribute modifications \
-                are replicated.'
-              </message>
-
-                                
-              <!-- Modify "master" server -->
-              <call function="'addEntry'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(), 
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'entryToBeAdded' : '%s/replication/tfitter.ldif' \
-                                     % master.getDataDir()
-                }
-              </call>                         
-            
-              <script>
-                value = 'Profession Tap Fitter and Plumber'
-                valuesToReplace = []
-                valuesToReplace.append('description: %s' % value)
-              </script>
-                
-              <call function="'modifyAnAttribute'">
-                { 'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToModify'     : 'uid=tfitter, ou=People,%s' \
-                                     % synchroSuffix,
-                  'listAttributes' : valuesToReplace,
-                  'changetype'     : 'replace'
-                }
-              </call>
-
-              <script>
-                filter = 'description=%s' % value
-              </script>
-              <!-- Check modify worked on "master" server -->        
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : 'uid=tfitter, ou=People,%s' \
-                                     % synchroSuffix,
-                  'dsFilter'       : filter
-                }
-              </call>
-              <script>
-                searchRC = STAXResult[0][0]
-                searchResult = STAXResult[0][1]
-                resultLength = len(searchResult) > 0
-              </script>
-              <call function="'checktestRC'">
-                { 'returncode' : resultLength,
-                  'result'     : searchResult,
-                  'expected'   : 1
-                }
-              </call>                 
-
-
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Modify Entry - replace
-                                userpassword
-          #@TestID              Modify Entry - replace userpassword
-          #@TestPurpose         Check replaced userpasswords are replicated.
-          #@TestPreamble        
-          #@TestSteps           Add user entry on server A
-          #@TestSteps           Bind as user with userpassword to server A
-          #@TestSteps           Replace user's userpassword
-          #@TestSteps           Bind as user with old userpassword to server B
-          #@TestSteps           Bind as user with new userpassword to server B
-          #@TestPostamble
-          #@TestResult          Success if bind with old userpassword fails with
-                                LDAP_INVALID_CREDENTIALS error and bind with new
-                                user password suceeds and trees are synchronised
-                                over the topology
-          -->                      
-          <testcase name="getTestCaseName
-                          ('Modify Entry - replace userpassword')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Modify Entry - replace userpassword. \
-                Check replaced userpasswords are replicated.'
-              </message>
-
-              <!-- Add entry to "master" server -->
-              <script>
-                userDn = 'uid=pmoriarty, ou=People, %s' % synchroSuffix
-                oldPassword = 'jajejijoju'
-                newPassword = 'JUAJUAJUA'
+            <!--- Test Suite information
+            #@TestSuiteName       Replication Basic Tests
+            #@TestSuitePurpose    Verify that the basic operations are replicated
+                                  correctly between two serrvers.
+            #@TestSuiteID         Basic Tests
+            #@TestSuiteGroup      Basic
+            #@TestGroup           Replication
+            #@TestScript          replication_basic.xml
+            #@TestHTMLLink        http://www.forgerock.org/
+              -->
                   
-                listAttr = []
-                listAttr.append('objectclass:top')
-                listAttr.append('objectclass:organizationalperson')
-                listAttr.append('objectclass:inetorgperson')
-                listAttr.append('objectclass:person')
-                listAttr.append('givenname:Professor')
-                listAttr.append('sn:Moriarty')
-                listAttr.append('cn:Professor Moriarty')
-                listAttr.append('l:London')
-                listAttr.append('userpassword:%s' % oldPassword)
-              </script>
-              <message>
-                'replace userpassword: add user entry %s' % userDn
-              </message>
-              <call function="'addAnEntry'">
-                { 'location'       : masterHost,
-                  'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToAdd'        : userDn,
-                  'listAttributes' : listAttr
-                }
-              </call>
-                
-              <!-- Check userDn can bind with oldPassword on "master" server -->
-              <message>
-                'replace userpassword: bind on master using password %s' \
-                % oldPassword
-              </message>
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : userDn,
-                  'dsInstancePswd' : oldPassword,
-                  'dsBaseDN'       : synchroSuffix,
-                  'dsFilter'       : 'objectclass=*'
-                }
-              </call>                
+            <call function="'testSuite_Preamble'"/>
 
-              <!-- Replace userDn's oldPassword with newPassword on "master" 
-                server -->
-              <message>
-                'replace userpassword: replace user password %s with %s' \
-                % (oldPassword, newPassword)
-              </message>
-              <call function="'modifyAnAttribute'">
-                { 'location'          : masterHost,
-                  'dsPath'            : masterPath,
-                  'dsInstanceHost'    : masterHost,
-                  'dsInstancePort'    : master.getPort(),
-                  'dsInstanceDn'      : master.getRootDn(),
-                  'dsInstancePswd'    : master.getRootPwd(),
-                  'DNToModify'        : userDn,
-                  'attributeName'     : 'userpassword',
-                  'newAttributeValue' : 'JUAJUAJUA',
-                  'changetype'        : 'replace'
-                }
-              </call>
-                
-              <script>
-                consumer = consumerList[0]
-              </script>
-              <!-- Try binding as userDn with oldPassword on "consumer" server:
-                ==> should fail with LDAP_INVALID_CREDENTIALS (49) error -->
-              <message>
-                'replace userpassword: bind on consumer using old password %s :\
-                should fail with error LDAP_INVALID_CREDENTIALS (49)' \
-                % oldPassword
-              </message>
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : consumer.getHostname(),
-                  'dsInstancePort' : consumer.getPort(),
-                  'dsInstanceDn'   : userDn,
-                  'dsInstancePswd' : oldPassword,
-                  'dsBaseDN'       : synchroSuffix,
-                  'dsFilter'       : 'objectclass=*',
-                  'expectedRC'     : 49
-                }
-              </call>
-                
-              <!-- Check userDn can bind with newPassword on "consumer"
-                server -->
-              <message>
-                'replace userpassword: bind on consumer using new password %s :\
-                should pass' % newPassword
-              </message>
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : consumer.getHostname(),
-                  'dsInstancePort' : consumer.getPort(),
-                  'dsInstanceDn'   : userDn,
-                  'dsInstancePswd' : newPassword,
-                  'dsBaseDN'       : synchroSuffix,
-                  'dsFilter'       : 'objectclass=*'
-                }
-              </call>
-                
-              <!-- Delete added entry as clean-up measure -->
-              <message>
-                'replace userpassword: delete user entry %s on master' \
-                % userDn
-              </message>
-              <call function="'DeleteEntry'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : userDn
-                }
-              </call>                
-                
-
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Modify Entry - add binary
-                                attribute
-          #@TestID              Modify Entry - add binary attribute
-          #@TestPurpose         Check that an entry modify is well propagated by
-                                replication.
-          #@TestPreamble
-          #@TestSteps           Add jpegPhoto attribute to entry with binary
-                                value
-          #@TestSteps           Check add worked
-          #@TestPostamble
-          #@TestResult          Success if add worked and trees synchronised
-                                over the topology
-          -->                      
-          <testcase name="getTestCaseName
-                          ('Modify Entry - add binary attribute')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Modify Entry - add binary attribute. \
-                Check that an entry modify is well propagated by replication.'
-              </message>
-               
-              <script>
-                filename = 'replication_mod_add_binary.ldif'
-                filePath = '%s/%s' % (local.temp,filename)
-                binaryFilePath = '%s/replication/photo1.uu' % source.data
-                dn = 'uid=hmiller, ou=People,%s' % synchroSuffix
-                modif = 'add'
-                attrType = 'jpegPhoto'
-                write_replication_mod_binary_ldif_file(filePath, dn, modif, 
-                                                       attrType, binaryFilePath)
-              </script>
-
-              <!-- Copy the replication_mod ldif to client host -->
-              <message>
-                'Copy %s file from %s to %s' \
-                % (filename,local.temp,client.getTmpDir())
-              </message>
-              <call function="'copyFile'">
-                { 'srcfile'    : filePath,
-                  'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
-                  'remotehost' : client.getHostname()
-                }
-              </call>                    
-
-              <!-- Modify "master" server -->
-              <call function="'ldapModifyWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort() ,
-                  'dsInstanceDn'   : master.getRootDn() ,
-                  'dsInstancePswd' : master.getRootPwd() ,
-                  'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
-                }
-              </call>                            
-        
-
-              <!-- Check modify worked on "master" server -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort() ,
-                  'dsInstanceDn'   : master.getRootDn() ,
-                  'dsInstancePswd' : master.getRootPwd() ,
-                  'dsBaseDN'       : 'uid=hmiller, ou=People,%s' \
-                                     % synchroSuffix,
-                  'dsFilter'       : 'jpegPhoto=*'
-                }                  
-              </call>                
-              <script>
-                searchRC = STAXResult[0][0]
-                searchResult = STAXResult[0][1]
-                resultLength = len(searchResult) > 0
-              </script>
-              <call function="'checktestRC'">
-                { 'returncode' : resultLength,
-                  'result'     : searchResult,
-                  'expected'   : 1
-                }
-              </call>    
-            
-
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Modify Entry - replace 
-                                binary attribute
-          #@TestID              Modify Entry - replace binary attribute
-          #@TestPurpose         Check that an entry modify is well propagated by
-                                replication.
-          #@TestPreamble
-          #@TestSteps           Replace jpegPhoto (binary) attribute value
-          #@TestSteps           Check replace worked
-          #@TestPostamble
-          #@TestResult          Success if replace worked and trees synchronised
-                                over the topology
-          -->                      
-          <testcase name="getTestCaseName
-                          ('Modify Entry - replace binary attribute')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Modify Entry - replace binary attribute. \
-                Check that an entry modify is well propagated by replication.'
-              </message>
-               
-              <script>
-                filename = 'replication_mod_replace_binary.ldif'
-                filePath = '%s/%s' % (local.temp,filename)
-                binaryFilePath = '%s/replication/photo2.uu' % source.data
-                dn = 'uid=hmiller, ou=People,%s' % synchroSuffix
-                modif = 'replace'
-                attrType = 'jpegPhoto'
-                write_replication_mod_binary_ldif_file(filePath, dn, modif,
-                                                       attrType, binaryFilePath)
-              </script>
-
-              <!-- Copy the replication_mod ldif to client host -->
-              <message>
-                'Copy %s file from %s to %s' \
-                % (filename,local.temp,client.getTmpDir())
-              </message>
-              <call function="'copyFile'">
-                { 'srcfile'    : filePath,
-                  'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
-                  'remotehost' : client.getHostname()
-                }
-              </call>                    
-
-              <!-- Modify "master" server -->
-              <call function="'ldapModifyWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
-                }
-              </call>                            
-        
-
-              <!-- Check modify worked on "master" server -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : 'uid=hmiller, ou=People,%s' \
-                                     % synchroSuffix,
-                  'dsFilter'       : 'jpegPhoto=*'
-                }
-              </call>                
-              <script>
-                searchRC = STAXResult[0][0]
-                searchResult = STAXResult[0][1]
-                resultLength = len(searchResult) > 0
-              </script>
-              <call function="'checktestRC'">
-                { 'returncode' : resultLength,
-                  'result'     : searchResult,
-                  'expected'   : 1
-                }
-              </call>    
-            
-
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Modify Entry - delete binary
-                                attribute
-          #@TestID              Modify Entry - delete binary attribute
-          #@TestPurpose         Check that an entry modify is well propagated by
-                                replication.
-          #@TestPreamble
-          #@TestSteps           Delete binary attribute jpegPhoto
-          #@TestSteps           Check delete worked
-          #@TestPostamble
-          #@TestResult          Success if delete worked and trees synchronised
-                                over the topology
-          -->                      
-          <testcase name="getTestCaseName
-                          ('Modify Entry - delete binary attribute')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Modify Entry - delete binary attribute. \
-                Check that an entry modify is well propagated by replication.'
-              </message>
-               
-                    
-              <script>
-                filename = 'replication_mod_delete_binary.ldif'
-                filePath = '%s/%s' % (local.temp,filename)
-                dn = 'uid=hmiller, ou=People,%s' % synchroSuffix
-                modif = 'delete'
-                attrType = 'jpegPhoto'
-                attrValue = None
-                write_replication_mod_ldif_file(filePath, dn, modif, attrType,
-                                                attrValue)
-              </script>
-
-              <!-- Copy the replication_mod ldif to client host -->
-              <message>
-                'Copy %s file from %s to %s' \
-                % (filename,local.temp,client.getTmpDir())
-              </message>
-              <call function="'copyFile'">
-                { 'srcfile'    : filePath,
-                  'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
-                  'remotehost' : client.getHostname()
-                }
-              </call>                    
-
-              <!-- Modify "master" server -->
-              <call function="'ldapModifyWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
-                }
-              </call>        
-                
-              <!-- Check modify worked on "master" server -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : 'uid=hmiller, ou=People,%s' \
-                                     % synchroSuffix,
-                  'dsFilter'       : 'jpegPhoto=*'
-                }
-              </call>                
-              <script>
-                searchRC = STAXResult[0][0]
-                searchResult = STAXResult[0][1]
-                resultLength = len(searchResult) > 0
-              </script>
-              <call function="'checktestRC'">
-                { 'returncode' : resultLength,
-                  'result'     : searchResult,
-                  'expected'   : 0
-                }
-              </call>    
-            
-
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Rename Entry
-          #@TestID              Rename Entry
-          #@TestPurpose         Check that a rename (modrdn) operation is well
-                                propagated by replication.
-          #@TestPreamble
-          #@TestSteps           Rename entry
-          #@TestSteps           Check old dn entry no longer exists
-          #@TestSteps           Check new dn entry exists
-          #@TestPostamble
-          #@TestResult          Success if rename worked and trees synchronised
-                                over the topology
-          -->                  
-          <testcase name="getTestCaseName('Rename Entry')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Rename Entry. Check that a rename \
-                (modrdn) operation is well propagated by replication.'
-              </message>
-               
-              <script>
-                filename = 'replication_modrdn.ldif'
-                filePath = '%s/%s' % (local.temp,filename)
-                dn = 'uid=kvaughan, ou=People,%s' % synchroSuffix
-                newrdn = 'uid=kvaughan2'
-                newsuperior = None
-                deleteoldrdn = 1
-                write_replication_moddn_ldif_file(filePath, dn, newrdn, 
-                                                  newsuperior, deleteoldrdn)
-              </script>
-
-              <!-- Copy the replication_mod ldif to client host -->
-              <message>
-                'Copy %s file from %s to %s' \
-                % (filename,local.temp,client.getTmpDir())
-              </message>
-              <call function="'copyFile'">
-                { 'srcfile'    : filePath,
-                  'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
-                  'remotehost' : client.getHostname()
-                }
-              </call>                    
-
-              <!-- Modify "master" server -->
-              <call function="'ldapModifyWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort() ,
-                  'dsInstanceDn'   : master.getRootDn() ,
-                  'dsInstancePswd' : master.getRootPwd() ,
-                  'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
-                }
-              </call>                            
-        
-
-              <!-- Check modify worked on "master" server -->                
-              <!-- check that "uid=kvaughan, ou=People, ${DIRECTORY_BASE}" does 
-                NOT exist anymore -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : 'uid=kvaughan, ou=People,%s' \
-                                     % synchroSuffix,
-                  'dsFilter'       : 'objectclass=*',
-                  'expectedRC'     : 32
-                }
-              </call>                
-                
-              <!-- check that new entry 
-                "uid=kvaughan2, ou=People, ${DIRECTORY_BASE}" exists -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : 'uid=kvaughan2, ou=People,%s' \
-                                     % synchroSuffix,
-                  'dsFilter'       : 'objectclass=*'
-                }
-              </call>
-            
-
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Rename Entry (preserving old
-                                rdn)
-          #@TestID              Rename Entry (preserving old rdn)
-          #@TestPurpose         Check that a rename (modrdn) operation is well
-                                propagated by replication.
-          #@TestPreamble
-          #@TestSteps           Rename entry
-          #@TestSteps           Check old dn entry no longer exists
-          #@TestSteps           Check new dn entry exists and contains old rdn
-          #@TestPostamble
-          #@TestResult          Success if rename worked and trees synchronised
-                                over the topology
-          -->                  
-          <testcase name="getTestCaseName('Rename Entry (preserving old rdn)')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Rename Entry (preserving old rdn). \
-                Check that a rename (modrdn) operation is well propagated by \
-                replication.'
-              </message>
-               
-              <script>
-                filename = 'replication_modrdn_preserve.ldif'
-                filePath = '%s/%s' % (local.temp,filename)
-                dn = 'uid=jwallace, ou=People,%s' % synchroSuffix
-                newrdn = 'uid=igueye'
-                newsuperior = None
-                deleteoldrdn = 0
-                write_replication_moddn_ldif_file(filePath, dn, newrdn, 
-                                                  newsuperior, deleteoldrdn)
-              </script>
-
-              <!-- Copy the replication_mod ldif to client host -->
-              <message>
-                'Copy %s file from %s to %s' \
-                % (filename,local.temp,client.getTmpDir())
-              </message>
-              <call function="'copyFile'">
-                { 'srcfile'    : filePath,
-                  'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
-                  'remotehost' : client.getHostname()
-                }
-              </call>                    
-
-              <!-- Modify "master" server -->
-              <call function="'ldapModifyWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
-                }
-              </call> 
-        
-
-              <!-- Check modify worked on "master" server -->
-              <!-- check that "uid=jwallace, ou=People, ${DIRECTORY_BASE}" does
-                NOT exist anymore -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : 'uid=jwallace, ou=People,%s' \
-                                     % synchroSuffix,
-                  'dsFilter'       : 'objectclass=*',
-                  'expectedRC'     : 32
-                }                  
-              </call>
-                
-              <!-- check that new entry 
-                "uid=igueye, ou=People, ${DIRECTORY_BASE}" exists -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : 'uid=igueye, ou=People,%s' % synchroSuffix,
-                  'dsFilter'       : 'uid=jwallace'
-                }
-              </call>
-              <script>
-                searchRC = STAXResult[0][0]
-                searchResult = STAXResult[0][1]
-                resultLength = len(searchResult) > 0
-              </script>
-              <call function="'checktestRC'">
-                { 'returncode' : resultLength,
-                  'result'     : searchResult,
-                  'expected'   : 1
-                }
-              </call>       
-                            
-
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Rename Subtree
-          #@TestID              Rename Subtree
-          #@TestPurpose         Check that a subtree rename (moddn) operation is
-                                well propagated by replication.
-          #@TestPreamble
-          #@TestSteps           Rename subtree
-          #@TestSteps           Check old subtree no longer exists
-          #@TestSteps           Check new subree exists
-          #@TestPostamble
-          #@TestResult          Success if rename worked and trees synchronised
-                                over the topology
-          -->                  
-          <testcase name="getTestCaseName('Rename Subtree')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Rename Subtree. Check that a subtree \
-                rename (moddn) operation is well propagated by replication.'
-              </message>
-        
-              <script>
-                filename = 'replication_moddn.ldif'
-                filePath = '%s/%s' % (local.temp,filename)
-                dn = 'ou=People,%s' % synchroSuffix
-                newrdn = 'ou=Special People'
-                newsuperior = 'ou=Special Users,%s' % synchroSuffix
-                deleteoldrdn = 0
-                write_replication_moddn_ldif_file(filePath, dn, newrdn, 
-                                                  newsuperior, deleteoldrdn)
-              </script>
-
-              <!-- Copy the replication_mod ldif to client host -->
-              <message>
-                'Copy %s file from %s to %s' \
-                % (filename,local.temp,client.getTmpDir())
-              </message>
-              <call function="'copyFile'">
-                { 'srcfile'    : filePath,
-                  'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
-                  'remotehost' : client.getHostname()
-                }
-              </call>                    
-
-              <!-- Modify "master" server -->
-              <call function="'ldapModifyWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
-                }
-              </call>                            
-        
-
-              <!-- Check modify worked on "master" server -->
-              <!-- check that "uid=gfarmer, ou=People, ${DIRECTORY_BASE}" does
-                NOT exist anymore -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : 'uid=gfarmer, ou=People,%s' \
-                                     % synchroSuffix,
-                  'dsFilter'       : 'objectclass=*',
-                  'expectedRC'     : 32
-                }  
-              </call>                
-                
-              <script>
-                base = 'uid=gfarmer, ou=Special People, ou=Special Users,%s' \
-                       % synchroSuffix
-              </script>
-              <!-- check that new entry 
-                "uid=gfarmer, ou=Special People, ou=Special Users,
-                ${DIRECTORY_BASE}" exists -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsBaseDN'       : base,
-                  'dsFilter'       : 'objectclass=*'
-                }
-              </call>
-            
-
-              <!-- 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 Basic Tests
-          #@TestName            Replication: Basic: Add entry after restart
-          #@TestID              Add entry after restart
-          #@TestPurpose         Check entry add over secured replication after
-                                server restart
-          #@TestPreamble
-          #@TestSteps           Restart servers
-          #@TestSteps           Add entry
-          #@TestPostamble
-          #@TestResult          Success if trees synchronised over the topology
-          -->
-          <testcase name="getTestCaseName('Add entry after restart')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Basic: Add entry after restart. \
-                Check entry add over secured replication after server restart'
-              </message>
-
-              <!-- Stop the servers in the topology -->
-              <call function="'stopServers'">
-                [_splitServerList]
-              </call>
-              
-              <!-- Start the servers in the topology -->  
-              <call function="'startServers'">
-                [_splitServerList]
-              </call>
-              
-              <iterate var="server" in="_topologyServerList" indexvar="i">
-                <sequence>
-                  <script>
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                    userDn = 'uid=RESTART-iabizen-%s, %s' % \
-                             (i,synchroSuffix)
-                  </script>
-                    
-                  <!-- Add entry to one of the other servers -->
-                  <script>
-                    listAttr = []
-                    listAttr.append('objectclass:top')
-                    listAttr.append('objectclass:organizationalperson')
-                    listAttr.append('objectclass:inetorgperson')
-                    listAttr.append('objectclass:person')
-                    listAttr.append('givenname:Izen-%s' % i)
-                    listAttr.append('sn:Abizen-%s' % i)
-                    listAttr.append('cn:Izen-%s Abizen-%s' % (i, i))
-                    listAttr.append('l:ICNC')
-                  </script>
+            <try>
+              <sequence> 
+                                                                        
+                <import machine="STAF_LOCAL_HOSTNAME"
+                  file="'%s/testcases/replication/replication_setup.xml' 
+                    % (TESTS_DIR)"/>
+                <call function="'replication_setup'" >
+                  { 'label'    : 'Replication Basic' }
+                </call>
           
-                  <call function="'addAnEntry'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : serverPath,
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'DNToAdd'        : userDn,
-                      'listAttributes' : listAttr
-                    }
-                  </call>
-              
+                <import machine="STAF_LOCAL_HOSTNAME"
+                  file="'%s/testcases/replication/basic/replication_basic_setup.xml'
+                    % (TESTS_DIR)"/>
+                <call function="'replication_basic_setup'" />
+
+                <!-- List of Import of Test Functions -->
+                <script>
+                  importList=[]
+                  importList.append('basic/basic_tests')
+                </script>
+
+                <!-- 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: Basic:'
+                </script>
+                                                    
+                <!-- List of Test Cases -->
+                <script>
+                  testsList=[]
+                  testsList.append('replication_basic_001')
+                  testsList.append('replication_basic_002')
+                  testsList.append('replication_basic_003')
+                  testsList.append('replication_basic_004')
+                  testsList.append('replication_basic_005')
+                  testsList.append('replication_basic_006')
+                  testsList.append('replication_basic_007')
+                  testsList.append('replication_basic_008')
+                  testsList.append('replication_basic_009')
+                  testsList.append('replication_basic_010')
+                  testsList.append('replication_basic_011')
+                  testsList.append('replication_basic_012')
+                  testsList.append('replication_basic_013')
+                  testsList.append('replication_basic_014')
+                  testsList.append('replication_basic_015')
+                  testsList.append('replication_basic_016')
+                  testsList.append('replication_basic_017')
+                  testsList.append('replication_basic_018')
+                  testsList.append('replication_basic_019')
+                  testsList.append('replication_basic_020')
+                  testsList.append('replication_basic_021')
+                  testsList.append('replication_basic_022')
+                </script>
+
+                <!-- Execute the Tests -->
+                <iterate var="__test" in="testsList">
+                  <sequence>
+                    <call function="'%s' % (__test)" />
+                  </sequence>
+                </iterate>                
+                                
+              </sequence>
+
+              <catch exception="'STAFException.TestSuite.SetupException'">
+                <sequence>
+                  <message log="1" level="'fatal'">
+                    'Setup of test suite failed.'
+                  </message>
+                  <rethrow/>
                 </sequence>
-              </iterate>
-                
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->          
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, master, consumerList, synchroSuffix ]
-              </call>
+              </catch>
+  
+              <finally>
+                <message>'Test Cases Completed.'</message>
+              </finally>
 
-              <call function="'testCase_Postamble'"/>
+            </try>
+
+          </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'    : 'Replication Basic' }
+                  </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>
-          </testcase>
-                        
-                
-          <import machine="STAF_LOCAL_HOSTNAME"
-            file="'%s/testcases/replication/replication_cleanup.xml' 
-                  % (TESTS_DIR)"/>
-          <call function="'replication_cleanup'">
-            { 'label'    : 'Replication Basic' }
-          </call>
-
-          <call function="'testSuite_Postamble'"/>
-        
-        </sequence>
-    
+          </finally>
+ 
+        </try>
       </block>
-    
     </sequence>
-
   </function>
-
 </stax>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/basic/basic_tests.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/basic/basic_tests.xml
new file mode 100644
index 0000000..0108717
--- /dev/null
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/basic/basic_tests.xml
@@ -0,0 +1,2482 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../../../shared/stax.dtd">
+<!--
+ ! CDDL HEADER START
+ !
+ ! The contents of this file are subject to the terms of the
+ ! 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.
+ ! 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,
+ ! 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 2007-2010 Sun Microsystems, Inc.
+ !      Portions Copyright 2011-2012 ForgeRock AS.
+ ! -->
+<stax>
+                                          
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Add Entry
+  #@TestID              Add Entry
+  #@TestPurpose         Check that an entry add is well propagated by
+                        replication.
+  #@TestPreamble
+  #@TestSteps           Add root suffix entry
+  #@TestPostamble
+  #@TestResult          Success if trees synchronised over the topology
+  -->
+  <function name="replication_basic_001" scope="local">
+    <testcase name="getTestCaseName('Add Entry')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that an add of an entry is replicated.' % msg1 }
+            </call>
+ 
+            <!-- Modify "master" server -->   
+            <call function="'addEntry'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(), 
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'entryToBeAdded' : '%s/replication_add_root_suffix.ldif' \
+                                   % client.getTmpDir()
+              }
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+              
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+                                                   
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+          
+    
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Modify Entry
+  #@TestID              Modify Entry
+  #@TestPurpose         Check that an entry modify is well propagated by
+                        replication.
+  #@TestPreamble
+  #@TestSteps           Add entry on server
+  #@TestSteps           Modify entry
+  #@TestSteps           Check modify worked on server
+  #@TestPostamble
+  #@TestResult          Success if modify worked and trees synchronised
+                        over the topology
+  -->
+  <function name="replication_basic_002" scope="local">
+    <testcase name="getTestCaseName('Modify Entry')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a modify of an entry is replicated.' % msg1 }
+            </call>
+ 
+
+            <!-- Modify "master" server -->   
+            <call function="'addEntry'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'entryToBeAdded' : '%s/replication_add_single.ldif' \
+                                   % client.getTmpDir()
+              }
+            </call>
+            <call function="'ldapModifyWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsFilename'     : '%s/replication_mod.ldif' \
+                                   % client.getTmpDir()
+              }
+            </call>
+
+            <!-- Check modify worked on "master" server -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : entryDn,
+                'dsFilter'       : '%s=%s' % (attr_type,attr_value)
+              }
+            </call>
+            <script>
+              searchRC = STAXResult[0][0]
+              searchResult = STAXResult[0][1]
+              resultLength = len(searchResult) > 0
+            </script>
+            <call function="'checktestRC'">
+              { 'returncode' : resultLength ,
+                'result'     : searchResult ,
+                'expected'   : 1
+              }
+            </call>                       
+
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+              
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>                         
+                
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+            
+    
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Delete Entry
+  #@TestID              Delete Entry
+  #@TestPurpose         Check that an entry delete is well propagated by
+                        replication.
+  #@TestPreamble
+  #@TestSteps           Delete entry
+  #@TestSteps           Check delete worked on server
+  #@TestPostamble
+  #@TestResult          Success if delete worked and trees synchronised
+                        over the topology
+  -->
+  <function name="replication_basic_003" scope="local">
+    <testcase name="getTestCaseName('Delete Entry')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a delete of an entry is replicated.' % msg1 }
+            </call>
+
+            <!-- Modify "master" server -->    
+            <call function="'DeleteEntry'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : entryDn
+              }
+            </call>
+
+            <!-- Check modify worked on "master" server -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'         : clientHost,
+                'dsPath'           : clientPath,
+                'dsInstanceHost'   : masterHost,
+                'dsInstancePort'   : master.getPort(),
+                'dsInstanceDn'     : master.getRootDn(),
+                'dsInstancePswd'   : master.getRootPwd(),
+                'dsBaseDN'         : entryDn,
+                'dsFilter'         : 'objectclass=*',
+                'expectedRC'       : 32
+              }                  
+            </call>                      
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+                
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+    
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+      
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Add Multiple Entries
+  #@TestID              Add Multiple Entries
+  #@TestPurpose         Check that a multiple-entry add is well
+                        propagated by replication.
+  #@TestPreamble        Delete root suffix entry
+  #@TestSteps           Add multiple entries
+  #@TestPostamble
+  #@TestResult          Success if trees synchronised over the topology
+  -->
+  <function name="replication_basic_004" scope="local">
+    <testcase name="getTestCaseName('Add Multiple Entries')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that multiple adds of an entry are replicated.' % msg1 }
+            </call>
+
+            <!-- Delete the root entry, as it is already present in 
+              Example.ldif file -->
+            <call function="'DeleteEntry'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : synchroSuffix
+              }
+            </call>
+
+            <!-- Modify "master" server -->
+            <call function="'addEntry'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(), 
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'entryToBeAdded' : '%s/replication/Example.ldif' \
+                                   % master.getDataDir()
+              }
+            </call>             
+
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+                
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+                                      
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+    
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Modify Entry - add single 
+                        attribute
+  #@TestID              Modify Entry - add single attribute
+  #@TestPurpose         Check that an entry modify is well propagated by
+                        replication.
+  #@TestPreamble
+  #@TestSteps           Add description attribute to entry
+  #@TestSteps           Check modify worked
+  #@TestPostamble
+  #@TestResult          Success if modify worked and trees synchronised
+                        over the topology
+  -->
+  <function name="replication_basic_005" scope="local">
+    <testcase name="getTestCaseName('Modify Entry - add single attribute')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a modify (add single attribute) is replicated.' % msg1 }
+            </call>
+
+             <!-- Modify "master" server -->
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'            : masterPath,
+                'dsInstanceHost'    : masterHost ,
+                'dsInstancePort'    : master.getPort(),
+                'dsInstanceDn'      : master.getRootDn(),
+                'dsInstancePswd'    : master.getRootPwd(),
+                'DNToModify'        : 'uid=tmorris, ou=People,%s' \
+                                      % synchroSuffix,
+                'attributeName'     : 'description',
+                'newAttributeValue' : ' ',
+                'changetype'        : 'add'
+              }
+            </call>       
+
+            <!-- Check modify worked on "master" server -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort() ,
+                'dsInstanceDn'   : master.getRootDn() ,
+                'dsInstancePswd' : master.getRootPwd() ,
+                'dsBaseDN'       : 'uid=tmorris, ou=People,%s' \
+                                   % synchroSuffix,
+                'dsFilter'       : 'description=*'
+              }
+            </call>
+            <script>
+              searchRC = STAXResult[0][0]
+              searchResult = STAXResult[0][1]
+              resultLength = len(searchResult) > 0
+            </script>
+            <call function="'checktestRC'">
+              { 'returncode' : resultLength ,
+                'result'     : searchResult ,
+                'expected'   : 1
+              }
+            </call>                       
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+                
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+                                                                   
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Modify Entry - add single 
+                        value
+  #@TestID              Modify Entry - add single value
+  #@TestPurpose         Check that an entry modify is well propagated by
+                        replication.
+  #@TestPreamble
+  #@TestSteps           Add single-valued attribute to entry
+  #@TestSteps           Check modify worked
+  #@TestPostamble
+  #@TestResult          Success if modify worked and trees synchronised
+                        over the topology
+  -->
+  <function name="replication_basic_006" scope="local">
+    <testcase name="getTestCaseName('Modify Entry - add single value')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a modify (add single value) is replicated.' % msg1 }
+            </call>
+
+            <!-- Modify "master" server -->
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'            : masterPath,
+                'dsInstanceHost'    : masterHost ,
+                'dsInstancePort'    : master.getPort(),
+                'dsInstanceDn'      : master.getRootDn(),
+                'dsInstancePswd'    : master.getRootPwd(),
+                'DNToModify'        : 'uid=tmorris, ou=People,%s' \
+                                      % synchroSuffix,
+                'attributeName'     : 'departmentnumber',
+                'newAttributeValue' : '5203214400',
+                'changetype'        : 'add'
+              }
+            </call>
+
+            <!-- Check modify worked on "master" server -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : 'uid=tmorris, ou=People,%s' \
+                                   % synchroSuffix,
+                'dsFilter'       : 'departmentnumber=5203214400'
+              }
+            </call>
+            <script>
+              searchRC = STAXResult[0][0]
+              searchResult = STAXResult[0][1]
+              resultLength = len(searchResult) > 0
+            </script>
+            <call function="'checktestRC'">
+              { 'returncode' : resultLength,
+                'result'     : searchResult,
+                'expected'   : 1
+              }
+            </call>                       
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+                                
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>                                   
+
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Modify Entry - delete single
+                        attribute
+  #@TestID              Modify Entry - delete single attribute
+  #@TestPurpose         Check that an entry modify is well propagated by
+                        replication.
+  #@TestPreamble
+  #@TestSteps           Delete attribute in entry
+  #@TestSteps           Check delete worked
+  #@TestPostamble
+  #@TestResult          Success if delete worked and trees synchronised
+                        over the topology
+  -->
+  <function name="replication_basic_007" scope="local">
+    <testcase name="getTestCaseName('Modify Entry - delete single attribute')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a modify (delete single attribute) is replicated.' % msg1 }
+            </call>
+
+            <script>
+              filename = 'replication_mod_delete.ldif'
+              filePath = '%s/%s' % (local.temp,filename)
+              dn = 'uid=smason, ou=People,%s' % synchroSuffix
+              modif = 'delete'
+              attrType = 'roomNumber'
+              attrValue = None
+              write_replication_mod_ldif_file(filePath, dn, modif, attrType,
+                                              attrValue)
+            </script>
+
+            <!-- Copy the replication_mod ldif to client host -->
+            <message>
+              'Copy %s file from %s to %s' \
+              % (filename,local.temp,client.getTmpDir())
+            </message>
+            <call function="'copyFile'">
+              { 'srcfile'    : filePath,
+                'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
+                'remotehost' : client.getHostname()
+              }
+            </call>                    
+
+            <!-- Modify "master" server -->                                
+            <call function="'ldapModifyWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
+              }
+            </call>
+                              
+            <!-- Check modify worked on "master" server -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : 'uid=smason, ou=People,%s' % synchroSuffix,
+                'dsFilter'       : 'roomNumber=*'
+              }
+            </call>
+            <script>
+              searchRC = STAXResult[0][0]
+              searchResult = STAXResult[0][1]
+              resultLength = len(searchResult) > 0
+            </script>
+            <call function="'checktestRC'">
+              { 'returncode' : resultLength,
+                'result'     : searchResult,
+                'expected'   : 0
+              }
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+            
+            
+
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Modify Entry - delete single
+                        value
+  #@TestID              Modify Entry - delete single value
+  #@TestPurpose         Check that an entry modify is well propagated by
+                        replication.
+  #@TestPreamble
+  #@TestSteps           Delete single attribute value in entry
+  #@TestSteps           Check delete worked
+  #@TestPostamble
+  #@TestResult          Success if delete worked and trees synchronised
+                        over the topology
+  -->
+  <function name="replication_basic_008" scope="local">
+    <testcase name="getTestCaseName('Modify Entry - delete single value')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a modify (delete single value) is replicated.' % msg1 }
+            </call>
+
+            <!-- Modify "master" server -->
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'            : masterPath,
+                'dsInstanceHost'    : masterHost ,
+                'dsInstancePort'    : master.getPort(),
+                'dsInstanceDn'      : master.getRootDn(),
+                'dsInstancePswd'    : master.getRootPwd(),
+                'DNToModify'        : 'uid=jwalker, ou=People,%s' \
+                                      % synchroSuffix,
+                'attributeName'     : 'roomNumber',
+                'newAttributeValue' : '3915',
+                'changetype'        : 'delete'
+              }
+            </call>
+
+            <!-- Check modify worked on "master" server -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : 'uid=jwalker, ou=People,%s' \
+                                   % synchroSuffix,
+                'dsFilter'       : 'roomNumber=3915'
+              }
+            </call>
+            <script>
+              searchRC = STAXResult[0][0]
+              searchResult = STAXResult[0][1]
+              resultLength = len(searchResult) > 0
+            </script>
+            <call function="'checktestRC'">
+              { 'returncode' : resultLength,
+                'result'     : searchResult,
+                'expected'   : 0
+              }
+            </call>       
+                
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+                    
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function> 
+        
+
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Modify Entry - add multiple
+                        values
+  #@TestID              Modify Entry - add multiple values
+  #@TestPurpose         Check that an entry modify is well propagated by
+                        replication.
+  #@TestPreamble
+  #@TestSteps           Add multiple-valued attribute to entry
+  #@TestSteps           Check add worked
+  #@TestPostamble
+  #@TestResult          Success if add worked and trees synchronised
+                        over the topology
+  -->
+  <function name="replication_basic_009" scope="local">
+    <testcase name="getTestCaseName('Modify Entry - add multiple values')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a modify (add multiple values) is replicated.' % msg1 }
+            </call>
+                
+            <script>
+              valuesToAdd = []
+              valuesToAdd.append('postaladdress:Residence Parc Europe')
+              valuesToAdd.append('postaladdress:Appartement #6')
+              valuesToAdd.append('postaladdress:31 Rue General Mangin')
+              valuesToAdd.append('postaladdress:38100 Grenoble')
+            </script>
+
+            <!-- Modify "master" server -->
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'         : masterPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'DNToModify'     : 'uid=jwallace, ou=People,%s' \
+                                   % synchroSuffix,
+                'listAttributes' : valuesToAdd,
+                'changetype'     : 'add'
+              }
+            </call>
+
+            <script>
+              filter1 = '(postaladdress=Residence Parc Europe)'
+              filter2 = '(postaladdress=Appartement #6)'
+              filter3 = '(postaladdress=31 Rue General Mangin)'
+              filter4 = '(postaladdress=38100 Grenoble)'
+            </script>
+            <!-- Check modify worked on "master" server -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : 'uid=jwallace, ou=People,%s' \
+                                   % synchroSuffix,
+                'dsFilter'       : '&amp;%s%s%s%s' \
+                                   % (filter1, filter2, filter3, filter4)
+              }
+            </call>
+            <script>
+              searchRC = STAXResult[0][0]
+              searchResult = STAXResult[0][1]
+              resultLength = len(searchResult) > 0
+            </script>
+            <call function="'checktestRC'">
+              { 'returncode' : resultLength,
+                'result'     : searchResult,
+                'expected'   : 1
+              }
+            </call>                       
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+                
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+               
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>                                   
+         
+
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Modify Entry - delete
+                        multiple values
+  #@TestID              Modify Entry - delete multiple values
+  #@TestPurpose         Check that an entry modify is well propagated by
+                        replication.
+  #@TestPreamble
+  #@TestSteps           Delete multiple values in same attribute
+  #@TestSteps           Check delete worked
+  #@TestPostamble
+  #@TestResult          Success if delete worked and trees synchronised
+                        over the topology
+  -->
+  <function name="replication_basic_010" scope="local">
+    <testcase name="getTestCaseName('Modify Entry - delete multiple values')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a modify (delete multiple values) is replicated.' % msg1 }
+            </call>
+                
+            <script>
+              valuesToDelete = []
+              valuesToDelete.append('postaladdress:Appartement #6')
+              valuesToDelete.append('postaladdress:38100 Grenoble')
+            </script>
+
+            <!-- Modify "master" server -->
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'         : masterPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'DNToModify'     : 'uid=jwallace, ou=People,%s' \
+                                   % synchroSuffix,
+                'listAttributes' : valuesToDelete,
+                'changetype'     : 'delete'
+              }
+            </call>
+
+            <script>
+              filter1 = '(postaladdress=Appartement #6)'
+              filter2 = '(postaladdress=38100 Grenoble)'
+            </script>
+            <!-- Check modify worked on "master" server -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : 'uid=jwallace, ou=People,%s' \
+                                   % synchroSuffix,
+                'dsFilter'       : '|%s%s' % (filter1, filter2)
+              }
+            </call>
+            <script>
+              searchRC = STAXResult[0][0]
+              searchResult = STAXResult[0][1]
+              resultLength = len(searchResult) > 0
+            </script>
+            <call function="'checktestRC'">
+              { 'returncode' : resultLength,
+                'result'     : searchResult,
+                'expected'   : 0
+              }
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+                                
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+          
+            
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Modify Entry - replace
+                        multiple values
+  #@TestID              Modify Entry - replace multiple values
+  #@TestPurpose         Check that an entry modify is well propagated by
+                        replication.
+  #@TestPreamble
+  #@TestSteps           Replace multiple values in same attribute
+  #@TestSteps           Check replace worked
+  #@TestPostamble
+  #@TestResult          Success if replace worked and trees synchronised
+                        over the topology
+  -->
+  <function name="replication_basic_011" scope="local">
+    <testcase name="getTestCaseName('Modify Entry - replace multiple values')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a modify (replace multiple values) is replicated.' % msg1 }
+            </call>
+                
+            <script>
+              valuesToReplace = []
+              valuesToReplace.append('postaladdress: Residence Letilleuil')
+              valuesToReplace.append('postaladdress: 18 rue Nicolas Chorier')
+            </script>
+
+            <!-- Modify "master" server -->
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'         : masterPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'DNToModify'     : 'uid=jwallace, ou=People,%s' \
+                                   % synchroSuffix,
+                'listAttributes' : valuesToReplace,
+                'changetype'     : 'replace'
+              }
+            </call>
+
+            <script>
+              filter1 = '(postaladdress=Residence Letilleuil)'
+              filter2 = '(postaladdress=18 rue Nicolas Chorier)'
+            </script>                
+            <!-- Check modify worked on "master" server -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : 'uid=jwallace, ou=People,%s' \
+                                   % synchroSuffix,
+                'dsFilter'       : '&amp;%s%s' % (filter1, filter2)
+              }
+            </call>
+            <script>
+              searchRC = STAXResult[0][0]
+              searchResult = STAXResult[0][1]
+              resultLength = len(searchResult) > 0
+            </script>
+            <call function="'checktestRC'">
+              { 'returncode' : resultLength ,
+                'result'     : searchResult ,
+                'expected'   : 1
+              }
+            </call>                 
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+                                
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>     
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Modify Entry - add single
+                        value to multiple valued attribute
+  #@TestID              Modify Entry - add single value to multiple
+                        valued attribute
+  #@TestPurpose         Check that an entry modify is well propagated by
+                        replication.
+  #@TestPreamble
+  #@TestSteps           Add single value to multiple-valued attribute
+  #@TestSteps           Check value add worked
+  #@TestPostamble
+  #@TestResult          Success if value add worked and trees 
+                        synchronised over the topology
+  -->
+  <function name="replication_basic_012" scope="local">
+    <testcase name="getTestCaseName('Modify Entry - add single value to multiple valued attribute')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a modify (add single value to multiple valued attribute) is replicated.' % msg1 }
+            </call>
+                
+            <script>
+              valuesToAdd = []
+              valuesToAdd.append('postaladdress:38000 Grenoble')
+            </script>
+
+            <!-- Modify "master" server -->
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'         : masterPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'DNToModify'     : 'uid=jwallace, ou=People,%s' \
+                                   % synchroSuffix,
+                'listAttributes' : valuesToAdd,
+                'changetype'     : 'add'
+              }
+            </call>
+
+            <!-- Check modify worked on "master" server -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : 'uid=jwallace, ou=People,%s' \
+                                   % synchroSuffix,
+                'dsFilter'       : 'postaladdress=38000 Grenoble'
+              }
+            </call>
+            <script>
+              searchRC = STAXResult[0][0]
+              searchResult = STAXResult[0][1]
+              resultLength = len(searchResult) > 0
+            </script>
+            <call function="'checktestRC'">
+              { 'returncode' : resultLength,
+                'result'     : searchResult,
+                'expected'   : 1
+              }
+            </call>                 
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+                                
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>     
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Modify Entry - delete single
+                        value from multiple valued attribute
+  #@TestID              Modify Entry - delete single value from multiple
+                        valued attribute
+  #@TestPurpose         Check that an entry modify is well propagated by
+                        replication.
+  #@TestPreamble
+  #@TestSteps           Delete single value from multiple-valued
+                        attribute
+  #@TestSteps           Check value delete worked
+  #@TestPostamble
+  #@TestResult          Success if value delete worked and trees 
+                        synchronised over the topology
+  -->
+  <function name="replication_basic_013" scope="local">
+    <testcase name="getTestCaseName('Modify Entry - delete single value from multiple valued attribute')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a modify (delete single value from multiple valued attribute) is replicated.' % msg1 }
+            </call>
+                      
+            <script>
+              valuesToDelete = []
+              valuesToDelete.append('postaladdress: Residence Letilleuil')
+            </script>
+
+            <!-- Modify "master" server -->                
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'         : masterPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'DNToModify'     : 'uid=jwallace, ou=People,%s' \
+                                   % synchroSuffix,
+                'listAttributes' : valuesToDelete,
+                'changetype'     : 'delete'
+              }
+            </call>
+
+            <!-- Check modify worked on "master" server -->        
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : 'uid=jwallace, ou=People,%s' \
+                                   % synchroSuffix,
+                'dsFilter'       : 'postaladdress=Residence Letilleuil'
+              }
+            </call>
+            <script>
+              searchRC = STAXResult[0][0]
+              searchResult = STAXResult[0][1]
+              resultLength = len(searchResult) > 0
+            </script>
+            <call function="'checktestRC'">
+              { 'returncode' : resultLength,
+                'result'     : searchResult,
+                'expected'   : 0
+              }
+            </call>                 
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+                                
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>     
+
+                                                          
+
+            
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Modify Entry - replace case
+                        sensitive attribute
+  #@TestID              Modify Entry - replace case sensitive attribute
+  #@TestPurpose         Check that case sensitive attribute
+                        modifications are replicated.
+  #@TestPreamble        
+  #@TestSteps           Add entry 
+  #@TestSteps           Replace description attribute in entry
+  #@TestSteps           Check replace worked
+  #@TestPostamble
+  #@TestResult          Success if replace worked and trees synchronised
+                        over the topology
+  -->
+  <function name="replication_basic_014" scope="local">
+    <testcase name="getTestCaseName('Modify Entry - replace case sensitive attribute')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a modify (replace case sensitive attribute) is replicated.' % msg1 }
+            </call>
+                                
+            <!-- Modify "master" server -->
+            <call function="'addEntry'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(), 
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'entryToBeAdded' : '%s/replication/tfitter.ldif' \
+                                   % master.getDataDir()
+              }
+            </call>                         
+          
+            <script>
+              value = 'Profession Tap Fitter and Plumber'
+              valuesToReplace = []
+              valuesToReplace.append('description: %s' % value)
+            </script>
+              
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'         : masterPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'DNToModify'     : 'uid=tfitter, ou=People,%s' \
+                                   % synchroSuffix,
+                'listAttributes' : valuesToReplace,
+                'changetype'     : 'replace'
+              }
+            </call>
+
+            <script>
+              filter = 'description=%s' % value
+            </script>
+            <!-- Check modify worked on "master" server -->        
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : 'uid=tfitter, ou=People,%s' \
+                                   % synchroSuffix,
+                'dsFilter'       : filter
+              }
+            </call>
+            <script>
+              searchRC = STAXResult[0][0]
+              searchResult = STAXResult[0][1]
+              resultLength = len(searchResult) > 0
+            </script>
+            <call function="'checktestRC'">
+              { 'returncode' : resultLength,
+                'result'     : searchResult,
+                'expected'   : 1
+              }
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+                                
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>     
+
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Modify Entry - replace
+                        userpassword
+  #@TestID              Modify Entry - replace userpassword
+  #@TestPurpose         Check replaced userpasswords are replicated.
+  #@TestPreamble        
+  #@TestSteps           Add user entry on server A
+  #@TestSteps           Bind as user with userpassword to server A
+  #@TestSteps           Replace user's userpassword
+  #@TestSteps           Bind as user with old userpassword to server B
+  #@TestSteps           Bind as user with new userpassword to server B
+  #@TestPostamble
+  #@TestResult          Success if bind with old userpassword fails with
+                        LDAP_INVALID_CREDENTIALS error and bind with new
+                        user password suceeds and trees are synchronised
+                        over the topology
+  -->
+  <function name="replication_basic_015" scope="local">
+    <testcase name="getTestCaseName('Modify Entry - replace userpassword')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a modify (replace userpassword) is replicated.' % msg1 }
+            </call>
+
+            <!-- Add entry to "master" server -->
+            <script>
+              userDn = 'uid=pmoriarty, ou=People, %s' % synchroSuffix
+              oldPassword = 'jajejijoju'
+              newPassword = 'JUAJUAJUA'
+                
+              listAttr = []
+              listAttr.append('objectclass:top')
+              listAttr.append('objectclass:organizationalperson')
+              listAttr.append('objectclass:inetorgperson')
+              listAttr.append('objectclass:person')
+              listAttr.append('givenname:Professor')
+              listAttr.append('sn:Moriarty')
+              listAttr.append('cn:Professor Moriarty')
+              listAttr.append('l:London')
+              listAttr.append('userpassword:%s' % oldPassword)
+            </script>
+            <message>
+              'replace userpassword: add user entry %s' % userDn
+            </message>
+            <call function="'addAnEntry'">
+              { 'location'       : masterHost,
+                'dsPath'         : masterPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'DNToAdd'        : userDn,
+                'listAttributes' : listAttr
+              }
+            </call>
+              
+            <!-- Check userDn can bind with oldPassword on "master" server -->
+            <message>
+              'replace userpassword: bind on master using password %s' \
+              % oldPassword
+            </message>
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : userDn,
+                'dsInstancePswd' : oldPassword,
+                'dsBaseDN'       : synchroSuffix,
+                'dsFilter'       : 'objectclass=*'
+              }
+            </call>                
+
+            <!-- Replace userDn's oldPassword with newPassword on "master" 
+              server -->
+            <message>
+              'replace userpassword: replace user password %s with %s' \
+              % (oldPassword, newPassword)
+            </message>
+            <call function="'modifyAnAttribute'">
+              { 'location'          : masterHost,
+                'dsPath'            : masterPath,
+                'dsInstanceHost'    : masterHost,
+                'dsInstancePort'    : master.getPort(),
+                'dsInstanceDn'      : master.getRootDn(),
+                'dsInstancePswd'    : master.getRootPwd(),
+                'DNToModify'        : userDn,
+                'attributeName'     : 'userpassword',
+                'newAttributeValue' : 'JUAJUAJUA',
+                'changetype'        : 'replace'
+              }
+            </call>
+              
+            <script>
+              consumer = consumerList[0]
+            </script>
+            <!-- Try binding as userDn with oldPassword on "consumer" server:
+              ==> should fail with LDAP_INVALID_CREDENTIALS (49) error -->
+            <message>
+              'replace userpassword: bind on consumer using old password %s :\
+              should fail with error LDAP_INVALID_CREDENTIALS (49)' \
+              % oldPassword
+            </message>
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : consumer.getHostname(),
+                'dsInstancePort' : consumer.getPort(),
+                'dsInstanceDn'   : userDn,
+                'dsInstancePswd' : oldPassword,
+                'dsBaseDN'       : synchroSuffix,
+                'dsFilter'       : 'objectclass=*',
+                'expectedRC'     : 49
+              }
+            </call>
+              
+            <!-- Check userDn can bind with newPassword on "consumer"
+              server -->
+            <message>
+              'replace userpassword: bind on consumer using new password %s :\
+              should pass' % newPassword
+            </message>
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : consumer.getHostname(),
+                'dsInstancePort' : consumer.getPort(),
+                'dsInstanceDn'   : userDn,
+                'dsInstancePswd' : newPassword,
+                'dsBaseDN'       : synchroSuffix,
+                'dsFilter'       : 'objectclass=*'
+              }
+            </call>
+              
+            <!-- Delete added entry as clean-up measure -->
+            <message>
+              'replace userpassword: delete user entry %s on master' \
+              % userDn
+            </message>
+            <call function="'DeleteEntry'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : userDn
+              }
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+
+              <!-- Verify the synchronization of the trees among the servers in
+                the topology -->          
+              <call function="'verifyTrees'">
+                [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+              </call> 
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>     
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Modify Entry - add binary
+                        attribute
+  #@TestID              Modify Entry - add binary attribute
+  #@TestPurpose         Check that an entry modify is well propagated by
+                        replication.
+  #@TestPreamble
+  #@TestSteps           Add jpegPhoto attribute to entry with binary
+                        value
+  #@TestSteps           Check add worked
+  #@TestPostamble
+  #@TestResult          Success if add worked and trees synchronised
+                        over the topology
+  -->
+  <function name="replication_basic_016" scope="local">
+    <testcase name="getTestCaseName('Modify Entry - add binary attribute')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a modify (add binary attribute) is replicated.' % msg1 }
+            </call>
+               
+            <script>
+              filename = 'replication_mod_add_binary.ldif'
+              filePath = '%s/%s' % (local.temp,filename)
+              binaryFilePath = '%s/replication/photo1.uu' % source.data
+              dn = 'uid=hmiller, ou=People,%s' % synchroSuffix
+              modif = 'add'
+              attrType = 'jpegPhoto'
+              write_replication_mod_binary_ldif_file(filePath, dn, modif, 
+                                                     attrType, binaryFilePath)
+            </script>
+
+            <!-- Copy the replication_mod ldif to client host -->
+            <message>
+              'Copy %s file from %s to %s' \
+              % (filename,local.temp,client.getTmpDir())
+            </message>
+            <call function="'copyFile'">
+              { 'srcfile'    : filePath,
+                'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
+                'remotehost' : client.getHostname()
+              }
+            </call>                    
+
+            <!-- Modify "master" server -->
+            <call function="'ldapModifyWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort() ,
+                'dsInstanceDn'   : master.getRootDn() ,
+                'dsInstancePswd' : master.getRootPwd() ,
+                'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
+              }
+            </call>                            
+      
+
+            <!-- Check modify worked on "master" server -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort() ,
+                'dsInstanceDn'   : master.getRootDn() ,
+                'dsInstancePswd' : master.getRootPwd() ,
+                'dsBaseDN'       : 'uid=hmiller, ou=People,%s' \
+                                   % synchroSuffix,
+                'dsFilter'       : 'jpegPhoto=*'
+              }                  
+            </call>                
+            <script>
+              searchRC = STAXResult[0][0]
+              searchResult = STAXResult[0][1]
+              resultLength = len(searchResult) > 0
+            </script>
+            <call function="'checktestRC'">
+              { 'returncode' : resultLength,
+                'result'     : searchResult,
+                'expected'   : 1
+              }
+            </call>    
+            
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>               
+                                                                           
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>    
+                                                            
+
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Modify Entry - replace 
+                        binary attribute
+  #@TestID              Modify Entry - replace binary attribute
+  #@TestPurpose         Check that an entry modify is well propagated by
+                        replication.
+  #@TestPreamble
+  #@TestSteps           Replace jpegPhoto (binary) attribute value
+  #@TestSteps           Check replace worked
+  #@TestPostamble
+  #@TestResult          Success if replace worked and trees synchronised
+                        over the topology
+  -->
+  <function name="replication_basic_017" scope="local">
+    <testcase name="getTestCaseName('Modify Entry - replace binary attribute')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a modify (replace binary attribute) is replicated.' % msg1 }
+            </call>
+               
+            <script>
+              filename = 'replication_mod_replace_binary.ldif'
+              filePath = '%s/%s' % (local.temp,filename)
+              binaryFilePath = '%s/replication/photo2.uu' % source.data
+              dn = 'uid=hmiller, ou=People,%s' % synchroSuffix
+              modif = 'replace'
+              attrType = 'jpegPhoto'
+              write_replication_mod_binary_ldif_file(filePath, dn, modif,
+                                                     attrType, binaryFilePath)
+            </script>
+
+            <!-- Copy the replication_mod ldif to client host -->
+            <message>
+              'Copy %s file from %s to %s' \
+              % (filename,local.temp,client.getTmpDir())
+            </message>
+            <call function="'copyFile'">
+              { 'srcfile'    : filePath,
+                'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
+                'remotehost' : client.getHostname()
+              }
+            </call>                    
+
+            <!-- Modify "master" server -->
+            <call function="'ldapModifyWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
+              }
+            </call>                            
+      
+
+            <!-- Check modify worked on "master" server -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : 'uid=hmiller, ou=People,%s' \
+                                   % synchroSuffix,
+                'dsFilter'       : 'jpegPhoto=*'
+              }
+            </call>                
+            <script>
+              searchRC = STAXResult[0][0]
+              searchResult = STAXResult[0][1]
+              resultLength = len(searchResult) > 0
+            </script>
+            <call function="'checktestRC'">
+              { 'returncode' : resultLength,
+                'result'     : searchResult,
+                'expected'   : 1
+              }
+            </call>    
+            
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+
+              <!-- Verify the synchronization of the trees among the servers in
+                the topology -->
+              <call function="'verifyTrees'">
+                [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+              </call>
+                                                                           
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Modify Entry - delete binary
+                        attribute
+  #@TestID              Modify Entry - delete binary attribute
+  #@TestPurpose         Check that an entry modify is well propagated by
+                        replication.
+  #@TestPreamble
+  #@TestSteps           Delete binary attribute jpegPhoto
+  #@TestSteps           Check delete worked
+  #@TestPostamble
+  #@TestResult          Success if delete worked and trees synchronised
+                        over the topology
+  -->
+  <function name="replication_basic_018" scope="local">
+    <testcase name="getTestCaseName('Modify Entry - delete binary attribute')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a modify (delete binary attribute) is replicated.' % msg1 }
+            </call>
+                    
+            <script>
+              filename = 'replication_mod_delete_binary.ldif'
+              filePath = '%s/%s' % (local.temp,filename)
+              dn = 'uid=hmiller, ou=People,%s' % synchroSuffix
+              modif = 'delete'
+              attrType = 'jpegPhoto'
+              attrValue = None
+              write_replication_mod_ldif_file(filePath, dn, modif, attrType,
+                                              attrValue)
+            </script>
+
+            <!-- Copy the replication_mod ldif to client host -->
+            <message>
+              'Copy %s file from %s to %s' \
+              % (filename,local.temp,client.getTmpDir())
+            </message>
+            <call function="'copyFile'">
+              { 'srcfile'    : filePath,
+                'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
+                'remotehost' : client.getHostname()
+              }
+            </call>                    
+
+            <!-- Modify "master" server -->
+            <call function="'ldapModifyWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
+              }
+            </call>        
+              
+            <!-- Check modify worked on "master" server -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : 'uid=hmiller, ou=People,%s' \
+                                   % synchroSuffix,
+                'dsFilter'       : 'jpegPhoto=*'
+              }
+            </call>                
+            <script>
+              searchRC = STAXResult[0][0]
+              searchResult = STAXResult[0][1]
+              resultLength = len(searchResult) > 0
+            </script>
+            <call function="'checktestRC'">
+              { 'returncode' : resultLength,
+                'result'     : searchResult,
+                'expected'   : 0
+              }
+            </call>    
+            
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+                                                                           
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+                                                                                                                     
+
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Rename Entry
+  #@TestID              Rename Entry
+  #@TestPurpose         Check that a rename (modrdn) operation is well
+                        propagated by replication.
+  #@TestPreamble
+  #@TestSteps           Rename entry
+  #@TestSteps           Check old dn entry no longer exists
+  #@TestSteps           Check new dn entry exists
+  #@TestPostamble
+  #@TestResult          Success if rename worked and trees synchronised
+                        over the topology
+  -->
+  <function name="replication_basic_019" scope="local">
+    <testcase name="getTestCaseName('Rename Entry')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a rename (modrdn) is replicated.' % msg1 }
+            </call>
+               
+            <script>
+              filename = 'replication_modrdn.ldif'
+              filePath = '%s/%s' % (local.temp,filename)
+              dn = 'uid=kvaughan, ou=People,%s' % synchroSuffix
+              newrdn = 'uid=kvaughan2'
+              newsuperior = None
+              deleteoldrdn = 1
+              write_replication_moddn_ldif_file(filePath, dn, newrdn, 
+                                                newsuperior, deleteoldrdn)
+            </script>
+
+            <!-- Copy the replication_mod ldif to client host -->
+            <message>
+              'Copy %s file from %s to %s' \
+              % (filename,local.temp,client.getTmpDir())
+            </message>
+            <call function="'copyFile'">
+              { 'srcfile'    : filePath,
+                'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
+                'remotehost' : client.getHostname()
+              }
+            </call>                    
+
+            <!-- Modify "master" server -->
+            <call function="'ldapModifyWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort() ,
+                'dsInstanceDn'   : master.getRootDn() ,
+                'dsInstancePswd' : master.getRootPwd() ,
+                'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
+              }
+            </call>                            
+      
+
+            <!-- Check modify worked on "master" server -->                
+            <!-- check that "uid=kvaughan, ou=People, ${DIRECTORY_BASE}" does 
+              NOT exist anymore -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : 'uid=kvaughan, ou=People,%s' \
+                                   % synchroSuffix,
+                'dsFilter'       : 'objectclass=*',
+                'expectedRC'     : 32
+              }
+            </call>                
+              
+            <!-- check that new entry 
+              "uid=kvaughan2, ou=People, ${DIRECTORY_BASE}" exists -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : 'uid=kvaughan2, ou=People,%s' \
+                                   % synchroSuffix,
+                'dsFilter'       : 'objectclass=*'
+              }
+            </call>
+            
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>               
+                                                                           
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>      
+             
+
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Rename Entry (keep old rdn)
+  #@TestID              Rename Entry (keep old rdn)
+  #@TestPurpose         Check that a rename (modrdn) operation is well
+                        propagated by replication.
+  #@TestPreamble
+  #@TestSteps           Rename entry
+  #@TestSteps           Check old dn entry no longer exists
+  #@TestSteps           Check new dn entry exists and contains old rdn
+  #@TestPostamble
+  #@TestResult          Success if rename worked and trees synchronised
+                        over the topology
+  -->
+  <function name="replication_basic_020" scope="local">
+    <testcase name="getTestCaseName('Rename Entry - keep old rdn')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a rename (keep old rdn) is replicated.' % msg1 }
+            </call>
+               
+            <script>
+              filename = 'replication_modrdn_preserve.ldif'
+              filePath = '%s/%s' % (local.temp,filename)
+              dn = 'uid=jwallace, ou=People,%s' % synchroSuffix
+              newrdn = 'uid=igueye'
+              newsuperior = None
+              deleteoldrdn = 0
+              write_replication_moddn_ldif_file(filePath, dn, newrdn, 
+                                                newsuperior, deleteoldrdn)
+            </script>
+
+            <!-- Copy the replication_mod ldif to client host -->
+            <message>
+              'Copy %s file from %s to %s' \
+              % (filename,local.temp,client.getTmpDir())
+            </message>
+            <call function="'copyFile'">
+              { 'srcfile'    : filePath,
+                'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
+                'remotehost' : client.getHostname()
+              }
+            </call>                    
+
+            <!-- Modify "master" server -->
+            <call function="'ldapModifyWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
+              }
+            </call> 
+      
+
+            <!-- Check modify worked on "master" server -->
+            <!-- check that "uid=jwallace, ou=People, ${DIRECTORY_BASE}" does
+              NOT exist anymore -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : 'uid=jwallace, ou=People,%s' \
+                                   % synchroSuffix,
+                'dsFilter'       : 'objectclass=*',
+                'expectedRC'     : 32
+              }                  
+            </call>
+              
+            <!-- check that new entry 
+              "uid=igueye, ou=People, ${DIRECTORY_BASE}" exists -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : 'uid=igueye, ou=People,%s' % synchroSuffix,
+                'dsFilter'       : 'uid=jwallace'
+              }
+            </call>
+            <script>
+              searchRC = STAXResult[0][0]
+              searchResult = STAXResult[0][1]
+              resultLength = len(searchResult) > 0
+            </script>
+            <call function="'checktestRC'">
+              { 'returncode' : resultLength,
+                'result'     : searchResult,
+                'expected'   : 1
+              }
+            </call>       
+                            
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>               
+                                                                           
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Rename Subtree
+  #@TestID              Rename Subtree
+  #@TestPurpose         Check that a subtree rename (moddn) operation is
+                        well propagated by replication.
+  #@TestPreamble
+  #@TestSteps           Rename subtree
+  #@TestSteps           Check old subtree no longer exists
+  #@TestSteps           Check new subree exists
+  #@TestPostamble
+  #@TestResult          Success if rename worked and trees synchronised
+                        over the topology
+  -->
+  <function name="replication_basic_021" scope="local">
+    <testcase name="getTestCaseName('Rename Subtree')">                     
+      <sequence> 
+        <try>
+          <sequence>
+
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a subtree rename (moddn) is replicated.' % msg1 }
+            </call>
+        
+            <script>
+              filename = 'replication_moddn.ldif'
+              filePath = '%s/%s' % (local.temp,filename)
+              dn = 'ou=People,%s' % synchroSuffix
+              newrdn = 'ou=Special People'
+              newsuperior = 'ou=Special Users,%s' % synchroSuffix
+              deleteoldrdn = 0
+              write_replication_moddn_ldif_file(filePath, dn, newrdn, 
+                                                newsuperior, deleteoldrdn)
+            </script>
+
+            <!-- Copy the replication_mod ldif to client host -->
+            <message>
+              'Copy %s file from %s to %s' \
+              % (filename,local.temp,client.getTmpDir())
+            </message>
+            <call function="'copyFile'">
+              { 'srcfile'    : filePath,
+                'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
+                'remotehost' : client.getHostname()
+              }
+            </call>                    
+
+            <!-- Modify "master" server -->
+            <call function="'ldapModifyWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
+              }
+            </call>                            
+      
+
+            <!-- Check modify worked on "master" server -->
+            <!-- check that "uid=gfarmer, ou=People, ${DIRECTORY_BASE}" does
+              NOT exist anymore -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : 'uid=gfarmer, ou=People,%s' \
+                                   % synchroSuffix,
+                'dsFilter'       : 'objectclass=*',
+                'expectedRC'     : 32
+              }  
+            </call>                
+              
+            <script>
+              base = 'uid=gfarmer, ou=Special People, ou=Special Users,%s' \
+                     % synchroSuffix
+            </script>
+            <!-- check that new entry 
+              "uid=gfarmer, ou=Special People, ou=Special Users,
+              ${DIRECTORY_BASE}" exists -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsBaseDN'       : base,
+                'dsFilter'       : 'objectclass=*'
+              }
+            </call>
+            
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>               
+
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>                  
+    
+
+  <!--- Test Case information
+  #@TestMarker          Replication Basic Tests
+  #@TestName            Replication: Basic: Add entry after restart
+  #@TestID              Add entry after restart
+  #@TestPurpose         Check entry add over secured replication after
+                        server restart
+  #@TestPreamble
+  #@TestSteps           Restart servers
+  #@TestSteps           Add entry
+  #@TestPostamble
+  #@TestResult          Success if trees synchronised over the topology
+  -->
+  <function name="replication_basic_022" scope="local">
+    <testcase name="getTestCaseName('Add entry after restart')">                     
+      <sequence> 
+        <try>
+          <sequence>
+
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check entry add over secured replication after server restart.' % msg1 }
+            </call>
+
+            <!-- Stop the servers in the topology -->
+            <call function="'stopServers'">
+              [_splitServerList]
+            </call>
+            
+            <!-- Start the servers in the topology -->  
+            <call function="'startServers'">
+              [_splitServerList]
+            </call>
+            
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                <script>
+                  serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+                  userDn = 'uid=RESTART-iabizen-%s, %s' % \
+                           (i,synchroSuffix)
+                </script>
+                  
+                <!-- Add entry to one of the other servers -->
+                <script>
+                  listAttr = []
+                  listAttr.append('objectclass:top')
+                  listAttr.append('objectclass:organizationalperson')
+                  listAttr.append('objectclass:inetorgperson')
+                  listAttr.append('objectclass:person')
+                  listAttr.append('givenname:Izen-%s' % i)
+                  listAttr.append('sn:Abizen-%s' % i)
+                  listAttr.append('cn:Izen-%s Abizen-%s' % (i, i))
+                  listAttr.append('l:ICNC')
+                </script>
+        
+                <call function="'addAnEntry'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : serverPath,
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'DNToAdd'        : userDn,
+                    'listAttributes' : listAttr
+                  }
+                </call>
+            
+              </sequence>
+            </iterate>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify synchronization of servers in the topology.' % msg1 }
+            </call>
+                
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+</stax>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/binarycopy/binarycopy.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/binarycopy/binarycopy.xml
index 4caa6a1..cf54328 100644
--- a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/binarycopy/binarycopy.xml
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/binarycopy/binarycopy.xml
@@ -7,412 +7,139 @@
  ! 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 2007-2010 Sun Microsystems, Inc.
- !      Portions Copyright 2011-2012 ForgeRock AS.
+ !      Copyright 2012 ForgeRock AS.
  ! -->
 <stax>
   <defaultcall function="replication_binarycopy"/>
-  <function name="replication_binarycopy">
+  <function name="replication_binarycopy" scope="local">
     <sequence>
-      <block name="'binarycopy'">
-        <sequence>
-          <script>
-            if not CurrentTestPath.has_key('group'):
-              CurrentTestPath['group']='replication'
-            CurrentTestPath['suite']=STAXCurrentBlock
-          </script>
-          <call function="'testSuite_Preamble'"/>
-          <!--- Test Suite information
-          #@TestSuiteName       Replication Binary Copy Tests
-          #@TestSuitePurpose    Verify that the servers in a replicated topology
-                                can be initialised by the means of a binary copy
-                                (backup-restore).
-          #@TestSuiteID         Binary Copy Tests
-          #@TestSuiteGroup      Binary Copy
-          #@TestGroup           Replication
-          #@TestScript          replication_binarycopy.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'" >
-            { 'label'    : 'Replication Binarycopy' }
-          </call>
-
-          
-          <!--- Test Case information
-          #@TestMarker          Replication Binary Copy Tests
-          #@TestName            Replication: Binary Copy: Off-line
-                                initialisation
-          #@TestID              Off-line initialisation
-          #@TestPurpose         Initialise replicated servers using off-line 
-                                backup/restore
-          #@TestPreamble
-          #@TestSteps           Call dsreplication pre-external-initialization
-          #@TestSteps           Stop servers
-          #@TestSteps           Import data on server A
-          #@TestSteps           Back-up server A
-          #@TestSteps           Restore back-up on other servers
-          #@TestSteps           Start servers
-          #@TestSteps           Call dsreplication post-external-initialization
-          #@TestSteps           Add entry on server A
-          #@TestPostamble
-          #@TestResult          Success if trees synchronized
-          -->
-          <testcase name="getTestCaseName('Off-line initialisation')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <script>
-                m = md5_hash()
-                m.update(STAXCurrentTestcase)
-              </script>
-              <message>
-                 'Replication: Binary Copy: Off-line initialisation. \
-                 Initialise replicated servers using off-line backup/restore'
-              </message>
-                
-                
-              <!-- Pre-initialise the servers in the topology -->
-              <message>
-                '+++++ binary copy off-line: prepare servers for external \
-                initialization'
-              </message>
-              <call function="'preInitializeReplication'">
-                { 'location'            : clientHost,
-                  'dsPath'              : clientPath,
-                  'dsInstanceHost'      : masterHost,
-                  'dsInstanceAdminPort' : master.getAdminPort(),
-                  'localOnly'           : False,
-                  'replicationDnList'   : [synchroSuffix],
-                  'adminUID'            : adminUID,
-                  'adminPswd'           : adminPswd
-                }
-              </call>
-
-              <!-- Stop the servers in the topology -->
-              <call function="'stopServers'">
-                [_topologyServerList]
-              </call>
+      <block name="'replication_binarycopy'">
+        <try>
+          <sequence>
+            <script>
+              CurrentTestPath['group'] = 'replication'        
+              CurrentTestPath['suite'] = 'binarycopy'
               
-              <!-- Import data into "master" server -->
-              <message>
-                '+++++ binary copy off-line: import data on %s:%s' \
-                % (masterHost, master.getPort())
-              </message>
-              <call function="'ImportLdifWithScript'">
-                { 'location'   : masterHost,
-                  'dsPath'     : masterPath,
-                  'backEnd'    : DIRECTORY_INSTANCE_BE,
-                  'ldifFile'   : '%s/replication/Example.ldif' % masterDataDir
-                }
-              </call>
-                            
-              <!-- 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_%s' \
-                                  % (masterBackupDir,m.hexdigest())
-                }
-              </call>
+              _group=CurrentTestPath['group']
+              _groupdir='%s/testcases/%s' % (TESTS_DIR,_group)
+              _label = 'Replication BinaryCopy'
+            </script>
 
-              <!-- Copy backup to "consumer" servers and restore it -->
-              <paralleliterate var="consumer" in="consumerList">
-                <sequence>
-                  <script>
-                    consumerBackupDir = '%s' % consumer.getTmpDir()
-                  </script>
-                  <call function="'CopyFolderByExtension'">
-                    { 'location'   : masterHost,
-                      'remotehost' : consumer.getHostname(),
-                      'srcfolder'  : '%s/replication/master_backup_%s' \
-                                     % (masterBackupDir,m.hexdigest()),
-                      'destfolder' : '%s/replication/master_backup_%s' \
-                                     % (consumerBackupDir,m.hexdigest()),
-                      'extension'  : '*'
-                    }
-                  </call>
-
-                  <message>
-                    '+++++ binary copy off-line: restore back-up on %s:%s' \
-                    % (consumer.getHostname(), consumer.getPort())
-                  </message>
-                  <call function="'restore'">
-                    { 'location'  : consumer.getHostname(),
-                      'dsPath'    : '%s/%s' % (consumer.getDir(), OPENDSNAME),
-                      'backupDir' : '%s/replication/master_backup_%s' \
-                                    % (consumerBackupDir,m.hexdigest())
-                    }
-                  </call>
-                </sequence>
-              </paralleliterate>
-              
-              <!-- Start the servers in the topology -->  
-              <call function="'startServers'">
-                [_topologyServerList]
-              </call>
-                
-              <!-- Check some data was imported into "master" server -->
-              <call function="'checkImport'">
-                { 'location'        : clientHost,
-                  'dsPath'          : clientPath,
-                  'dsHost'          : masterHost,
-                  'dsPort'          : master.getPort(),
-                  'dsAdminPort'     : master.getAdminPort(),
-                  'dsDn'            : master.getRootDn(),
-                  'dsPswd'          : master.getRootPwd(),
-                  'expectedEntries' : ['uid=scarter,ou=People,o=example',
-                                       'uid=dmiller, ou=People, o=example',
-                                       'uid=rhunt, ou=People, o=example'],
-                  'startDS'         : 'no' 
-               }
-              </call>
-
-              <!-- Post-initialise the servers in the topology -->
-              <message>
-                '+++++ binary copy off-line: end external server initialization'
-              </message>
-              <call function="'postInitializeReplication'">
-                { 'location'            : clientHost,
-                  'dsPath'              : clientPath,
-                  'dsInstanceHost'      : masterHost,
-                  'dsInstanceAdminPort' : master.getAdminPort(),
-                  'replicationDnList'   : [synchroSuffix],
-                  'adminUID'            : adminUID,
-                  'adminPswd'           : adminPswd
-                }
-              </call>                                    
-      
-              <!-- Add entry to "master" server -->
-              <message>
-                '+++++ binary copy off-line: add entry to %s:%s' \
-                % (masterHost, master.getPort())
-              </message>
-              <call function="'addEntry'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(), 
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'entryToBeAdded' : '%s/replication/tfitter.ldif' \
-                                     % clientDataDir
-                }
-              </call>
-              
-              <!-- 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 Binary Copy Tests
-          #@TestName            Replication: Binary Copy: On-line initialisation
-          #@TestID              On-line initialisation
-          #@TestPurpose         Initialise replicated servers using on-line
-                                backup/restore
-          #@TestPreamble
-          #@TestSteps           Call dsreplication pre-external-initialization
-          #@TestSteps           Import data on server A
-          #@TestSteps           Back-up server A
-          #@TestSteps           Restore back-up on other servers
-          #@TestSteps           Call dsreplication post-external-initialization
-          #@TestSteps           Add entry on server A
-          #@TestPostamble
-          #@TestResult          Success if trees synchronized
-          -->
-          <testcase name="getTestCaseName('On-line initialisation')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <script>
-                m = md5_hash()
-                m.update(STAXCurrentTestcase)
-              </script>
-              <message>
-                 'Replication: Binary Copy: On-line initialisation. Initialise \
-                 replicated servers using on-line backup/restore'
-              </message>
-
-              <!-- Pre-initialise the servers in the topology -->
-              <message>
-                '+++++ binary copy on-line: prepare servers for external \
-                initialization'
-              </message>                
-              <call function="'preInitializeReplication'">
-                { 'location'            : clientHost,
-                  'dsPath'              : clientPath,
-                  'dsInstanceHost'      : masterHost,
-                  'dsInstanceAdminPort' : master.getAdminPort(),
-                  'localOnly'           : False,
-                  'replicationDnList'   : [synchroSuffix],
-                  'adminUID'            : adminUID,
-                  'adminPswd'           : adminPswd
-                }
-              </call>           
-                                              
-              <!-- Import data into "master" server -->
-              <message>
-                '+++++ binary copy on-line: import data on %s:%s' \
-                % (masterHost, master.getPort())
-              </message>                
-              <call function="'ImportLdifWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstanceAdminPort' : master.getAdminPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'ldifFile'       : '%s/replication/Example.ldif' \
-                                     % masterDataDir
-                }
-              </call>
-              
-              <!-- Check some data was imported into "master" server -->    
-              <call function="'checkImport'">
-                { 'location'        : clientHost,
-                  'dsPath'          : clientPath,
-                  'dsHost'          : masterHost,
-                  'dsPort'          : master.getPort(),
-                  'dsAdminPort'     : master.getAdminPort(),
-                  'dsDn'            : master.getRootDn(),
-                  'dsPswd'          : master.getRootPwd(),
-                  'expectedEntries' : ['uid=scarter,ou=People,o=example',
-                                       'uid=dmiller, ou=People, o=example',
-                                       'uid=rhunt, ou=People, o=example'], 
-                  'startDS'         : 'no'
-                }
-              </call>
-              
-              <!-- Backup "master" server -->
-              <message>
-                '+++++ binary copy on-line: back-up server %s:%s' \
-                % (masterHost, master.getPort())
-              </message>              
-              <call function="'backupTask'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'taskID'         : 'backup task',
-                  'backupDir'      : '%s/replication/master_backup_%s' \
-                                     % (masterBackupDir,m.hexdigest()) 
-                }
-              </call>
-              
-              <!-- Copy backup to "consumer" servers and restore it -->
-              <paralleliterate var="consumer" in="consumerList">
-                <sequence>
-                  <script>
-                    consumerBackupDir = '%s' % consumer.getTmpDir()
-                  </script>
-
-                  <call function="'CopyFolderByExtension'">
-                    { 'location'   : masterHost,
-                      'remotehost' : consumer.getHostname(),
-                      'srcfolder'  : '%s/replication/master_backup_%s' \
-                                     % (masterBackupDir,m.hexdigest()),
-                      'destfolder' : '%s/replication/master_backup_%s' \
-                                     % (consumerBackupDir,m.hexdigest()),
-                      'extension'  : '*'
-                    }
-                  </call>
+            <!--- Test Suite information
+            #@TestSuiteName       Replication BinaryCopy Tests
+            #@TestSuitePurpose    Verify that the total-update operations are replicated
+                                  correctly between two servers.
+            #@TestSuiteID         BinaryCopy Tests
+            #@TestSuiteGroup      BinaryCopy
+            #@TestGroup           Replication
+            #@TestScript          replication_binarycopy.xml
+            #@TestHTMLLink        http://www.forgerock.org/
+              -->
                   
-                  <message>
-                    '+++++ binary copy on-line: restore back-up on %s:%s' \
-                    % (consumer.getHostname(), consumer.getPort())
+            <call function="'testSuite_Preamble'"/>
+
+            <try>
+              <sequence> 
+                                                                        
+                <import machine="STAF_LOCAL_HOSTNAME"
+                  file="'%s/testcases/replication/replication_setup.xml' 
+                    % (TESTS_DIR)"/>
+                <call function="'replication_setup'" >
+                  { 'label'    : _label }
+                </call>
+
+                <!-- List of Import of Test Functions -->
+                <script>
+                  importList=[]
+                  importList.append('binarycopy/binarycopy_tests')
+                </script>
+
+                <!-- 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: BinaryCopy:'
+                </script>
+                                                    
+                <!-- List of Test Cases -->
+                <script>
+                  testsList=[]
+                  testsList.append('replication_binarycopy_001')
+                  testsList.append('replication_binarycopy_002')
+                </script>
+
+                <!-- Execute the Tests -->
+                <iterate var="__test" in="testsList">
+                  <sequence>
+                    <call function="'%s' % (__test)" />
+                  </sequence>
+                </iterate>                
+                                
+              </sequence>
+
+              <catch exception="'STAFException.TestSuite.SetupException'">
+                <sequence>
+                  <message log="1" level="'fatal'">
+                    'Setup of test suite failed.'
                   </message>
-                  <call function="'restoreTask'">
-                    { 'location'       : clientHost,
-                      'dsPath'         : clientPath,
-                      'dsInstanceHost' : consumer.getHostname(),
-                      'dsInstancePort' : consumer.getPort(),
-                      'dsInstanceDn'   : consumer.getRootDn(),
-                      'dsInstancePswd' : consumer.getRootPwd(),
-                      'taskID'         : 'restore task',
-                      'backupDir'   : '%s/replication/master_backup_%s' \
-                                      % (consumerBackupDir,m.hexdigest())
-                    }
-                  </call>
+                  <rethrow/>
                 </sequence>
-              </paralleliterate>
-              
-              <!-- Post-initialise the servers in the topology -->
-              <message>
-                '+++++ binary copy on-line: end external server initialization'
-              </message>                       
-              <call function="'postInitializeReplication'">
-                { 'location'            : clientHost,
-                  'dsPath'              : clientPath,
-                  'dsInstanceHost'      : masterHost,
-                  'dsInstanceAdminPort' : master.getAdminPort(),
-                  'replicationDnList'   : [synchroSuffix],
-                  'adminUID'            : adminUID,
-                  'adminPswd'           : adminPswd
-                }
-              </call>
-                
-              <!-- Add entry to "master" server -->
-              <message>
-                '+++++ binary copy on-line: add entry to %s:%s' \
-                % (masterHost, master.getPort())
-              </message>
-              <call function="'addEntry'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(), 
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'entryToBeAdded' : '%s/replication/tfitter.ldif' \
-                                     % clientDataDir
-                }
-              </call>
-              
-              <!-- 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>
+              </catch>
+  
+              <finally>
+                <message>'Test Cases Completed.'</message>
+              </finally>
+
+            </try>
+
+          </sequence>
           
-          <import machine="STAF_LOCAL_HOSTNAME"
-                  file="'%s/testcases/replication/replication_cleanup.xml' 
-                        % (TESTS_DIR)"/>
-          <call function="'replication_cleanup'" >
-            { 'label'    : 'Replication Binarycopy' }
-          </call>
-          <call function="'testSuite_Postamble'"/>
-        </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>
+ 
+        </try>
       </block>
     </sequence>
   </function>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/binarycopy/binarycopy_tests.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/binarycopy/binarycopy_tests.xml
new file mode 100644
index 0000000..9d1bb28
--- /dev/null
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/binarycopy/binarycopy_tests.xml
@@ -0,0 +1,422 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../../../shared/stax.dtd">
+<!--
+ ! CDDL HEADER START
+ !
+ ! The contents of this file are subject to the terms of the
+ ! 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.
+ ! 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,
+ ! 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 2007-2010 Sun Microsystems, Inc.
+ !      Portions Copyright 2011-2012 ForgeRock AS.
+ ! -->
+<stax>
+          
+  <!--- Test Case information
+  #@TestMarker          Replication Binary Copy Tests
+  #@TestName            Replication: Binary Copy: Off-line
+                        initialisation
+  #@TestID              Off-line initialisation
+  #@TestPurpose         Initialise replicated servers using off-line 
+                        backup/restore
+  #@TestPreamble
+  #@TestSteps           Call dsreplication pre-external-initialization
+  #@TestSteps           Stop servers
+  #@TestSteps           Import data on server A
+  #@TestSteps           Back-up server A
+  #@TestSteps           Restore back-up on other servers
+  #@TestSteps           Start servers
+  #@TestSteps           Call dsreplication post-external-initialization
+  #@TestSteps           Add entry on server A
+  #@TestPostamble
+  #@TestResult          Success if trees synchronized
+  -->
+  <function name="replication_binarycopy_001" scope="local">
+    <testcase name="getTestCaseName('Off-line initialisation')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <script>
+              m = md5_hash()
+              m.update(STAXCurrentTestcase)
+            </script>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Initialise replicated servers using off-line backup/restore.' % msg1 }
+            </call>                
+                
+            <!-- Pre-initialise the servers in the topology -->
+            <message>
+              '+++++ binary copy off-line: prepare servers for external \
+              initialization'
+            </message>
+            <call function="'preInitializeReplication'">
+              { 'location'            : clientHost,
+                'dsPath'              : clientPath,
+                'dsInstanceHost'      : masterHost,
+                'dsInstanceAdminPort' : master.getAdminPort(),
+                'localOnly'           : False,
+                'replicationDnList'   : [synchroSuffix],
+                'adminUID'            : adminUID,
+                'adminPswd'           : adminPswd
+              }
+            </call>
+
+            <!-- Stop the servers in the topology -->
+            <call function="'stopServers'">
+              [_topologyServerList]
+            </call>
+            
+            <!-- Import data into "master" server -->
+            <message>
+              '+++++ binary copy off-line: import data on %s:%s' \
+              % (masterHost, master.getPort())
+            </message>
+            <call function="'ImportLdifWithScript'">
+              { 'location'   : masterHost,
+                'dsPath'     : masterPath,
+                'backEnd'    : DIRECTORY_INSTANCE_BE,
+                'ldifFile'   : '%s/replication/Example.ldif' % masterDataDir
+              }
+            </call>
+                          
+            <!-- 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_%s' \
+                                % (masterBackupDir,m.hexdigest())
+              }
+            </call>
+
+            <!-- Copy backup to "consumer" servers and restore it -->
+            <paralleliterate var="consumer" in="consumerList">
+              <sequence>
+                <script>
+                  consumerBackupDir = '%s' % consumer.getTmpDir()
+                </script>
+                <call function="'CopyFolderByExtension'">
+                  { 'location'   : masterHost,
+                    'remotehost' : consumer.getHostname(),
+                    'srcfolder'  : '%s/replication/master_backup_%s' \
+                                   % (masterBackupDir,m.hexdigest()),
+                    'destfolder' : '%s/replication/master_backup_%s' \
+                                   % (consumerBackupDir,m.hexdigest()),
+                    'extension'  : '*'
+                  }
+                </call>
+
+                <message>
+                  '+++++ binary copy off-line: restore back-up on %s:%s' \
+                  % (consumer.getHostname(), consumer.getPort())
+                </message>
+                <call function="'restore'">
+                  { 'location'  : consumer.getHostname(),
+                    'dsPath'    : '%s/%s' % (consumer.getDir(), OPENDSNAME),
+                    'backupDir' : '%s/replication/master_backup_%s' \
+                                  % (consumerBackupDir,m.hexdigest())
+                  }
+                </call>
+              </sequence>
+            </paralleliterate>
+            
+            <!-- Start the servers in the topology -->  
+            <call function="'startServers'">
+              [_topologyServerList]
+            </call>
+              
+            <!-- Check some data was imported into "master" server -->
+            <call function="'checkImport'">
+              { 'location'        : clientHost,
+                'dsPath'          : clientPath,
+                'dsHost'          : masterHost,
+                'dsPort'          : master.getPort(),
+                'dsAdminPort'     : master.getAdminPort(),
+                'dsDn'            : master.getRootDn(),
+                'dsPswd'          : master.getRootPwd(),
+                'expectedEntries' : ['uid=scarter,ou=People,o=example',
+                                     'uid=dmiller, ou=People, o=example',
+                                     'uid=rhunt, ou=People, o=example'],
+                'startDS'         : 'no' 
+             }
+            </call>
+
+            <!-- Post-initialise the servers in the topology -->
+            <message>
+              '+++++ binary copy off-line: end external server initialization'
+            </message>
+            <call function="'postInitializeReplication'">
+              { 'location'            : clientHost,
+                'dsPath'              : clientPath,
+                'dsInstanceHost'      : masterHost,
+                'dsInstanceAdminPort' : master.getAdminPort(),
+                'replicationDnList'   : [synchroSuffix],
+                'adminUID'            : adminUID,
+                'adminPswd'           : adminPswd
+              }
+            </call>                                    
+    
+            <!-- Add entry to "master" server -->
+            <message>
+              '+++++ binary copy off-line: add entry to %s:%s' \
+              % (masterHost, master.getPort())
+            </message>
+            <call function="'addEntry'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(), 
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'entryToBeAdded' : '%s/replication/tfitter.ldif' \
+                                   % clientDataDir
+              }
+            </call>
+            
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+          
+  <!--- Test Case information
+  #@TestMarker          Replication Binary Copy Tests
+  #@TestName            Replication: Binary Copy: On-line initialisation
+  #@TestID              On-line initialisation
+  #@TestPurpose         Initialise replicated servers using on-line
+                        backup/restore
+  #@TestPreamble
+  #@TestSteps           Call dsreplication pre-external-initialization
+  #@TestSteps           Import data on server A
+  #@TestSteps           Back-up server A
+  #@TestSteps           Restore back-up on other servers
+  #@TestSteps           Call dsreplication post-external-initialization
+  #@TestSteps           Add entry on server A
+  #@TestPostamble
+  #@TestResult          Success if trees synchronized
+  -->
+  <function name="replication_binarycopy_002" scope="local">
+    <testcase name="getTestCaseName('On-line initialisation')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <script>
+              m = md5_hash()
+              m.update(STAXCurrentTestcase)
+            </script>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Initialise replicated servers using on-line backup/restore.' % msg1 }
+            </call>
+
+            <!-- Pre-initialise the servers in the topology -->
+            <message>
+              '+++++ binary copy on-line: prepare servers for external \
+              initialization'
+            </message>                
+            <call function="'preInitializeReplication'">
+              { 'location'            : clientHost,
+                'dsPath'              : clientPath,
+                'dsInstanceHost'      : masterHost,
+                'dsInstanceAdminPort' : master.getAdminPort(),
+                'localOnly'           : False,
+                'replicationDnList'   : [synchroSuffix],
+                'adminUID'            : adminUID,
+                'adminPswd'           : adminPswd
+              }
+            </call>           
+                                            
+            <!-- Import data into "master" server -->
+            <message>
+              '+++++ binary copy on-line: import data on %s:%s' \
+              % (masterHost, master.getPort())
+            </message>                
+            <call function="'ImportLdifWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstanceAdminPort' : master.getAdminPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'ldifFile'       : '%s/replication/Example.ldif' \
+                                   % masterDataDir
+              }
+            </call>
+            
+            <!-- Check some data was imported into "master" server -->    
+            <call function="'checkImport'">
+              { 'location'        : clientHost,
+                'dsPath'          : clientPath,
+                'dsHost'          : masterHost,
+                'dsPort'          : master.getPort(),
+                'dsAdminPort'     : master.getAdminPort(),
+                'dsDn'            : master.getRootDn(),
+                'dsPswd'          : master.getRootPwd(),
+                'expectedEntries' : ['uid=scarter,ou=People,o=example',
+                                     'uid=dmiller, ou=People, o=example',
+                                     'uid=rhunt, ou=People, o=example'], 
+                'startDS'         : 'no'
+              }
+            </call>
+            
+            <!-- Backup "master" server -->
+            <message>
+              '+++++ binary copy on-line: back-up server %s:%s' \
+              % (masterHost, master.getPort())
+            </message>              
+            <call function="'backupTask'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'taskID'         : 'backup task',
+                'backupDir'      : '%s/replication/master_backup_%s' \
+                                   % (masterBackupDir,m.hexdigest()) 
+              }
+            </call>
+            
+            <!-- Copy backup to "consumer" servers and restore it -->
+            <paralleliterate var="consumer" in="consumerList">
+              <sequence>
+                <script>
+                  consumerBackupDir = '%s' % consumer.getTmpDir()
+                </script>
+
+                <call function="'CopyFolderByExtension'">
+                  { 'location'   : masterHost,
+                    'remotehost' : consumer.getHostname(),
+                    'srcfolder'  : '%s/replication/master_backup_%s' \
+                                   % (masterBackupDir,m.hexdigest()),
+                    'destfolder' : '%s/replication/master_backup_%s' \
+                                   % (consumerBackupDir,m.hexdigest()),
+                    'extension'  : '*'
+                  }
+                </call>
+                
+                <message>
+                  '+++++ binary copy on-line: restore back-up on %s:%s' \
+                  % (consumer.getHostname(), consumer.getPort())
+                </message>
+                <call function="'restoreTask'">
+                  { 'location'       : clientHost,
+                    'dsPath'         : clientPath,
+                    'dsInstanceHost' : consumer.getHostname(),
+                    'dsInstancePort' : consumer.getPort(),
+                    'dsInstanceDn'   : consumer.getRootDn(),
+                    'dsInstancePswd' : consumer.getRootPwd(),
+                    'taskID'         : 'restore task',
+                    'backupDir'   : '%s/replication/master_backup_%s' \
+                                    % (consumerBackupDir,m.hexdigest())
+                  }
+                </call>
+              </sequence>
+            </paralleliterate>
+            
+            <!-- Post-initialise the servers in the topology -->
+            <message>
+              '+++++ binary copy on-line: end external server initialization'
+            </message>                       
+            <call function="'postInitializeReplication'">
+              { 'location'            : clientHost,
+                'dsPath'              : clientPath,
+                'dsInstanceHost'      : masterHost,
+                'dsInstanceAdminPort' : master.getAdminPort(),
+                'replicationDnList'   : [synchroSuffix],
+                'adminUID'            : adminUID,
+                'adminPswd'           : adminPswd
+              }
+            </call>
+              
+            <!-- Add entry to "master" server -->
+            <message>
+              '+++++ binary copy on-line: add entry to %s:%s' \
+              % (masterHost, master.getPort())
+            </message>
+            <call function="'addEntry'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(), 
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'entryToBeAdded' : '%s/replication/tfitter.ldif' \
+                                   % clientDataDir
+              }
+            </call>
+            
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+</stax>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/changelog/changelog.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/changelog/changelog.xml
index a3ef9c5..a718d9e 100644
--- a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/changelog/changelog.xml
+++ b/opendj-sdk/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>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/changelog/changelog_tests.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/changelog/changelog_tests.xml
new file mode 100644
index 0000000..2005f4d
--- /dev/null
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/changelog/changelog_tests.xml
@@ -0,0 +1,1529 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../../../shared/stax.dtd">
+<!--
+ ! CDDL HEADER START
+ !
+ ! The contents of this file are subject to the terms of the
+ ! 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.
+ ! 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,
+ ! 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.
+ ! -->
+<stax>
+    
+                        
+  <!--- 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
+  -->
+  <function name="replication_changelog_001" scope="local">
+    <testcase name="getTestCaseName('Search')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check replication changelog can be searched and look up changes.' % msg1 }
+            </call>
+
+            <!-- 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>
+
+            <!-- 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>                                                                                 
+
+            <!-- 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>
+                  
+                <!-- 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> 
+                                
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+                                
+
+                                                                                    
+  <!--- 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
+  -->
+  <function name="replication_changelog_002" scope="local">
+    <testcase name="getTestCaseName('Export (on-line)')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check replication changelog can be exported on-line and look up changes.' % msg1 }
+            </call>
+
+            <!-- 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">
+              <sequence>
+                  
+                <script>
+                  if globalSplitServers:
+                    replServer = _topologyReplServerList[i]
+                  else:
+                    replServer = server
+
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
+
+                  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> 
+                                
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+          
+ 
+
+  <!--- 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
+  -->
+  <function name="replication_changelog_003" scope="local">
+    <testcase name="getTestCaseName('Backup-restore (off-line)')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check replication changelog can be backed up and restored off-line.' % msg1 }
+            </call>
+
+            <!-- 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> 
+                                
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>                    
+                      
+
+  <!-- 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
+  -->
+  <function name="replication_changelog_004" scope="local">
+    <testcase name="getTestCaseName('Backup-restore (on-line)')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check replication changelog can be backed up and restored on-line.' % msg1 }
+            </call>
+
+            <!-- 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> 
+                                
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+  <!--- 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
+  -->
+  <function name="replication_changelog_005" scope="local">
+    <testcase name="getTestCaseName('Changelog Reset')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check replication changelog is reset by dsreplication pre/post-external-initialize.' % msg1 }
+            </call>
+
+            <!-- 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> 
+                                
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>                    
+                      
+
+
+  <!--- 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)
+  -->
+  <function name="replication_changelog_006" scope="local">
+    <testcase name="getTestCaseName('Changelog Reset')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check replication changelog is purged after purge delay period expires].' % msg1 }
+            </call>
+
+            <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>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+</stax>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/conflict/conflict.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/conflict/conflict.xml
index 4de257a..9afe7ff 100644
--- a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/conflict/conflict.xml
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/conflict/conflict.xml
@@ -7,3561 +7,206 @@
  ! 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
  !
- !      Portions Copyright 2006-2009 Sun Microsystems, Inc.
- !      Portions Copyright 2011-2012 ForgeRock AS.
+ !      Copyright 2012 ForgeRock AS.
  ! -->
 <stax>
-
   <defaultcall function="replication_conflict"/>
-
-  <function name="replication_conflict">
-
+  <function name="replication_conflict" scope="local">
     <sequence>
+      <block name="'replication_conflict'">
+        <try>
+          <sequence>
+            <script>
+              CurrentTestPath['group'] = 'replication'        
+              CurrentTestPath['suite'] = 'conflict'
+              
+              _group=CurrentTestPath['group']
+              _groupdir='%s/testcases/%s' % (TESTS_DIR,_group)
+              _label = 'Replication Conflict'
+            </script>
 
-      <block name="'conflict'">
-
-        <sequence>
-            
-          <script>
-            if not CurrentTestPath.has_key('group'):
-              CurrentTestPath['group']='replication'                 
-            CurrentTestPath['suite']=STAXCurrentBlock
-          </script>            
-
-          <call function="'testSuite_Preamble'"/>
-
-          <!--- Test Suite information
-          #@TestSuiteName       Replication Conflict Tests
-          #@TestSuitePurpose    Verify that replication handles the conflicts
-                                all right
-          #@TestSuiteID         Conflict Tests
-          #@TestSuiteGroup      Conflict
-          #@TestGroup           Replication
-          #@TestScript          replication_failover.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'">
-            { 'topologyFile'       : '%s/basic_topology.txt' \
-                                      % REPLICATION_CONFIG_DIR,
-              'dataFile'           : 'Short_Example.ldif',
-              'isolateLdapServers' : True,
-              'enableDebugLogs'    : False,
-              'label'              : 'Replication Conflict'
-            }
-          </call>
-                                    
-
-          <script>
-            server1 = _topologyServerList[0]
-            server2 = _topologyServerList[1]
-            server1Host = server1.getHostname()
-            server2Host = server2.getHostname()
-            server1Path = '%s/%s' % (server1.getDir(), OPENDSNAME)
-            server2Path = '%s/%s' % (server2.getDir(), OPENDSNAME)
-            server1name = '%s:%s' % (server1Host, server1.getPort())
-            server2name = '%s:%s' % (server2Host, server2.getPort())
-            
-            if globalSplitServers:
-              replServer1 = _topologyReplServerList[0]
-              replServer2 = _topologyReplServerList[1]
-            else:
-              replServer1 = server1
-              replServer2 = server2
-
-            # Filter used for retrieving conflict counters from cn=monitor              
-            filter0 = '(base-dn=%s)' % synchroSuffix
-            filter1 = '(cn=Replication Plugin*)'
-            monitorFilter = '&amp;%s%s' % (filter0, filter1)
-            monitorCounters = 'resolved-naming-conflicts \
-                               unresolved-naming-conflicts \
-                               resolved-modify-conflicts'
-
-            addedEntries = STAXGlobal( [[], []] )
-                                        
-            class Entry:
-              def __init__(self, rdn):
-                self.userDn = '%s, ou=People, %s' \
-                              % (rdn, synchroSuffix)     
-                self.listAttr = []
-                self.listAttr.append('objectclass:top')
-                self.listAttr.append('objectclass:organizationalperson')
-                self.listAttr.append('objectclass:inetorgperson')
-                self.listAttr.append('objectclass:person')
-                self.listAttr.append('sn:User')
-                self.listAttr.append('cn:Test User')     
-              def getDn(self):
-                return self.userDn              
-              def getAttrList(self):
-                return self.listAttr
-              def addAttr(self, attrType, attrValue):
-                self.listAttr.append('%s:%s' % (attrType, attrValue))
-          </script>            
-          <!-- ============================================== -->
-          <!-- ============================================== -->
-
-          <!--- Test Case information
-          #@TestMarker          Replication Conflict Tests
-          #@TestName            Replication: Conflict: Basic check
-          #@TestID              Basic check
-          #@TestPurpose         Check replication assures synchronization after
-                                a simultaneous conflictuous modify on 2 
-                                different servers (regardless of the prevailing
-                                modify)
-          #@TestPreamble
-          #@TestSteps           Add entry to server1 with employeeNumber:0
-          #@TestSteps           Parallel replace 
-                                  server1: employeeNumber -> 1
-                                  server2: employeeNumber -> 2
-          #@TestSteps           Check entry consistent on both servers
-          #@TestPostamble
-          #@TestResult          Success if trees are synchronised
-          -->               
-          <testcase name="getTestCaseName
-                          ('Basic check')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Conflict: Basic check 0. \
-                Check replication assures synchronization after a simultaneous \
-                conflictuous modify on 2 different servers (regardless of the \
-                prevailing modify)'
-              </message>
-                                                                
-              <!-- Add entry to server1 -->
-              <script>
-                myEntry = Entry('uid=tuser-0')
-                myEntry.addAttr('employeeNumber', '0')
-              </script>
-              <call function="'addAnEntry'">
-                { 'location'       : server1Host,
-                  'dsPath'         : server1Path,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'DNToAdd'        : myEntry.getDn(),
-                  'listAttributes' : myEntry.getAttrList()
-                }
-              </call>
-
-              <call function="'Sleep'">
-                { 'sleepForMilliSeconds' : 2000 }
-              </call>
-
-              <paralleliterate var="server"
-                               in="[server1, server2]"
-                               indexvar="i">
-                <!-- Modify entry on one of the servers -->
-                <call function="'modifyAnAttribute'">
-                  { 'location'          : server.getHostname(),
-                    'dsPath'            : '%s/%s' \
-                                          % (server.getDir(), OPENDSNAME),
-                    'dsInstanceHost'    : server.getHostname(),
-                    'dsInstancePort'    : server.getPort(),
-                    'dsInstanceDn'      : server.getRootDn(),
-                    'dsInstancePswd'    : server.getRootPwd(),
-                    'DNToModify'        : myEntry.getDn(),
-                    'attributeName'     : 'employeeNumber',
-                    'newAttributeValue' : '%i' % (i + 1),
-                    'changetype'        : 'replace'
-                  }
-                </call>
-              </paralleliterate>
-
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'employeeNumber',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>
-              </paralleliterate>
-
-
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, server1, [server2], synchroSuffix ]
-              </call> 
-
-              <!-- Delete added entry -->
-              <call function="'ldapDeleteWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'dsDn'           : [myEntry.getDn()]
-                }
-              </call>
-  
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>
-
-
-
-
-          <!--- Test Case information
-          #@TestMarker          Replication Conflict Tests
-          #@TestName            Replication: Conflict: double_replace_multi
-          #@TestID              double_replace_multi
-          #@TestPurpose         Double replace a multi-valued attribute
-          #@TestPreamble
-          #@TestSteps           Add entry to server1 with description:{1 2}
-          #@TestSteps           Disconnect Replication Servers
-          #@TestSteps           server1: replace description -> {3 4}
-          #@TestSteps           server2: replace description -> {5 6}
-          #@TestSteps           Re-connect Replication Servers
-          #@TestSteps           Check description={5 6} on both servers
-          #@TestPostamble
-          #@TestResult          Success if trees are synchronised
-          -->
-          <testcase name="getTestCaseName
-                          ('double_replace_multi')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Conflict: double_replace_multi. \
-                Double replace a multi-valued attribute'
-              </message>
-                                                                
-              <!-- Add entry to server1 -->
-              <script>
-                myEntry = Entry('cn=A1')
-                myEntry.addAttr('description', '1')
-                myEntry.addAttr('description', '2')
-                server1mods = ['description:3', 'description:4']
-                server2mods = ['description:5', 'description:6']
-                mods = [server1mods, server2mods]
-              </script>
-              <call function="'addAnEntry'">
-                { 'location'       : server1Host,
-                  'dsPath'         : server1Path,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'DNToAdd'        : myEntry.getDn(),
-                  'listAttributes' : myEntry.getAttrList()
-                }
-              </call>
-
-              <!-- Disconnect Replication Servers -->
-              <call function="'disconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <iterate var="server"
-                       in="[server1, server2]"
-                       indexvar="i">
-                <!-- Modify entry on one of the servers -->
-                <call function="'modifyAnAttribute'">
-                  { 'location'       : server.getHostname(),
-                    'dsPath'         : '%s/%s' \
-                                       % (server.getDir(), OPENDSNAME),
-                    'dsInstanceHost' : server.getHostname(),
-                    'dsInstancePort' : server.getPort(),
-                    'dsInstanceDn'   : server.getRootDn(),
-                    'dsInstancePswd' : server.getRootPwd(),
-                    'DNToModify'     : myEntry.getDn(),
-                    'listAttributes' : mods[i],
-                    'changetype'     : 'replace'
-                  }
-                </call>
-              </iterate>
-
-              <!-- Check modifies have not been propagated -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-                
-              <!-- Reconnect Replication Servers -->
-              <call function="'reconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <!-- Check conflict is resolved -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, server1, [server2], synchroSuffix ]
-              </call> 
-
-              <!-- Delete added entry -->
-              <call function="'ldapDeleteWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'dsDn'           : [myEntry.getDn()]
-                }
-              </call>
-
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>     
-            
-            
-          <!--- Test Case information
-          #@TestMarker          Replication Conflict Tests
-          #@TestName            Replication: Conflict: double_replace_single
-          #@TestID              double_replace_single
-          #@TestPurpose         Double replace a single-valued attribute
-          #@TestPreamble
-          #@TestSteps           Add entry to server1 with employeeNumber:0
-          #@TestSteps           Disconnect Replication Servers
-          #@TestSteps           server1: replace employeeNumber -> 1
-          #@TestSteps           server2: replace employeeNumber -> 2
-          #@TestSteps           Re-connect Replication Servers
-          #@TestSteps           Check employeeNumber=2 on both servers
-          #@TestPostamble
-          #@TestResult          Success if trees are synchronised
-          -->
-          <testcase name="getTestCaseName
-                          ('double_replace_single')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Conflict: double_replace_single. \
-                Double replace a single-valued attribute'
-              </message>
-                                                                
-              <!-- Add entry to server1 -->
-              <script>
-                myEntry = Entry('cn=A4')
-                myEntry.addAttr('employeeNumber', '0')
-              </script>
-              <call function="'addAnEntry'">
-                { 'location'       : server1Host,
-                  'dsPath'         : server1Path,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'DNToAdd'        : myEntry.getDn(),
-                  'listAttributes' : myEntry.getAttrList()
-                }
-              </call>
-
-              <!-- Disconnect Replication Servers -->
-              <call function="'disconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <iterate var="server"
-                       in="[server1, server2]"
-                       indexvar="i">
-                <!-- Modify entry on one of the servers -->
-                <call function="'modifyAnAttribute'">
-                  { 'location'          : server.getHostname(),
-                    'dsPath'            : '%s/%s' \
-                                          % (server.getDir(), OPENDSNAME),
-                    'dsInstanceHost'    : server.getHostname(),
-                    'dsInstancePort'    : server.getPort(),
-                    'dsInstanceDn'      : server.getRootDn(),
-                    'dsInstancePswd'    : server.getRootPwd(),
-                    'DNToModify'        : myEntry.getDn(),
-                    'attributeName'     : 'employeeNumber',
-                    'newAttributeValue' : '%i' % (i + 1),
-                    'changetype'        : 'replace'
-                  }
-                </call>
-              </iterate>
-
-              <!-- Check modifies have not been propagated -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'employeeNumber',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-                
-              <!-- Reconnect Replication Servers -->
-              <call function="'reconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <!-- Check conflict is resolved -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'employeeNumber',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, server1, [server2], synchroSuffix ]
-              </call>
-
-              <!-- Delete added entry -->
-              <call function="'ldapDeleteWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'dsDn'           : [myEntry.getDn()]
-                }
-              </call>
-
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>                                                  
-
-
-
-          <!--- Test Case information
-          #@TestMarker         Replication Conflict Tests
-          #@TestName           Replication: Conflict: double_mod_del_add_multi_1
-          #@TestID             double_mod_del_add_multi_1
-          #@TestPurpose        Double replace (del+add) same value with any
-                               value of a multi-valued attribute
-          #@TestPreamble
-          #@TestSteps          Add entry to server1 with 
-                               description:{1 2 3 4 5 6 7 8 9 10}
-          #@TestSteps          Disconnect Replication Servers
-          #@TestSteps          server1: del description=1 + add description=11
-          #@TestSteps          server2: del description=1 + add description=12
-          #@TestSteps          Re-connect Replication Servers
-          #@TestSteps          Check description={2 3 4 5 6 7 8 9 10 11 12} 
-                               on both servers
-          #@TestPostamble
-          #@TestResult         Success if trees are synchronised
-          -->
-          <testcase name="getTestCaseName
-                          ('double_mod_del_add_multi_1')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Conflict: double_mod_del_add_multi_1. \
-                Double replace (del+add) same value with any value of a \
-                multi-valued attribute'
-              </message>
-                                                                
-              <!-- Add entry to server1 -->
-              <script>
-                myEntry = Entry('cn=A2')
-                for x in range(10):
-                  myEntry.addAttr('description', '%i' % (x+1))
-                server1del = ['description:1']
-                server1add = ['description:11']
-                server2del = ['description:1']
-                server2add = ['description:12']
-                server1mods = [server1del, server1add]
-                server2mods = [server2del, server2add]
-                mods = [server1mods, server2mods]
-              </script>
-              <call function="'addAnEntry'">
-                { 'location'       : server1Host,
-                  'dsPath'         : server1Path,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'DNToAdd'        : myEntry.getDn(),
-                  'listAttributes' : myEntry.getAttrList()
-                }
-              </call>
-
-              <!-- Disconnect Replication Servers -->
-              <call function="'disconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <iterate var="server"
-                       in="[server1, server2]"
-                       indexvar="i">
-                <sequence>
-                  <!-- Modify entry on one of the servers -->
-                  <call function="'modifyAnAttribute'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : '%s/%s' \
-                                         % (server.getDir(), OPENDSNAME),
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'DNToModify'     : myEntry.getDn(),
-                      'listAttributes' : mods[i][0],
-                      'changetype'     : 'delete'
-                    }
-                  </call>
-                  <call function="'modifyAnAttribute'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : '%s/%s' \
-                                         % (server.getDir(), OPENDSNAME),
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'DNToModify'     : myEntry.getDn(),
-                      'listAttributes' : mods[i][1],
-                      'changetype'     : 'add'
-                    }
-                  </call>
-                </sequence>
-              </iterate>
-
-              <!-- Check modifies have not been propagated -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-                
-              <!-- Reconnect Replication Servers -->
-              <call function="'reconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <!-- Check conflict is resolved -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, server1, [server2], synchroSuffix ]
-              </call> 
-
-              <!-- Delete added entry -->
-              <call function="'ldapDeleteWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'dsDn'           : [myEntry.getDn()]
-                }
-              </call>
-
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>     
-
-
-
-          <!--- Test Case information
-          #@TestMarker         Replication Conflict Tests
-          #@TestName           Replication: Conflict: double_mod_del_add_multi_2
-          #@TestID             double_mod_del_add_multi_2
-          #@TestPurpose        Double replace (del+add) any value with same
-                               value of a multi-valued attribute
-          #@TestPreamble
-          #@TestSteps          Add entry to server1 with 
-                               description:{1 2 3 4 5 6 7 8 9 10}
-          #@TestSteps          Disconnect Replication Servers
-          #@TestSteps          server1: del description=1 + add description=11
-          #@TestSteps          server2: del description=10 + add description=11
-          #@TestSteps          Re-connect Replication Servers
-          #@TestSteps          Check description={2 3 4 5 6 7 8 9 11} 
-                               on both servers
-          #@TestPostamble
-          #@TestResult         Success if trees are synchronised
-          -->
-          <testcase name="getTestCaseName
-                          ('double_mod_del_add_multi_2')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Conflict: double_mod_del_add_multi_2. \
-                Double replace (del+add) any value with same value of a \
-                multi-valued attribute'
-              </message>
-                                                                
-              <!-- Add entry to server1 -->
-              <script>
-                myEntry = Entry('cn=A3')
-                for x in range(10):
-                  myEntry.addAttr('description', '%i' % (x+1))
-                server1del = ['description:1']
-                server1add = ['description:11']
-                server2del = ['description:10']
-                server2add = ['description:11']
-                server1mods = [server1del, server1add]
-                server2mods = [server2del, server2add]
-                mods = [server1mods, server2mods]
-              </script>
-              <call function="'addAnEntry'">
-                { 'location'       : server1Host,
-                  'dsPath'         : server1Path,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'DNToAdd'        : myEntry.getDn(),
-                  'listAttributes' : myEntry.getAttrList()
-                }
-              </call>
-
-              <!-- Disconnect Replication Servers -->
-              <call function="'disconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <iterate var="server"
-                       in="[server1, server2]"
-                       indexvar="i">
-                <sequence>
-                  <!-- Modify entry on one of the servers -->
-                  <call function="'modifyAnAttribute'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : '%s/%s' \
-                                         % (server.getDir(), OPENDSNAME),
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'DNToModify'     : myEntry.getDn(),
-                      'listAttributes' : mods[i][0],
-                      'changetype'     : 'delete'
-                    }
-                  </call>
-                  <call function="'modifyAnAttribute'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : '%s/%s' \
-                                         % (server.getDir(), OPENDSNAME),
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'DNToModify'     : myEntry.getDn(),
-                      'listAttributes' : mods[i][1],
-                      'changetype'     : 'add'
-                    }
-                  </call>
-                </sequence>
-              </iterate>
-
-              <!-- Check modifies have not been propagated -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-                
-              <!-- Reconnect Replication Servers -->
-              <call function="'reconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <!-- Check conflict is resolved -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, server1, [server2], synchroSuffix ]
-              </call>
-
-              <!-- Delete added entry -->
-              <call function="'ldapDeleteWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'dsDn'           : [myEntry.getDn()]
-                }
-              </call>
-
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>     
-
-
-
-          <!--- Test Case information
-          #@TestMarker         Replication Conflict Tests
-          #@TestName           Replication: Conflict: double_mod_add_multi
-          #@TestID             double_mod_add_multi
-          #@TestPurpose        Double mod_add a multi-valued attribute
-          #@TestPreamble
-          #@TestSteps          Add entry to server1
-          #@TestSteps          Disconnect Replication Servers
-          #@TestSteps          server1: add description=1
-          #@TestSteps          server2: add description={1 2}
-          #@TestSteps          Re-connect Replication Servers
-          #@TestSteps          Check description={1 2} on both servers
-          #@TestPostamble
-          #@TestResult         Success if trees are synchronised
-          -->
-          <testcase name="getTestCaseName
-                          ('double_mod_add_multi')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Conflict: double_mod_add_multi. \
-                Double mod_add a multi-valued attribute'
-              </message>
-                                                                
-              <!-- Add entry to server1 -->
-              <script>
-                myEntry = Entry('cn=B1')
-                server1add = ['description:1']
-                server2add = ['description:1', 'description:2']
-                server1mods = [server1add]
-                server2mods = [server2add]
-                mods = [server1mods, server2mods]
-              </script>
-              <call function="'addAnEntry'">
-                { 'location'       : server1Host,
-                  'dsPath'         : server1Path,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'DNToAdd'        : myEntry.getDn(),
-                  'listAttributes' : myEntry.getAttrList()
-                }
-              </call>
-
-              <!-- Disconnect Replication Servers -->
-              <call function="'disconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <iterate var="server"
-                       in="[server1, server2]"
-                       indexvar="i">
-                <sequence>
-                  <!-- Modify entry on one of the servers -->
-                  <call function="'modifyAnAttribute'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : '%s/%s' \
-                                         % (server.getDir(), OPENDSNAME),
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'DNToModify'     : myEntry.getDn(),
-                      'listAttributes' : mods[i][0],
-                      'changetype'     : 'add'
-                    }
-                  </call>
-                </sequence>
-              </iterate>
-
-              <!-- Check modifies have not been propagated -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-                
-              <!-- Reconnect Replication Servers -->
-              <call function="'reconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <!-- Check conflict is resolved -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, server1, [server2], synchroSuffix ]
-              </call>
-
-              <!-- Delete added entry -->
-              <call function="'ldapDeleteWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'dsDn'           : [myEntry.getDn()]
-                }
-              </call>
-
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>     
-
-
-
-          <!--- Test Case information
-          #@TestMarker         Replication Conflict Tests
-          #@TestName           Replication: Conflict: double_mod_add_single
-          #@TestID             double_mod_add_single
-          #@TestPurpose        Double mod_add a single-valued attribute
-          #@TestPreamble
-          #@TestSteps          Add entry to server1
-          #@TestSteps          Disconnect Replication Servers
-          #@TestSteps          server1: add employeeNumber=1
-          #@TestSteps          server2: add employeeNumber=2
-          #@TestSteps          Re-connect Replication Servers
-          #@TestSteps          Check employeeNumber=1 on both servers
-          #@TestPostamble
-          #@TestResult         Success if trees are synchronised
-          -->
-          <testcase name="getTestCaseName
-                          ('double_mod_add_single')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Conflict: double_mod_add_single. \
-                Double mod_add a single-valued attribute'
-              </message>
-                                                                
-              <!-- Add entry to server1 -->
-              <script>
-                myEntry = Entry('cn=B2')
-                server1add = ['employeeNumber:1']
-                server2add = ['employeeNumber:2']
-                server1mods = [server1add]
-                server2mods = [server2add]
-                mods = [server1mods, server2mods]
-              </script>
-              <call function="'addAnEntry'">
-                { 'location'       : server1Host,
-                  'dsPath'         : server1Path,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'DNToAdd'        : myEntry.getDn(),
-                  'listAttributes' : myEntry.getAttrList()
-                }
-              </call>
-
-              <!-- Disconnect Replication Servers -->
-              <call function="'disconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <iterate var="server"
-                       in="[server1, server2]"
-                       indexvar="i">
-                <sequence>
-                  <!-- Modify entry on one of the servers -->
-                  <call function="'modifyAnAttribute'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : '%s/%s' \
-                                         % (server.getDir(), OPENDSNAME),
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'DNToModify'     : myEntry.getDn(),
-                      'listAttributes' : mods[i][0],
-                      'changetype'     : 'add'
-                    }
-                  </call>
-                </sequence>
-              </iterate>
-
-              <!-- Check modifies have not been propagated -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'employeeNumber',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-                
-              <!-- Reconnect Replication Servers -->
-              <call function="'reconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <!-- Check conflict is resolved -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'employeeNumber',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, server1, [server2], synchroSuffix ]
-              </call> 
-
-              <!-- Delete added entry -->
-              <call function="'ldapDeleteWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'dsDn'           : [myEntry.getDn()]
-                }
-              </call>
-
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>     
-
-
-
-          <!--- Test Case information
-          #@TestMarker         Replication Conflict Tests
-          #@TestName           Replication: Conflict: double_mod_del_multi
-          #@TestID             double_mod_del_multi
-          #@TestPurpose        Double mod_delete a multi-valued attribute
-          #@TestPreamble
-          #@TestSteps          Add entry to server1 with 
-                               description:{1 2 3 4 5 6 7 8 9 10}
-          #@TestSteps          Disconnect Replication Servers
-          #@TestSteps          server1: delete description={1 2 3 4 5}
-          #@TestSteps          server2: delete description={4 5 6 7 8}
-          #@TestSteps          Re-connect Replication Servers
-          #@TestSteps          Check description={9 10} on both servers
-          #@TestPostamble
-          #@TestResult         Success if trees are synchronised
-          -->
-          <testcase name="getTestCaseName
-                          ('double_mod_del_multi')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Conflict: double_mod_del_multi. \
-                Double mod_delete a multi-valued attribute'
-              </message>
-                                                                
-              <!-- Add entry to server1 -->
-              <script>
-                myEntry = Entry('cn=C1')
-                for x in range(10):
-                  myEntry.addAttr('description', '%i' % (x+1))
-                server1del = []
-                for y in range(1,6):
-                  server1del.append('description:%i' % y)
-                server2del = []
-                for z in range(4,9):
-                  server2del.append('description:%i' % z)
-                server1mods = [server1del]
-                server2mods = [server2del]
-                mods = [server1mods, server2mods]
-              </script>
-              <call function="'addAnEntry'">
-                { 'location'       : server1Host,
-                  'dsPath'         : server1Path,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'DNToAdd'        : myEntry.getDn(),
-                  'listAttributes' : myEntry.getAttrList()
-                }
-              </call>
-
-              <!-- Disconnect Replication Servers -->
-              <call function="'disconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <iterate var="server"
-                       in="[server1, server2]"
-                       indexvar="i">
-                <sequence>
-                  <!-- Modify entry on one of the servers -->
-                  <call function="'modifyAnAttribute'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : '%s/%s' \
-                                         % (server.getDir(), OPENDSNAME),
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'DNToModify'     : myEntry.getDn(),
-                      'listAttributes' : mods[i][0],
-                      'changetype'     : 'delete'
-                    }
-                  </call>
-                </sequence>
-              </iterate>
-
-              <!-- Check modifies have not been propagated -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-                
-              <!-- Reconnect Replication Servers -->
-              <call function="'reconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <!-- Check conflict is resolved -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, server1, [server2], synchroSuffix ]
-              </call> 
-
-              <!-- Delete added entry -->
-              <call function="'ldapDeleteWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'dsDn'           : [myEntry.getDn()]
-                }
-              </call>
-
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>     
-
-
-
-          <!--- Test Case information
-          #@TestMarker         Replication Conflict Tests
-          #@TestName           Replication: Conflict: double_mod_del_single
-          #@TestID             double_mod_del_single
-          #@TestPurpose        Double mod_delete a single-valued attribute
-          #@TestPreamble
-          #@TestSteps          Add entry to server1 with employeeNumber=1
-          #@TestSteps          Disconnect Replication Servers
-          #@TestSteps          server1: delete employeeNumber
-          #@TestSteps          server2: delete employeeNumber=1
-          #@TestSteps          Re-connect Replication Servers
-          #@TestSteps          Check employeeNumber no longer exists on either
-                               server
-          #@TestPostamble
-          #@TestResult         Success if trees are synchronised
-          -->
-          <testcase name="getTestCaseName
-                          ('double_mod_del_single')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Conflict: double_mod_del_single. \
-                Double mod_delete a single-valued attribute'
-              </message>
-                                                                
-              <!-- Add entry to server1 -->
-              <script>
-                myEntry = Entry('cn=C2')
-                myEntry.addAttr('employeeNumber', '1')
-                server1del = ['employeeNumber:']
-                server2del = ['employeeNumber:1']
-                server1mods = [server1del]
-                server2mods = [server2del]
-                mods = [server1mods, server2mods]
-              </script>
-              <call function="'addAnEntry'">
-                { 'location'       : server1Host,
-                  'dsPath'         : server1Path,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'DNToAdd'        : myEntry.getDn(),
-                  'listAttributes' : myEntry.getAttrList()
-                }
-              </call>
-
-              <!-- Disconnect Replication Servers -->
-              <call function="'disconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <iterate var="server"
-                       in="[server1, server2]"
-                       indexvar="i">
-                <sequence>
-                  <!-- Modify entry on one of the servers -->
-                  <call function="'modifyAnAttribute'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : '%s/%s' \
-                                         % (server.getDir(), OPENDSNAME),
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'DNToModify'     : myEntry.getDn(),
-                      'listAttributes' : mods[i][0],
-                      'changetype'     : 'delete'
-                    }
-                  </call>
-                </sequence>
-              </iterate>
-
-              <!-- Check modifies have not been propagated -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'employeeNumber',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-                
-              <!-- Reconnect Replication Servers -->
-              <call function="'reconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <!-- Check conflict is resolved -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'employeeNumber',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, server1, [server2], synchroSuffix ]
-              </call> 
-
-              <!-- Delete added entry -->
-              <call function="'ldapDeleteWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'dsDn'           : [myEntry.getDn()]
-                }
-              </call>
-
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>     
-            
-
-          <!--- Test Case information
-          #@TestMarker         Replication Conflict Tests
-          #@TestName           Replication: Conflict: 
-                               mod_del_add_vs_mod_add_del_multi
-          #@TestID             mod_del_add_vs_mod_add_del_multi
-          #@TestPurpose        Modify: Delete+Add then Add+Delete on 2
-                               multi-valued attributes
-          #@TestPreamble
-          #@TestSteps          Add entry to server1 with 
-                               description=1 , telephoneNumber=1
-          #@TestSteps          Disconnect Replication Servers
-          #@TestSteps          server1: add description=2 , 
-                               delete telephoneNumber
-          #@TestSteps          server2: delete description , 
-                               add telephoneNumber=2
-          #@TestSteps          Re-connect Replication Servers
-          #@TestSteps          Check description no longer exists and
-                               telephoneNumber=2 on both servers
-          #@TestPostamble
-          #@TestResult         Success if trees are synchronised
-          -->
-          <testcase name="getTestCaseName
-                          ('mod_del_add_vs_mod_add_del_multi')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Conflict: mod_del_add_vs_mod_add_del_multi. \
-                Modify: Delete+Add then Add+Delete on 2 multi-valued attributes'
-              </message>
-                                                                
-              <!-- Add entry to server1 -->
-              <script>
-                myEntry = Entry('cn=D1')
-                myEntry.addAttr('description', '1')
-                myEntry.addAttr('telephoneNumber', '1')
-                server1add = ['description:2']
-                server1del = ['telephoneNumber:']
-                server2del = ['description:']
-                server2add = ['telephoneNumber:2']
-                server1mods = [server1add, server1del]
-                server2mods = [server2del, server2add]
-                mods = [server1mods, server2mods]
-                server1changetypes = ['add', 'delete']
-                server2changetypes = ['delete', 'add']
-                changetypes = [server1changetypes, server2changetypes]
-              </script>
-              <call function="'addAnEntry'">
-                { 'location'       : server1Host,
-                  'dsPath'         : server1Path,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'DNToAdd'        : myEntry.getDn(),
-                  'listAttributes' : myEntry.getAttrList()
-                }
-              </call>
-
-              <!-- Disconnect Replication Servers -->
-              <call function="'disconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <iterate var="server"
-                       in="[server1, server2]"
-                       indexvar="i">
-                <sequence>
-                  <!-- Modify entry on one of the servers -->
-                  <call function="'modifyAnAttribute'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : '%s/%s' \
-                                         % (server.getDir(), OPENDSNAME),
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'DNToModify'     : myEntry.getDn(),
-                      'listAttributes' : mods[i][0],
-                      'changetype'     : changetypes[i][0]
-                    }
-                  </call>
-                  <call function="'modifyAnAttribute'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : '%s/%s' \
-                                         % (server.getDir(), OPENDSNAME),
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'DNToModify'     : myEntry.getDn(),
-                      'listAttributes' : mods[i][1],
-                      'changetype'     : changetypes[i][1]
-                    }
-                  </call>
-                </sequence>
-              </iterate>
-
-              <!-- Check modifies have not been propagated -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description telephoneNumber',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-                
-              <!-- Reconnect Replication Servers -->
-              <call function="'reconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <!-- Check conflict is resolved -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description telephoneNumber',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, server1, [server2], synchroSuffix ]
-              </call> 
-
-              <!-- Delete added entry -->
-              <call function="'ldapDeleteWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'dsDn'           : [myEntry.getDn()]
-                }
-              </call>
-
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>     
-            
-
-
-          <!--- Test Case information
-          #@TestMarker         Replication Conflict Tests
-          #@TestName           Replication: Conflict: 
-                               mod_add_vs_mod_replace_multi
-          #@TestID             mod_add_vs_mod_replace_multi
-          #@TestPurpose        mod_add vs mod_replace on a multi-valued
-                               attribute
-          #@TestPreamble
-          #@TestSteps          Add entry to server1 with description=1
-          #@TestSteps          Disconnect Replication Servers
-          #@TestSteps          server1: add description={2 3}
-          #@TestSteps          server2: replace description -> {4 5}
-          #@TestSteps          Re-connect Replication Servers
-          #@TestSteps          Check description={4 5} on both servers
-          #@TestPostamble
-          #@TestResult         Success if trees are synchronised
-          -->
-          <testcase name="getTestCaseName
-                          ('mod_add_vs_mod_replace_multi')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Conflict: mod_add_vs_mod_replace_multi. \
-                mod_add vs mod_replace on a multi-valued attribute'
-              </message>
-                                                                
-              <!-- Add entry to server1 -->
-              <script>
-                myEntry = Entry('cn=E1')
-                myEntry.addAttr('description', '1')
-                server1add = ['description:2', 'description:3']
-                server2replace = ['description:4', 'description:5']
-                server1mods = [server1add]
-                server2mods = [server2replace]
-                mods = [server1mods, server2mods]
-                server1changetypes = ['add']
-                server2changetypes = ['replace']
-                changetypes = [server1changetypes, server2changetypes]
-              </script>
-              <call function="'addAnEntry'">
-                { 'location'       : server1Host,
-                  'dsPath'         : server1Path,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'DNToAdd'        : myEntry.getDn(),
-                  'listAttributes' : myEntry.getAttrList()
-                }
-              </call>
-
-              <!-- Disconnect Replication Servers -->
-              <call function="'disconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <iterate var="server"
-                       in="[server1, server2]"
-                       indexvar="i">
-                <sequence>
-                  <!-- Modify entry on one of the servers -->
-                  <call function="'modifyAnAttribute'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : '%s/%s' \
-                                         % (server.getDir(), OPENDSNAME),
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'DNToModify'     : myEntry.getDn(),
-                      'listAttributes' : mods[i][0],
-                      'changetype'     : changetypes[i][0]
-                    }
-                  </call>
-                </sequence>
-              </iterate>
-
-              <!-- Check modifies have not been propagated -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-                
-              <!-- Reconnect Replication Servers -->
-              <call function="'reconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <!-- Check conflict is resolved -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, server1, [server2], synchroSuffix ]
-              </call> 
-
-              <!-- Delete added entry -->
-              <call function="'ldapDeleteWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'dsDn'           : [myEntry.getDn()]
-                }
-              </call>
-
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>     
-            
-
-
-          <!--- Test Case information
-          #@TestMarker         Replication Conflict Tests
-          #@TestName           Replication: Conflict: 
-                               mod_replace_vs_mod_add_multi
-          #@TestID             mod_replace_vs_mod_add_multi
-          #@TestPurpose        mod_replace vs mod_add on a multi-valued
-                               attribute
-          #@TestPreamble
-          #@TestSteps          Add entry to server1 with description=1
-          #@TestSteps          Disconnect Replication Servers
-          #@TestSteps          server1: replace description -> {2 3}
-          #@TestSteps          server2: add description={4 5}
-          #@TestSteps          Re-connect Replication Servers
-          #@TestSteps          Check description={2 3 4 5} on both servers
-          #@TestPostamble
-          #@TestResult         Success if trees are synchronised
-          -->
-          <testcase name="getTestCaseName
-                          ('mod_replace_vs_mod_add_multi')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Conflict: mod_replace_vs_mod_add_multi. \
-                mod_replace vs mod_add on a multi-valued attribute'
-              </message>
-                                                                
-              <!-- Add entry to server1 -->
-              <script>
-                myEntry = Entry('cn=E2')
-                myEntry.addAttr('description', '1')
-                server1replace = ['description:2', 'description:3']
-                server2add = ['description:4', 'description:5']
-                server1mods = [server1replace]
-                server2mods = [server2add]
-                mods = [server1mods, server2mods]
-                server1changetypes = ['replace']
-                server2changetypes = ['add']
-                changetypes = [server1changetypes, server2changetypes]
-              </script>
-              <call function="'addAnEntry'">
-                { 'location'       : server1Host,
-                  'dsPath'         : server1Path,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'DNToAdd'        : myEntry.getDn(),
-                  'listAttributes' : myEntry.getAttrList()
-                }
-              </call>
-
-              <!-- Disconnect Replication Servers -->
-              <call function="'disconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <iterate var="server"
-                       in="[server1, server2]"
-                       indexvar="i">
-                <sequence>
-                  <!-- Modify entry on one of the servers -->
-                  <call function="'modifyAnAttribute'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : '%s/%s' \
-                                         % (server.getDir(), OPENDSNAME),
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'DNToModify'     : myEntry.getDn(),
-                      'listAttributes' : mods[i][0],
-                      'changetype'     : changetypes[i][0]
-                    }
-                  </call>
-                </sequence>
-              </iterate>
-
-              <!-- Check modifies have not been propagated -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-                
-              <!-- Reconnect Replication Servers -->
-              <call function="'reconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <!-- Check conflict is resolved -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, server1, [server2], synchroSuffix ]
-              </call> 
-
-              <!-- Delete added entry -->
-              <call function="'ldapDeleteWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'dsDn'           : [myEntry.getDn()]
-                }
-              </call>
-
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>     
-            
-
-
-          <!--- Test Case information
-          #@TestMarker         Replication Conflict Tests
-          #@TestName           Replication: Conflict: 
-                               mod_del_vs_mod_replace_multi
-          #@TestID             mod_del_vs_mod_replace_multi
-          #@TestPurpose        mod_del vs mod_replace on a multi-valued
-                               attribute
-          #@TestPreamble
-          #@TestSteps          Add entry to server1 with 
-                               description={1 2 3 4}
-          #@TestSteps          Disconnect Replication Servers
-          #@TestSteps          server1: delete description={2 3}
-          #@TestSteps          server2: replace description -> {6 7 8 9 10}
-          #@TestSteps          Re-connect Replication Servers
-          #@TestSteps          Check description={6 7 8 9 10} on both servers
-          #@TestPostamble
-          #@TestResult         Success if trees are synchronised
-          -->
-          <testcase name="getTestCaseName
-                          ('mod_del_vs_mod_replace_multi')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Conflict: mod_del_vs_mod_replace_multi. \
-                mod_del vs mod_replace on a multi-valued attribute'
-              </message>
-                                                                
-              <!-- Add entry to server1 -->
-              <script>
-                myEntry = Entry('cn=F1')
-                for x in range(4):
-                  myEntry.addAttr('description', '%i' % (x+1))
-                server1del = ['description:2', 'description:3']
-                server2replace = []
-                for y in range(6,11):
-                  server2replace.append('description:%i' % y)
-                server1mods = [server1del]
-                server2mods = [server2replace]
-                mods = [server1mods, server2mods]
-                server1changetypes = ['delete']
-                server2changetypes = ['replace']
-                changetypes = [server1changetypes, server2changetypes]
-              </script>
-              <call function="'addAnEntry'">
-                { 'location'       : server1Host,
-                  'dsPath'         : server1Path,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'DNToAdd'        : myEntry.getDn(),
-                  'listAttributes' : myEntry.getAttrList()
-                }
-              </call>
-
-              <!-- Disconnect Replication Servers -->
-              <call function="'disconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <iterate var="server"
-                       in="[server1, server2]"
-                       indexvar="i">
-                <sequence>
-                  <!-- Modify entry on one of the servers -->
-                  <call function="'modifyAnAttribute'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : '%s/%s' \
-                                         % (server.getDir(), OPENDSNAME),
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'DNToModify'     : myEntry.getDn(),
-                      'listAttributes' : mods[i][0],
-                      'changetype'     : changetypes[i][0]
-                    }
-                  </call>
-                </sequence>
-              </iterate>
-
-              <!-- Check modifies have not been propagated -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-                
-              <!-- Reconnect Replication Servers -->
-              <call function="'reconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <!-- Check conflict is resolved -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, server1, [server2], synchroSuffix ]
-              </call> 
-
-              <!-- Delete added entry -->
-              <call function="'ldapDeleteWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'dsDn'           : [myEntry.getDn()]
-                }
-              </call>
-
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>     
-            
-
-
-          <!--- Test Case information
-          #@TestMarker         Replication Conflict Tests
-          #@TestName           Replication: Conflict: 
-                               mod_replace_vs_mod_del_multi
-          #@TestID             mod_replace_vs_mod_del_multi
-          #@TestPurpose        mod_replace vs mod_del on a multi-valued
-                               attribute
-          #@TestPreamble
-          #@TestSteps          Add entry to server1 with
-                               description={1 2 3 4}
-          #@TestSteps          Disconnect Replication Servers
-          #@TestSteps          server1: replace description -> {1 2 3}
-          #@TestSteps          server2: delete description={3 4}
-          #@TestSteps          Re-connect Replication Servers
-          #@TestSteps          Check description={1 2} on both servers
-          #@TestPostamble
-          #@TestResult         Success if trees are synchronised
-          -->
-          <testcase name="getTestCaseName
-                          ('mod_replace_vs_mod_del_multi')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Conflict: mod_replace_vs_mod_del_multi. \
-                mod_replace vs mod_del on a multi-valued attribute'
-              </message>
-                                                                
-              <!-- Add entry to server1 -->
-              <script>
-                myEntry = Entry('cn=F2')
-                for x in range(4):
-                  myEntry.addAttr('description', '%i' % (x+1))
-                server1replace = ['description:1', 'description:2', 
-                                  'description:3']
-                server2del = ['description:3', 'description:4']
-                server1mods = [server1replace]
-                server2mods = [server2del]
-                mods = [server1mods, server2mods]
-                server1changetypes = ['replace']
-                server2changetypes = ['delete']
-                changetypes = [server1changetypes, server2changetypes]
-              </script>
-              <call function="'addAnEntry'">
-                { 'location'       : server1Host,
-                  'dsPath'         : server1Path,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'DNToAdd'        : myEntry.getDn(),
-                  'listAttributes' : myEntry.getAttrList()
-                }
-              </call>
-
-              <!-- Disconnect Replication Servers -->
-              <call function="'disconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <iterate var="server"
-                       in="[server1, server2]"
-                       indexvar="i">
-                <sequence>
-                  <!-- Modify entry on one of the servers -->
-                  <call function="'modifyAnAttribute'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : '%s/%s' \
-                                         % (server.getDir(), OPENDSNAME),
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'DNToModify'     : myEntry.getDn(),
-                      'listAttributes' : mods[i][0],
-                      'changetype'     : changetypes[i][0]
-                    }
-                  </call>
-                </sequence>
-              </iterate>
-
-              <!-- Check modifies have not been propagated -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-                
-              <!-- Reconnect Replication Servers -->
-              <call function="'reconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <!-- Check conflict is resolved -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : myEntry.getDn(),
-                      'dsFilter'       : 'objectclass=*',
-                      'dsAttributes'   : 'description',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, server1, [server2], synchroSuffix ]
-              </call> 
-
-              <!-- Delete added entry -->
-              <call function="'ldapDeleteWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'dsDn'           : [myEntry.getDn()]
-                }
-              </call>
-
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>     
-
-
-          <!--- Test Case information
-          #@TestMarker         Replication Conflict Tests
-          #@TestName           Replication: Conflict: add_child_del_parent
-          #@TestID             add_child_del_parent
-          #@TestPurpose        Add a child vs delete his parent
-          #@TestPreamble
-          #@TestSteps          Add entry cn=P1 to server1
-          #@TestSteps          Disconnect Replication Servers
-          #@TestSteps          server2: add child cn=C1,cn=P1
-          #@TestSteps          server1: delete parent cn=P1
-          #@TestSteps          Re-connect Replication Servers
-          #@TestSteps          Check servers are synchronised
-          #@TestPostamble
-          #@TestResult         Success if trees are synchronised
-          -->
-          <testcase name="getTestCaseName
-                          ('add_child_del_parent')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Conflict: add_child_del_parent. \
-                Add a child vs delete his parent'
-              </message>
-                                                                
-              <!-- Add entry to server1 -->
-              <script>
-                parentEntry = Entry('cn=P1')
-                parentEntry.addAttr('givenname', 'DUMMY ENTRY')
-                childEntry = Entry('cn=C1,cn=P1')
-                childEntry.addAttr('givenname', 'DUMMY ENTRY')
-                # addedEntries = [[], []]
-              </script>
-              <call function="'addAnEntry'">
-                { 'location'       : server1Host,
-                  'dsPath'         : server1Path,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'DNToAdd'        : parentEntry.getDn(),
-                  'listAttributes' : parentEntry.getAttrList()
-                }
-              </call>
-
-              <!-- Disconnect Replication Servers -->
-              <call function="'disconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <!-- Add child entry on server2 -->
-              <call function="'addAnEntry'">
-                { 'location'       : server2Host,
-                  'dsPath'         : server2Path,
-                  'dsInstanceHost' : server2Host,
-                  'dsInstancePort' : server2.getPort(),
-                  'dsInstanceDn'   : server2.getRootDn(),
-                  'dsInstancePswd' : server2.getRootPwd(),
-                  'DNToAdd'        : childEntry.getDn(),
-                  'listAttributes' : childEntry.getAttrList()
-                }
-              </call>
-
-              <!-- Delete parent entry on server1-->
-              <call function="'ldapDeleteWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'dsDn'           : [parentEntry.getDn()]
-                }
-              </call>
-
-              <!-- Check modifies have not been propagated -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : synchroSuffix,
-                      'dsFilter'       : 'givenname=DUMMY ENTRY',
-                      'dsAttributes'   : 'ds-sync-conflict cn',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-
-                  <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=monitor',
-                      'dsFilter'       : monitorFilter,
-                      'dsAttributes'   : monitorCounters,
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-                
-              <!-- Reconnect Replication Servers -->
-              <call function="'reconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <!-- Check conflict is resolved -->
-              <paralleliterate var="server" 
-                               in="[server1, server2]"
-                               indexvar="i">
-                <sequence>
-                  <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'       : synchroSuffix,
-                      'dsFilter'       : 'givenname=DUMMY ENTRY',
-                      'dsAttributes'   : 'ds-sync-conflict cn',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                      <script>
-                        resultDnList = []
-                        for line in searchResult.splitlines():
-                          if line.find('dn: ') != -1:
-                            resultDn = line[len('dn: '):]
-                            resultDnList.append(resultDn)
-                        addedEntries[i] = resultDnList
-                      </script>
-                    </sequence>
-                    <else>
-                      <script>
-                        addedEntries[i] = []
-                      </script>
-                    </else>
-                  </if>
-
-                  <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=monitor',
-                      'dsFilter'       : monitorFilter,
-                      'dsAttributes'   : monitorCounters,
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->
-              <!-- If the trees don't match, we may have come across Issue 3891
-               (Replication conflict: add child , delete parent) -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, server1, [server2], synchroSuffix,
-                  '3891' ]
-              </call> 
-
-              <!-- Delete added entries -->
-              <script>
-                list1 = addedEntries[0]
-                list2 = addedEntries[1]
-                toRemove = []
-                # remove potential redundancies, to avoid deleting them twice
-                for addedEntry in list2:
-                  if addedEntry in list1:
-                    toRemove.append(addedEntry)
-                for ent in toRemove:
-                  list2.remove(ent)
-              </script>
-              <paralleliterate var="server" 
-                               in="[server1, server2]" 
-                               indexvar="i">
-                <if expr="len(addedEntries[i]) != 0">
-                  <paralleliterate var="entryToDelete" in="addedEntries[i]">
-                    <call function="'ldapDeleteWithScript'">
-                      { 'location'       : clientHost,
-                        'dsPath'         : clientPath,
-                        'dsInstanceHost' : server.getHostname(),
-                        'dsInstancePort' : server.getPort(),
-                        'dsInstanceDn'   : server.getRootDn(),
-                        'dsInstancePswd' : server.getRootPwd(),
-                        'dsDn'           : [entryToDelete] 
-                      }
-                    </call>
-                  </paralleliterate>
-                </if>
-              </paralleliterate>
-
-              <!-- Issue visible in the conflict counters, so not automatically
-               !   detectable so far.
-              <call function="'setKnownIssue'">
-                { 'issueId' : '3400' }
-              </call>
+            <!--- Test Suite information
+            #@TestSuiteName       Replication Conflict Tests
+            #@TestSuitePurpose    Verify that the conflict operations are replicated
+                                  correctly between two servers.
+            #@TestSuiteID         Conflict Tests
+            #@TestSuiteGroup      Conflict
+            #@TestGroup           Replication
+            #@TestScript          replication_conflict.xml
+            #@TestHTMLLink        http://www.forgerock.org/
               -->
-
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>
-
-
-          <!--- Test Case information
-          #@TestMarker         Replication Conflict Tests
-          #@TestName           Replication: Conflict: del_parent_add_child
-          #@TestID             del_parent_add_child
-          #@TestPurpose        Delete a parent vs add his child
-          #@TestPreamble
-          #@TestSteps          Add entry cn=P2 to server1
-          #@TestSteps          Disconnect Replication Servers
-          #@TestSteps          server1: delete parent cn=P2
-          #@TestSteps          server2: add child cn=C2,cn=P2
-          #@TestSteps          Re-connect Replication Servers
-          #@TestSteps          Check servers are synchronised
-          #@TestPostamble
-          #@TestResult         Success if trees are synchronised
-          -->
-          <testcase name="getTestCaseName
-                          ('del_parent_add_child')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Conflict: del_parent_add_child. \
-                Delete a parent vs add his child'
-              </message>
-                                                                
-              <!-- Add entry to server1 -->
-              <script>
-                parentEntry = Entry('cn=P2')
-                parentEntry.addAttr('givenname', 'DUMMY ENTRY')
-                childEntry = Entry('cn=C2,cn=P2')
-                childEntry.addAttr('givenname', 'DUMMY ENTRY')
-                # addedEntries = [[], []]
-              </script>
-              <call function="'addAnEntry'">
-                { 'location'       : server1Host,
-                  'dsPath'         : server1Path,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'DNToAdd'        : parentEntry.getDn(),
-                  'listAttributes' : parentEntry.getAttrList()
-                }
-              </call>
-
-              <!-- Disconnect Replication Servers -->
-              <call function="'disconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <!-- Delete parent entry on server1-->
-              <call function="'ldapDeleteWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'dsDn'           : [parentEntry.getDn()]
-                }
-              </call>
-
-              <!-- Add child entry on server2 -->
-              <call function="'addAnEntry'">
-                { 'location'       : server2Host,
-                  'dsPath'         : server2Path,
-                  'dsInstanceHost' : server2Host,
-                  'dsInstancePort' : server2.getPort(),
-                  'dsInstanceDn'   : server2.getRootDn(),
-                  'dsInstancePswd' : server2.getRootPwd(),
-                  'DNToAdd'        : childEntry.getDn(),
-                  'listAttributes' : childEntry.getAttrList()
-                }
-              </call>
-
-              <!-- Check modifies have not been propagated -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : synchroSuffix,
-                      'dsFilter'       : 'givenname=DUMMY ENTRY',
-                      'dsAttributes'   : 'ds-sync-conflict cn',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-
-                  <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=monitor',
-                      'dsFilter'       : monitorFilter,
-                      'dsAttributes'   : monitorCounters,
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-                
-              <!-- Reconnect Replication Servers -->
-              <call function="'reconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <!-- Check conflict is resolved -->
-              <paralleliterate var="server" 
-                               in="[server1, server2]"
-                               indexvar="i">
-                <sequence>
-                  <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'       : synchroSuffix,
-                      'dsFilter'       : 'givenname=DUMMY ENTRY',
-                      'dsAttributes'   : 'ds-sync-conflict cn',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                      <script>
-                        resultDnList = []
-                        for line in searchResult.splitlines():
-                          if line.find('dn: ') != -1:
-                            resultDn = line[len('dn: '):]
-                            resultDnList.append(resultDn)
-                        addedEntries[i] = resultDnList
-                      </script>
-                    </sequence>
-                    <else>
-                      <script>
-                        addedEntries[i] = []
-                      </script>
-                    </else>
-                  </if>
-
-                  <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=monitor',
-                      'dsFilter'       : monitorFilter,
-                      'dsAttributes'   : monitorCounters,
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->
-              <!-- If the trees don't match, we may have come across Issue 4071
-               (Replication conflict: delete parent, add child) -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, server1, [server2], synchroSuffix,
-                  '4071' ]
-              </call> 
-
-              <!-- Delete added entries -->
-              <script>
-                list1 = addedEntries[0]
-                list2 = addedEntries[1]
-                toRemove = []
-                # remove potential redundancies, to avoid deleting them twice
-                for addedEntry in list2:
-                  if addedEntry in list1:
-                    toRemove.append(addedEntry)
-                for ent in toRemove:
-                  list2.remove(ent)
-              </script>
-              <paralleliterate var="server" 
-                               in="[server1, server2]" 
-                               indexvar="i">
-                <if expr="len(addedEntries[i]) != 0">
-                  <paralleliterate var="entryToDelete" in="addedEntries[i]">
-                    <call function="'ldapDeleteWithScript'">
-                      { 'location'       : clientHost,
-                        'dsPath'         : clientPath,
-                        'dsInstanceHost' : server.getHostname(),
-                        'dsInstancePort' : server.getPort(),
-                        'dsInstanceDn'   : server.getRootDn(),
-                        'dsInstancePswd' : server.getRootPwd(),
-                        'dsDn'           : [entryToDelete]
-                      }
-                    </call>
-                  </paralleliterate>
-                </if>
-              </paralleliterate>
-
-              <!-- Issue visible in the conflict counters, so not automatically
-               !   detectable so far.
-              <call function="'setKnownIssue'">
-                { 'issueId' : '3400' }
-              </call>
-              -->
-
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>
-
-
-          <!--- Test Case information
-          #@TestMarker         Replication Conflict Tests
-          #@TestName           Replication: Conflict: double_add
-          #@TestID             double_add
-          #@TestPurpose        Double add (same dn, different uid)
-          #@TestPreamble
-          #@TestSteps          Disconnect Replication Servers
-          #@TestSteps          server1: add entry cn=F with uid=1
-          #@TestSteps          server2: add entry cn=F with uid=2
-          #@TestSteps          Re-connect Replication Servers
-          #@TestSteps          Check servers are synchronised
-          #@TestPostamble
-          #@TestResult         Success if trees are synchronised
-          -->
-          <testcase name="getTestCaseName
-                          ('double_add')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Conflict: double_add. \
-                Double add (same dn, different uid)'
-              </message>
-                                                                
-              <script>
-                entry1 = Entry('cn=F')
-                entry1.addAttr('uid', '1')
-                entry1.addAttr('givenname', 'DUMMY ENTRY')
-                entry2 = Entry('cn=F')
-                entry2.addAttr('uid', '2')
-                entry2.addAttr('givenname', 'DUMMY ENTRY')
-                
-                entriesToAdd = [entry1, entry2]
-              </script>
-
-              <!-- Disconnect Replication Servers -->
-              <call function="'disconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <iterate var="server"
-                       in="[server1, server2]"
-                       indexvar="i">
-                <sequence>
-                  <!-- Add entry on one of the servers -->
-                  <call function="'addAnEntry'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : '%s/%s' \
-                                         % (server.getDir(), OPENDSNAME),
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'DNToAdd'        : entriesToAdd[i].getDn(),
-                      'listAttributes' : entriesToAdd[i].getAttrList()
-                    }
-                  </call>
-                </sequence>
-              </iterate>
-
-              <!-- Check modifies have not been propagated -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : synchroSuffix,
-                      'dsFilter'       : 'givenname=DUMMY ENTRY',
-                      'dsAttributes'   : 'ds-sync-conflict uid cn',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-
-                  <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=monitor',
-                      'dsFilter'       : monitorFilter,
-                      'dsAttributes'   : monitorCounters,
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-                
-              <!-- Reconnect Replication Servers -->
-              <call function="'reconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <!-- Check conflict is resolved -->
-              <paralleliterate var="server" 
-                               in="[server1, server2]"
-                               indexvar="i">
-                <sequence>
-                  <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'       : synchroSuffix,
-                      'dsFilter'       : 'givenname=DUMMY ENTRY',
-                      'dsAttributes'   : 'ds-sync-conflict uid cn',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                      <script>
-                        resultDnList = []
-                        for line in searchResult.splitlines():
-                          if line.find('dn: ') != -1:
-                            resultDn = line[len('dn: '):]
-                            resultDnList.append(resultDn)
-                        addedEntries[i] = resultDnList
-                      </script>
-                    </sequence>
-                    <else>
-                      <script>
-                        addedEntries[i] = []
-                      </script>
-                    </else>
-                  </if>
-
-                  <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=monitor',
-                      'dsFilter'       : monitorFilter,
-                      'dsAttributes'   : monitorCounters,
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->
-              <!-- If the trees don't match, we may have come across Issue OPENDJ-454
-               (RFE: Solve naming conflict of 2 adds with same dn, different
-               attr value) -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, server1, [server2], synchroSuffix,
-                  'OPENDJ-454' ]
-              </call> 
-
-              <!-- Delete added entries -->
-              <script>
-                list1 = addedEntries[0]
-                list2 = addedEntries[1]
-                toRemove = []
-                # remove potential redundancies, to avoid deleting them twice
-                for addedEntry in list2:
-                  if addedEntry in list1:
-                    toRemove.append(addedEntry)
-                for ent in toRemove:
-                  list2.remove(ent)
-              </script>
-              <paralleliterate var="server" 
-                               in="[server1, server2]" 
-                               indexvar="i">
-                <if expr="len(addedEntries[i]) != 0">
-                  <paralleliterate var="entryToDelete" in="addedEntries[i]">
-                    <call function="'ldapDeleteWithScript'">
-                      { 'location'       : clientHost,
-                        'dsPath'         : clientPath,
-                        'dsInstanceHost' : server.getHostname(),
-                        'dsInstancePort' : server.getPort(),
-                        'dsInstanceDn'   : server.getRootDn(),
-                        'dsInstancePswd' : server.getRootPwd(),
-                        'dsDn'           : [entryToDelete]
-                      }
-                    </call>
-                  </paralleliterate>
-                </if>
-              </paralleliterate>
-
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>
-
-
-
-          <!--- Test Case information
-          #@TestMarker         Replication Conflict Tests
-          #@TestName           Replication: Conflict: double_add_single_del_1
-          #@TestID             double_add_single_del_1
-          #@TestPurpose        Add twice same dn, then delete it in one server
-          #@TestPreamble
-          #@TestSteps          Disconnect Replication Servers
-          #@TestSteps          server1: add entry cn=DN1 with uid=1
-          #@TestSteps          server2: add entry cn=DN1 with uid=2
-          #@TestSteps          Re-connect Replication Servers
-          #@TestSteps          server1: delete entry cn=DN1
-          #@TestSteps          Check servers are synchronised
-          #@TestPostamble
-          #@TestResult         Success if trees are synchronised
-          -->
-          <testcase name="getTestCaseName
-                          ('double_add_single_del_1')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Conflict: double_add_single_del_1. \
-                Add twice same dn, then delete it in one server'
-              </message>
-                                                                
-              <script>
-                entry1 = Entry('cn=DN1')
-                entry1.addAttr('uid', '1')
-                entry1.addAttr('givenname', 'DUMMY ENTRY')
-                entry2 = Entry('cn=DN1')
-                entry2.addAttr('uid', '2')
-                entry2.addAttr('givenname', 'DUMMY ENTRY')
-                
-                entriesToAdd = [entry1, entry2]
-              </script>
-
-              <!-- Disconnect Replication Servers -->
-              <call function="'disconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <iterate var="server"
-                       in="[server1, server2]"
-                       indexvar="i">
-                <sequence>
-                  <!-- Add entry on one of the servers -->
-                  <call function="'addAnEntry'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : '%s/%s' \
-                                         % (server.getDir(), OPENDSNAME),
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'DNToAdd'        : entriesToAdd[i].getDn(),
-                      'listAttributes' : entriesToAdd[i].getAttrList()
-                    }
-                  </call>
-                </sequence>
-              </iterate>
-
-              <!-- Check modifies have not been propagated -->
-              <paralleliterate var="server" in="[server1, server2]">
-                <sequence>
-                  <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'       : synchroSuffix,
-                      'dsFilter'       : 'givenname=DUMMY ENTRY',
-                      'dsAttributes'   : 'ds-sync-conflict uid cn',
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-
-                  <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=monitor',
-                      'dsFilter'       : monitorFilter,
-                      'dsAttributes'   : monitorCounters,
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>                  
-              </paralleliterate>
-                
-              <!-- Reconnect Replication Servers -->
-              <call function="'reconnectReplicationServers'">
-                [ clientHost, clientPath, [replServer1, replServer2] ]
-              </call>
-
-              <!-- Delete entry on server1-->
-              <call function="'ldapDeleteWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : server1Host,
-                  'dsInstancePort' : server1.getPort(),
-                  'dsInstanceDn'   : server1.getRootDn(),
-                  'dsInstancePswd' : server1.getRootPwd(),
-                  'dsDn'           : [entry1.getDn()]
-                }
-              </call>
-
-              <!-- Check conflict is resolved -->
-              <paralleliterate var="server" 
-                               in="[server1, server2]"
-                               indexvar="i">
-                <sequence>
-                  <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'       : synchroSuffix,
-                      'dsFilter'       : 'givenname=DUMMY ENTRY',
-                      'dsAttributes'   : 'ds-sync-conflict uid cn',
-                      'logStderr'      : False
-                    }
-                  </call>
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                      <script>
-                        resultDnList = []
-                        for line in searchResult.splitlines():
-                          if line.find('dn: ') != -1:
-                            resultDn = line[len('dn: '):]
-                            resultDnList.append(resultDn)
-                        addedEntries[i] = resultDnList
-                      </script>
-                    </sequence>
-                    <else>
-                      <script>
-                        addedEntries[i] = []
-                      </script>
-                    </else>
-                  </if>
-
-                  <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=monitor',
-                      'dsFilter'       : monitorFilter,
-                      'dsAttributes'   : monitorCounters,
-                      'logStderr'      : False
-                    }                
-                  </call>                
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <if expr="resultLength != 0">
-                    <sequence>
-                      <message>
-                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
-                        % (server.getHostname(), server.getPort(), searchResult)
-                      </message>
-                    </sequence>
-                  </if>
-                </sequence>
-              </paralleliterate>
-
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->
-              <!-- If the trees don't match, we may have come across Issue OPENDJ-454
-               (RFE: Solve naming conflict of 2 adds with same dn, different 
-               attr value) -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, server1, [server2], synchroSuffix,
-                  'OPENDJ-454' ]
-              </call> 
-
-              <!-- Delete added entries -->
-              <script>
-                list1 = addedEntries[0]
-                list2 = addedEntries[1]
-                toRemove = []
-                # remove potential redundancies, to avoid deleting them twice
-                for addedEntry in list2:
-                  if addedEntry in list1:
-                    toRemove.append(addedEntry)
-                for ent in toRemove:
-                  list2.remove(ent)
-              </script>
-              <paralleliterate var="server" 
-                               in="[server1, server2]" 
-                               indexvar="i">
-                <if expr="len(addedEntries[i]) != 0">
-                  <paralleliterate var="entryToDelete" in="addedEntries[i]">
-                    <call function="'ldapDeleteWithScript'">
-                      { 'location'       : clientHost,
-                        'dsPath'         : clientPath,
-                        'dsInstanceHost' : server.getHostname(),
-                        'dsInstancePort' : server.getPort(),
-                        'dsInstanceDn'   : server.getRootDn(),
-                        'dsInstancePswd' : server.getRootPwd(),
-                        'dsDn'           : [entryToDelete]
-                      }
-                    </call>
-                  </paralleliterate>
-                </if>
-              </paralleliterate>
-
-              <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 Conflict' }
-          </call>
-                          
-          <call function="'testSuite_Postamble'"/>
                   
-        </sequence>
+            <call function="'testSuite_Preamble'"/>
 
+            <try>
+              <sequence> 
+
+                <import machine="STAF_LOCAL_HOSTNAME"
+                  file="'%s/testcases/replication/replication_setup.xml' 
+                        % (TESTS_DIR)"/>
+                <call function="'replication_setup'">
+                  { 'topologyFile'       : '%s/basic_topology.txt' \
+                                            % REPLICATION_CONFIG_DIR,
+                    'dataFile'           : 'Short_Example.ldif',
+                    'isolateLdapServers' : True,
+                    'enableDebugLogs'    : False,
+                    'label'              : _label
+                  }
+                </call>
+
+                <!-- List of Import of Test Functions -->
+                <script>
+                  importList=[]
+                  importList.append('conflict/conflict_tests')
+                </script>
+
+                <!-- 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: Conflict:'
+                  server1 = _topologyServerList[0]
+                  server2 = _topologyServerList[1]
+                  server1Host = server1.getHostname()
+                  server2Host = server2.getHostname()
+                  server1Path = '%s/%s' % (server1.getDir(), OPENDSNAME)
+                  server2Path = '%s/%s' % (server2.getDir(), OPENDSNAME)
+                  server1name = '%s:%s' % (server1Host, server1.getPort())
+                  server2name = '%s:%s' % (server2Host, server2.getPort())
+                  
+                  if globalSplitServers:
+                    replServer1 = _topologyReplServerList[0]
+                    replServer2 = _topologyReplServerList[1]
+                  else:
+                    replServer1 = server1
+                    replServer2 = server2
+        
+                  # Filter used for retrieving conflict counters from cn=monitor              
+                  filter0 = '(base-dn=%s)' % synchroSuffix
+                  filter1 = '(cn=Replication Plugin*)'
+                  monitorFilter = '&amp;%s%s' % (filter0, filter1)
+                  monitorCounters = 'resolved-naming-conflicts \
+                                     unresolved-naming-conflicts \
+                                     resolved-modify-conflicts'
+        
+                  addedEntries = STAXGlobal( [[], []] )
+                                              
+                  class Entry:
+                    def __init__(self, rdn):
+                      self.userDn = '%s, ou=People, %s' \
+                                    % (rdn, synchroSuffix)     
+                      self.listAttr = []
+                      self.listAttr.append('objectclass:top')
+                      self.listAttr.append('objectclass:organizationalperson')
+                      self.listAttr.append('objectclass:inetorgperson')
+                      self.listAttr.append('objectclass:person')
+                      self.listAttr.append('sn:User')
+                      self.listAttr.append('cn:Test User')     
+                    def getDn(self):
+                      return self.userDn              
+                    def getAttrList(self):
+                      return self.listAttr
+                    def addAttr(self, attrType, attrValue):
+                      self.listAttr.append('%s:%s' % (attrType, attrValue))
+
+                </script>
+                                                    
+                <!-- List of Test Cases -->
+                <script>
+                  testsList=[]
+                  testsList.append('replication_conflict_001')
+                  testsList.append('replication_conflict_002')
+                  testsList.append('replication_conflict_003')
+                  testsList.append('replication_conflict_004')
+                  testsList.append('replication_conflict_005')
+                  testsList.append('replication_conflict_006')
+                  testsList.append('replication_conflict_007')
+                  testsList.append('replication_conflict_008')
+                  testsList.append('replication_conflict_009')
+                  testsList.append('replication_conflict_010')
+                  testsList.append('replication_conflict_011')
+                  testsList.append('replication_conflict_012')
+                  testsList.append('replication_conflict_013')
+                  testsList.append('replication_conflict_014')
+                  testsList.append('replication_conflict_015')
+                  testsList.append('replication_conflict_016')
+                  testsList.append('replication_conflict_017')
+                  testsList.append('replication_conflict_018')
+                </script>
+
+                <!-- Execute the Tests -->
+                <iterate var="__test" in="testsList">
+                  <sequence>
+                    <call function="'%s' % (__test)" />
+                  </sequence>
+                </iterate>                
+                                
+              </sequence>
+
+              <catch exception="'STAFException.TestSuite.SetupException'">
+                <sequence>
+                  <message log="1" level="'fatal'">
+                    'Setup of test suite failed.'
+                  </message>
+                  <rethrow/>
+                </sequence>
+              </catch>
+  
+              <finally>
+                <message>'Test Cases Completed.'</message>
+              </finally>
+
+            </try>
+
+          </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>
+ 
+        </try>
       </block>
-    
     </sequence>
-
   </function>
-
 </stax>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/conflict/conflict_tests.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/conflict/conflict_tests.xml
new file mode 100644
index 0000000..23d36ce
--- /dev/null
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/conflict/conflict_tests.xml
@@ -0,0 +1,3820 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../../../shared/stax.dtd">
+<!--
+ ! CDDL HEADER START
+ !
+ ! The contents of this file are subject to the terms of the
+ ! 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.
+ ! 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,
+ ! 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
+ !
+ !      Portions Copyright 2006-2009 Sun Microsystems, Inc.
+ !      Portions Copyright 2011-2012 ForgeRock AS.
+ ! -->
+<stax>
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Conflict Tests
+  #@TestName            Replication: Conflict: Basic check
+  #@TestID              Basic check
+  #@TestPurpose         Check replication assures synchronization after
+                        a simultaneous conflictuous modify on 2 
+                        different servers (regardless of the prevailing
+                        modify)
+  #@TestPreamble
+  #@TestSteps           Add entry to server1 with employeeNumber:0
+  #@TestSteps           Parallel replace 
+                          server1: employeeNumber -> 1
+                          server2: employeeNumber -> 2
+  #@TestSteps           Check entry consistent on both servers
+  #@TestPostamble
+  #@TestResult          Success if trees are synchronised
+  -->
+  <function name="replication_conflict_001" scope="local">
+    <testcase name="getTestCaseName('Basic check')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: Conflict: Basic check 0. \
+              Check replication assures synchronization after a simultaneous \
+              conflictuous modify on 2 different servers (regardless of the \
+              prevailing modify)'
+            </message>
+                                                              
+            <!-- Add entry to server1 -->
+            <script>
+              myEntry = Entry('uid=tuser-0')
+              myEntry.addAttr('employeeNumber', '0')
+            </script>
+            <call function="'addAnEntry'">
+              { 'location'       : server1Host,
+                'dsPath'         : server1Path,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'DNToAdd'        : myEntry.getDn(),
+                'listAttributes' : myEntry.getAttrList()
+              }
+            </call>
+
+            <call function="'Sleep'">
+              { 'sleepForMilliSeconds' : 2000 }
+            </call>
+
+            <paralleliterate var="server"
+                             in="[server1, server2]"
+                             indexvar="i">
+              <!-- Modify entry on one of the servers -->
+              <call function="'modifyAnAttribute'">
+                { 'location'          : server.getHostname(),
+                  'dsPath'            : '%s/%s' \
+                                        % (server.getDir(), OPENDSNAME),
+                  'dsInstanceHost'    : server.getHostname(),
+                  'dsInstancePort'    : server.getPort(),
+                  'dsInstanceDn'      : server.getRootDn(),
+                  'dsInstancePswd'    : server.getRootPwd(),
+                  'DNToModify'        : myEntry.getDn(),
+                  'attributeName'     : 'employeeNumber',
+                  'newAttributeValue' : '%i' % (i + 1),
+                  'changetype'        : 'replace'
+                }
+              </call>
+            </paralleliterate>
+
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'employeeNumber',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>
+            </paralleliterate>
+
+
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, server1, [server2], synchroSuffix ]
+            </call> 
+
+            <!-- Delete added entry -->
+            <call function="'ldapDeleteWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'dsDn'           : [myEntry.getDn()]
+              }
+            </call>
+  
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Conflict Tests
+  #@TestName            Replication: Conflict: double_replace_multi
+  #@TestID              double_replace_multi
+  #@TestPurpose         Double replace a multi-valued attribute
+  #@TestPreamble
+  #@TestSteps           Add entry to server1 with description:{1 2}
+  #@TestSteps           Disconnect Replication Servers
+  #@TestSteps           server1: replace description -> {3 4}
+  #@TestSteps           server2: replace description -> {5 6}
+  #@TestSteps           Re-connect Replication Servers
+  #@TestSteps           Check description={5 6} on both servers
+  #@TestPostamble
+  #@TestResult          Success if trees are synchronised
+  -->
+  <function name="replication_conflict_002" scope="local">
+    <testcase name="getTestCaseName('double_replace_multi')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: Conflict: double_replace_multi. \
+              Double replace a multi-valued attribute'
+            </message>
+                                                              
+            <!-- Add entry to server1 -->
+            <script>
+              myEntry = Entry('cn=A1')
+              myEntry.addAttr('description', '1')
+              myEntry.addAttr('description', '2')
+              server1mods = ['description:3', 'description:4']
+              server2mods = ['description:5', 'description:6']
+              mods = [server1mods, server2mods]
+            </script>
+            <call function="'addAnEntry'">
+              { 'location'       : server1Host,
+                'dsPath'         : server1Path,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'DNToAdd'        : myEntry.getDn(),
+                'listAttributes' : myEntry.getAttrList()
+              }
+            </call>
+
+            <!-- Disconnect Replication Servers -->
+            <call function="'disconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <iterate var="server"
+                     in="[server1, server2]"
+                     indexvar="i">
+              <!-- Modify entry on one of the servers -->
+              <call function="'modifyAnAttribute'">
+                { 'location'       : server.getHostname(),
+                  'dsPath'         : '%s/%s' \
+                                     % (server.getDir(), OPENDSNAME),
+                  'dsInstanceHost' : server.getHostname(),
+                  'dsInstancePort' : server.getPort(),
+                  'dsInstanceDn'   : server.getRootDn(),
+                  'dsInstancePswd' : server.getRootPwd(),
+                  'DNToModify'     : myEntry.getDn(),
+                  'listAttributes' : mods[i],
+                  'changetype'     : 'replace'
+                }
+              </call>
+            </iterate>
+
+            <!-- Check modifies have not been propagated -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+              
+            <!-- Reconnect Replication Servers -->
+            <call function="'reconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <!-- Check conflict is resolved -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, server1, [server2], synchroSuffix ]
+            </call> 
+
+            <!-- Delete added entry -->
+            <call function="'ldapDeleteWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'dsDn'           : [myEntry.getDn()]
+              }
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>     
+            
+            
+  <!--- Test Case information
+  #@TestMarker          Replication Conflict Tests
+  #@TestName            Replication: Conflict: double_replace_single
+  #@TestID              double_replace_single
+  #@TestPurpose         Double replace a single-valued attribute
+  #@TestPreamble
+  #@TestSteps           Add entry to server1 with employeeNumber:0
+  #@TestSteps           Disconnect Replication Servers
+  #@TestSteps           server1: replace employeeNumber -> 1
+  #@TestSteps           server2: replace employeeNumber -> 2
+  #@TestSteps           Re-connect Replication Servers
+  #@TestSteps           Check employeeNumber=2 on both servers
+  #@TestPostamble
+  #@TestResult          Success if trees are synchronised
+  -->
+  <function name="replication_conflict_003" scope="local">
+    <testcase name="getTestCaseName('double_replace_single')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: Conflict: double_replace_single. \
+              Double replace a single-valued attribute'
+            </message>
+                                                              
+            <!-- Add entry to server1 -->
+            <script>
+              myEntry = Entry('cn=A4')
+              myEntry.addAttr('employeeNumber', '0')
+            </script>
+            <call function="'addAnEntry'">
+              { 'location'       : server1Host,
+                'dsPath'         : server1Path,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'DNToAdd'        : myEntry.getDn(),
+                'listAttributes' : myEntry.getAttrList()
+              }
+            </call>
+
+            <!-- Disconnect Replication Servers -->
+            <call function="'disconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <iterate var="server"
+                     in="[server1, server2]"
+                     indexvar="i">
+              <!-- Modify entry on one of the servers -->
+              <call function="'modifyAnAttribute'">
+                { 'location'          : server.getHostname(),
+                  'dsPath'            : '%s/%s' \
+                                        % (server.getDir(), OPENDSNAME),
+                  'dsInstanceHost'    : server.getHostname(),
+                  'dsInstancePort'    : server.getPort(),
+                  'dsInstanceDn'      : server.getRootDn(),
+                  'dsInstancePswd'    : server.getRootPwd(),
+                  'DNToModify'        : myEntry.getDn(),
+                  'attributeName'     : 'employeeNumber',
+                  'newAttributeValue' : '%i' % (i + 1),
+                  'changetype'        : 'replace'
+                }
+              </call>
+            </iterate>
+
+            <!-- Check modifies have not been propagated -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'employeeNumber',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+              
+            <!-- Reconnect Replication Servers -->
+            <call function="'reconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <!-- Check conflict is resolved -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'employeeNumber',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, server1, [server2], synchroSuffix ]
+            </call>
+
+            <!-- Delete added entry -->
+            <call function="'ldapDeleteWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'dsDn'           : [myEntry.getDn()]
+              }
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>                                                 
+
+
+
+  <!--- Test Case information
+  #@TestMarker         Replication Conflict Tests
+  #@TestName           Replication: Conflict: double_mod_del_add_multi_1
+  #@TestID             double_mod_del_add_multi_1
+  #@TestPurpose        Double replace (del+add) same value with any
+                       value of a multi-valued attribute
+  #@TestPreamble
+  #@TestSteps          Add entry to server1 with 
+                       description:{1 2 3 4 5 6 7 8 9 10}
+  #@TestSteps          Disconnect Replication Servers
+  #@TestSteps          server1: del description=1 + add description=11
+  #@TestSteps          server2: del description=1 + add description=12
+  #@TestSteps          Re-connect Replication Servers
+  #@TestSteps          Check description={2 3 4 5 6 7 8 9 10 11 12} 
+                       on both servers
+  #@TestPostamble
+  #@TestResult         Success if trees are synchronised
+  -->
+  <function name="replication_conflict_004" scope="local">
+    <testcase name="getTestCaseName('double_mod_del_add_multi_1')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: Conflict: double_mod_del_add_multi_1. \
+              Double replace (del+add) same value with any value of a \
+              multi-valued attribute'
+            </message>
+                                                              
+            <!-- Add entry to server1 -->
+            <script>
+              myEntry = Entry('cn=A2')
+              for x in range(10):
+                myEntry.addAttr('description', '%i' % (x+1))
+              server1del = ['description:1']
+              server1add = ['description:11']
+              server2del = ['description:1']
+              server2add = ['description:12']
+              server1mods = [server1del, server1add]
+              server2mods = [server2del, server2add]
+              mods = [server1mods, server2mods]
+            </script>
+            <call function="'addAnEntry'">
+              { 'location'       : server1Host,
+                'dsPath'         : server1Path,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'DNToAdd'        : myEntry.getDn(),
+                'listAttributes' : myEntry.getAttrList()
+              }
+            </call>
+
+            <!-- Disconnect Replication Servers -->
+            <call function="'disconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <iterate var="server"
+                     in="[server1, server2]"
+                     indexvar="i">
+              <sequence>
+                <!-- Modify entry on one of the servers -->
+                <call function="'modifyAnAttribute'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : '%s/%s' \
+                                       % (server.getDir(), OPENDSNAME),
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'DNToModify'     : myEntry.getDn(),
+                    'listAttributes' : mods[i][0],
+                    'changetype'     : 'delete'
+                  }
+                </call>
+                <call function="'modifyAnAttribute'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : '%s/%s' \
+                                       % (server.getDir(), OPENDSNAME),
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'DNToModify'     : myEntry.getDn(),
+                    'listAttributes' : mods[i][1],
+                    'changetype'     : 'add'
+                  }
+                </call>
+              </sequence>
+            </iterate>
+
+            <!-- Check modifies have not been propagated -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+              
+            <!-- Reconnect Replication Servers -->
+            <call function="'reconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <!-- Check conflict is resolved -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, server1, [server2], synchroSuffix ]
+            </call> 
+
+            <!-- Delete added entry -->
+            <call function="'ldapDeleteWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'dsDn'           : [myEntry.getDn()]
+              }
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>     
+
+
+
+  <!--- Test Case information
+  #@TestMarker         Replication Conflict Tests
+  #@TestName           Replication: Conflict: double_mod_del_add_multi_2
+  #@TestID             double_mod_del_add_multi_2
+  #@TestPurpose        Double replace (del+add) any value with same
+                       value of a multi-valued attribute
+  #@TestPreamble
+  #@TestSteps          Add entry to server1 with 
+                       description:{1 2 3 4 5 6 7 8 9 10}
+  #@TestSteps          Disconnect Replication Servers
+  #@TestSteps          server1: del description=1 + add description=11
+  #@TestSteps          server2: del description=10 + add description=11
+  #@TestSteps          Re-connect Replication Servers
+  #@TestSteps          Check description={2 3 4 5 6 7 8 9 11} 
+                       on both servers
+  #@TestPostamble
+  #@TestResult         Success if trees are synchronised
+  -->
+  <function name="replication_conflict_005" scope="local">
+    <testcase name="getTestCaseName('double_mod_del_add_multi_2')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: Conflict: double_mod_del_add_multi_2. \
+              Double replace (del+add) any value with same value of a \
+              multi-valued attribute'
+            </message>
+                                                              
+            <!-- Add entry to server1 -->
+            <script>
+              myEntry = Entry('cn=A3')
+              for x in range(10):
+                myEntry.addAttr('description', '%i' % (x+1))
+              server1del = ['description:1']
+              server1add = ['description:11']
+              server2del = ['description:10']
+              server2add = ['description:11']
+              server1mods = [server1del, server1add]
+              server2mods = [server2del, server2add]
+              mods = [server1mods, server2mods]
+            </script>
+            <call function="'addAnEntry'">
+              { 'location'       : server1Host,
+                'dsPath'         : server1Path,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'DNToAdd'        : myEntry.getDn(),
+                'listAttributes' : myEntry.getAttrList()
+              }
+            </call>
+
+            <!-- Disconnect Replication Servers -->
+            <call function="'disconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <iterate var="server"
+                     in="[server1, server2]"
+                     indexvar="i">
+              <sequence>
+                <!-- Modify entry on one of the servers -->
+                <call function="'modifyAnAttribute'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : '%s/%s' \
+                                       % (server.getDir(), OPENDSNAME),
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'DNToModify'     : myEntry.getDn(),
+                    'listAttributes' : mods[i][0],
+                    'changetype'     : 'delete'
+                  }
+                </call>
+                <call function="'modifyAnAttribute'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : '%s/%s' \
+                                       % (server.getDir(), OPENDSNAME),
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'DNToModify'     : myEntry.getDn(),
+                    'listAttributes' : mods[i][1],
+                    'changetype'     : 'add'
+                  }
+                </call>
+              </sequence>
+            </iterate>
+
+            <!-- Check modifies have not been propagated -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+              
+            <!-- Reconnect Replication Servers -->
+            <call function="'reconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <!-- Check conflict is resolved -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, server1, [server2], synchroSuffix ]
+            </call>
+
+            <!-- Delete added entry -->
+            <call function="'ldapDeleteWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'dsDn'           : [myEntry.getDn()]
+              }
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>   
+
+
+
+  <!--- Test Case information
+  #@TestMarker         Replication Conflict Tests
+  #@TestName           Replication: Conflict: double_mod_add_multi
+  #@TestID             double_mod_add_multi
+  #@TestPurpose        Double mod_add a multi-valued attribute
+  #@TestPreamble
+  #@TestSteps          Add entry to server1
+  #@TestSteps          Disconnect Replication Servers
+  #@TestSteps          server1: add description=1
+  #@TestSteps          server2: add description={1 2}
+  #@TestSteps          Re-connect Replication Servers
+  #@TestSteps          Check description={1 2} on both servers
+  #@TestPostamble
+  #@TestResult         Success if trees are synchronised
+  -->
+  <function name="replication_conflict_006" scope="local">
+    <testcase name="getTestCaseName('double_mod_add_multi')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: Conflict: double_mod_add_multi. \
+              Double mod_add a multi-valued attribute'
+            </message>
+                                                              
+            <!-- Add entry to server1 -->
+            <script>
+              myEntry = Entry('cn=B1')
+              server1add = ['description:1']
+              server2add = ['description:1', 'description:2']
+              server1mods = [server1add]
+              server2mods = [server2add]
+              mods = [server1mods, server2mods]
+            </script>
+            <call function="'addAnEntry'">
+              { 'location'       : server1Host,
+                'dsPath'         : server1Path,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'DNToAdd'        : myEntry.getDn(),
+                'listAttributes' : myEntry.getAttrList()
+              }
+            </call>
+
+            <!-- Disconnect Replication Servers -->
+            <call function="'disconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <iterate var="server"
+                     in="[server1, server2]"
+                     indexvar="i">
+              <sequence>
+                <!-- Modify entry on one of the servers -->
+                <call function="'modifyAnAttribute'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : '%s/%s' \
+                                       % (server.getDir(), OPENDSNAME),
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'DNToModify'     : myEntry.getDn(),
+                    'listAttributes' : mods[i][0],
+                    'changetype'     : 'add'
+                  }
+                </call>
+              </sequence>
+            </iterate>
+
+            <!-- Check modifies have not been propagated -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+              
+            <!-- Reconnect Replication Servers -->
+            <call function="'reconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <!-- Check conflict is resolved -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, server1, [server2], synchroSuffix ]
+            </call>
+
+            <!-- Delete added entry -->
+            <call function="'ldapDeleteWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'dsDn'           : [myEntry.getDn()]
+              }
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+
+  <!--- Test Case information
+  #@TestMarker         Replication Conflict Tests
+  #@TestName           Replication: Conflict: double_mod_add_single
+  #@TestID             double_mod_add_single
+  #@TestPurpose        Double mod_add a single-valued attribute
+  #@TestPreamble
+  #@TestSteps          Add entry to server1
+  #@TestSteps          Disconnect Replication Servers
+  #@TestSteps          server1: add employeeNumber=1
+  #@TestSteps          server2: add employeeNumber=2
+  #@TestSteps          Re-connect Replication Servers
+  #@TestSteps          Check employeeNumber=1 on both servers
+  #@TestPostamble
+  #@TestResult         Success if trees are synchronised
+  -->
+  <function name="replication_conflict_007" scope="local">
+    <testcase name="getTestCaseName('double_mod_add_single')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: Conflict: double_mod_add_single. \
+              Double mod_add a single-valued attribute'
+            </message>
+                                                              
+            <!-- Add entry to server1 -->
+            <script>
+              myEntry = Entry('cn=B2')
+              server1add = ['employeeNumber:1']
+              server2add = ['employeeNumber:2']
+              server1mods = [server1add]
+              server2mods = [server2add]
+              mods = [server1mods, server2mods]
+            </script>
+            <call function="'addAnEntry'">
+              { 'location'       : server1Host,
+                'dsPath'         : server1Path,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'DNToAdd'        : myEntry.getDn(),
+                'listAttributes' : myEntry.getAttrList()
+              }
+            </call>
+
+            <!-- Disconnect Replication Servers -->
+            <call function="'disconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <iterate var="server"
+                     in="[server1, server2]"
+                     indexvar="i">
+              <sequence>
+                <!-- Modify entry on one of the servers -->
+                <call function="'modifyAnAttribute'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : '%s/%s' \
+                                       % (server.getDir(), OPENDSNAME),
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'DNToModify'     : myEntry.getDn(),
+                    'listAttributes' : mods[i][0],
+                    'changetype'     : 'add'
+                  }
+                </call>
+              </sequence>
+            </iterate>
+
+            <!-- Check modifies have not been propagated -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'employeeNumber',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+              
+            <!-- Reconnect Replication Servers -->
+            <call function="'reconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <!-- Check conflict is resolved -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'employeeNumber',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, server1, [server2], synchroSuffix ]
+            </call> 
+
+            <!-- Delete added entry -->
+            <call function="'ldapDeleteWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'dsDn'           : [myEntry.getDn()]
+              }
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+
+  <!--- Test Case information
+  #@TestMarker         Replication Conflict Tests
+  #@TestName           Replication: Conflict: double_mod_del_multi
+  #@TestID             double_mod_del_multi
+  #@TestPurpose        Double mod_delete a multi-valued attribute
+  #@TestPreamble
+  #@TestSteps          Add entry to server1 with 
+                       description:{1 2 3 4 5 6 7 8 9 10}
+  #@TestSteps          Disconnect Replication Servers
+  #@TestSteps          server1: delete description={1 2 3 4 5}
+  #@TestSteps          server2: delete description={4 5 6 7 8}
+  #@TestSteps          Re-connect Replication Servers
+  #@TestSteps          Check description={9 10} on both servers
+  #@TestPostamble
+  #@TestResult         Success if trees are synchronised
+  -->
+  <function name="replication_conflict_008" scope="local">
+    <testcase name="getTestCaseName('double_mod_del_multi')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: Conflict: double_mod_del_multi. \
+              Double mod_delete a multi-valued attribute'
+            </message>
+                                                              
+            <!-- Add entry to server1 -->
+            <script>
+              myEntry = Entry('cn=C1')
+              for x in range(10):
+                myEntry.addAttr('description', '%i' % (x+1))
+              server1del = []
+              for y in range(1,6):
+                server1del.append('description:%i' % y)
+              server2del = []
+              for z in range(4,9):
+                server2del.append('description:%i' % z)
+              server1mods = [server1del]
+              server2mods = [server2del]
+              mods = [server1mods, server2mods]
+            </script>
+            <call function="'addAnEntry'">
+              { 'location'       : server1Host,
+                'dsPath'         : server1Path,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'DNToAdd'        : myEntry.getDn(),
+                'listAttributes' : myEntry.getAttrList()
+              }
+            </call>
+
+            <!-- Disconnect Replication Servers -->
+            <call function="'disconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <iterate var="server"
+                     in="[server1, server2]"
+                     indexvar="i">
+              <sequence>
+                <!-- Modify entry on one of the servers -->
+                <call function="'modifyAnAttribute'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : '%s/%s' \
+                                       % (server.getDir(), OPENDSNAME),
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'DNToModify'     : myEntry.getDn(),
+                    'listAttributes' : mods[i][0],
+                    'changetype'     : 'delete'
+                  }
+                </call>
+              </sequence>
+            </iterate>
+
+            <!-- Check modifies have not been propagated -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+              
+            <!-- Reconnect Replication Servers -->
+            <call function="'reconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <!-- Check conflict is resolved -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, server1, [server2], synchroSuffix ]
+            </call> 
+
+            <!-- Delete added entry -->
+            <call function="'ldapDeleteWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'dsDn'           : [myEntry.getDn()]
+              }
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+
+  <!--- Test Case information
+  #@TestMarker         Replication Conflict Tests
+  #@TestName           Replication: Conflict: double_mod_del_single
+  #@TestID             double_mod_del_single
+  #@TestPurpose        Double mod_delete a single-valued attribute
+  #@TestPreamble
+  #@TestSteps          Add entry to server1 with employeeNumber=1
+  #@TestSteps          Disconnect Replication Servers
+  #@TestSteps          server1: delete employeeNumber
+  #@TestSteps          server2: delete employeeNumber=1
+  #@TestSteps          Re-connect Replication Servers
+  #@TestSteps          Check employeeNumber no longer exists on either
+                       server
+  #@TestPostamble
+  #@TestResult         Success if trees are synchronised
+  -->
+  <function name="replication_conflict_009" scope="local">
+    <testcase name="getTestCaseName('double_mod_del_single')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: Conflict: double_mod_del_single. \
+              Double mod_delete a single-valued attribute'
+            </message>
+                                                              
+            <!-- Add entry to server1 -->
+            <script>
+              myEntry = Entry('cn=C2')
+              myEntry.addAttr('employeeNumber', '1')
+              server1del = ['employeeNumber:']
+              server2del = ['employeeNumber:1']
+              server1mods = [server1del]
+              server2mods = [server2del]
+              mods = [server1mods, server2mods]
+            </script>
+            <call function="'addAnEntry'">
+              { 'location'       : server1Host,
+                'dsPath'         : server1Path,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'DNToAdd'        : myEntry.getDn(),
+                'listAttributes' : myEntry.getAttrList()
+              }
+            </call>
+
+            <!-- Disconnect Replication Servers -->
+            <call function="'disconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <iterate var="server"
+                     in="[server1, server2]"
+                     indexvar="i">
+              <sequence>
+                <!-- Modify entry on one of the servers -->
+                <call function="'modifyAnAttribute'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : '%s/%s' \
+                                       % (server.getDir(), OPENDSNAME),
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'DNToModify'     : myEntry.getDn(),
+                    'listAttributes' : mods[i][0],
+                    'changetype'     : 'delete'
+                  }
+                </call>
+              </sequence>
+            </iterate>
+
+            <!-- Check modifies have not been propagated -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'employeeNumber',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+              
+            <!-- Reconnect Replication Servers -->
+            <call function="'reconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <!-- Check conflict is resolved -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'employeeNumber',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, server1, [server2], synchroSuffix ]
+            </call> 
+
+            <!-- Delete added entry -->
+            <call function="'ldapDeleteWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'dsDn'           : [myEntry.getDn()]
+              }
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+            
+
+  <!--- Test Case information
+  #@TestMarker         Replication Conflict Tests
+  #@TestName           Replication: Conflict: 
+                       mod_del_add_vs_mod_add_del_multi
+  #@TestID             mod_del_add_vs_mod_add_del_multi
+  #@TestPurpose        Modify: Delete+Add then Add+Delete on 2
+                       multi-valued attributes
+  #@TestPreamble
+  #@TestSteps          Add entry to server1 with 
+                       description=1 , telephoneNumber=1
+  #@TestSteps          Disconnect Replication Servers
+  #@TestSteps          server1: add description=2 , 
+                       delete telephoneNumber
+  #@TestSteps          server2: delete description , 
+                       add telephoneNumber=2
+  #@TestSteps          Re-connect Replication Servers
+  #@TestSteps          Check description no longer exists and
+                       telephoneNumber=2 on both servers
+  #@TestPostamble
+  #@TestResult         Success if trees are synchronised
+  -->
+  <function name="replication_conflict_010" scope="local">
+    <testcase name="getTestCaseName('mod_del_add_vs_mod_add_del_multi')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: Conflict: mod_del_add_vs_mod_add_del_multi. \
+              Modify: Delete+Add then Add+Delete on 2 multi-valued attributes'
+            </message>
+                                                              
+            <!-- Add entry to server1 -->
+            <script>
+              myEntry = Entry('cn=D1')
+              myEntry.addAttr('description', '1')
+              myEntry.addAttr('telephoneNumber', '1')
+              server1add = ['description:2']
+              server1del = ['telephoneNumber:']
+              server2del = ['description:']
+              server2add = ['telephoneNumber:2']
+              server1mods = [server1add, server1del]
+              server2mods = [server2del, server2add]
+              mods = [server1mods, server2mods]
+              server1changetypes = ['add', 'delete']
+              server2changetypes = ['delete', 'add']
+              changetypes = [server1changetypes, server2changetypes]
+            </script>
+            <call function="'addAnEntry'">
+              { 'location'       : server1Host,
+                'dsPath'         : server1Path,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'DNToAdd'        : myEntry.getDn(),
+                'listAttributes' : myEntry.getAttrList()
+              }
+            </call>
+
+            <!-- Disconnect Replication Servers -->
+            <call function="'disconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <iterate var="server"
+                     in="[server1, server2]"
+                     indexvar="i">
+              <sequence>
+                <!-- Modify entry on one of the servers -->
+                <call function="'modifyAnAttribute'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : '%s/%s' \
+                                       % (server.getDir(), OPENDSNAME),
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'DNToModify'     : myEntry.getDn(),
+                    'listAttributes' : mods[i][0],
+                    'changetype'     : changetypes[i][0]
+                  }
+                </call>
+                <call function="'modifyAnAttribute'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : '%s/%s' \
+                                       % (server.getDir(), OPENDSNAME),
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'DNToModify'     : myEntry.getDn(),
+                    'listAttributes' : mods[i][1],
+                    'changetype'     : changetypes[i][1]
+                  }
+                </call>
+              </sequence>
+            </iterate>
+
+            <!-- Check modifies have not been propagated -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description telephoneNumber',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+              
+            <!-- Reconnect Replication Servers -->
+            <call function="'reconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <!-- Check conflict is resolved -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description telephoneNumber',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, server1, [server2], synchroSuffix ]
+            </call> 
+
+            <!-- Delete added entry -->
+            <call function="'ldapDeleteWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'dsDn'           : [myEntry.getDn()]
+              }
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+            
+
+
+  <!--- Test Case information
+  #@TestMarker         Replication Conflict Tests
+  #@TestName           Replication: Conflict: 
+                       mod_add_vs_mod_replace_multi
+  #@TestID             mod_add_vs_mod_replace_multi
+  #@TestPurpose        mod_add vs mod_replace on a multi-valued
+                       attribute
+  #@TestPreamble
+  #@TestSteps          Add entry to server1 with description=1
+  #@TestSteps          Disconnect Replication Servers
+  #@TestSteps          server1: add description={2 3}
+  #@TestSteps          server2: replace description -> {4 5}
+  #@TestSteps          Re-connect Replication Servers
+  #@TestSteps          Check description={4 5} on both servers
+  #@TestPostamble
+  #@TestResult         Success if trees are synchronised
+  -->
+  <function name="replication_conflict_011" scope="local">
+    <testcase name="getTestCaseName('mod_add_vs_mod_replace_multi')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: Conflict: mod_add_vs_mod_replace_multi. \
+              mod_add vs mod_replace on a multi-valued attribute'
+            </message>
+                                                              
+            <!-- Add entry to server1 -->
+            <script>
+              myEntry = Entry('cn=E1')
+              myEntry.addAttr('description', '1')
+              server1add = ['description:2', 'description:3']
+              server2replace = ['description:4', 'description:5']
+              server1mods = [server1add]
+              server2mods = [server2replace]
+              mods = [server1mods, server2mods]
+              server1changetypes = ['add']
+              server2changetypes = ['replace']
+              changetypes = [server1changetypes, server2changetypes]
+            </script>
+            <call function="'addAnEntry'">
+              { 'location'       : server1Host,
+                'dsPath'         : server1Path,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'DNToAdd'        : myEntry.getDn(),
+                'listAttributes' : myEntry.getAttrList()
+              }
+            </call>
+
+            <!-- Disconnect Replication Servers -->
+            <call function="'disconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <iterate var="server"
+                     in="[server1, server2]"
+                     indexvar="i">
+              <sequence>
+                <!-- Modify entry on one of the servers -->
+                <call function="'modifyAnAttribute'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : '%s/%s' \
+                                       % (server.getDir(), OPENDSNAME),
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'DNToModify'     : myEntry.getDn(),
+                    'listAttributes' : mods[i][0],
+                    'changetype'     : changetypes[i][0]
+                  }
+                </call>
+              </sequence>
+            </iterate>
+
+            <!-- Check modifies have not been propagated -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+              
+            <!-- Reconnect Replication Servers -->
+            <call function="'reconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <!-- Check conflict is resolved -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, server1, [server2], synchroSuffix ]
+            </call> 
+
+            <!-- Delete added entry -->
+            <call function="'ldapDeleteWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'dsDn'           : [myEntry.getDn()]
+              }
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+            
+
+
+  <!--- Test Case information
+  #@TestMarker         Replication Conflict Tests
+  #@TestName           Replication: Conflict: 
+                       mod_replace_vs_mod_add_multi
+  #@TestID             mod_replace_vs_mod_add_multi
+  #@TestPurpose        mod_replace vs mod_add on a multi-valued
+                       attribute
+  #@TestPreamble
+  #@TestSteps          Add entry to server1 with description=1
+  #@TestSteps          Disconnect Replication Servers
+  #@TestSteps          server1: replace description -> {2 3}
+  #@TestSteps          server2: add description={4 5}
+  #@TestSteps          Re-connect Replication Servers
+  #@TestSteps          Check description={2 3 4 5} on both servers
+  #@TestPostamble
+  #@TestResult         Success if trees are synchronised
+  -->
+  <function name="replication_conflict_012" scope="local">
+    <testcase name="getTestCaseName('mod_replace_vs_mod_add_multi')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: Conflict: mod_replace_vs_mod_add_multi. \
+              mod_replace vs mod_add on a multi-valued attribute'
+            </message>
+                                                              
+            <!-- Add entry to server1 -->
+            <script>
+              myEntry = Entry('cn=E2')
+              myEntry.addAttr('description', '1')
+              server1replace = ['description:2', 'description:3']
+              server2add = ['description:4', 'description:5']
+              server1mods = [server1replace]
+              server2mods = [server2add]
+              mods = [server1mods, server2mods]
+              server1changetypes = ['replace']
+              server2changetypes = ['add']
+              changetypes = [server1changetypes, server2changetypes]
+            </script>
+            <call function="'addAnEntry'">
+              { 'location'       : server1Host,
+                'dsPath'         : server1Path,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'DNToAdd'        : myEntry.getDn(),
+                'listAttributes' : myEntry.getAttrList()
+              }
+            </call>
+
+            <!-- Disconnect Replication Servers -->
+            <call function="'disconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <iterate var="server"
+                     in="[server1, server2]"
+                     indexvar="i">
+              <sequence>
+                <!-- Modify entry on one of the servers -->
+                <call function="'modifyAnAttribute'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : '%s/%s' \
+                                       % (server.getDir(), OPENDSNAME),
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'DNToModify'     : myEntry.getDn(),
+                    'listAttributes' : mods[i][0],
+                    'changetype'     : changetypes[i][0]
+                  }
+                </call>
+              </sequence>
+            </iterate>
+
+            <!-- Check modifies have not been propagated -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+              
+            <!-- Reconnect Replication Servers -->
+            <call function="'reconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <!-- Check conflict is resolved -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, server1, [server2], synchroSuffix ]
+            </call> 
+
+            <!-- Delete added entry -->
+            <call function="'ldapDeleteWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'dsDn'           : [myEntry.getDn()]
+              }
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+            
+
+
+  <!--- Test Case information
+  #@TestMarker         Replication Conflict Tests
+  #@TestName           Replication: Conflict: 
+                       mod_del_vs_mod_replace_multi
+  #@TestID             mod_del_vs_mod_replace_multi
+  #@TestPurpose        mod_del vs mod_replace on a multi-valued
+                       attribute
+  #@TestPreamble
+  #@TestSteps          Add entry to server1 with 
+                       description={1 2 3 4}
+  #@TestSteps          Disconnect Replication Servers
+  #@TestSteps          server1: delete description={2 3}
+  #@TestSteps          server2: replace description -> {6 7 8 9 10}
+  #@TestSteps          Re-connect Replication Servers
+  #@TestSteps          Check description={6 7 8 9 10} on both servers
+  #@TestPostamble
+  #@TestResult         Success if trees are synchronised
+  -->
+  <function name="replication_conflict_013" scope="local">
+    <testcase name="getTestCaseName('mod_del_vs_mod_replace_multi')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: Conflict: mod_del_vs_mod_replace_multi. \
+              mod_del vs mod_replace on a multi-valued attribute'
+            </message>
+                                                              
+            <!-- Add entry to server1 -->
+            <script>
+              myEntry = Entry('cn=F1')
+              for x in range(4):
+                myEntry.addAttr('description', '%i' % (x+1))
+              server1del = ['description:2', 'description:3']
+              server2replace = []
+              for y in range(6,11):
+                server2replace.append('description:%i' % y)
+              server1mods = [server1del]
+              server2mods = [server2replace]
+              mods = [server1mods, server2mods]
+              server1changetypes = ['delete']
+              server2changetypes = ['replace']
+              changetypes = [server1changetypes, server2changetypes]
+            </script>
+            <call function="'addAnEntry'">
+              { 'location'       : server1Host,
+                'dsPath'         : server1Path,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'DNToAdd'        : myEntry.getDn(),
+                'listAttributes' : myEntry.getAttrList()
+              }
+            </call>
+
+            <!-- Disconnect Replication Servers -->
+            <call function="'disconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <iterate var="server"
+                     in="[server1, server2]"
+                     indexvar="i">
+              <sequence>
+                <!-- Modify entry on one of the servers -->
+                <call function="'modifyAnAttribute'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : '%s/%s' \
+                                       % (server.getDir(), OPENDSNAME),
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'DNToModify'     : myEntry.getDn(),
+                    'listAttributes' : mods[i][0],
+                    'changetype'     : changetypes[i][0]
+                  }
+                </call>
+              </sequence>
+            </iterate>
+
+            <!-- Check modifies have not been propagated -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+              
+            <!-- Reconnect Replication Servers -->
+            <call function="'reconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <!-- Check conflict is resolved -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, server1, [server2], synchroSuffix ]
+            </call> 
+
+            <!-- Delete added entry -->
+            <call function="'ldapDeleteWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'dsDn'           : [myEntry.getDn()]
+              }
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+            
+
+
+  <!--- Test Case information
+  #@TestMarker         Replication Conflict Tests
+  #@TestName           Replication: Conflict: 
+                       mod_replace_vs_mod_del_multi
+  #@TestID             mod_replace_vs_mod_del_multi
+  #@TestPurpose        mod_replace vs mod_del on a multi-valued
+                       attribute
+  #@TestPreamble
+  #@TestSteps          Add entry to server1 with
+                       description={1 2 3 4}
+  #@TestSteps          Disconnect Replication Servers
+  #@TestSteps          server1: replace description -> {1 2 3}
+  #@TestSteps          server2: delete description={3 4}
+  #@TestSteps          Re-connect Replication Servers
+  #@TestSteps          Check description={1 2} on both servers
+  #@TestPostamble
+  #@TestResult         Success if trees are synchronised
+  -->
+  <function name="replication_conflict_014" scope="local">
+    <testcase name="getTestCaseName('mod_replace_vs_mod_del_multi')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: Conflict: mod_replace_vs_mod_del_multi. \
+              mod_replace vs mod_del on a multi-valued attribute'
+            </message>
+                                                              
+            <!-- Add entry to server1 -->
+            <script>
+              myEntry = Entry('cn=F2')
+              for x in range(4):
+                myEntry.addAttr('description', '%i' % (x+1))
+              server1replace = ['description:1', 'description:2', 
+                                'description:3']
+              server2del = ['description:3', 'description:4']
+              server1mods = [server1replace]
+              server2mods = [server2del]
+              mods = [server1mods, server2mods]
+              server1changetypes = ['replace']
+              server2changetypes = ['delete']
+              changetypes = [server1changetypes, server2changetypes]
+            </script>
+            <call function="'addAnEntry'">
+              { 'location'       : server1Host,
+                'dsPath'         : server1Path,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'DNToAdd'        : myEntry.getDn(),
+                'listAttributes' : myEntry.getAttrList()
+              }
+            </call>
+
+            <!-- Disconnect Replication Servers -->
+            <call function="'disconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <iterate var="server"
+                     in="[server1, server2]"
+                     indexvar="i">
+              <sequence>
+                <!-- Modify entry on one of the servers -->
+                <call function="'modifyAnAttribute'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : '%s/%s' \
+                                       % (server.getDir(), OPENDSNAME),
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'DNToModify'     : myEntry.getDn(),
+                    'listAttributes' : mods[i][0],
+                    'changetype'     : changetypes[i][0]
+                  }
+                </call>
+              </sequence>
+            </iterate>
+
+            <!-- Check modifies have not been propagated -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+              
+            <!-- Reconnect Replication Servers -->
+            <call function="'reconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <!-- Check conflict is resolved -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, server1, [server2], synchroSuffix ]
+            </call> 
+
+            <!-- Delete added entry -->
+            <call function="'ldapDeleteWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'dsDn'           : [myEntry.getDn()]
+              }
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+  <!--- Test Case information
+  #@TestMarker         Replication Conflict Tests
+  #@TestName           Replication: Conflict: add_child_del_parent
+  #@TestID             add_child_del_parent
+  #@TestPurpose        Add a child vs delete his parent
+  #@TestPreamble
+  #@TestSteps          Add entry cn=P1 to server1
+  #@TestSteps          Disconnect Replication Servers
+  #@TestSteps          server2: add child cn=C1,cn=P1
+  #@TestSteps          server1: delete parent cn=P1
+  #@TestSteps          Re-connect Replication Servers
+  #@TestSteps          Check servers are synchronised
+  #@TestPostamble
+  #@TestResult         Success if trees are synchronised
+  -->
+  <function name="replication_conflict_015" scope="local">
+    <testcase name="getTestCaseName('add_child_del_parent')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: Conflict: add_child_del_parent. \
+              Add a child vs delete his parent'
+            </message>
+                                                              
+            <!-- Add entry to server1 -->
+            <script>
+              parentEntry = Entry('cn=P1')
+              parentEntry.addAttr('givenname', 'DUMMY ENTRY')
+              childEntry = Entry('cn=C1,cn=P1')
+              childEntry.addAttr('givenname', 'DUMMY ENTRY')
+              # addedEntries = [[], []]
+            </script>
+            <call function="'addAnEntry'">
+              { 'location'       : server1Host,
+                'dsPath'         : server1Path,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'DNToAdd'        : parentEntry.getDn(),
+                'listAttributes' : parentEntry.getAttrList()
+              }
+            </call>
+
+            <!-- Disconnect Replication Servers -->
+            <call function="'disconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <!-- Add child entry on server2 -->
+            <call function="'addAnEntry'">
+              { 'location'       : server2Host,
+                'dsPath'         : server2Path,
+                'dsInstanceHost' : server2Host,
+                'dsInstancePort' : server2.getPort(),
+                'dsInstanceDn'   : server2.getRootDn(),
+                'dsInstancePswd' : server2.getRootPwd(),
+                'DNToAdd'        : childEntry.getDn(),
+                'listAttributes' : childEntry.getAttrList()
+              }
+            </call>
+
+            <!-- Delete parent entry on server1-->
+            <call function="'ldapDeleteWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'dsDn'           : [parentEntry.getDn()]
+              }
+            </call>
+
+            <!-- Check modifies have not been propagated -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : synchroSuffix,
+                    'dsFilter'       : 'givenname=DUMMY ENTRY',
+                    'dsAttributes'   : 'ds-sync-conflict cn',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+
+                <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=monitor',
+                    'dsFilter'       : monitorFilter,
+                    'dsAttributes'   : monitorCounters,
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+              
+            <!-- Reconnect Replication Servers -->
+            <call function="'reconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <!-- Check conflict is resolved -->
+            <paralleliterate var="server" 
+                             in="[server1, server2]"
+                             indexvar="i">
+              <sequence>
+                <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'       : synchroSuffix,
+                    'dsFilter'       : 'givenname=DUMMY ENTRY',
+                    'dsAttributes'   : 'ds-sync-conflict cn',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                    <script>
+                      resultDnList = []
+                      for line in searchResult.splitlines():
+                        if line.find('dn: ') != -1:
+                          resultDn = line[len('dn: '):]
+                          resultDnList.append(resultDn)
+                      addedEntries[i] = resultDnList
+                    </script>
+                  </sequence>
+                  <else>
+                    <script>
+                      addedEntries[i] = []
+                    </script>
+                  </else>
+                </if>
+
+                <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=monitor',
+                    'dsFilter'       : monitorFilter,
+                    'dsAttributes'   : monitorCounters,
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->
+            <!-- If the trees don't match, we may have come across Issue 3891
+             (Replication conflict: add child , delete parent) -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, server1, [server2], synchroSuffix,
+                '3891' ]
+            </call> 
+
+            <!-- Delete added entries -->
+            <script>
+              list1 = addedEntries[0]
+              list2 = addedEntries[1]
+              toRemove = []
+              # remove potential redundancies, to avoid deleting them twice
+              for addedEntry in list2:
+                if addedEntry in list1:
+                  toRemove.append(addedEntry)
+              for ent in toRemove:
+                list2.remove(ent)
+            </script>
+            <paralleliterate var="server" 
+                             in="[server1, server2]" 
+                             indexvar="i">
+              <if expr="len(addedEntries[i]) != 0">
+                <paralleliterate var="entryToDelete" in="addedEntries[i]">
+                  <call function="'ldapDeleteWithScript'">
+                    { 'location'       : clientHost,
+                      'dsPath'         : clientPath,
+                      'dsInstanceHost' : server.getHostname(),
+                      'dsInstancePort' : server.getPort(),
+                      'dsInstanceDn'   : server.getRootDn(),
+                      'dsInstancePswd' : server.getRootPwd(),
+                      'dsDn'           : [entryToDelete] 
+                    }
+                  </call>
+                </paralleliterate>
+              </if>
+            </paralleliterate>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+  <!--- Test Case information
+  #@TestMarker         Replication Conflict Tests
+  #@TestName           Replication: Conflict: del_parent_add_child
+  #@TestID             del_parent_add_child
+  #@TestPurpose        Delete a parent vs add his child
+  #@TestPreamble
+  #@TestSteps          Add entry cn=P2 to server1
+  #@TestSteps          Disconnect Replication Servers
+  #@TestSteps          server1: delete parent cn=P2
+  #@TestSteps          server2: add child cn=C2,cn=P2
+  #@TestSteps          Re-connect Replication Servers
+  #@TestSteps          Check servers are synchronised
+  #@TestPostamble
+  #@TestResult         Success if trees are synchronised
+  -->
+  <function name="replication_conflict_016" scope="local">
+    <testcase name="getTestCaseName('del_parent_add_child')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: Conflict: del_parent_add_child. \
+              Delete a parent vs add his child'
+            </message>
+                                                              
+            <!-- Add entry to server1 -->
+            <script>
+              parentEntry = Entry('cn=P2')
+              parentEntry.addAttr('givenname', 'DUMMY ENTRY')
+              childEntry = Entry('cn=C2,cn=P2')
+              childEntry.addAttr('givenname', 'DUMMY ENTRY')
+              # addedEntries = [[], []]
+            </script>
+            <call function="'addAnEntry'">
+              { 'location'       : server1Host,
+                'dsPath'         : server1Path,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'DNToAdd'        : parentEntry.getDn(),
+                'listAttributes' : parentEntry.getAttrList()
+              }
+            </call>
+
+            <!-- Disconnect Replication Servers -->
+            <call function="'disconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <!-- Delete parent entry on server1-->
+            <call function="'ldapDeleteWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'dsDn'           : [parentEntry.getDn()]
+              }
+            </call>
+
+            <!-- Add child entry on server2 -->
+            <call function="'addAnEntry'">
+              { 'location'       : server2Host,
+                'dsPath'         : server2Path,
+                'dsInstanceHost' : server2Host,
+                'dsInstancePort' : server2.getPort(),
+                'dsInstanceDn'   : server2.getRootDn(),
+                'dsInstancePswd' : server2.getRootPwd(),
+                'DNToAdd'        : childEntry.getDn(),
+                'listAttributes' : childEntry.getAttrList()
+              }
+            </call>
+
+            <!-- Check modifies have not been propagated -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : synchroSuffix,
+                    'dsFilter'       : 'givenname=DUMMY ENTRY',
+                    'dsAttributes'   : 'ds-sync-conflict cn',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+
+                <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=monitor',
+                    'dsFilter'       : monitorFilter,
+                    'dsAttributes'   : monitorCounters,
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+              
+            <!-- Reconnect Replication Servers -->
+            <call function="'reconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <!-- Check conflict is resolved -->
+            <paralleliterate var="server" 
+                             in="[server1, server2]"
+                             indexvar="i">
+              <sequence>
+                <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'       : synchroSuffix,
+                    'dsFilter'       : 'givenname=DUMMY ENTRY',
+                    'dsAttributes'   : 'ds-sync-conflict cn',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                    <script>
+                      resultDnList = []
+                      for line in searchResult.splitlines():
+                        if line.find('dn: ') != -1:
+                          resultDn = line[len('dn: '):]
+                          resultDnList.append(resultDn)
+                      addedEntries[i] = resultDnList
+                    </script>
+                  </sequence>
+                  <else>
+                    <script>
+                      addedEntries[i] = []
+                    </script>
+                  </else>
+                </if>
+
+                <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=monitor',
+                    'dsFilter'       : monitorFilter,
+                    'dsAttributes'   : monitorCounters,
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->
+            <!-- If the trees don't match, we may have come across Issue 4071
+             (Replication conflict: delete parent, add child) -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, server1, [server2], synchroSuffix,
+                '4071' ]
+            </call> 
+
+            <!-- Delete added entries -->
+            <script>
+              list1 = addedEntries[0]
+              list2 = addedEntries[1]
+              toRemove = []
+              # remove potential redundancies, to avoid deleting them twice
+              for addedEntry in list2:
+                if addedEntry in list1:
+                  toRemove.append(addedEntry)
+              for ent in toRemove:
+                list2.remove(ent)
+            </script>
+            <paralleliterate var="server" 
+                             in="[server1, server2]" 
+                             indexvar="i">
+              <if expr="len(addedEntries[i]) != 0">
+                <paralleliterate var="entryToDelete" in="addedEntries[i]">
+                  <call function="'ldapDeleteWithScript'">
+                    { 'location'       : clientHost,
+                      'dsPath'         : clientPath,
+                      'dsInstanceHost' : server.getHostname(),
+                      'dsInstancePort' : server.getPort(),
+                      'dsInstanceDn'   : server.getRootDn(),
+                      'dsInstancePswd' : server.getRootPwd(),
+                      'dsDn'           : [entryToDelete]
+                    }
+                  </call>
+                </paralleliterate>
+              </if>
+            </paralleliterate>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+  <!--- Test Case information
+  #@TestMarker         Replication Conflict Tests
+  #@TestName           Replication: Conflict: double_add
+  #@TestID             double_add
+  #@TestPurpose        Double add (same dn, different uid)
+  #@TestPreamble
+  #@TestSteps          Disconnect Replication Servers
+  #@TestSteps          server1: add entry cn=F with uid=1
+  #@TestSteps          server2: add entry cn=F with uid=2
+  #@TestSteps          Re-connect Replication Servers
+  #@TestSteps          Check servers are synchronised
+  #@TestPostamble
+  #@TestResult         Success if trees are synchronised
+  -->
+  <function name="replication_conflict_017" scope="local">
+    <testcase name="getTestCaseName('double_add')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: Conflict: double_add. \
+              Double add (same dn, different uid)'
+            </message>
+                                                              
+            <script>
+              entry1 = Entry('cn=F')
+              entry1.addAttr('uid', '1')
+              entry1.addAttr('givenname', 'DUMMY ENTRY')
+              entry2 = Entry('cn=F')
+              entry2.addAttr('uid', '2')
+              entry2.addAttr('givenname', 'DUMMY ENTRY')
+              
+              entriesToAdd = [entry1, entry2]
+            </script>
+
+            <!-- Disconnect Replication Servers -->
+            <call function="'disconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <iterate var="server"
+                     in="[server1, server2]"
+                     indexvar="i">
+              <sequence>
+                <!-- Add entry on one of the servers -->
+                <call function="'addAnEntry'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : '%s/%s' \
+                                       % (server.getDir(), OPENDSNAME),
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'DNToAdd'        : entriesToAdd[i].getDn(),
+                    'listAttributes' : entriesToAdd[i].getAttrList()
+                  }
+                </call>
+              </sequence>
+            </iterate>
+
+            <!-- Check modifies have not been propagated -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : synchroSuffix,
+                    'dsFilter'       : 'givenname=DUMMY ENTRY',
+                    'dsAttributes'   : 'ds-sync-conflict uid cn',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+
+                <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=monitor',
+                    'dsFilter'       : monitorFilter,
+                    'dsAttributes'   : monitorCounters,
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+              
+            <!-- Reconnect Replication Servers -->
+            <call function="'reconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <!-- Check conflict is resolved -->
+            <paralleliterate var="server" 
+                             in="[server1, server2]"
+                             indexvar="i">
+              <sequence>
+                <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'       : synchroSuffix,
+                    'dsFilter'       : 'givenname=DUMMY ENTRY',
+                    'dsAttributes'   : 'ds-sync-conflict uid cn',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                    <script>
+                      resultDnList = []
+                      for line in searchResult.splitlines():
+                        if line.find('dn: ') != -1:
+                          resultDn = line[len('dn: '):]
+                          resultDnList.append(resultDn)
+                      addedEntries[i] = resultDnList
+                    </script>
+                  </sequence>
+                  <else>
+                    <script>
+                      addedEntries[i] = []
+                    </script>
+                  </else>
+                </if>
+
+                <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=monitor',
+                    'dsFilter'       : monitorFilter,
+                    'dsAttributes'   : monitorCounters,
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->
+            <!-- If the trees don't match, we may have come across Issue OPENDJ-454
+             (RFE: Solve naming conflict of 2 adds with same dn, different
+             attr value) -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, server1, [server2], synchroSuffix,
+                'OPENDJ-454' ]
+            </call> 
+
+            <!-- Delete added entries -->
+            <script>
+              list1 = addedEntries[0]
+              list2 = addedEntries[1]
+              toRemove = []
+              # remove potential redundancies, to avoid deleting them twice
+              for addedEntry in list2:
+                if addedEntry in list1:
+                  toRemove.append(addedEntry)
+              for ent in toRemove:
+                list2.remove(ent)
+            </script>
+            <paralleliterate var="server" 
+                             in="[server1, server2]" 
+                             indexvar="i">
+              <if expr="len(addedEntries[i]) != 0">
+                <paralleliterate var="entryToDelete" in="addedEntries[i]">
+                  <call function="'ldapDeleteWithScript'">
+                    { 'location'       : clientHost,
+                      'dsPath'         : clientPath,
+                      'dsInstanceHost' : server.getHostname(),
+                      'dsInstancePort' : server.getPort(),
+                      'dsInstanceDn'   : server.getRootDn(),
+                      'dsInstancePswd' : server.getRootPwd(),
+                      'dsDn'           : [entryToDelete]
+                    }
+                  </call>
+                </paralleliterate>
+              </if>
+            </paralleliterate>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+
+  <!--- Test Case information
+  #@TestMarker         Replication Conflict Tests
+  #@TestName           Replication: Conflict: double_add_single_del_1
+  #@TestID             double_add_single_del_1
+  #@TestPurpose        Add twice same dn, then delete it in one server
+  #@TestPreamble
+  #@TestSteps          Disconnect Replication Servers
+  #@TestSteps          server1: add entry cn=DN1 with uid=1
+  #@TestSteps          server2: add entry cn=DN1 with uid=2
+  #@TestSteps          Re-connect Replication Servers
+  #@TestSteps          server1: delete entry cn=DN1
+  #@TestSteps          Check servers are synchronised
+  #@TestPostamble
+  #@TestResult         Success if trees are synchronised
+  -->
+  <function name="replication_conflict_018" scope="local">
+    <testcase name="getTestCaseName('double_add_single_del_1')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: Conflict: double_add_single_del_1. \
+              Add twice same dn, then delete it in one server'
+            </message>
+                                                              
+            <script>
+              entry1 = Entry('cn=DN1')
+              entry1.addAttr('uid', '1')
+              entry1.addAttr('givenname', 'DUMMY ENTRY')
+              entry2 = Entry('cn=DN1')
+              entry2.addAttr('uid', '2')
+              entry2.addAttr('givenname', 'DUMMY ENTRY')
+              
+              entriesToAdd = [entry1, entry2]
+            </script>
+
+            <!-- Disconnect Replication Servers -->
+            <call function="'disconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <iterate var="server"
+                     in="[server1, server2]"
+                     indexvar="i">
+              <sequence>
+                <!-- Add entry on one of the servers -->
+                <call function="'addAnEntry'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : '%s/%s' \
+                                       % (server.getDir(), OPENDSNAME),
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'DNToAdd'        : entriesToAdd[i].getDn(),
+                    'listAttributes' : entriesToAdd[i].getAttrList()
+                  }
+                </call>
+              </sequence>
+            </iterate>
+
+            <!-- Check modifies have not been propagated -->
+            <paralleliterate var="server" in="[server1, server2]">
+              <sequence>
+                <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'       : synchroSuffix,
+                    'dsFilter'       : 'givenname=DUMMY ENTRY',
+                    'dsAttributes'   : 'ds-sync-conflict uid cn',
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+
+                <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=monitor',
+                    'dsFilter'       : monitorFilter,
+                    'dsAttributes'   : monitorCounters,
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>                  
+            </paralleliterate>
+              
+            <!-- Reconnect Replication Servers -->
+            <call function="'reconnectReplicationServers'">
+              [ clientHost, clientPath, [replServer1, replServer2] ]
+            </call>
+
+            <!-- Delete entry on server1-->
+            <call function="'ldapDeleteWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : server1Host,
+                'dsInstancePort' : server1.getPort(),
+                'dsInstanceDn'   : server1.getRootDn(),
+                'dsInstancePswd' : server1.getRootPwd(),
+                'dsDn'           : [entry1.getDn()]
+              }
+            </call>
+
+            <!-- Check conflict is resolved -->
+            <paralleliterate var="server" 
+                             in="[server1, server2]"
+                             indexvar="i">
+              <sequence>
+                <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'       : synchroSuffix,
+                    'dsFilter'       : 'givenname=DUMMY ENTRY',
+                    'dsAttributes'   : 'ds-sync-conflict uid cn',
+                    'logStderr'      : False
+                  }
+                </call>
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                    <script>
+                      resultDnList = []
+                      for line in searchResult.splitlines():
+                        if line.find('dn: ') != -1:
+                          resultDn = line[len('dn: '):]
+                          resultDnList.append(resultDn)
+                      addedEntries[i] = resultDnList
+                    </script>
+                  </sequence>
+                  <else>
+                    <script>
+                      addedEntries[i] = []
+                    </script>
+                  </else>
+                </if>
+
+                <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=monitor',
+                    'dsFilter'       : monitorFilter,
+                    'dsAttributes'   : monitorCounters,
+                    'logStderr'      : False
+                  }                
+                </call>                
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <if expr="resultLength != 0">
+                  <sequence>
+                    <message>
+                      '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+                      % (server.getHostname(), server.getPort(), searchResult)
+                    </message>
+                  </sequence>
+                </if>
+              </sequence>
+            </paralleliterate>
+
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->
+            <!-- If the trees don't match, we may have come across Issue OPENDJ-454
+             (RFE: Solve naming conflict of 2 adds with same dn, different 
+             attr value) -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, server1, [server2], synchroSuffix,
+                'OPENDJ-454' ]
+            </call> 
+
+            <!-- Delete added entries -->
+            <script>
+              list1 = addedEntries[0]
+              list2 = addedEntries[1]
+              toRemove = []
+              # remove potential redundancies, to avoid deleting them twice
+              for addedEntry in list2:
+                if addedEntry in list1:
+                  toRemove.append(addedEntry)
+              for ent in toRemove:
+                list2.remove(ent)
+            </script>
+            <paralleliterate var="server" 
+                             in="[server1, server2]" 
+                             indexvar="i">
+              <if expr="len(addedEntries[i]) != 0">
+                <paralleliterate var="entryToDelete" in="addedEntries[i]">
+                  <call function="'ldapDeleteWithScript'">
+                    { 'location'       : clientHost,
+                      'dsPath'         : clientPath,
+                      'dsInstanceHost' : server.getHostname(),
+                      'dsInstancePort' : server.getPort(),
+                      'dsInstanceDn'   : server.getRootDn(),
+                      'dsInstancePswd' : server.getRootPwd(),
+                      'dsDn'           : [entryToDelete]
+                    }
+                  </call>
+                </paralleliterate>
+              </if>
+            </paralleliterate>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+</stax>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/encryption/encryption.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/encryption/encryption.xml
index ef5b0ea..4c7c348 100644
--- a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/encryption/encryption.xml
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/encryption/encryption.xml
@@ -7,953 +7,154 @@
  ! 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 2007-2010 Sun Microsystems, Inc.
- !      Portions Copyright 2011-2012 ForgeRock AS.
+ !      Copyright 2012 ForgeRock AS.
  ! -->
 <stax>
-
   <defaultcall function="replication_encryption"/>
-
-  <function name="replication_encryption">
-
+  <function name="replication_encryption" scope="local">
     <sequence>
-
-      <block name="'encryption'">
-
-        <sequence>
-            
-          <script>
-            if not CurrentTestPath.has_key('group'):
-              CurrentTestPath['group']='replication'                 
-            CurrentTestPath['suite']=STAXCurrentBlock
-          </script>            
-
-          <call function="'testSuite_Preamble'"/>
-
-          <!--- Test Suite information
-          #@TestSuiteName       Replication Encryption Tests
-          #@TestSuitePurpose    Verify that replication can use an encrypted 
-                                channel.
-          #@TestSuiteID         Encryption Tests
-          #@TestSuiteGroup      Encryption
-          #@TestGroup           Replication
-          #@TestScript          replication_encryption.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'">
-            { 'topologyFile'     : '%s/3server_topology.txt' \
-                                    % REPLICATION_CONFIG_DIR,
-              'secureReplication': True,
-              'dataFile'         : 'Example.ldif',
-              'label'            : 'Replication Encryption'
-            }
-          </call>
-                                    
-          <script>
-            consumer = consumerList[0]
-          </script>        
-
-            
-                        
-          <!--- Test Case information
-          #@TestMarker          Replication Encryption Tests
-          #@TestName            Replication: Encryption: Add entry
-          #@TestID                  Add entry
-          #@TestPurpose        Check entry add over secured replication
-          #@TestPreamble
-          #@TestSteps
-          #@TestPostamble
-          #@TestResult
-          -->               
-          <testcase name="getTestCaseName('Add entry')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                 'Replication: Encryption: Add entry. Check entry add over \
-                 secured replication'
-              </message>
-
-              <iterate var="server" in="_topologyServerList" indexvar="i">
-                <sequence>
-                  <script>
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                    userDn = 'uid=iabizen-%s, ou=People, %s' % (i,synchroSuffix)
-                  </script>
-                    
-                  <!-- Add entry to one of the other servers -->
-                  <script>
-                    listAttr = []
-                    listAttr.append('objectclass:top')
-                    listAttr.append('objectclass:organizationalperson')
-                    listAttr.append('objectclass:inetorgperson')
-                    listAttr.append('objectclass:person')
-                    listAttr.append('givenname:Izen-%s' % i)
-                    listAttr.append('sn:Abizen-%s' % i)
-                    listAttr.append('cn:Izen-%s Abizen-%s' % (i, i))
-                    listAttr.append('l:ICNC')
-                  </script>
-          
-                  <call function="'addAnEntry'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : serverPath,
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'DNToAdd'        : userDn,
-                      'listAttributes' : listAttr
-                    }
-                  </call>
+      <block name="'replication_encryption'">
+        <try>
+          <sequence>
+            <script>
+              CurrentTestPath['group'] = 'replication'        
+              CurrentTestPath['suite'] = 'encryption'
               
-                </sequence>
-              </iterate>
-                
-              <!-- Verify the synchronization of the trees among the servers in 
-                the topology -->          
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, master, consumerList, synchroSuffix ]
-              </call> 
+              _group=CurrentTestPath['group']
+              _groupdir='%s/testcases/%s' % (TESTS_DIR,_group)
+              _label = 'Replication Encryption'
+            </script>
 
-
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>
-          
-
-          <!--- Test Case information
-          #@TestMarker          Replication Encryption Tests
-          #@TestName            Replication: Encryption: Add entry after restart
-          #@TestID              Add entry after restart
-          #@TestPurpose         Check entry add over secured replication after
-                                server restart
-          #@TestPreamble
-          #@TestSteps           Restart servers
-          #@TestSteps           Add entry
-          #@TestPostamble
-          #@TestResult          Success if trees synchronised over the topology
-          -->
-          <testcase name="getTestCaseName('Add entry after restart')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Encryption: Add entry after restart. \
-                Check entry add over secured replication after server restart'
-              </message>
-
-              <!-- Stop the servers in the topology -->
-              <call function="'stopServers'">
-                [_splitServerList]
-              </call>
-              
-              <!-- Start the servers in the topology -->  
-              <call function="'startServers'">
-                [_splitServerList]
-              </call>
-              
-              <iterate var="server" in="_topologyServerList" indexvar="i">
-                <sequence>
-                  <script>
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                    userDn = 'uid=RESTART-iabizen-%s, ou=People, %s' % \
-                             (i,synchroSuffix)
-                  </script>
-                    
-                  <!-- Add entry to one of the other servers -->
-                  <script>
-                    listAttr = []
-                    listAttr.append('objectclass:top')
-                    listAttr.append('objectclass:organizationalperson')
-                    listAttr.append('objectclass:inetorgperson')
-                    listAttr.append('objectclass:person')
-                    listAttr.append('givenname:Izen-%s' % i)
-                    listAttr.append('sn:Abizen-%s' % i)
-                    listAttr.append('cn:Izen-%s Abizen-%s' % (i, i))
-                    listAttr.append('l:ICNC')
-                  </script>
-          
-                  <call function="'addAnEntry'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : serverPath,
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort(),
-                      'dsInstanceDn'   : server.getRootDn(),
-                      'dsInstancePswd' : server.getRootPwd(),
-                      'DNToAdd'        : userDn,
-                      'listAttributes' : listAttr
-                    }
-                  </call>
-              
-                </sequence>
-              </iterate>
-                
-              <!-- 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 Encryption Tests
-          #@TestName            Replication: Encryption: Modify entry
-          #@TestID                  Modify entry
-          #@TestPurpose        Check entry modify over secured replication
-          #@TestPreamble
-          #@TestSteps
-          #@TestPostamble
-          #@TestResult
-          -->               
-          <testcase name="getTestCaseName('Modify entry')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                 'Replication: Encryption: Modify entry. Check entry modify \
-                 over secured replication'
-              </message>
-              
-              <iterate var="server" in="_topologyServerList" indexvar="i">
-                <sequence>
-                  <script>
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                    userDn = 'uid=iabizen-%s, ou=People, %s' % (i,synchroSuffix)
-                  </script>
-                                    
-                  <!-- Modify entry on one of the servers -->
-                  <call function="'modifyAnAttribute'">
-                    { 'location'          : server.getHostname(),
-                      'dsPath'            : serverPath,
-                      'dsInstanceHost'    : server.getHostname(),
-                      'dsInstancePort'    : server.getPort(),
-                      'dsInstanceDn'      : server.getRootDn(),
-                      'dsInstancePswd'    : server.getRootPwd(),
-                      'DNToModify'        : userDn,
-                      'attributeName'     : 'l',
-                      'newAttributeValue' : 'GEC',
-                      'changetype'        : 'replace'
-                    }
-                  </call>                       
-                </sequence>
-              </iterate>
-                          
-              <!-- 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 Encryption Tests
-          #@TestName            Replication: Encryption: Delete entry
-          #@TestID              Delete entry
-          #@TestPurpose         Check entry delete over secured replication
-          #@TestPreamble
-          #@TestSteps
-          #@TestPostamble
-          #@TestResult
-          -->               
-          <testcase name="getTestCaseName('Delete entry')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                 'Replication: Encryption: Delete entry. Check delete modify \
-                 over secured replication'
-              </message>
-
-              <iterate var="server" in="_topologyServerList" indexvar="i">
-                <sequence>
-                  <script>
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                    userDn = 'uid=iabizen-%s, ou=People, %s' % (i,synchroSuffix)
-                  </script>
-                    
-                  <!-- Delete entry on one of the servers -->    
-                  <call function="'DeleteEntry'">
-                    { 'location'       : server.getHostname(),
-                      'dsPath'         : serverPath,
-                      'dsInstanceHost' : server.getHostname(),
-                      'dsInstancePort' : server.getPort() ,
-                      'dsInstanceDn'   : server.getRootDn() ,
-                      'dsInstancePswd' : server.getRootPwd() ,
-                      'dsBaseDN'       : userDn
-                    }
-                  </call>
-                </sequence>
-              </iterate>
-                
-              <!-- 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 Encryption Tests
-          #@TestName            Replication: Encryption: Modify Entry - add 
-                                binary attribute
-          #@TestID              Modify Entry - add binary attribute
-          #@TestPurpose         Check that an entry modify is well propagated 
-                                by secured replication.
-          #@TestPreamble
-          #@TestSteps
-          #@TestPostamble
-          #@TestResult
-          -->                      
-          <testcase name="getTestCaseName
-                          ('Modify Entry - add binary attribute')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Encryption: Modify Entry - add binary attribute. \
-                Check that an entry modify is well propagated by secured \
-                replication.'
-              </message>
-               
-              <script>
-                filename = 'replication_mod_add_binary.ldif'
-                filePath = '%s/%s' % (local.temp,filename)
-                binaryFilePath = '%s/replication/photo1.uu' % source.data
-                dn = 'uid=hmiller, ou=People,%s' % synchroSuffix
-                modif = 'add'
-                attrType = 'jpegPhoto'
-                write_replication_mod_binary_ldif_file(filePath, dn, modif, 
-                                                       attrType, binaryFilePath)
-              </script>
-
-              <!-- Copy the replication_mod ldif to client host -->
-              <message>
-                'Copy %s file from %s to %s' % (filename,local.temp,
-                                                client.getTmpDir())
-              </message>
-              <call function="'copyFile'">
-                { 'srcfile'    : filePath,
-                  'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
-                  'remotehost' : client.getHostname() }
-              </call>                    
-
-              <!-- Modify "master" server -->                                
-              <call function="'ldapModifyWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort() ,
-                  'dsInstanceDn'   : master.getRootDn() ,
-                  'dsInstancePswd' : master.getRootPwd() ,
-                  'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
-                }
-              </call>                            
-        
-
-              <!-- Check modify worked on "master" server -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'        : clientHost,
-                  'dsPath'          : clientPath,
-                  'dsInstanceHost'  : masterHost ,
-                  'dsInstancePort'  : master.getPort() ,
-                  'dsInstanceDn'    : master.getRootDn() ,
-                  'dsInstancePswd'  : master.getRootPwd() ,
-                  'dsBaseDN'        : 'uid=hmiller, ou=People,%s' \
-                                       % synchroSuffix,
-                  'dsFilter'        : 'jpegPhoto=*',
-                  'expectedRC'      :  0
-                } 
-              </call>                
-              <script>
-                searchRC = STAXResult[0][0]
-                searchResult = STAXResult[0][1]
-                resultLength = len(searchResult) > 0
-              </script>
-              <call function="'checktestRC'">
-                  { 'returncode' : resultLength ,
-                    'result'     : searchResult ,
-                    'expected'   : 1
-                }
-              </call>    
-            
-
-              <!-- 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 Encryption Tests
-          #@TestName            Replication: Encryption: Modify Entry - 
-                                replace binary attribute
-          #@TestID                  Modify Entry - replace binary attribute
-          #@TestPurpose         Check that an entry modify is well propagated 
-                                by secured replication.
-          #@TestPreamble
-          #@TestSteps
-          #@TestPostamble
-          #@TestResult
-          -->                      
-          <testcase name="getTestCaseName
-                          ('Modify Entry - replace binary attribute')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                 'Replication: Encryption: Modify Entry - replace binary \
-                 attribute. \
-                 Check that an entry modify is well propagated by secured \
-                 replication.'
-              </message>                
-                                               
-              <script>
-                filename = 'replication_mod_replace_binary.ldif'
-                filePath = '%s/%s' % (local.temp,filename)
-                binaryFilePath = '%s/replication/photo2.uu' % source.data
-                dn = 'uid=hmiller, ou=People,%s' % synchroSuffix
-                modif = 'replace'
-                attrType = 'jpegPhoto'
-                write_replication_mod_binary_ldif_file(filePath, dn, modif,
-                                                       attrType, 
-                                                       binaryFilePath)
-              </script>
-
-              <!-- Copy the replication_mod ldif to client host -->
-              <message>
-                'Copy %s file from %s to %s' % (filename,local.temp,
-                                                client.getTmpDir())
-              </message>
-              <call function="'copyFile'">
-                { 'srcfile'    : filePath,
-                  'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
-                  'remotehost' : client.getHostname()
-                }
-              </call>                    
-
-              <!-- Modify "master" server -->                                
-              <call function="'ldapModifyWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort() ,
-                  'dsInstanceDn'   : master.getRootDn() ,
-                  'dsInstancePswd' : master.getRootPwd() ,
-                  'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
-                }
-              </call>                            
-        
-
-              <!-- Check modify worked on "master" server -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort() ,
-                  'dsInstanceDn'   : master.getRootDn() ,
-                  'dsInstancePswd' : master.getRootPwd() ,
-                  'dsBaseDN'       : 'uid=hmiller, ou=People,%s' \
-                                      % synchroSuffix,
-                  'dsFilter'       : 'jpegPhoto=*',
-                  'expectedRC'     :  0
-                }                  
-              </call>                
-              <script>
-                searchRC = STAXResult[0][0]
-                searchResult = STAXResult[0][1]
-                resultLength = len(searchResult) > 0
-              </script>
-              <call function="'checktestRC'">
-                { 'returncode' : resultLength ,
-                  'result'     : searchResult ,
-                  'expected'   : 1
-                }
-              </call>    
-            
-
-              <!-- 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 Encryption Tests
-          #@TestName            Replication: Encryption: Modify Entry - 
-                                delete binary attribute
-          #@TestID                  Modify Entry - delete binary attribute
-          #@TestPurpose         Check that an entry modify is well propagated 
-                                by secured replication.
-          #@TestPreamble
-          #@TestSteps
-          #@TestPostamble
-          #@TestResult
-          -->                      
-          <testcase name="getTestCaseName
-                          ('Modify Entry - delete binary attribute')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                 'Replication: Encryption: Modify Entry - delete binary \
-                 attribute. \
-                 Check that an entry modify is well propagated by secured \
-                 replication.'
-              </message>
-               
-                    
-              <script>
-                filename = 'replication_mod_delete_binary.ldif'
-                filePath = '%s/%s' % (local.temp,filename)
-                dn = 'uid=hmiller, ou=People,%s' % synchroSuffix
-                modif = 'delete'
-                attrType = 'jpegPhoto'
-                attrValue = None
-                write_replication_mod_ldif_file(filePath, dn, modif, attrType, 
-                                                attrValue)
-              </script>
-
-              <!-- Copy the replication_mod ldif to client host -->
-              <message>
-                'Copy %s file from %s to %s' % (filename,local.temp,
-                                                client.getTmpDir())
-              </message>
-              <call function="'copyFile'">
-                { 'srcfile'    : filePath,
-                  'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
-                  'remotehost' : client.getHostname() }
-              </call>                    
-
-              <!-- Modify "master" server -->                                
-              <call function="'ldapModifyWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort() ,
-                  'dsInstanceDn'   : master.getRootDn() ,
-                  'dsInstancePswd' : master.getRootPwd() ,
-                  'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
-                }
-              </call>        
-                
-              <!-- Check modify worked on "master" server -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort() ,
-                  'dsInstanceDn'   : master.getRootDn() ,
-                  'dsInstancePswd' : master.getRootPwd() ,
-                  'dsBaseDN'       : 'uid=hmiller, ou=People,%s' \
-                                      % synchroSuffix,
-                  'dsFilter'       : 'jpegPhoto=*',
-                  'expectedRC'     :  0
-                }
-              </call>                
-              <script>
-                searchRC = STAXResult[0][0]
-                searchResult = STAXResult[0][1]
-                resultLength = len(searchResult) > 0
-              </script>
-              <call function="'checktestRC'">
-                { 'returncode' : resultLength ,
-                  'result'     : searchResult ,
-                  'expected'   : 0
-                }
-              </call>    
-            
-
-              <!-- 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 Encryption Tests
-          #@TestName            Replication: Encryption: Rename Entry
-          #@TestID                  Rename Entry
-          #@TestPurpose         Check that a rename (modrdn) operation is well
-                                propagated by secured replication.
-          #@TestPreamble
-          #@TestSteps
-          #@TestPostamble
-          #@TestResult
-          -->                  
-          <testcase name="getTestCaseName('Rename Entry')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                 'Replication: Encryption: Rename Entry. Check that a rename \
-                 (modrdn) operation is well propagated by secured replication.'
-              </message>
-               
-              <script>
-                filename = 'replication_modrdn.ldif'
-                filePath = '%s/%s' % (local.temp,filename)
-                dn = 'uid=kvaughan, ou=People,%s' % synchroSuffix
-                newrdn = 'uid=kvaughan2'
-                newsuperior = None
-                deleteoldrdn = 1
-                write_replication_moddn_ldif_file(filePath, dn, newrdn, 
-                                                  newsuperior, deleteoldrdn)
-              </script>
-
-              <!-- Copy the replication_mod ldif to client host -->
-              <message>
-                'Copy %s file from %s to %s' % (filename,local.temp,
-                                                client.getTmpDir())
-              </message>
-              <call function="'copyFile'">
-                { 'srcfile'    : filePath,
-                  'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
-                  'remotehost' : client.getHostname()
-                }
-              </call>                    
-
-              <!-- Modify "master" server -->                                
-              <call function="'ldapModifyWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort() ,
-                  'dsInstanceDn'   : master.getRootDn() ,
-                  'dsInstancePswd' : master.getRootPwd() ,
-                  'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
-                }
-              </call>                            
-        
-
-              <!-- Check modify worked on "master" server -->                
-              <!-- check that "uid=kvaughan, ou=People, ${DIRECTORY_BASE}"
-                does NOT exist anymore -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort() ,
-                  'dsInstanceDn'   : master.getRootDn() ,
-                  'dsInstancePswd' : master.getRootPwd() ,
-                  'dsBaseDN'       : 'uid=kvaughan, ou=People,%s' \
-                                      % synchroSuffix,
-                  'dsFilter'       : 'objectclass=*',
-                  'expectedRC'     : 32
-                }                  
-              </call>                
-                
-              <!-- check that new entry "uid=kvaughan2, ou=People,
-                ${DIRECTORY_BASE}" exists -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort() ,
-                  'dsInstanceDn'   : master.getRootDn() ,
-                  'dsInstancePswd' : master.getRootPwd() ,
-                  'dsBaseDN'       : 'uid=kvaughan2, ou=People,%s' \
-                                      % synchroSuffix,
-                  'dsFilter'       : 'objectclass=*'
-                }
-              </call>
-            
-
-              <!-- 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 Encryption Tests
-          #@TestName            Replication: Encryption: Rename Entry 
-                                (preserving old rdn)
-          #@TestID                  Rename Entry (preserving old rdn)
-          #@TestPurpose         Check that a rename (modrdn) operation is well
-                                propagated by secured replication.
-          #@TestPreamble
-          #@TestSteps
-          #@TestPostamble
-          #@TestResult
-          -->                  
-          <testcase name="getTestCaseName
-                          ('Rename Entry (preserving old rdn)')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                 'Replication: Encryption: Rename Entry (preserving old rdn). \
-                 Check that a rename (modrdn) operation is well propagated by \
-                 secured replication.'
-              </message>
-               
-              <script>
-                filename = 'replication_modrdn_preserve.ldif'
-                filePath = '%s/%s' % (local.temp,filename)
-                dn = 'uid=jwallace, ou=People,%s' % synchroSuffix
-                newrdn = 'uid=igueye'
-                newsuperior = None
-                deleteoldrdn = 0
-                write_replication_moddn_ldif_file(filePath, dn, newrdn, 
-                                                  newsuperior, deleteoldrdn)
-              </script>
-
-              <!-- Copy the replication_mod ldif to client host -->
-              <message>
-                'Copy %s file from %s to %s' % (filename,local.temp,
-                                                client.getTmpDir())
-              </message>
-              <call function="'copyFile'">
-                { 'srcfile'    : filePath,
-                  'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
-                  'remotehost' : client.getHostname()
-                }
-              </call>                    
-
-              <!-- Modify "master" server -->                                
-              <call function="'ldapModifyWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort() ,
-                  'dsInstanceDn'   : master.getRootDn() ,
-                  'dsInstancePswd' : master.getRootPwd() ,
-                  'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
-                }
-              </call>                            
-        
-
-              <!-- Check modify worked on "master" server -->                
-              <!-- check that "uid=jwallace, ou=People, ${DIRECTORY_BASE}"
-                does NOT exist anymore -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort() ,
-                  'dsInstanceDn'   : master.getRootDn() ,
-                  'dsInstancePswd' : master.getRootPwd() ,
-                  'dsBaseDN'       : 'uid=jwallace, ou=People,%s' \
-                                      % synchroSuffix,
-                  'dsFilter'       : 'objectclass=*',
-                  'expectedRC'     : 32
-                }
-              </call>                
-                
-              <!-- check that new entry "uid=igueye, ou=People,
-                ${DIRECTORY_BASE}" exists -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort() ,
-                  'dsInstanceDn'   : master.getRootDn() ,
-                  'dsInstancePswd' : master.getRootPwd() ,
-                  'dsBaseDN'       : 'uid=igueye, ou=People,%s' % synchroSuffix,
-                  'dsFilter'       : 'uid=jwallace'
-                }
-              </call>
-              <script>
-                searchRC = STAXResult[0][0]
-                searchResult = STAXResult[0][1]
-                resultLength = len(searchResult) > 0
-              </script>
-              <call function="'checktestRC'">
-                { 'returncode' : resultLength ,
-                  'result'     : searchResult ,
-                  'expected'   : 1
-                }
-              </call>       
-                            
-
-              <!-- 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 Encryption Tests
-          #@TestName            Replication: Encryption: Rename Subtree
-          #@TestID                  Rename Subtree
-          #@TestPurpose         Check that a subtree rename (moddn) operation
-                                is well propagated by secured replication.
-          #@TestPreamble
-          #@TestSteps
-          #@TestPostamble
-          #@TestResult
-          -->                  
-          <testcase name="getTestCaseName('Rename Subtree')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                 'Replication: Encryption: Rename Subtree. Check that a \
-                 subtree rename (moddn) operation is well propagated by \
-                 secured replication.'
-              </message>
-        
-              <script>
-                filename = 'replication_moddn.ldif'
-                filePath = '%s/%s' % (local.temp,filename)
-                dn = 'ou=People,%s' % synchroSuffix
-                newrdn = 'ou=Special People'
-                newsuperior = 'ou=Special Users,%s' % synchroSuffix
-                deleteoldrdn = 0
-                write_replication_moddn_ldif_file(filePath, dn, newrdn, 
-                                                  newsuperior, deleteoldrdn)
-              </script>
-
-              <!-- Copy the replication_mod ldif to client host -->
-              <message>
-                'Copy %s file from %s to %s' % (filename,local.temp,
-                                                client.getTmpDir())
-              </message>
-              <call function="'copyFile'">
-                { 'srcfile'    : filePath,
-                  'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
-                  'remotehost' : client.getHostname() }
-              </call>                    
-
-              <!-- Modify "master" server -->                                
-              <call function="'ldapModifyWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort() ,
-                  'dsInstanceDn'   : master.getRootDn() ,
-                  'dsInstancePswd' : master.getRootPwd() ,
-                  'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
-                }
-              </call>                            
-        
-
-              <!-- Check modify worked on "master" server -->                
-              <!-- check that "uid=gfarmer, ou=People, ${DIRECTORY_BASE}"
-                does NOT exist anymore -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort() ,
-                  'dsInstanceDn'   : master.getRootDn() ,
-                  'dsInstancePswd' : master.getRootPwd() ,
-                  'dsBaseDN'       : 'uid=gfarmer, ou=People,%s' \
-                                      % synchroSuffix,
-                  'dsFilter'       : 'objectclass=*',
-                  'expectedRC'     : 32
-                }                  
-              </call>                
-                
-              <!-- check that new entry "uid=gfarmer, ou=Special People,
-                ou=Special Users, ${DIRECTORY_BASE}" exists -->
-              <call function="'ldapSearchWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost ,
-                  'dsInstancePort' : master.getPort() ,
-                  'dsInstanceDn'   : master.getRootDn() ,
-                  'dsInstancePswd' : master.getRootPwd() ,
-                  'dsBaseDN'       : 'uid=gfarmer, ou=Special People, \
-                                     ou=Special Users,%s' % synchroSuffix,
-                  'dsFilter'       : 'objectclass=*'
-                }
-              </call>
-            
-
-              <!-- 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 Encryption' }
-          </call>
-
-          <call function="'testSuite_Postamble'"/>
+            <!--- Test Suite information
+            #@TestSuiteName       Replication Encryption Tests
+            #@TestSuitePurpose    Verify that the encrypted operations are replicated
+                                  correctly between two servers.
+            #@TestSuiteID         Encryption Tests
+            #@TestSuiteGroup      Encryption
+            #@TestGroup           Replication
+            #@TestScript          replication_encryption.xml
+            #@TestHTMLLink        http://www.forgerock.org/
+              -->
                   
-        </sequence>
+            <call function="'testSuite_Preamble'"/>
 
+            <try>
+              <sequence> 
+
+                <import machine="STAF_LOCAL_HOSTNAME"
+                  file="'%s/testcases/replication/replication_setup.xml'
+                        % (TESTS_DIR)"/>
+                <call function="'replication_setup'">
+                  { 'topologyFile'     : '%s/3server_topology.txt' \
+                                          % REPLICATION_CONFIG_DIR,
+                    'secureReplication': True,
+                    'dataFile'         : 'Example.ldif',
+                    'label'            : 'Replication Encryption'
+                  }
+                </call>
+
+                <!-- List of Import of Test Functions -->
+                <script>
+                  importList=[]
+                  importList.append('encryption/encryption_tests')
+                </script>
+
+                <!-- 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: Encryption:'
+                  consumer = consumerList[0]
+                </script>
+                                                    
+                <!-- List of Test Cases -->
+                <script>
+                  testsList=[]
+                  testsList.append('replication_encryption_001')
+                  testsList.append('replication_encryption_002')
+                  testsList.append('replication_encryption_003')
+                  testsList.append('replication_encryption_004')
+                  testsList.append('replication_encryption_005')
+                  testsList.append('replication_encryption_006')
+                  testsList.append('replication_encryption_007')
+                  testsList.append('replication_encryption_008')
+                  testsList.append('replication_encryption_009')
+                  testsList.append('replication_encryption_010')
+                </script>
+
+                <!-- Execute the Tests -->
+                <iterate var="__test" in="testsList">
+                  <sequence>
+                    <call function="'%s' % (__test)" />
+                  </sequence>
+                </iterate>                
+                                
+              </sequence>
+
+              <catch exception="'STAFException.TestSuite.SetupException'">
+                <sequence>
+                  <message log="1" level="'fatal'">
+                    'Setup of test suite failed.'
+                  </message>
+                  <rethrow/>
+                </sequence>
+              </catch>
+  
+              <finally>
+                <message>'Test Cases Completed.'</message>
+              </finally>
+
+            </try>
+
+          </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>
+ 
+        </try>
       </block>
-    
     </sequence>
-
   </function>
-
 </stax>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/encryption/encryption_tests.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/encryption/encryption_tests.xml
new file mode 100644
index 0000000..f822bd7
--- /dev/null
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/encryption/encryption_tests.xml
@@ -0,0 +1,1088 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../../../shared/stax.dtd">
+<!--
+ ! CDDL HEADER START
+ !
+ ! The contents of this file are subject to the terms of the
+ ! 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.
+ ! 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,
+ ! 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 2007-2010 Sun Microsystems, Inc.
+ !      Portions Copyright 2011-2012 ForgeRock AS.
+ ! -->
+<stax>
+      
+  <!--- Test Case information
+  #@TestMarker          Replication Encryption Tests
+  #@TestName            Replication: Encryption: Add entry
+  #@TestID                  Add entry
+  #@TestPurpose        Check entry add over secured replication
+  #@TestPreamble
+  #@TestSteps
+  #@TestPostamble
+  #@TestResult
+  -->
+  <function name="replication_encryption_001" scope="local">
+    <testcase name="getTestCaseName('Add entry')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check entry add over secured replication.' % msg1 }
+            </call>
+
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                <script>
+                  serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+                  userDn = 'uid=iabizen-%s, ou=People, %s' % (i,synchroSuffix)
+                </script>
+                  
+                <!-- Add entry to one of the other servers -->
+                <script>
+                  listAttr = []
+                  listAttr.append('objectclass:top')
+                  listAttr.append('objectclass:organizationalperson')
+                  listAttr.append('objectclass:inetorgperson')
+                  listAttr.append('objectclass:person')
+                  listAttr.append('givenname:Izen-%s' % i)
+                  listAttr.append('sn:Abizen-%s' % i)
+                  listAttr.append('cn:Izen-%s Abizen-%s' % (i, i))
+                  listAttr.append('l:ICNC')
+                </script>
+        
+                <call function="'addAnEntry'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : serverPath,
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'DNToAdd'        : userDn,
+                    'listAttributes' : listAttr
+                  }
+                </call>
+            
+              </sequence>
+            </iterate>
+              
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+          
+
+  <!--- Test Case information
+  #@TestMarker          Replication Encryption Tests
+  #@TestName            Replication: Encryption: Add entry after restart
+  #@TestID              Add entry after restart
+  #@TestPurpose         Check entry add over secured replication after
+                        server restart
+  #@TestPreamble
+  #@TestSteps           Restart servers
+  #@TestSteps           Add entry
+  #@TestPostamble
+  #@TestResult          Success if trees synchronised over the topology
+  -->
+  <function name="replication_encryption_002" scope="local">
+    <testcase name="getTestCaseName('Add entry after restart')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check entry add over secured replication after server restart.' % msg1 }
+            </call>
+
+            <!-- Stop the servers in the topology -->
+            <call function="'stopServers'">
+              [_splitServerList]
+            </call>
+            
+            <!-- Start the servers in the topology -->  
+            <call function="'startServers'">
+              [_splitServerList]
+            </call>
+            
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                <script>
+                  serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+                  userDn = 'uid=RESTART-iabizen-%s, ou=People, %s' % \
+                           (i,synchroSuffix)
+                </script>
+                  
+                <!-- Add entry to one of the other servers -->
+                <script>
+                  listAttr = []
+                  listAttr.append('objectclass:top')
+                  listAttr.append('objectclass:organizationalperson')
+                  listAttr.append('objectclass:inetorgperson')
+                  listAttr.append('objectclass:person')
+                  listAttr.append('givenname:Izen-%s' % i)
+                  listAttr.append('sn:Abizen-%s' % i)
+                  listAttr.append('cn:Izen-%s Abizen-%s' % (i, i))
+                  listAttr.append('l:ICNC')
+                </script>
+        
+                <call function="'addAnEntry'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : serverPath,
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort(),
+                    'dsInstanceDn'   : server.getRootDn(),
+                    'dsInstancePswd' : server.getRootPwd(),
+                    'DNToAdd'        : userDn,
+                    'listAttributes' : listAttr
+                  }
+                </call>
+            
+              </sequence>
+            </iterate>
+              
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+          
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Encryption Tests
+  #@TestName            Replication: Encryption: Modify entry
+  #@TestID                  Modify entry
+  #@TestPurpose        Check entry modify over secured replication
+  #@TestPreamble
+  #@TestSteps
+  #@TestPostamble
+  #@TestResult
+  -->
+  <function name="replication_encryption_003" scope="local">
+    <testcase name="getTestCaseName('Modify entry')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check entry modify secured replication.' % msg1 }
+            </call>
+              
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                <script>
+                  serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+                  userDn = 'uid=iabizen-%s, ou=People, %s' % (i,synchroSuffix)
+                </script>
+                                  
+                <!-- Modify entry on one of the servers -->
+                <call function="'modifyAnAttribute'">
+                  { 'location'          : server.getHostname(),
+                    'dsPath'            : serverPath,
+                    'dsInstanceHost'    : server.getHostname(),
+                    'dsInstancePort'    : server.getPort(),
+                    'dsInstanceDn'      : server.getRootDn(),
+                    'dsInstancePswd'    : server.getRootPwd(),
+                    'DNToModify'        : userDn,
+                    'attributeName'     : 'l',
+                    'newAttributeValue' : 'GEC',
+                    'changetype'        : 'replace'
+                  }
+                </call>                       
+              </sequence>
+            </iterate>
+                        
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix, ]
+            </call>
+
+           </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+                      
+                                       
+
+  <!--- Test Case information
+  #@TestMarker          Replication Encryption Tests
+  #@TestName            Replication: Encryption: Delete entry
+  #@TestID              Delete entry
+  #@TestPurpose         Check entry delete over secured replication
+  #@TestPreamble
+  #@TestSteps
+  #@TestPostamble
+  #@TestResult
+  -->
+  <function name="replication_encryption_004" scope="local">
+    <testcase name="getTestCaseName('Delete entry')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check delete entry secured replication.' % msg1 }
+            </call>
+
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                <script>
+                  serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+                  userDn = 'uid=iabizen-%s, ou=People, %s' % (i,synchroSuffix)
+                </script>
+                  
+                <!-- Delete entry on one of the servers -->    
+                <call function="'DeleteEntry'">
+                  { 'location'       : server.getHostname(),
+                    'dsPath'         : serverPath,
+                    'dsInstanceHost' : server.getHostname(),
+                    'dsInstancePort' : server.getPort() ,
+                    'dsInstanceDn'   : server.getRootDn() ,
+                    'dsInstancePswd' : server.getRootPwd() ,
+                    'dsBaseDN'       : userDn
+                  }
+                </call>
+              </sequence>
+            </iterate>
+              
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+
+         
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Encryption Tests
+  #@TestName            Replication: Encryption: Modify Entry - add 
+                        binary attribute
+  #@TestID              Modify Entry - add binary attribute
+  #@TestPurpose         Check that an entry modify is well propagated 
+                        by secured replication.
+  #@TestPreamble
+  #@TestSteps
+  #@TestPostamble
+  #@TestResult
+  -->
+  <function name="replication_encryption_005" scope="local">
+    <testcase name="getTestCaseName('Modify Entry - add binary attribute')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that an entry modify is well propagated by secured replication.' % msg1 }
+            </call>
+               
+            <script>
+              filename = 'replication_mod_add_binary.ldif'
+              filePath = '%s/%s' % (local.temp,filename)
+              binaryFilePath = '%s/replication/photo1.uu' % source.data
+              dn = 'uid=hmiller, ou=People,%s' % synchroSuffix
+              modif = 'add'
+              attrType = 'jpegPhoto'
+              write_replication_mod_binary_ldif_file(filePath, dn, modif, 
+                                                     attrType, binaryFilePath)
+            </script>
+
+            <!-- Copy the replication_mod ldif to client host -->
+            <message>
+              'Copy %s file from %s to %s' % (filename,local.temp,
+                                              client.getTmpDir())
+            </message>
+            <call function="'copyFile'">
+              { 'srcfile'    : filePath,
+                'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
+                'remotehost' : client.getHostname() }
+            </call>                    
+
+            <!-- Modify "master" server -->                                
+            <call function="'ldapModifyWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort() ,
+                'dsInstanceDn'   : master.getRootDn() ,
+                'dsInstancePswd' : master.getRootPwd() ,
+                'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
+              }
+            </call>                            
+      
+
+            <!-- Check modify worked on "master" server -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'        : clientHost,
+                'dsPath'          : clientPath,
+                'dsInstanceHost'  : masterHost ,
+                'dsInstancePort'  : master.getPort() ,
+                'dsInstanceDn'    : master.getRootDn() ,
+                'dsInstancePswd'  : master.getRootPwd() ,
+                'dsBaseDN'        : 'uid=hmiller, ou=People,%s' \
+                                     % synchroSuffix,
+                'dsFilter'        : 'jpegPhoto=*',
+                'expectedRC'      :  0
+              } 
+            </call>                
+            <script>
+              searchRC = STAXResult[0][0]
+              searchResult = STAXResult[0][1]
+              resultLength = len(searchResult) > 0
+            </script>
+            <call function="'checktestRC'">
+                { 'returncode' : resultLength ,
+                  'result'     : searchResult ,
+                  'expected'   : 1
+              }
+            </call>    
+          
+
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+                                                                           
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+                                                            
+
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Encryption Tests
+  #@TestName            Replication: Encryption: Modify Entry - 
+                        replace binary attribute
+  #@TestID                  Modify Entry - replace binary attribute
+  #@TestPurpose         Check that an entry modify is well propagated 
+                        by secured replication.
+  #@TestPreamble
+  #@TestSteps
+  #@TestPostamble
+  #@TestResult
+  -->
+  <function name="replication_encryption_006" scope="local">
+    <testcase name="getTestCaseName('Modify Entry - replace binary attribute')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that an entry modify is well propagated by secured replication.' % msg1 }
+            </call>                   
+                                               
+            <script>
+              filename = 'replication_mod_replace_binary.ldif'
+              filePath = '%s/%s' % (local.temp,filename)
+              binaryFilePath = '%s/replication/photo2.uu' % source.data
+              dn = 'uid=hmiller, ou=People,%s' % synchroSuffix
+              modif = 'replace'
+              attrType = 'jpegPhoto'
+              write_replication_mod_binary_ldif_file(filePath, dn, modif,
+                                                     attrType, 
+                                                     binaryFilePath)
+            </script>
+
+            <!-- Copy the replication_mod ldif to client host -->
+            <message>
+              'Copy %s file from %s to %s' % (filename,local.temp,
+                                              client.getTmpDir())
+            </message>
+            <call function="'copyFile'">
+              { 'srcfile'    : filePath,
+                'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
+                'remotehost' : client.getHostname()
+              }
+            </call>                    
+
+            <!-- Modify "master" server -->                                
+            <call function="'ldapModifyWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort() ,
+                'dsInstanceDn'   : master.getRootDn() ,
+                'dsInstancePswd' : master.getRootPwd() ,
+                'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
+              }
+            </call>                            
+      
+
+            <!-- Check modify worked on "master" server -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort() ,
+                'dsInstanceDn'   : master.getRootDn() ,
+                'dsInstancePswd' : master.getRootPwd() ,
+                'dsBaseDN'       : 'uid=hmiller, ou=People,%s' \
+                                    % synchroSuffix,
+                'dsFilter'       : 'jpegPhoto=*',
+                'expectedRC'     :  0
+              }                  
+            </call>                
+            <script>
+              searchRC = STAXResult[0][0]
+              searchResult = STAXResult[0][1]
+              resultLength = len(searchResult) > 0
+            </script>
+            <call function="'checktestRC'">
+              { 'returncode' : resultLength ,
+                'result'     : searchResult ,
+                'expected'   : 1
+              }
+            </call>    
+          
+
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+                                                                           
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Encryption Tests
+  #@TestName            Replication: Encryption: Modify Entry - 
+                        delete binary attribute
+  #@TestID                  Modify Entry - delete binary attribute
+  #@TestPurpose         Check that an entry modify is well propagated 
+                        by secured replication.
+  #@TestPreamble
+  #@TestSteps
+  #@TestPostamble
+  #@TestResult
+  -->
+  <function name="replication_encryption_007" scope="local">
+    <testcase name="getTestCaseName('Modify Entry - delete binary attribute')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that an entry modify is well propagated by secured secured replication.' % msg1 }
+            </call>
+                    
+            <script>
+              filename = 'replication_mod_delete_binary.ldif'
+              filePath = '%s/%s' % (local.temp,filename)
+              dn = 'uid=hmiller, ou=People,%s' % synchroSuffix
+              modif = 'delete'
+              attrType = 'jpegPhoto'
+              attrValue = None
+              write_replication_mod_ldif_file(filePath, dn, modif, attrType, 
+                                              attrValue)
+            </script>
+
+            <!-- Copy the replication_mod ldif to client host -->
+            <message>
+              'Copy %s file from %s to %s' % (filename,local.temp,
+                                              client.getTmpDir())
+            </message>
+            <call function="'copyFile'">
+              { 'srcfile'    : filePath,
+                'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
+                'remotehost' : client.getHostname() }
+            </call>                    
+
+            <!-- Modify "master" server -->                                
+            <call function="'ldapModifyWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort() ,
+                'dsInstanceDn'   : master.getRootDn() ,
+                'dsInstancePswd' : master.getRootPwd() ,
+                'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
+              }
+            </call>        
+              
+            <!-- Check modify worked on "master" server -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort() ,
+                'dsInstanceDn'   : master.getRootDn() ,
+                'dsInstancePswd' : master.getRootPwd() ,
+                'dsBaseDN'       : 'uid=hmiller, ou=People,%s' \
+                                    % synchroSuffix,
+                'dsFilter'       : 'jpegPhoto=*',
+                'expectedRC'     :  0
+              }
+            </call>                
+            <script>
+              searchRC = STAXResult[0][0]
+              searchResult = STAXResult[0][1]
+              resultLength = len(searchResult) > 0
+            </script>
+            <call function="'checktestRC'">
+              { 'returncode' : resultLength ,
+                'result'     : searchResult ,
+                'expected'   : 0
+              }
+            </call>    
+          
+
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix, ]
+            </call>
+                                                                           
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+                                                                                                                        
+                                                                                                                
+  <!--- Test Case information
+  #@TestMarker          Replication Encryption Tests
+  #@TestName            Replication: Encryption: Rename Entry
+  #@TestID                  Rename Entry
+  #@TestPurpose         Check that a rename (modrdn) operation is well
+                        propagated by secured replication.
+  #@TestPreamble
+  #@TestSteps
+  #@TestPostamble
+  #@TestResult
+  -->
+  <function name="replication_encryption_008" scope="local">
+    <testcase name="getTestCaseName('Rename Entry')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%sCheck that a rename entry (modrdn) operation is well propagated by secured replication.' % msg1 }
+            </call>
+               
+            <script>
+              filename = 'replication_modrdn.ldif'
+              filePath = '%s/%s' % (local.temp,filename)
+              dn = 'uid=kvaughan, ou=People,%s' % synchroSuffix
+              newrdn = 'uid=kvaughan2'
+              newsuperior = None
+              deleteoldrdn = 1
+              write_replication_moddn_ldif_file(filePath, dn, newrdn, 
+                                                newsuperior, deleteoldrdn)
+            </script>
+
+            <!-- Copy the replication_mod ldif to client host -->
+            <message>
+              'Copy %s file from %s to %s' % (filename,local.temp,
+                                              client.getTmpDir())
+            </message>
+            <call function="'copyFile'">
+              { 'srcfile'    : filePath,
+                'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
+                'remotehost' : client.getHostname()
+              }
+            </call>                    
+
+            <!-- Modify "master" server -->                                
+            <call function="'ldapModifyWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort() ,
+                'dsInstanceDn'   : master.getRootDn() ,
+                'dsInstancePswd' : master.getRootPwd() ,
+                'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
+              }
+            </call>                            
+      
+
+            <!-- Check modify worked on "master" server -->                
+            <!-- check that "uid=kvaughan, ou=People, ${DIRECTORY_BASE}"
+              does NOT exist anymore -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort() ,
+                'dsInstanceDn'   : master.getRootDn() ,
+                'dsInstancePswd' : master.getRootPwd() ,
+                'dsBaseDN'       : 'uid=kvaughan, ou=People,%s' \
+                                    % synchroSuffix,
+                'dsFilter'       : 'objectclass=*',
+                'expectedRC'     : 32
+              }                  
+            </call>                
+              
+            <!-- check that new entry "uid=kvaughan2, ou=People,
+              ${DIRECTORY_BASE}" exists -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort() ,
+                'dsInstanceDn'   : master.getRootDn() ,
+                'dsInstancePswd' : master.getRootPwd() ,
+                'dsBaseDN'       : 'uid=kvaughan2, ou=People,%s' \
+                                    % synchroSuffix,
+                'dsFilter'       : 'objectclass=*'
+              }
+            </call>
+          
+
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+                                                                           
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+                
+
+
+                
+
+  <!--- Test Case information
+  #@TestMarker          Replication Encryption Tests
+  #@TestName            Replication: Encryption: Rename Entry 
+                        (preserving old rdn)
+  #@TestID                  Rename Entry (preserving old rdn)
+  #@TestPurpose         Check that a rename (modrdn) operation is well
+                        propagated by secured replication.
+  #@TestPreamble
+  #@TestSteps
+  #@TestPostamble
+  #@TestResult
+  -->
+  <function name="replication_encryption_009" scope="local">
+    <testcase name="getTestCaseName('Rename Entry (preserving old rdn)')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a rename (modrdn) operation is well propagated by secured replication.' % msg1 }
+            </call>
+               
+            <script>
+              filename = 'replication_modrdn_preserve.ldif'
+              filePath = '%s/%s' % (local.temp,filename)
+              dn = 'uid=jwallace, ou=People,%s' % synchroSuffix
+              newrdn = 'uid=igueye'
+              newsuperior = None
+              deleteoldrdn = 0
+              write_replication_moddn_ldif_file(filePath, dn, newrdn, 
+                                                newsuperior, deleteoldrdn)
+            </script>
+
+            <!-- Copy the replication_mod ldif to client host -->
+            <message>
+              'Copy %s file from %s to %s' % (filename,local.temp,
+                                              client.getTmpDir())
+            </message>
+            <call function="'copyFile'">
+              { 'srcfile'    : filePath,
+                'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
+                'remotehost' : client.getHostname()
+              }
+            </call>                    
+
+            <!-- Modify "master" server -->                                
+            <call function="'ldapModifyWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort() ,
+                'dsInstanceDn'   : master.getRootDn() ,
+                'dsInstancePswd' : master.getRootPwd() ,
+                'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
+              }
+            </call>                            
+      
+
+            <!-- Check modify worked on "master" server -->                
+            <!-- check that "uid=jwallace, ou=People, ${DIRECTORY_BASE}"
+              does NOT exist anymore -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort() ,
+                'dsInstanceDn'   : master.getRootDn() ,
+                'dsInstancePswd' : master.getRootPwd() ,
+                'dsBaseDN'       : 'uid=jwallace, ou=People,%s' \
+                                    % synchroSuffix,
+                'dsFilter'       : 'objectclass=*',
+                'expectedRC'     : 32
+              }
+            </call>                
+              
+            <!-- check that new entry "uid=igueye, ou=People,
+              ${DIRECTORY_BASE}" exists -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort() ,
+                'dsInstanceDn'   : master.getRootDn() ,
+                'dsInstancePswd' : master.getRootPwd() ,
+                'dsBaseDN'       : 'uid=igueye, ou=People,%s' % synchroSuffix,
+                'dsFilter'       : 'uid=jwallace'
+              }
+            </call>
+            <script>
+              searchRC = STAXResult[0][0]
+              searchResult = STAXResult[0][1]
+              resultLength = len(searchResult) > 0
+            </script>
+            <call function="'checktestRC'">
+              { 'returncode' : resultLength ,
+                'result'     : searchResult ,
+                'expected'   : 1
+              }
+            </call>       
+                          
+
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+                                                                           
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+
+
+                                                                                                
+  <!--- Test Case information
+  #@TestMarker          Replication Encryption Tests
+  #@TestName            Replication: Encryption: Rename Subtree
+  #@TestID                  Rename Subtree
+  #@TestPurpose         Check that a subtree rename (moddn) operation
+                        is well propagated by secured replication.
+  #@TestPreamble
+  #@TestSteps
+  #@TestPostamble
+  #@TestResult
+  -->
+  <function name="replication_encryption_010" scope="local">
+    <testcase name="getTestCaseName('Rename Subtree')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check that a subtree rename (moddn) operation is well propagated by secured replication.' % msg1 }
+            </call>
+        
+            <script>
+              filename = 'replication_moddn.ldif'
+              filePath = '%s/%s' % (local.temp,filename)
+              dn = 'ou=People,%s' % synchroSuffix
+              newrdn = 'ou=Special People'
+              newsuperior = 'ou=Special Users,%s' % synchroSuffix
+              deleteoldrdn = 0
+              write_replication_moddn_ldif_file(filePath, dn, newrdn, 
+                                                newsuperior, deleteoldrdn)
+            </script>
+
+            <!-- Copy the replication_mod ldif to client host -->
+            <message>
+              'Copy %s file from %s to %s' % (filename,local.temp,
+                                              client.getTmpDir())
+            </message>
+            <call function="'copyFile'">
+              { 'srcfile'    : filePath,
+                'destfile'   : '%s/%s' % (client.getTmpDir(),filename),
+                'remotehost' : client.getHostname() }
+            </call>                    
+
+            <!-- Modify "master" server -->                                
+            <call function="'ldapModifyWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort() ,
+                'dsInstanceDn'   : master.getRootDn() ,
+                'dsInstancePswd' : master.getRootPwd() ,
+                'dsFilename'     : '%s/%s' % (client.getTmpDir(), filename)
+              }
+            </call>                            
+      
+
+            <!-- Check modify worked on "master" server -->                
+            <!-- check that "uid=gfarmer, ou=People, ${DIRECTORY_BASE}"
+              does NOT exist anymore -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort() ,
+                'dsInstanceDn'   : master.getRootDn() ,
+                'dsInstancePswd' : master.getRootPwd() ,
+                'dsBaseDN'       : 'uid=gfarmer, ou=People,%s' \
+                                    % synchroSuffix,
+                'dsFilter'       : 'objectclass=*',
+                'expectedRC'     : 32
+              }                  
+            </call>                
+              
+            <!-- check that new entry "uid=gfarmer, ou=Special People,
+              ou=Special Users, ${DIRECTORY_BASE}" exists -->
+            <call function="'ldapSearchWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost ,
+                'dsInstancePort' : master.getPort() ,
+                'dsInstanceDn'   : master.getRootDn() ,
+                'dsInstancePswd' : master.getRootPwd() ,
+                'dsBaseDN'       : 'uid=gfarmer, ou=Special People, \
+                                   ou=Special Users,%s' % synchroSuffix,
+                'dsFilter'       : 'objectclass=*'
+              }
+            </call>
+          
+
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+
+                                                                             
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+</stax>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/failover/failover.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/failover/failover.xml
index 3b9a4c3..1554258 100644
--- a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/failover/failover.xml
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/failover/failover.xml
@@ -7,540 +7,143 @@
  ! 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 2007-2010 Sun Microsystems, Inc.
- !      Portions Copyright 2011-2012 ForgeRock AS.
+ !      Copyright 2012 ForgeRock AS.
  ! -->
 <stax>
-
   <defaultcall function="replication_failover"/>
-
-  <function name="replication_failover">
-
+  <function name="replication_failover" scope="local">
     <sequence>
-
-      <block name="'failover'">
-
-        <sequence>
-            
-          <script>
-            if not CurrentTestPath.has_key('group'):
-              CurrentTestPath['group']='replication'                 
-            CurrentTestPath['suite']=STAXCurrentBlock
-          </script>            
-
-          <call function="'testSuite_Preamble'"/>
-
-          <!--- Test Suite information
-          #@TestSuiteName       Replication Failover Tests
-          #@TestSuitePurpose    Verify that the failover of a replication server does not affect replication.
-          #@TestSuiteID         Failover Tests
-          #@TestSuiteGroup      Failover
-          #@TestGroup           Replication
-          #@TestScript          replication_failover.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'">
-            {  'topologyFile' : '%s/3server_topology.txt' % REPLICATION_CONFIG_DIR ,
-               'label'        : 'Replication Failover' }
-          </call>
-                                    
-          <script>
-            synchroSuffix = master.getSynchronizedSuffixList()[0].getSuffixDn()      
-          </script>            
-
-            
-          <!-- Load entries into "master" server -->                                
-          <!-- Stop "master" Directory Server -->
-          <call function="'StopDsWithScript'">
-            { 'location'    : masterHost,
-              'dsPath'      : masterPath,
-              'dsHost'      : masterHost,
-              'dsAdminPort' : master.getAdminPort(),
-              'dsBindDN'    : master.getRootDn(),
-              'dsBindPwd'   : master.getRootPwd(),
-              'noOfLoops'   : 30
-            }
-          </call>
+      <block name="'replication_failover'">
+        <try>
+          <sequence>
+            <script>
+              CurrentTestPath['group'] = 'replication'        
+              CurrentTestPath['suite'] = 'failover'
               
-          <!-- Import data into "master" Directory Server -->
-          <call function="'ImportLdifWithScript'">
-            { 'location'     : masterHost,
-              'dsPath'       : masterPath,
-              'backEnd'      : DIRECTORY_INSTANCE_BE,
-              'ldifFile'     : '%s/replication/Example.ldif' % masterDataDir
-            }
-          </call>
+              _group=CurrentTestPath['group']
+              _groupdir='%s/testcases/%s' % (TESTS_DIR,_group)
+              _label = 'Replication Failover'
+            </script>
 
-          <!-- Start the Directory Server -->
-          <call function="'StartDsWithScript'">
-            { 'location'  : masterHost,
-              'dsPath'    : masterPath
-            }
-          </call>
-              
-          <!-- Wait for DS to start -->
-          <call function="'isAlive'">
-            { 'location'         : masterHost,
-              'dsPath'           : masterPath,
-              'dsInstanceHost'   : masterHost,
-              'dsInstancePort'   : master.getPort() ,
-              'dsInstanceDn'     : master.getRootDn() ,
-              'dsInstancePswd'   : master.getRootPwd() ,
-              'noOfLoops'        : 10 ,
-              'noOfMilliSeconds' : 2000
-            }
-          </call>                                                                                
-            
-          <!-- Initialise the servers in the topology -->
-<!--
-          <call function="'initializeReplication'">
-            { 'location'  :  clientHost,
-              'dsPath'  :  clientPath,
-              'sourceInstanceHost'      :  masterHost,
-              'sourceInstanceAdminPort' :  master.getAdminPort(),
-              'replicationDnList'       :  ['o=example']
-            }
-          </call>            
--->    
-          <iterate var="server" in="consumerList">                                    
-            <!-- Perform the total update -->
-            <call function="'initializeReplication'">
-              { 'location'                :  clientHost,
-                'dsPath'                  :  clientPath,
-                'dsInstanceHost'          :  server.getHostname(),
-                'dsInstanceAdminPort'     :  server.getAdminPort(),
-                'sourceInstanceHost'      :  masterHost,
-                'sourceInstanceAdminPort' :  master.getAdminPort(),
-                'replicationDnList'       :  ['o=example']
-              }
-            </call>
-          </iterate>            
-            
-                        
-          <!--- Test Case information
-          #@TestMarker          Replication Failover Tests
-          #@TestName            Replication: Failover: One server down (stopped)
-          #@TestID                  One server down (stopped)
-          #@TestPurpose        Check replication when one server is off-line
-          #@TestPreamble
-          #@TestSteps
-          #@TestPostamble
-          #@TestResult
-          -->               
-          <testcase name="getTestCaseName('One server down (stopped)')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                 'Replication: Failover: One server down (stopped). Check replication when one server is off-line '
-              </message>
-                             
-              <iterate var="server" in="_topologyServerList" indexvar="i">
-                <sequence>
-                    
-                  <script>
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                    nbOfServers = len(_topologyServerList)
-                    nextServer = _topologyServerList[(i + 1) % nbOfServers]
-                    nextServerPath = '%s/%s' % (nextServer.getDir(), OPENDSNAME)
-                    userDn = 'uid=iabizen-%s, ou=People, %s' % (i, synchroSuffix)
-                    
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
-
-                    replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
-                  </script>
-                    
-                  <!-- Stop server (simulate failover?) -->
-                  <call function="'StopDsWithScript'">
-                    { 'location'    :  server.getHostname(),
-                      'dsPath'      :  serverPath,
-                      'dsHost'      :  server.getHostname(),
-                      'dsAdminPort' :  server.getAdminPort(),
-                      'dsBindDN'    :  server.getRootDn(),
-                      'dsBindPwd'   :  server.getRootPwd(),
-                      'noOfLoops'   : 30
-                    }
-                  </call>
-                  <if expr="globalSplitServers">
-                    <call function="'StopDsWithScript'">
-                      { 'location'    :  replServer.getHostname(),
-                        'dsPath'      :  replServerPath,
-                        'dsHost'      :  replServer.getHostname(),
-                        'dsAdminPort' :  replServer.getAdminPort(),
-                        'dsBindDN'    :  replServer.getRootDn(),
-                        'dsBindPwd'   :  replServer.getRootPwd(),
-                        'noOfLoops'   : 30
-                      }
-                    </call>
-                  </if>
-                    
-                  <!-- Add entry to one of the other servers -->
-                  <script>
-                    listAttr = []
-                    listAttr.append('objectclass:top')
-                    listAttr.append('objectclass:organizationalperson')
-                    listAttr.append('objectclass:inetorgperson')
-                    listAttr.append('objectclass:person')
-                    listAttr.append('givenname:Izen-%s' % i)
-                    listAttr.append('sn:Abizen-%s' % i)
-                    listAttr.append('cn:Izen-%s Abizen-%s' % (i, i))
-                  </script>
-          
-                  <call function="'addAnEntry'">
-                    { 'location'       :  nextServer.getHostname(),
-                      'dsPath'         :  nextServerPath,
-                      'dsInstanceHost' :  nextServer.getHostname(),
-                      'dsInstancePort' :  nextServer.getPort(),
-                      'dsInstanceDn'   :  nextServer.getRootDn(),
-                      'dsInstancePswd' :  nextServer.getRootPwd(),
-                      'DNToAdd'        :  userDn,
-                      'listAttributes' : listAttr,
-                      'expectedRC'     :  0
-                    }
-                  </call>
-                                                                                
-                  <!-- Start the server again -->
-                  <call function="'StartDsWithScript'">
-                    { 'location'  :  server.getHostname(),
-                      'dsPath'    :  serverPath
-                    }
-                  </call>
-                  <if expr="globalSplitServers">
-                    <call function="'StartDsWithScript'">
-                      { 'location'    :  replServer.getHostname(),
-                        'dsPath'      :  replServerPath
-                      }
-                    </call>
-                  </if>
-                </sequence>                  
-              </iterate>
-                                        
-                
-              <!-- 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 Failover Tests
-          #@TestName            Replication: Failover: All but one servers down (stopped)
-          #@TestID                  All but one servers down (stopped)
-          #@TestPurpose        Check replication when all but one servers are off-line
-          #@TestPreamble
-          #@TestSteps
-          #@TestPostamble
-          #@TestResult
-          -->               
-          <testcase name="getTestCaseName('All but one servers down (stopped)')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                 'Replication: Failover: All but one servers down (stopped). Check replication when all but one servers are off-line'
-              </message>
-
-              <!-- Stop the "consumer" servers -->
-              <call function="'stopServers'">
-                [consumerList, 30]
-              </call>
-              <if expr="globalSplitServers">
-                <call function="'stopServers'">
-                  [_topologyReplServerList[1:], 30]
-                </call>
-              </if>
- 
-                    
-              <!-- Add entry to master servers -->
-              <script>
-                userDn = 'uid=iabizen-berri, ou=People, %s' % synchroSuffix
+            <!--- Test Suite information
+            #@TestSuiteName       Replication Failover Tests
+            #@TestSuitePurpose    Verify that the total-update operations are replicated
+                                  correctly between two servers.
+            #@TestSuiteID         Failover Tests
+            #@TestSuiteGroup      Failover
+            #@TestGroup           Replication
+            #@TestScript          replication_failover.xml
+            #@TestHTMLLink        http://www.forgerock.org/
+              -->
                   
-                listAttr = []
-                listAttr.append('objectclass:top')
-                listAttr.append('objectclass:organizationalperson')
-                listAttr.append('objectclass:inetorgperson')
-                listAttr.append('objectclass:person')
-                listAttr.append('givenname:Izen-berri')
-                listAttr.append('sn:Abizen-berri')
-                listAttr.append('cn:Izen-berri Abizen-berri')
-              </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>
+            <call function="'testSuite_Preamble'"/>
 
-              <!-- Start the "consumer" servers -->
-              <call function="'startServers'">
-                [consumerList]
-              </call>
-              <if expr="globalSplitServers">
-                <call function="'startServers'">
-                  [_topologyReplServerList[1:]]
+            <try>
+              <sequence> 
+
+                <import machine="STAF_LOCAL_HOSTNAME"
+                  file="'%s/testcases/replication/replication_setup.xml' % (TESTS_DIR)"/>
+                <call function="'replication_setup'">
+                  {  'topologyFile' : '%s/3server_topology.txt' % REPLICATION_CONFIG_DIR ,
+                     'label'        : _label }
                 </call>
-              </if>
-                                  
-                
-              <!-- Verify the synchronization of the trees among the servers in the topology -->          
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, master, consumerList, synchroSuffix ]
-              </call> 
+
+                <!-- List of Import of Test Functions -->
+                <script>
+                  importList=[]
+                  importList.append('failover/failover_tests')
+                </script>
+
+                <!-- 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: Failover:'
+                </script>
+                                                    
+                <!-- List of Test Cases -->
+                <script>
+                  testsList=[]
+                  testsList.append('replication_failover_001')
+                  testsList.append('replication_failover_002')
+                  testsList.append('replication_failover_003')
+                  testsList.append('replication_failover_004')
+                  testsList.append('replication_failover_005')
+                </script>
+
+                <!-- Execute the Tests -->
+                <iterate var="__test" in="testsList">
+                  <sequence>
+                    <call function="'%s' % (__test)" />
+                  </sequence>
+                </iterate>                
                                 
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>                     
-                                                
+              </sequence>
 
-
-
-
-          <!--- Test Case information
-          #@TestMarker          Replication Failover Tests
-          #@TestName            Replication: Failover: One server down (killed)
-          #@TestID                  One server down (killed)
-          #@TestPurpose        Check replication when one server fails
-          #@TestPreamble
-          #@TestSteps
-          #@TestPostamble
-          #@TestResult
-          -->               
-          <testcase name="getTestCaseName('One server down (killed)')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                 'Replication: Failover: One server down (killed). Check replication when one server fails'
-              </message>
-                             
-              <iterate var="server" in="_topologyServerList" indexvar="i">
+              <catch exception="'STAFException.TestSuite.SetupException'">
                 <sequence>
-                    
-                  <script>
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                    nbOfServers = len(_topologyServerList)
-                    nextServer = _topologyServerList[(i + 1) % nbOfServers]
-                    nextServerPath = '%s/%s' % (nextServer.getDir(), OPENDSNAME)
-                    userDn = 'uid=ideiturak-%s, ou=People, %s' % (i, synchroSuffix)
-                    
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
-
-                    replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
-                  </script>
-                    
-                  <!-- Kill server (simulate failover?) -->
-                  <call function="'killDs'">
-                    { 'location'  :  server.getHostname(),
-                      'dsPath'    :  serverPath
-                    }
-                  </call>
-                  <if expr="globalSplitServers">
-                    <call function="'killDs'">
-                      { 'location'  :  replServer.getHostname(),
-                        'dsPath'    :  replServerPath
-                      }
-                    </call>
-                  </if>
-                    
-                  <!-- Add entry to one of the other servers -->
-                  <script>
-                    listAttr = []
-                    listAttr.append('objectclass:top')
-                    listAttr.append('objectclass:organizationalperson')
-                    listAttr.append('objectclass:inetorgperson')
-                    listAttr.append('objectclass:person')
-                    listAttr.append('givenname:Izen-%s' % i)
-                    listAttr.append('sn:Deiturak-%s' % i)
-                    listAttr.append('cn:Izen-%s Deiturak-%s' % (i, i))
-                  </script>
-          
-                  <call function="'addAnEntry'">
-                    { 'location'       :  nextServer.getHostname(),
-                      'dsPath'         :  nextServerPath,
-                      'dsInstanceHost' :  nextServer.getHostname(),
-                      'dsInstancePort' :  nextServer.getPort(),
-                      'dsInstanceDn'   :  nextServer.getRootDn(),
-                      'dsInstancePswd' :  nextServer.getRootPwd(),
-                      'DNToAdd'        :  userDn,
-                      'listAttributes' : listAttr,
-                      'expectedRC'     :  0
-                    }
-                  </call>
-                                                                                
-                  <!-- Start the server again -->
-                  <call function="'StartDsWithScript'">
-                    { 'location'  :  server.getHostname(),
-                      'dsPath'    :  serverPath
-                    }
-                  </call>
-                  <if expr="globalSplitServers">
-                    <call function="'StartDsWithScript'">
-                      { 'location'    :  replServer.getHostname(),
-                        'dsPath'      :  replServerPath
-                      }
-                    </call>
-                  </if>
-                  
-                </sequence>                  
-              </iterate>
-                                        
-                
-              <!-- 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 Failover Tests
-          #@TestName            Replication: Failover: All but one servers down (killed)
-          #@TestID                  One server down (killed)
-          #@TestPurpose        Check replication when all but one servers fail
-          #@TestPreamble
-          #@TestSteps
-          #@TestPostamble
-          #@TestResult
-          -->               
-          <testcase name="getTestCaseName('All but one servers down (killed)')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                 'Replication: Failover: All but one servers down (killed). Check replication when all but one servers fail'
-              </message>
-                 
-              <paralleliterate var="server" in="consumerList" indexvar="i">
-                <sequence>
-                  <script>
-                    serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
-                    
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i+1]
-                    else:
-                      replServer = server
-
-                    replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
-                  </script>
-                    
-                  <!-- Kill server (simulate failover?) -->
-                  <call function="'killDs'">
-                    { 'location'  :  server.getHostname(),
-                      'dsPath'    :  serverPath
-                    }
-                  </call>
-                  <if expr="globalSplitServers">
-                    <call function="'killDs'">
-                      { 'location'  :  replServer.getHostname(),
-                        'dsPath'    :  replServerPath
-                      }
-                    </call>
-                  </if>
+                  <message log="1" level="'fatal'">
+                    'Setup of test suite failed.'
+                  </message>
+                  <rethrow/>
                 </sequence>
-              </paralleliterate>
- 
-                    
-              <!-- Add entry to master servers -->
-              <script>
-                userDn = 'uid=ideitura-berriak, 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-berri')
-                listAttr.append('sn:Deitura-berriak')
-                listAttr.append('cn:Izen-berri Deitura-berriak')
-              </script>
+              </catch>
+  
+              <finally>
+                <message>'Test Cases Completed.'</message>
+              </finally>
+
+            </try>
+
+          </sequence>
           
-              <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>
-
-              <!-- Start the "consumer" servers -->
-              <call function="'startServers'">
-                [consumerList]
-              </call>
-              <if expr="globalSplitServers">
-                <call function="'startServers'">
-                  [_topologyReplServerList[1:]]
-                </call>
-              </if>
-                                        
-                
-              <!-- 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'"/>
+          <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>
-          </testcase>                                                                     
-
-                                                
-                                                
-          <import machine="STAF_LOCAL_HOSTNAME"
-            file="'%s/testcases/replication/replication_cleanup.xml' % (TESTS_DIR)"/>
-          <call function="'replication_cleanup'" >
-            { 'label' : 'Replication Failover' }
-          </call>
-                          
-          <call function="'testSuite_Postamble'"/>
-                  
-        </sequence>
-
+          </finally>
+ 
+        </try>
       </block>
-    
     </sequence>
-
   </function>
-
 </stax>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/failover/failover_tests.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/failover/failover_tests.xml
new file mode 100644
index 0000000..df303a8
--- /dev/null
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/failover/failover_tests.xml
@@ -0,0 +1,611 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../../../shared/stax.dtd">
+<!--
+ ! CDDL HEADER START
+ !
+ ! The contents of this file are subject to the terms of the
+ ! 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.
+ ! 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,
+ ! 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 2007-2010 Sun Microsystems, Inc.
+ !      Portions Copyright 2011-2012 ForgeRock AS.
+ ! -->
+<stax>
+
+  <!--- Test Case information
+  #@TestMarker          Replication Failover Tests
+  #@TestName            Replication: Failover: Preamble
+  #@TestID              Preamble
+  #@TestPurpose         Initialize the replication topology
+  #@TestPreamble
+  #@TestSteps
+  #@TestPostamble
+  #@TestResult
+  -->
+  <function name="replication_failover_001" scope="local">
+    <testcase name="getTestCaseName('Failover Preamble')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Initialize the replication topology.' % msg1 }
+            </call>            
+                                                                                                            
+            <script>
+              synchroSuffix = master.getSynchronizedSuffixList()[0].getSuffixDn()      
+            </script>            
+    
+              
+            <!-- Load entries into "master" server -->                                
+            <!-- Stop "master" Directory Server -->
+            <call function="'StopDsWithScript'">
+              { 'location'    : masterHost,
+                'dsPath'      : masterPath,
+                'dsHost'      : masterHost,
+                'dsAdminPort' : master.getAdminPort(),
+                'dsBindDN'    : master.getRootDn(),
+                'dsBindPwd'   : master.getRootPwd(),
+                'noOfLoops'   : 30
+              }
+            </call>
+                
+            <!-- Import data into "master" Directory Server -->
+            <call function="'ImportLdifWithScript'">
+              { 'location'     : masterHost,
+                'dsPath'       : masterPath,
+                'backEnd'      : DIRECTORY_INSTANCE_BE,
+                'ldifFile'     : '%s/replication/Example.ldif' % masterDataDir
+              }
+            </call>
+    
+            <!-- Start the Directory Server -->
+            <call function="'StartDsWithScript'">
+              { 'location'  : masterHost,
+                'dsPath'    : masterPath
+              }
+            </call>
+                
+            <!-- Wait for DS to start -->
+            <call function="'isAlive'">
+              { 'location'         : masterHost,
+                'dsPath'           : masterPath,
+                'dsInstanceHost'   : masterHost,
+                'dsInstancePort'   : master.getPort() ,
+                'dsInstanceDn'     : master.getRootDn() ,
+                'dsInstancePswd'   : master.getRootPwd() ,
+                'noOfLoops'        : 10 ,
+                'noOfMilliSeconds' : 2000
+              }
+            </call>                                                                                
+              
+            <iterate var="server" in="consumerList">                                    
+              <!-- Perform the total update -->
+              <call function="'initializeReplication'">
+                { 'location'                :  clientHost,
+                  'dsPath'                  :  clientPath,
+                  'dsInstanceHost'          :  server.getHostname(),
+                  'dsInstanceAdminPort'     :  server.getAdminPort(),
+                  'sourceInstanceHost'      :  masterHost,
+                  'sourceInstanceAdminPort' :  master.getAdminPort(),
+                  'replicationDnList'       :  ['o=example']
+                }
+              </call>
+            </iterate>            
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>            
+                        
+  <!--- Test Case information
+  #@TestMarker          Replication Failover Tests
+  #@TestName            Replication: Failover: One server down (stopped)
+  #@TestID                  One server down (stopped)
+  #@TestPurpose        Check replication when one server is off-line
+  #@TestPreamble
+  #@TestSteps
+  #@TestPostamble
+  #@TestResult
+  -->
+  <function name="replication_failover_002" scope="local">
+    <testcase name="getTestCaseName('One server down (stopped)')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check replication when one server is off-line.' % msg1 }
+            </call>
+                             
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                  
+                <script>
+                  serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+                  nbOfServers = len(_topologyServerList)
+                  nextServer = _topologyServerList[(i + 1) % nbOfServers]
+                  nextServerPath = '%s/%s' % (nextServer.getDir(), OPENDSNAME)
+                  userDn = 'uid=iabizen-%s, ou=People, %s' % (i, synchroSuffix)
+                  
+                  if globalSplitServers:
+                    replServer = _topologyReplServerList[i]
+                  else:
+                    replServer = server
+
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
+                </script>
+                  
+                <!-- Stop server (simulate failover?) -->
+                <call function="'StopDsWithScript'">
+                  { 'location'    :  server.getHostname(),
+                    'dsPath'      :  serverPath,
+                    'dsHost'      :  server.getHostname(),
+                    'dsAdminPort' :  server.getAdminPort(),
+                    'dsBindDN'    :  server.getRootDn(),
+                    'dsBindPwd'   :  server.getRootPwd(),
+                    'noOfLoops'   : 30
+                  }
+                </call>
+                <if expr="globalSplitServers">
+                  <call function="'StopDsWithScript'">
+                    { 'location'    :  replServer.getHostname(),
+                      'dsPath'      :  replServerPath,
+                      'dsHost'      :  replServer.getHostname(),
+                      'dsAdminPort' :  replServer.getAdminPort(),
+                      'dsBindDN'    :  replServer.getRootDn(),
+                      'dsBindPwd'   :  replServer.getRootPwd(),
+                      'noOfLoops'   : 30
+                    }
+                  </call>
+                </if>
+                  
+                <!-- Add entry to one of the other servers -->
+                <script>
+                  listAttr = []
+                  listAttr.append('objectclass:top')
+                  listAttr.append('objectclass:organizationalperson')
+                  listAttr.append('objectclass:inetorgperson')
+                  listAttr.append('objectclass:person')
+                  listAttr.append('givenname:Izen-%s' % i)
+                  listAttr.append('sn:Abizen-%s' % i)
+                  listAttr.append('cn:Izen-%s Abizen-%s' % (i, i))
+                </script>
+        
+                <call function="'addAnEntry'">
+                  { 'location'       :  nextServer.getHostname(),
+                    'dsPath'         :  nextServerPath,
+                    'dsInstanceHost' :  nextServer.getHostname(),
+                    'dsInstancePort' :  nextServer.getPort(),
+                    'dsInstanceDn'   :  nextServer.getRootDn(),
+                    'dsInstancePswd' :  nextServer.getRootPwd(),
+                    'DNToAdd'        :  userDn,
+                    'listAttributes' : listAttr,
+                    'expectedRC'     :  0
+                  }
+                </call>
+                                                                              
+                <!-- Start the server again -->
+                <call function="'StartDsWithScript'">
+                  { 'location'  :  server.getHostname(),
+                    'dsPath'    :  serverPath
+                  }
+                </call>
+                <if expr="globalSplitServers">
+                  <call function="'StartDsWithScript'">
+                    { 'location'    :  replServer.getHostname(),
+                      'dsPath'      :  replServerPath
+                    }
+                  </call>
+                </if>
+              </sequence>                  
+            </iterate>
+                                      
+              
+            <!-- Verify the synchronization of the trees among the servers in the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+                                
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>                     
+          
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Failover Tests
+  #@TestName            Replication: Failover: All but one servers down (stopped)
+  #@TestID                  All but one servers down (stopped)
+  #@TestPurpose        Check replication when all but one servers are off-line
+  #@TestPreamble
+  #@TestSteps
+  #@TestPostamble
+  #@TestResult
+  -->
+  <function name="replication_failover_003" scope="local">
+    <testcase name="getTestCaseName('All but one servers down (stopped)')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check replication when all but one servers are off-line.' % msg1 }
+            </call>
+
+            <!-- Stop the "consumer" servers -->
+            <call function="'stopServers'">
+              [consumerList, 30]
+            </call>
+            <if expr="globalSplitServers">
+              <call function="'stopServers'">
+                [_topologyReplServerList[1:], 30]
+              </call>
+            </if>
+
+                  
+            <!-- Add entry to master servers -->
+            <script>
+              userDn = 'uid=iabizen-berri, 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-berri')
+              listAttr.append('sn:Abizen-berri')
+              listAttr.append('cn:Izen-berri Abizen-berri')
+            </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>
+
+            <!-- Start the "consumer" servers -->
+            <call function="'startServers'">
+              [consumerList]
+            </call>
+            <if expr="globalSplitServers">
+              <call function="'startServers'">
+                [_topologyReplServerList[1:]]
+              </call>
+            </if>
+                                
+              
+            <!-- Verify the synchronization of the trees among the servers in the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+                                
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+                                                
+
+
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Failover Tests
+  #@TestName            Replication: Failover: One server down (killed)
+  #@TestID              One server down (killed)
+  #@TestPurpose         Check replication when one server fails
+  #@TestPreamble
+  #@TestSteps
+  #@TestPostamble
+  #@TestResult
+  -->
+  <function name="replication_failover_004" scope="local">
+    <testcase name="getTestCaseName('One server down (killed)')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check replication when one server fails.' % msg1 }
+            </call>
+                                      
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+                  
+                <script>
+                  serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+                  nbOfServers = len(_topologyServerList)
+                  nextServer = _topologyServerList[(i + 1) % nbOfServers]
+                  nextServerPath = '%s/%s' % (nextServer.getDir(), OPENDSNAME)
+                  userDn = 'uid=ideiturak-%s, ou=People, %s' % (i, synchroSuffix)
+                  
+                  if globalSplitServers:
+                    replServer = _topologyReplServerList[i]
+                  else:
+                    replServer = server
+
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
+                </script>
+                  
+                <!-- Kill server (simulate failover?) -->
+                <call function="'killDs'">
+                  { 'location'  :  server.getHostname(),
+                    'dsPath'    :  serverPath
+                  }
+                </call>
+                <if expr="globalSplitServers">
+                  <call function="'killDs'">
+                    { 'location'  :  replServer.getHostname(),
+                      'dsPath'    :  replServerPath
+                    }
+                  </call>
+                </if>
+                  
+                <!-- Add entry to one of the other servers -->
+                <script>
+                  listAttr = []
+                  listAttr.append('objectclass:top')
+                  listAttr.append('objectclass:organizationalperson')
+                  listAttr.append('objectclass:inetorgperson')
+                  listAttr.append('objectclass:person')
+                  listAttr.append('givenname:Izen-%s' % i)
+                  listAttr.append('sn:Deiturak-%s' % i)
+                  listAttr.append('cn:Izen-%s Deiturak-%s' % (i, i))
+                </script>
+        
+                <call function="'addAnEntry'">
+                  { 'location'       :  nextServer.getHostname(),
+                    'dsPath'         :  nextServerPath,
+                    'dsInstanceHost' :  nextServer.getHostname(),
+                    'dsInstancePort' :  nextServer.getPort(),
+                    'dsInstanceDn'   :  nextServer.getRootDn(),
+                    'dsInstancePswd' :  nextServer.getRootPwd(),
+                    'DNToAdd'        :  userDn,
+                    'listAttributes' : listAttr,
+                    'expectedRC'     :  0
+                  }
+                </call>
+                                                                              
+                <!-- Start the server again -->
+                <call function="'StartDsWithScript'">
+                  { 'location'  :  server.getHostname(),
+                    'dsPath'    :  serverPath
+                  }
+                </call>
+                <if expr="globalSplitServers">
+                  <call function="'StartDsWithScript'">
+                    { 'location'    :  replServer.getHostname(),
+                      'dsPath'      :  replServerPath
+                    }
+                  </call>
+                </if>
+                
+              </sequence>                  
+            </iterate>
+                                      
+              
+            <!-- Verify the synchronization of the trees among the servers in the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+                                
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+          
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Failover Tests
+  #@TestName            Replication: Failover: All but one servers down (killed)
+  #@TestID                  One server down (killed)
+  #@TestPurpose        Check replication when all but one servers fail
+  #@TestPreamble
+  #@TestSteps
+  #@TestPostamble
+  #@TestResult
+  -->
+  <function name="replication_failover_005" scope="local">
+    <testcase name="getTestCaseName('All but one servers down (killed)')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check replication when all but one servers fails.' % msg1 }
+            </call>
+                 
+            <paralleliterate var="server" in="consumerList" indexvar="i">
+              <sequence>
+                <script>
+                  serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+                  
+                  if globalSplitServers:
+                    replServer = _topologyReplServerList[i+1]
+                  else:
+                    replServer = server
+
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
+                </script>
+                  
+                <!-- Kill server (simulate failover?) -->
+                <call function="'killDs'">
+                  { 'location'  :  server.getHostname(),
+                    'dsPath'    :  serverPath
+                  }
+                </call>
+                <if expr="globalSplitServers">
+                  <call function="'killDs'">
+                    { 'location'  :  replServer.getHostname(),
+                      'dsPath'    :  replServerPath
+                    }
+                  </call>
+                </if>
+              </sequence>
+            </paralleliterate>
+
+                  
+            <!-- Add entry to master servers -->
+            <script>
+              userDn = 'uid=ideitura-berriak, 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-berri')
+              listAttr.append('sn:Deitura-berriak')
+              listAttr.append('cn:Izen-berri Deitura-berriak')
+            </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>
+
+            <!-- Start the "consumer" servers -->
+            <call function="'startServers'">
+              [consumerList]
+            </call>
+            <if expr="globalSplitServers">
+              <call function="'startServers'">
+                [_topologyReplServerList[1:]]
+              </call>
+            </if>
+                                      
+              
+            <!-- Verify the synchronization of the trees among the servers in the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+                                
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+</stax>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/ldifimport/ldifimport.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/ldifimport/ldifimport.xml
index 51bb7c8..b1442d2 100644
--- a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/ldifimport/ldifimport.xml
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/ldifimport/ldifimport.xml
@@ -7,433 +7,140 @@
  ! 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 2007-2010 Sun Microsystems, Inc.
- !      Portions Copyright 2011-2012 ForgeRock AS.
+ !      Copyright 2012 ForgeRock AS.
  ! -->
 <stax>
-
   <defaultcall function="replication_ldifimport"/>
-
-  <function name="replication_ldifimport">
-
+  <function name="replication_ldifimport" scope="local">
     <sequence>
-
-      <block name="'ldifimport'">
-
-        <sequence>
-            
-          <script>
-            if not CurrentTestPath.has_key('group'):
-              CurrentTestPath['group']='replication'                 
-            CurrentTestPath['suite']=STAXCurrentBlock
-          </script>
-
-          <call function="'testSuite_Preamble'"/>
-
-          <!--- Test Suite information
-          #@TestSuiteName       Replication Ldif Import Tests
-          #@TestSuitePurpose    Verify that the servers in a replicated topology
-                                can be initialised by the means of an ldif 
-                                import.
-          #@TestSuiteID         Ldif Import Tests
-          #@TestSuiteGroup      Ldif Import
-          #@TestGroup           Replication
-          #@TestScript          replication_ldifimport.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'" >
-            { 'label'    : 'Replication LDIFimport' }
-          </call>
-     
-            
-          <!--- Test Case information
-          #@TestMarker          Replication Ldif Import Tests
-          #@TestName            Replication: Ldif Import: Off-line
-                                initialisation
-          #@TestID              Off-line initialisation
-          #@TestPurpose         Initialise replicated servers using off-line
-                                export/import
-          #@TestPreamble
-          #@TestSteps           Call dsreplication pre-external-initialization
-          #@TestSteps           Stop servers
-          #@TestSteps           Import data on server A
-          #@TestSteps           Export suffix on server A
-          #@TestSteps           Import exported file on other servers
-          #@TestSteps           Start servers
-          #@TestSteps           Call dsreplication post-external-initialization
-          #@TestSteps           Add entry on server A
-          #@TestPostamble
-          #@TestResult          Success if trees synchronized
-          -->               
-          <testcase name="getTestCaseName('Off-line initialisation')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Ldif Import: Off-line initialisation. \
-                Initialise replicated servers using off-line export/import'
-              </message>
-                
-              <!-- Pre-initialise the servers in the topology -->
-              <message>
-                '+++++ ldif import off-line: prepare servers for external \
-                initialization'
-              </message>
-              <call function="'preInitializeReplication'">
-                { 'location'            : clientHost,
-                  'dsPath'              : clientPath,
-                  'dsInstanceHost'      : masterHost,
-                  'dsInstanceAdminPort' : master.getAdminPort(),
-                  'localOnly'           : False,
-                  'replicationDnList'   : [synchroSuffix],
-                  'adminUID'            : adminUID,
-                  'adminPswd'           : adminPswd
-                }
-              </call>                           
-                              
-              <!-- Stop the servers in the topology -->
-              <call function="'stopServers'">
-                [_topologyServerList]
-              </call>
+      <block name="'replication_ldifimport'">
+        <try>
+          <sequence>
+            <script>
+              CurrentTestPath['group'] = 'replication'        
+              CurrentTestPath['suite'] = 'ldifimport'
               
-                                
-              <!-- Import data into "master" server -->
-              <message>
-                '+++++ ldif import off-line: import data on %s:%s' \
-                % (masterHost, master.getPort())
-              </message>
-              <call function="'ImportLdifWithScript'">
-                { 'location'   : masterHost,
-                  'dsPath'     : masterPath,
-                  'backEnd'    : DIRECTORY_INSTANCE_BE,
-                  'ldifFile'   : '%s/replication/Example.ldif' % masterDataDir
-                }
-              </call>
+              _group=CurrentTestPath['group']
+              _groupdir='%s/testcases/%s' % (TESTS_DIR,_group)
+              _label = 'Replication LDIFImport'
+            </script>
 
-              <!-- Export data from  "master" server -->
-              <message>
-                '+++++ ldif import off-line: export suffix on server %s:%s' \
-                % (masterHost, master.getPort())
-              </message>
-              <call function="'exportLdifWithScript'">
-                { 'location'  : masterHost,
-                  'dsPath'    : masterPath,
-                  'ldifFile'  : '%s/replication/master_export_offline.ldif' \
-                                % masterBackupDir
-                }
-              </call>
-                
-              <!-- Copy export file  to "consumer" servers and import it -->
-              <paralleliterate var="consumer" in="consumerList">
-                <sequence>
-                  <script>
-                      consumerDataDir = '%s' % consumer.getDataDir()
-                      consumerBackupDir = '%s' % consumer.getTmpDir()
-                  </script>
-                  <call function="'copyFile'">
-                    { 'location'   : masterHost,
-                      'remotehost' : consumer.getHostname(),
-                      'srcfile'    : '%s/replication/master_export_offline.ldif' \
-                                     % masterBackupDir,
-                      'destfile'   : '%s/replication/master_export_offline.ldif' \
-                                     % consumerBackupDir
-                    }
-                  </call>
-
-                  <message>
-                    '+++++ ldif import off-line: import exported file on %s:%s'\
-                    % (consumer.getHostname(), consumer.getPort())
-                  </message>
-                  <call function="'ImportLdifWithScript'">
-                    { 'location'   : consumer.getHostname(),
-                      'dsPath'     : '%s/%s' % (consumer.getDir(), OPENDSNAME),
-                      'backEnd'    : DIRECTORY_INSTANCE_BE,
-                      'ldifFile'   : '%s/replication/master_export_offline.ldif' \
-                                     % consumerBackupDir
-                    }
-                  </call>                                 
-                </sequence>
-              </paralleliterate>
-
-              <!-- Start the servers in the topology -->
-              <call function="'startServers'">
-                [_topologyServerList]
-              </call>
-
-              <!-- Check some data was imported into "master" server -->    
-              <call function="'checkImport'">
-                { 'location'        : clientHost,
-                  'dsPath'          : clientPath,                
-                  'dsHost'          : masterHost,
-                  'dsPort'          : master.getPort(),
-                  'dsAdminPort'     : master.getAdminPort(),
-                  'dsDn'            : master.getRootDn(),
-                  'dsPswd'          : master.getRootPwd(),
-                  'expectedEntries' : ['uid=scarter,ou=People,o=example',
-                                       'uid=dmiller, ou=People, o=example',
-                                       'uid=rhunt, ou=People, o=example'],
-                  'startDS'         : 'no'
-                }
-              </call>
-                                
-              <!-- Post-initialise the servers in the topology -->
-              <message>
-                '+++++ ldif import off-line: end external server initialization'
-              </message>
-              <call function="'postInitializeReplication'">
-                { 'location'            : clientHost,
-                  'dsPath'              : clientPath,
-                  'dsInstanceHost'      : masterHost,
-                  'dsInstanceAdminPort' : master.getAdminPort(),
-                  'replicationDnList'   : [synchroSuffix],
-                  'adminUID'            : adminUID,
-                  'adminPswd'           : adminPswd
-                }
-              </call>
-                
-              <!-- Add entry to "master" server -->
-              <message>
-                '+++++ ldif import off-line: add entry to %s:%s' \
-                % (masterHost, master.getPort())
-              </message>
-              <call function="'addEntry'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(), 
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'entryToBeAdded' : '%s/replication/tfitter.ldif' \
-                                     % clientDataDir
-                }
-              </call>
-                
-              <!-- 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 Ldif Import Tests
-          #@TestName            Replication: Ldif Import: On-line initialisation
-          #@TestID              On-line initialisation
-          #@TestPurpose         Initialise replicated servers using on-line
-                                export/import
-          #@TestPreamble
-          #@TestSteps           Call dsreplication pre-external-initialization
-          #@TestSteps           Import data on server A
-          #@TestSteps           Export suffix on server A
-          #@TestSteps           Import exported file on other servers
-          #@TestSteps           Call dsreplication post-external-initialization
-          #@TestSteps           Add entry on server A
-          #@TestPostamble
-          #@TestResult          Success if trees synchronized
-          -->               
-          <testcase name="getTestCaseName('On-line initialisation')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <message>
-                'Replication: Ldif Import: On-line initialisation. Initialise \
-                replicated servers using on-line export/import'
-              </message>
-
-              <!-- Pre-initialise the servers in the topology -->
-              <message>
-                '+++++ ldif import on-line: prepare servers for external \
-                initialization'
-              </message>
-              <call function="'preInitializeReplication'">
-                { 'location'            : clientHost,
-                  'dsPath'              : clientPath,
-                  'dsInstanceHost'      : masterHost,
-                  'dsInstanceAdminPort' : master.getAdminPort(),
-                  'localOnly'           : False,
-                  'replicationDnList'   : [synchroSuffix],
-                  'adminUID'            : adminUID,
-                  'adminPswd'           : adminPswd
-                 }
-              </call>         
-                                                                 
-              <!-- Import data into "master" server -->
-              <message>
-                '+++++ ldif import on-line: import data on %s:%s' \
-                % (masterHost, master.getPort())
-              </message>
-              <call function="'ImportLdifWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstanceAdminPort' : master.getAdminPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'ldifFile'       : '%s/replication/Example.ldif' \
-                                     % masterDataDir
-                }
-              </call>
-
-              <!-- Check some data was imported into "master" server -->
-              <call function="'checkImport'">
-                { 'location'        : clientHost,
-                  'dsPath'          : clientPath,
-                  'dsHost'          : masterHost,
-                  'dsPort'          : master.getPort(),
-                  'dsAdminPort'     : master.getAdminPort(),
-                  'dsDn'            : master.getRootDn(),
-                  'dsPswd'          : master.getRootPwd(),
-                  'expectedEntries' : ['uid=scarter,ou=People,o=example',
-                                       'uid=dmiller, ou=People, o=example',
-                                       'uid=rhunt, ou=People, o=example'], 
-                  'startDS'         : 'no'
-                }
-              </call>
-
-              <script>
-                sourceFile = '%s/replication/master_export_online.ldif' \
-                             % masterBackupDir
-              </script>
-                
-              <!-- Export data from  "master" server -->
-              <message>
-                '+++++ ldif import on-line: export suffix on server %s:%s' \
-                % (masterHost, master.getPort())
-              </message>                     
-              <call function="'exportLdifWithScript'">
-                { 'location'       : masterHost,
-                  'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstanceAdminPort' : master.getAdminPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'ldifFile'       : sourceFile
-                }
-              </call>                
-
-              <!-- Copy export file  to "consumer" servers and import it -->
-              <paralleliterate var="consumer" in="consumerList">
-                <sequence>
-                  <script>
-                    consumerDataDir = '%s' % consumer.getDataDir()
-                    consumerBackupDir = '%s' % consumer.getTmpDir()
-                  </script>
-                  <script>
-                    filename = 'master_export_online.ldif'
-                    destinationFile = '%s/replication/%s'\
-                                      % (consumerBackupDir,filename)
-                  </script>
-
-                  <call function="'copyFile'">
-                    { 'location'   : masterHost,
-                      'remotehost' : consumer.getHostname(),
-                      'srcfile'    : sourceFile,
-                      'destfile'   : destinationFile
-                    }
-                  </call>         
-
-                  <message>
-                    '+++++ ldif import on-line: import exported file on %s:%s'\
-                    % (consumer.getHostname(), consumer.getPort())
-                  </message>                    
-                  <call function="'ImportLdifWithScript'">
-                    { 'location'       : clientHost,
-                      'dsPath'         : clientPath,
-                      'dsInstanceHost' : consumer.getHostname(),
-                      'dsInstanceAdminPort' : consumer.getAdminPort(),
-                      'dsInstanceDn'   : consumer.getRootDn(),
-                      'dsInstancePswd' : consumer.getRootPwd(),
-                      'ldifFile'       : destinationFile
-                    }
-                  </call>
-                </sequence>
-              </paralleliterate>
-                
-              <!-- Post-initialise the servers in the topology -->
-              <message>
-                '+++++ ldif import on-line: end external server initialization'
-              </message>
-              <call function="'postInitializeReplication'">
-                { 'location'            : clientHost,
-                  'dsPath'              : clientPath,
-                  'dsInstanceHost'      : masterHost,
-                  'dsInstanceAdminPort' : master.getAdminPort(),
-                  'replicationDnList'   : [synchroSuffix],
-                  'adminUID'            : adminUID,
-                  'adminPswd'           : adminPswd
-                }
-              </call>                                    
-
-              <!-- Add entry to "master" server -->
-              <message>
-                '+++++ ldif import on-line: add entry to %s:%s' \
-                % (masterHost, master.getPort())
-              </message>
-              <call function="'addEntry'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(), 
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'entryToBeAdded' : '%s/replication/tfitter.ldif' \
-                                     % clientDataDir
-                }
-              </call>
-                
-              <!-- 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 LDIFimport' }
-          </call>
-                          
-          <call function="'testSuite_Postamble'"/>
+            <!--- Test Suite information
+            #@TestSuiteName       Replication LDIFImport Tests
+            #@TestSuitePurpose    Verify that the total-update operations are replicated
+                                  correctly between two servers.
+            #@TestSuiteID         LDIFImport Tests
+            #@TestSuiteGroup      LDIFImport
+            #@TestGroup           Replication
+            #@TestScript          replication_ldifimport.xml
+            #@TestHTMLLink        http://www.forgerock.org/
+              -->
                   
-        </sequence>
+            <call function="'testSuite_Preamble'"/>
 
+            <try>
+              <sequence> 
+                                                                        
+                <import machine="STAF_LOCAL_HOSTNAME"
+                  file="'%s/testcases/replication/replication_setup.xml' 
+                    % (TESTS_DIR)"/>
+                <call function="'replication_setup'" >
+                  { 'label'    : _label }
+                </call>
+
+                <!-- List of Import of Test Functions -->
+                <script>
+                  importList=[]
+                  importList.append('ldifimport/ldifimport_tests')
+                </script>
+
+                <!-- 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: LDIFImport:'
+                </script>
+                                                    
+                <!-- List of Test Cases -->
+                <script>
+                  testsList=[]
+                  testsList.append('replication_ldifimport_001')
+                  testsList.append('replication_ldifimport_002')
+                </script>
+
+                <!-- Execute the Tests -->
+                <iterate var="__test" in="testsList">
+                  <sequence>
+                    <call function="'%s' % (__test)" />
+                  </sequence>
+                </iterate>                
+                                
+              </sequence>
+
+              <catch exception="'STAFException.TestSuite.SetupException'">
+                <sequence>
+                  <message log="1" level="'fatal'">
+                    'Setup of test suite failed.'
+                  </message>
+                  <rethrow/>
+                </sequence>
+              </catch>
+  
+              <finally>
+                <message>'Test Cases Completed.'</message>
+              </finally>
+
+            </try>
+
+          </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>
+ 
+        </try>
       </block>
-    
     </sequence>
-
   </function>
-
 </stax>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/ldifimport/ldifimport_tests.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/ldifimport/ldifimport_tests.xml
new file mode 100644
index 0000000..85cf44e
--- /dev/null
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/ldifimport/ldifimport_tests.xml
@@ -0,0 +1,421 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../../../shared/stax.dtd">
+<!--
+ ! CDDL HEADER START
+ !
+ ! The contents of this file are subject to the terms of the
+ ! 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.
+ ! 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,
+ ! 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 2007-2010 Sun Microsystems, Inc.
+ !      Portions Copyright 2011-2012 ForgeRock AS.
+ ! -->
+<stax>
+            
+  <!--- Test Case information
+  #@TestMarker          Replication Ldif Import Tests
+  #@TestName            Replication: Ldif Import: Off-line
+                        initialisation
+  #@TestID              Off-line initialisation
+  #@TestPurpose         Initialise replicated servers using off-line
+                        export/import
+  #@TestPreamble
+  #@TestSteps           Call dsreplication pre-external-initialization
+  #@TestSteps           Stop servers
+  #@TestSteps           Import data on server A
+  #@TestSteps           Export suffix on server A
+  #@TestSteps           Import exported file on other servers
+  #@TestSteps           Start servers
+  #@TestSteps           Call dsreplication post-external-initialization
+  #@TestSteps           Add entry on server A
+  #@TestPostamble
+  #@TestResult          Success if trees synchronized
+  -->
+  <function name="replication_ldifimport_001" scope="local">
+    <testcase name="getTestCaseName('Off-line initialisation')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Initialise replicated servers using off-line export/import.' % msg1 }
+            </call> 
+                
+            <!-- Pre-initialise the servers in the topology -->
+            <message>
+              '+++++ ldif import off-line: prepare servers for external \
+              initialization'
+            </message>
+            <call function="'preInitializeReplication'">
+              { 'location'            : clientHost,
+                'dsPath'              : clientPath,
+                'dsInstanceHost'      : masterHost,
+                'dsInstanceAdminPort' : master.getAdminPort(),
+                'localOnly'           : False,
+                'replicationDnList'   : [synchroSuffix],
+                'adminUID'            : adminUID,
+                'adminPswd'           : adminPswd
+              }
+            </call>                           
+                            
+            <!-- Stop the servers in the topology -->
+            <call function="'stopServers'">
+              [_topologyServerList]
+            </call>
+            
+                              
+            <!-- Import data into "master" server -->
+            <message>
+              '+++++ ldif import off-line: import data on %s:%s' \
+              % (masterHost, master.getPort())
+            </message>
+            <call function="'ImportLdifWithScript'">
+              { 'location'   : masterHost,
+                'dsPath'     : masterPath,
+                'backEnd'    : DIRECTORY_INSTANCE_BE,
+                'ldifFile'   : '%s/replication/Example.ldif' % masterDataDir
+              }
+            </call>
+
+            <!-- Export data from  "master" server -->
+            <message>
+              '+++++ ldif import off-line: export suffix on server %s:%s' \
+              % (masterHost, master.getPort())
+            </message>
+            <call function="'exportLdifWithScript'">
+              { 'location'  : masterHost,
+                'dsPath'    : masterPath,
+                'ldifFile'  : '%s/replication/master_export_offline.ldif' \
+                              % masterBackupDir
+              }
+            </call>
+              
+            <!-- Copy export file  to "consumer" servers and import it -->
+            <paralleliterate var="consumer" in="consumerList">
+              <sequence>
+                <script>
+                    consumerDataDir = '%s' % consumer.getDataDir()
+                    consumerBackupDir = '%s' % consumer.getTmpDir()
+                </script>
+                <call function="'copyFile'">
+                  { 'location'   : masterHost,
+                    'remotehost' : consumer.getHostname(),
+                    'srcfile'    : '%s/replication/master_export_offline.ldif' \
+                                   % masterBackupDir,
+                    'destfile'   : '%s/replication/master_export_offline.ldif' \
+                                   % consumerBackupDir
+                  }
+                </call>
+
+                <message>
+                  '+++++ ldif import off-line: import exported file on %s:%s'\
+                  % (consumer.getHostname(), consumer.getPort())
+                </message>
+                <call function="'ImportLdifWithScript'">
+                  { 'location'   : consumer.getHostname(),
+                    'dsPath'     : '%s/%s' % (consumer.getDir(), OPENDSNAME),
+                    'backEnd'    : DIRECTORY_INSTANCE_BE,
+                    'ldifFile'   : '%s/replication/master_export_offline.ldif' \
+                                   % consumerBackupDir
+                  }
+                </call>                                 
+              </sequence>
+            </paralleliterate>
+
+            <!-- Start the servers in the topology -->
+            <call function="'startServers'">
+              [_topologyServerList]
+            </call>
+
+            <!-- Check some data was imported into "master" server -->    
+            <call function="'checkImport'">
+              { 'location'        : clientHost,
+                'dsPath'          : clientPath,                
+                'dsHost'          : masterHost,
+                'dsPort'          : master.getPort(),
+                'dsAdminPort'     : master.getAdminPort(),
+                'dsDn'            : master.getRootDn(),
+                'dsPswd'          : master.getRootPwd(),
+                'expectedEntries' : ['uid=scarter,ou=People,o=example',
+                                     'uid=dmiller, ou=People, o=example',
+                                     'uid=rhunt, ou=People, o=example'],
+                'startDS'         : 'no'
+              }
+            </call>
+                              
+            <!-- Post-initialise the servers in the topology -->
+            <message>
+              '+++++ ldif import off-line: end external server initialization'
+            </message>
+            <call function="'postInitializeReplication'">
+              { 'location'            : clientHost,
+                'dsPath'              : clientPath,
+                'dsInstanceHost'      : masterHost,
+                'dsInstanceAdminPort' : master.getAdminPort(),
+                'replicationDnList'   : [synchroSuffix],
+                'adminUID'            : adminUID,
+                'adminPswd'           : adminPswd
+              }
+            </call>
+              
+            <!-- Add entry to "master" server -->
+            <message>
+              '+++++ ldif import off-line: add entry to %s:%s' \
+              % (masterHost, master.getPort())
+            </message>
+            <call function="'addEntry'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(), 
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'entryToBeAdded' : '%s/replication/tfitter.ldif' \
+                                   % clientDataDir
+              }
+            </call>
+              
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Ldif Import Tests
+  #@TestName            Replication: Ldif Import: On-line initialisation
+  #@TestID              On-line initialisation
+  #@TestPurpose         Initialise replicated servers using on-line
+                        export/import
+  #@TestPreamble
+  #@TestSteps           Call dsreplication pre-external-initialization
+  #@TestSteps           Import data on server A
+  #@TestSteps           Export suffix on server A
+  #@TestSteps           Import exported file on other servers
+  #@TestSteps           Call dsreplication post-external-initialization
+  #@TestSteps           Add entry on server A
+  #@TestPostamble
+  #@TestResult          Success if trees synchronized
+  -->
+  <function name="replication_ldifimport_002" scope="local">
+    <testcase name="getTestCaseName('On-line initialisation')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Initialise replicated servers using on-line export/import.' % msg1 }
+            </call> 
+
+            <!-- Pre-initialise the servers in the topology -->
+            <message>
+              '+++++ ldif import on-line: prepare servers for external \
+              initialization'
+            </message>
+            <call function="'preInitializeReplication'">
+              { 'location'            : clientHost,
+                'dsPath'              : clientPath,
+                'dsInstanceHost'      : masterHost,
+                'dsInstanceAdminPort' : master.getAdminPort(),
+                'localOnly'           : False,
+                'replicationDnList'   : [synchroSuffix],
+                'adminUID'            : adminUID,
+                'adminPswd'           : adminPswd
+               }
+            </call>         
+                                                               
+            <!-- Import data into "master" server -->
+            <message>
+              '+++++ ldif import on-line: import data on %s:%s' \
+              % (masterHost, master.getPort())
+            </message>
+            <call function="'ImportLdifWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstanceAdminPort' : master.getAdminPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'ldifFile'       : '%s/replication/Example.ldif' \
+                                   % masterDataDir
+              }
+            </call>
+
+            <!-- Check some data was imported into "master" server -->
+            <call function="'checkImport'">
+              { 'location'        : clientHost,
+                'dsPath'          : clientPath,
+                'dsHost'          : masterHost,
+                'dsPort'          : master.getPort(),
+                'dsAdminPort'     : master.getAdminPort(),
+                'dsDn'            : master.getRootDn(),
+                'dsPswd'          : master.getRootPwd(),
+                'expectedEntries' : ['uid=scarter,ou=People,o=example',
+                                     'uid=dmiller, ou=People, o=example',
+                                     'uid=rhunt, ou=People, o=example'], 
+                'startDS'         : 'no'
+              }
+            </call>
+
+            <script>
+              sourceFile = '%s/replication/master_export_online.ldif' \
+                           % masterBackupDir
+            </script>
+              
+            <!-- Export data from  "master" server -->
+            <message>
+              '+++++ ldif import on-line: export suffix on server %s:%s' \
+              % (masterHost, master.getPort())
+            </message>                     
+            <call function="'exportLdifWithScript'">
+              { 'location'       : masterHost,
+                'dsPath'         : masterPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstanceAdminPort' : master.getAdminPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'ldifFile'       : sourceFile
+              }
+            </call>                
+
+            <!-- Copy export file  to "consumer" servers and import it -->
+            <paralleliterate var="consumer" in="consumerList">
+              <sequence>
+                <script>
+                  consumerDataDir = '%s' % consumer.getDataDir()
+                  consumerBackupDir = '%s' % consumer.getTmpDir()
+                </script>
+                <script>
+                  filename = 'master_export_online.ldif'
+                  destinationFile = '%s/replication/%s'\
+                                    % (consumerBackupDir,filename)
+                </script>
+
+                <call function="'copyFile'">
+                  { 'location'   : masterHost,
+                    'remotehost' : consumer.getHostname(),
+                    'srcfile'    : sourceFile,
+                    'destfile'   : destinationFile
+                  }
+                </call>         
+
+                <message>
+                  '+++++ ldif import on-line: import exported file on %s:%s'\
+                  % (consumer.getHostname(), consumer.getPort())
+                </message>                    
+                <call function="'ImportLdifWithScript'">
+                  { 'location'       : clientHost,
+                    'dsPath'         : clientPath,
+                    'dsInstanceHost' : consumer.getHostname(),
+                    'dsInstanceAdminPort' : consumer.getAdminPort(),
+                    'dsInstanceDn'   : consumer.getRootDn(),
+                    'dsInstancePswd' : consumer.getRootPwd(),
+                    'ldifFile'       : destinationFile
+                  }
+                </call>
+              </sequence>
+            </paralleliterate>
+              
+            <!-- Post-initialise the servers in the topology -->
+            <message>
+              '+++++ ldif import on-line: end external server initialization'
+            </message>
+            <call function="'postInitializeReplication'">
+              { 'location'            : clientHost,
+                'dsPath'              : clientPath,
+                'dsInstanceHost'      : masterHost,
+                'dsInstanceAdminPort' : master.getAdminPort(),
+                'replicationDnList'   : [synchroSuffix],
+                'adminUID'            : adminUID,
+                'adminPswd'           : adminPswd
+              }
+            </call>                                    
+
+            <!-- Add entry to "master" server -->
+            <message>
+              '+++++ ldif import on-line: add entry to %s:%s' \
+              % (masterHost, master.getPort())
+            </message>
+            <call function="'addEntry'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(), 
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'entryToBeAdded' : '%s/replication/tfitter.ldif' \
+                                   % clientDataDir
+              }
+            </call>
+              
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+</stax>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/resynchronization/resynchronization.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/resynchronization/resynchronization.xml
index 03e17ca..615562d 100644
--- a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/resynchronization/resynchronization.xml
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/resynchronization/resynchronization.xml
@@ -7,836 +7,150 @@
  ! 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 2007-2010 Sun Microsystems, Inc.
- !      Portions Copyright 2011-2012 ForgeRock AS.
+ !      Copyright 2012 ForgeRock AS.
  ! -->
 <stax>
   <defaultcall function="replication_resynchronization"/>
-  <function name="replication_resynchronization">
+  <function name="replication_resynchronization" scope="local">
     <sequence>
-      <block name="'resynchronization'">
-        <sequence>
-          <script>
-            if not CurrentTestPath.has_key('group'):
-              CurrentTestPath['group']='replication'
-            CurrentTestPath['suite']=STAXCurrentBlock
-          </script>
-          <call function="'testSuite_Preamble'"/>
-          <!--- Test Suite information
-          #@TestSuiteName       Replication Re-Synchronization Tests
-          #@TestSuitePurpose    Verify that the servers in a replicated topology
-                                can be initialised with an old backup and still
-                                re-synchronize.
-          #@TestSuiteID         Re-Synchronization Tests
-          #@TestSuiteGroup      Re-Synchronization
-          #@TestGroup           Replication
-          #@TestScript          replication_resynchronization.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'">
-            { 'topologyFile' : '%s/3server_topology.txt' \
-                               % REPLICATION_CONFIG_DIR,
-              'dataFile'     : 'Example.ldif' ,
-              'label'    : 'Replication Resync'
-            }
-          </call>
-          
-          <script>
-            server3            = _topologyServerList[2]
-            
-            # Remove 3rd server from replicated servers list until replication
-            # is enabled on the 3rd one
-            _topologyServerList.remove(server3)
-            consumerList.remove(server3)
-          </script>
+      <block name="'replication_resynchronization'">
+        <try>
+          <sequence>
+            <script>
+              CurrentTestPath['group'] = 'replication'        
+              CurrentTestPath['suite'] = 'resynchronization'
+              
+              _group=CurrentTestPath['group']
+              _groupdir='%s/testcases/%s' % (TESTS_DIR,_group)
+              _label = 'Replication Resync'
+            </script>
 
-          <!-- Remove 3rd server from replication topology (i.e. disable
-               replication) -->          
-          <call function="'disableReplication'">
-            { 'location'            : clientHost,
-              'dsPath'              : clientPath,
-              'dsInstanceHost'      : server3.getHostname(),
-              'dsInstanceAdminPort' : server3.getAdminPort(),
-              'disableAll'          : True
-            }
-          </call>
-          
-                    
-          <!--- Test Case information
-          #@TestMarker          Replication Re-Synchronization Tests
-          #@TestName            Replication: Re-Synchronization: Off-line
-                                initialisation
-          #@TestID              Off-line initialisation
-          #@TestPurpose         Initialise replicated servers using off-line
-                                backup/restore
-          #@TestPreamble        Back-up server A
-          #@TestSteps           Add entry on server A
-          #@TestSteps           Stop servers
-          #@TestSteps           Restore back-up on other servers
-          #@TestSteps           Start servers
-          #@TestPostamble
-          #@TestResult          Success if trees synchronized
-          -->
-          <testcase name="getTestCaseName('Off-line initialisation')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <script>
-                m = md5_hash()
-                m.update(STAXCurrentTestcase)
-              </script>
-              <message>
-                'Replication: Re-Synchronization: Off-line initialisation. \
-                Initialise replicated servers using off-line backup/restore'
-              </message>
+            <!--- Test Suite information
+            #@TestSuiteName       Replication LDIFImport Tests
+            #@TestSuitePurpose    Verify that the total-update operations are replicated
+                                  correctly between two servers.
+            #@TestSuiteID         LDIFImport Tests
+            #@TestSuiteGroup      LDIFImport
+            #@TestGroup           Replication
+            #@TestScript          replication_resynchronization.xml
+            #@TestHTMLLink        http://www.forgerock.org/
+              -->
+                  
+            <call function="'testSuite_Preamble'"/>
 
-              <!-- 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_%s' \
-                                  % (masterBackupDir,m.hexdigest())
-                }
-              </call>
-                             
-              <!-- Add entry to "master" server -->
-              <message>
-                '+++++ resynchronization off-line: add entry to %s:%s' \
-                % (masterHost, master.getPort())
-              </message>
-              <call function="'addEntry'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(), 
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'entryToBeAdded' : '%s/replication/tfitter.ldif' \
-                                     % clientDataDir
-                }
-              </call>
-                
-              <!-- Stop the "consumer" servers -->
-              <call function="'stopServers'">
-                [consumerList]
-              </call>                
-              
-              <!-- Copy master backup to "consumer" servers and restore it -->
-              <paralleliterate var="consumer" in="consumerList">
-                <sequence>
-                  <script>
-                    consumerBackupDir = '%s' % consumer.getTmpDir()
-                  </script>
-                  <call function="'CopyFolderByExtension'">
-                    { 'location'   : masterHost,
-                      'remotehost' : consumer.getHostname(),
-                      'srcfolder'  : '%s/replication/master_backup_%s' \
-                                     % (masterBackupDir,m.hexdigest()),
-                      'destfolder' : '%s/replication/master_backup_%s' \
-                                     % (consumerBackupDir,m.hexdigest()),
-                      'extension'  : '*'
-                    }
-                  </call>
+            <try>
 
-                  <message>
-                    '+++++ resynchronization off-line: restore backup on %s:%s'\
-                    % (consumer.getHostname(), consumer.getPort())
-                  </message>
-                  <call function="'restore'">
-                    { 'location'  :  consumer.getHostname(),
-                      'dsPath'    :  '%s/%s' % (consumer.getDir(), OPENDSNAME),
-                      'backupDir' :  '%s/replication/master_backup_%s' \
-                                     % (consumerBackupDir,m.hexdigest())
-                    }
-                  </call>
-                </sequence>
-              </paralleliterate>
-              
-              <!-- Start the "consumer" servers -->
-              <call function="'startServers'">
-                [consumerList]
-              </call>
-              
-              <!-- 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 Re-Synchronization Tests
-          #@TestName            Replication: Re-Synchronization: On-line 
-                                initialisation
-          #@TestID              On-line initialisation
-          #@TestPurpose         Initialise replicated servers using on-line
-                                backup/restore
-          #@TestPreamble
-          #@TestSteps           Call dsreplication pre-external-initialization
-          #@TestSteps           Import data on server A
-          #@TestSteps           Back-up server A
-          #@TestSteps           Call dsreplication post-external-initialization            
-          #@TestSteps           Add entry on server A
-          #@TestSteps           Restore back-up on other servers
-          #@TestPostamble
-          #@TestResult          Success if trees synchronized
-          -->
-          <testcase name="getTestCaseName('On-line initialisation')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <script>
-                m = md5_hash()
-                m.update(STAXCurrentTestcase)
-              </script>
-              <message>
-                'Replication: Re-Synchronization: On-line initialisation. \
-                Initialise replicated servers using on-line backup/restore'
-              </message>
+              <sequence> 
 
-              <!-- Pre-initialise the servers in the topology -->
-              <message>
-                '+++++ resynchronization on-line: prepare servers for external \
-                initialization'
-              </message>                
-              <call function="'preInitializeReplication'">
-                { 'location'            : clientHost,
-                  'dsPath'              : clientPath,
-                  'dsInstanceHost'      : masterHost,
-                  'dsInstanceAdminPort' : master.getAdminPort(),
-                  'localOnly'           : False,
-                  'replicationDnList'   : [synchroSuffix],
-                  'adminUID'            : adminUID,
-                  'adminPswd'           : adminPswd
-                }
-              </call>
-                
-              <!-- Import data into "master" server -->
-              <message>
-                '+++++ resynchronization on-line: import data on %s:%s' \
-                % (masterHost, master.getPort())
-              </message>
-              <call function="'ImportLdifWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstanceAdminPort' : master.getAdminPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'ldifFile'       : '%s/replication/Example.ldif' \
-                                     % masterDataDir
-                }
-              </call>
-              
-              <!-- Check some data was imported into "master" server -->
-              <call function="'checkImport'">
-                { 'location'        : clientHost,
-                  'dsPath'          : clientPath,
-                  'dsHost'          : masterHost,
-                  'dsPort'          : master.getPort(),
-                  'dsAdminPort'     : master.getAdminPort(),
-                  'dsDn'            : master.getRootDn(),
-                  'dsPswd'          : master.getRootPwd(),
-                  'expectedEntries' : ['uid=scarter,ou=People,o=example',
-                                       'uid=dmiller, ou=People, o=example',
-                                       'uid=rhunt, ou=People, o=example'],
-                  'startDS'         :  'no'
-                }
-              </call>
-                
-              <!-- Backup "master" server -->
-              <message>
-                '+++++ resynchronization on-line: back-up server %s:%s' \
-                % (masterHost, master.getPort())
-              </message>
-              <call function="'backupTask'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'taskID'         : 'backup task - tc2',
-                  'backupDir'      : '%s/replication/master_backup_%s' \
-                                     % (masterBackupDir,m.hexdigest())
-                }
-              </call>
-              
-              <!-- Post-initialise the servers in the topology -->
-              <message>
-                '+++++ resynchronization on-line: end external server \
-                initialization'
-              </message>                       
-              <call function="'postInitializeReplication'">
-                { 'location'            : clientHost,
-                  'dsPath'              : clientPath,
-                  'dsInstanceHost'      : masterHost,
-                  'dsInstanceAdminPort' : master.getAdminPort(),
-                  'replicationDnList'   : [synchroSuffix],
-                  'adminUID'            : adminUID,
-                  'adminPswd'           : adminPswd
-                }
-              </call>
-                            
-              <!-- Add entry to "master" server -->
-              <message>
-                '+++++ resynchronization on-line: add entry to %s:%s' \
-                % (masterHost, master.getPort())
-              </message>                        
-              <call function="'addEntry'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(), 
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'entryToBeAdded' : '%s/replication/tfitter.ldif' \
-                                     % clientDataDir
-                }
-              </call>
-              
-              <!-- Copy backup to "consumer" servers and restore it -->
-              <paralleliterate var="consumer" in="consumerList">
-                <sequence>
-                  <script>
-                    consumerBackupDir = '%s' % consumer.getTmpDir()
-                  </script>
-                  <call function="'CopyFolderByExtension'">
-                    { 'location'   : masterHost,
-                      'remotehost' : consumer.getHostname(),
-                      'srcfolder'  : '%s/replication/master_backup_%s' \
-                                     % (masterBackupDir,m.hexdigest()),
-                      'destfolder' : '%s/replication/master_backup_%s' \
-                                     % (consumerBackupDir,m.hexdigest()),
-                      'extension'  : '*'
-                    }
-                  </call>
+                <import machine="STAF_LOCAL_HOSTNAME"
+                        file="'%s/testcases/replication/replication_setup.xml' 
+                              % (TESTS_DIR)"/>
+                <call function="'replication_setup'">
+                  { 'topologyFile' : '%s/3server_topology.txt' \
+                                     % REPLICATION_CONFIG_DIR,
+                    'dataFile'     : 'Example.ldif' ,
+                    'label'    : _label
+                  }
+                </call>
 
-                  <message>
-                    '+++++ resynchronization on-line: restore back-up on %s:%s'\
-                    % (consumer.getHostname(), consumer.getPort())
-                  </message>
-                  <call function="'restoreTask'">
-                    { 'location'       : clientHost,
-                      'dsPath'         : clientPath,
-                      'dsInstanceHost' : consumer.getHostname(),
-                      'dsInstancePort' : consumer.getPort(),
-                      'dsInstanceDn'   : consumer.getRootDn(),
-                      'dsInstancePswd' : consumer.getRootPwd(),
-                      'taskID'         : 'restore task - tc2',
-                      'backupDir'   : '%s/replication/master_backup_%s' \
-                                      % (consumerBackupDir,m.hexdigest())
-                    }
-                  </call>
-                </sequence>
-              </paralleliterate>              
+                <!-- List of Import of Test Functions -->
+                <script>
+                  importList=[]
+                  importList.append('resynchronization/resynchronization_tests')
+                </script>
+
+                <!-- 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: Resync:'
+                  server3 = _topologyServerList[2]
+
+                  _topologyServerList.remove(server3)
+                  consumerList.remove(server3)
+                </script>
+                                                    
+                <!-- List of Test Cases -->
+                <script>
+                  testsList=[]
+                  testsList.append('replication_resync_001')
+                  testsList.append('replication_resync_002')
+                  testsList.append('replication_resync_003')
+                  testsList.append('replication_resync_004')
+                </script>
+
+                <!-- Execute the Tests -->
+                <iterate var="__test" in="testsList">
+                  <sequence>
+                    <call function="'%s' % (__test)" />
+                  </sequence>
+                </iterate>                
                                 
-              <!-- 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>
 
-          
-          <!--- Test Case information
-          #@TestMarker          Replication Re-Synchronization Tests
-          #@TestName            Replication: Re-Synchronization: Add new server
-          #@TestID              Add new server
-          #@TestPurpose         Initialise newly added replicated server 
-                                using on-line backup/restore
-          #@TestPreamble
-          #@TestSteps           Call dsreplication pre-external-initialization
-          #@TestSteps           Import data on server A
-          #@TestSteps           Back-up server A
-          #@TestSteps           Initialise other servers from server A            
-          #@TestSteps           Add entry on server A
-          #@TestSteps           Add server: enable replication
-          #@TestSteps           Restore back-up on new server
-          #@TestPostamble
-          #@TestResult          Success if trees synchronized
-          -->
-          <testcase name="getTestCaseName('Add new Server')">
-            <sequence>
-              <call function="'testCase_Preamble'"/>
-              <script>
-                m = md5_hash()
-                m.update(STAXCurrentTestcase)
-              </script>
-              <message>
-                'Replication: Re-Synchronization: Add new server. \
-                Initialise newly added server using on-line backup/restore'
-              </message>
-
-              <paralleliterate var="server" 
-                               in="_topologyServerList" 
-                               indexvar="i">
+              <catch exception="'STAFException.TestSuite.SetupException'">
                 <sequence>
-                  <script>
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
-                  </script>
-                  <!-- Search for entry add -->
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : clientHost,
-                      'dsPath'           : clientPath,
-                      'dsInstanceHost'   : replServer.getHostname(),
-                      'dsInstancePort'   : replServer.getPort(),
-                      'dsInstanceDn'     : replServer.getRootDn(),
-                      'dsInstancePswd'   : replServer.getRootPwd(),
-                      'dsBaseDN'         : 'dc=replicationChanges',
-                      'dsFilter'         : 'uid=*'
-                    }                
-                  </call>
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <message>
-                    '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
-                    (replServer.getHostname(), replServer.getPort(), searchResult)
+                  <message log="1" level="'fatal'">
+                    'Setup of test suite failed.'
                   </message>
+                  <rethrow/>
                 </sequence>
-              </paralleliterate>
-                            
-              <!-- Pre-initialise the servers in the topology -->
-              <message>
-                '+++++ resynchronization add server: prepare servers for \
-                external initialization'
-              </message>                
-              <call function="'preInitializeReplication'">
-                { 'location'            : clientHost,
-                  'dsPath'              : clientPath,
-                  'dsInstanceHost'      : masterHost,
-                  'dsInstanceAdminPort' : master.getAdminPort(),
-                  'localOnly'           : False,
-                  'replicationDnList'   : [synchroSuffix],
-                  'adminUID'            : adminUID,
-                  'adminPswd'           : adminPswd
-                }
-              </call>
-              
-              <paralleliterate var="server" 
-                               in="_topologyServerList" 
-                               indexvar="i">
-                <sequence>
-                  <script>
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
-                  </script>
-                  <!-- Search for entry add -->
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : clientHost,
-                      'dsPath'           : clientPath,
-                      'dsInstanceHost'   : replServer.getHostname(),
-                      'dsInstancePort'   : replServer.getPort(),
-                      'dsInstanceDn'     : replServer.getRootDn(),
-                      'dsInstancePswd'   : replServer.getRootPwd(),
-                      'dsBaseDN'         : 'dc=replicationChanges',
-                      'dsFilter'         : 'uid=*'
-                    }                
-                  </call>
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <message>
-                    '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
-                    (replServer.getHostname(), replServer.getPort(), searchResult)
-                  </message>
-                </sequence>
-              </paralleliterate>
-              
-              <!-- Import data into "master" server -->
-              <message>
-                '+++++ resynchronization add server: import data on %s:%s' \
-                % (masterHost, master.getPort())
-              </message>
-              <call function="'ImportLdifWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstanceAdminPort' : master.getAdminPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'ldifFile'       : '%s/replication/Example.ldif' \
-                                     % masterDataDir
-                }
-              </call>
-              
-              <!-- Check some data was imported into "master" server -->
-              <call function="'checkImport'">
-                { 'location'        : clientHost,
-                  'dsPath'          : clientPath,
-                  'dsHost'          : masterHost,
-                  'dsPort'          : master.getPort(),
-                  'dsAdminPort'     : master.getAdminPort(),
-                  'dsDn'            : master.getRootDn(),
-                  'dsPswd'          : master.getRootPwd(),
-                  'expectedEntries' : ['uid=scarter,ou=People,o=example',
-                                       'uid=dmiller, ou=People, o=example',
-                                       'uid=rhunt, ou=People, o=example'],
-                  'startDS'         :  'no'
-                }
-              </call>
-                
-              <!-- Backup "master" server -->
-              <message>
-                '+++++ resynchronization add server: back-up server %s:%s' \
-                % (masterHost, master.getPort())
-              </message>
-              <call function="'backupTask'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'taskID'         : 'backup task - tc3',
-                  'backupDir'      : '%s/replication/master_backup_%s' \
-                                     % (masterBackupDir,m.hexdigest())
-                }
-              </call>
-
-              <paralleliterate var="server" 
-                               in="_topologyServerList" 
-                               indexvar="i">
-                <sequence>
-                  <script>
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
-                  </script>
-                  <!-- Search for entry add -->
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : clientHost,
-                      'dsPath'           : clientPath,
-                      'dsInstanceHost'   : replServer.getHostname(),
-                      'dsInstancePort'   : replServer.getPort(),
-                      'dsInstanceDn'     : replServer.getRootDn(),
-                      'dsInstancePswd'   : replServer.getRootPwd(),
-                      'dsBaseDN'         : 'dc=replicationChanges',
-                      'dsFilter'         : 'uid=*'
-                    }                
-                  </call>
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <message>
-                    '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
-                    (replServer.getHostname(), replServer.getPort(), searchResult)
-                  </message>
-                </sequence>
-              </paralleliterate>
-              
-              <message>
-                '+++++ resynchronization add server: Initialise topology from \
-                %s:%s' % (masterHost, master.getPort())
-              </message>
-              <!-- Initialise the servers in the topology -->
-              <call function="'initializeReplication'">
-                { 'location'                : clientHost,
-                  'dsPath'                  : clientPath,
-                  'sourceInstanceHost'      : masterHost,
-                  'sourceInstanceAdminPort' : master.getAdminPort(),
-                  'replicationDnList'       : [synchroSuffix]
-                }
-              </call>
-              
-              <paralleliterate var="server" 
-                               in="_topologyServerList" 
-                               indexvar="i">
-                <sequence>
-                  <script>
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
-                  </script>
-                  <!-- Search for entry add -->
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : clientHost,
-                      'dsPath'           : clientPath,
-                      'dsInstanceHost'   : replServer.getHostname(),
-                      'dsInstancePort'   : replServer.getPort(),
-                      'dsInstanceDn'     : replServer.getRootDn(),
-                      'dsInstancePswd'   : replServer.getRootPwd(),
-                      'dsBaseDN'         : 'dc=replicationChanges',
-                      'dsFilter'         : 'uid=*'
-                    }                
-                  </call>
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <message>
-                    '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
-                    (replServer.getHostname(), replServer.getPort(), searchResult)
-                  </message>
-                </sequence>
-              </paralleliterate>
-              
-              <!-- Add entry to "master" server -->
-              <message>
-                '+++++ resynchronization add server: add entry to %s:%s' \
-                % (masterHost, master.getPort())
-              </message>                        
-              <call function="'addEntry'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(), 
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'entryToBeAdded' : '%s/replication/tfitter.ldif' \
-                                     % clientDataDir
-                }
-              </call>
-              
-              <paralleliterate var="server" 
-                               in="_topologyServerList" 
-                               indexvar="i">
-                <sequence>
-                  <script>
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
-                  </script>
-                  <!-- Search for entry add -->
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : clientHost,
-                      'dsPath'           : clientPath,
-                      'dsInstanceHost'   : replServer.getHostname(),
-                      'dsInstancePort'   : replServer.getPort(),
-                      'dsInstanceDn'     : replServer.getRootDn(),
-                      'dsInstancePswd'   : replServer.getRootPwd(),
-                      'dsBaseDN'         : 'dc=replicationChanges',
-                      'dsFilter'         : 'uid=*'
-                    }                
-                  </call>
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <message>
-                    '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
-                    (replServer.getHostname(), replServer.getPort(), searchResult)
-                  </message>
-                </sequence>
-              </paralleliterate>
-              
-              <!-- Add new server to topology -->
-              <script>
-                if master.isOnlyLdapServer():
-                  masterReplPort = None
-                else:
-                  masterReplPort = masterReplicationServer.getPort()
-                
-                if server3.isOnlyLdapServer():
-                  server3ReplPort = None
-                else:
-                  replicationServer3 = server3.getChangelogServer()
-                  server3ReplPort = replicationServer3.getPort() 
-              </script>
-
-              <message>
-                '+++++ resynchronization add server: Enable replication for \
-                server:\nHost: %s\nLdap port: %s\nReplication port: %s\n\
-                Replicated DN list: %s' \
-                % (server3.getHostname(), server3.getPort(), 
-                   server3ReplPort, [synchroSuffix])
-              </message>
-          
-              <call function="'enableReplication'">
-                { 'location'             : clientHost,
-                  'dsPath'               : clientPath,
-                  'refInstanceHost'      : masterHost,
-                  'refInstanceAdminPort' : master.getAdminPort(),
-                  'refInstanceDn'        : master.getRootDn(),
-                  'refInstancePswd'      : master.getRootPwd(),
-                  'refReplicationPort'   : masterReplPort,
-                  'refOnlyLdapServer'    : master.isOnlyLdapServer(),
-                  'refOnlyReplServer'    : master.isOnlyReplServer(),
-                  'dsInstanceHost'       : server3.getHostname(),
-                  'dsInstanceAdminPort'  : server3.getAdminPort(),
-                  'dsInstanceDn'         : server3.getRootDn(),
-                  'dsInstancePswd'       : server3.getRootPwd(),
-                  'dsReplicationPort'    : server3ReplPort,
-                  'dsOnlyLdapServer'     : server3.isOnlyLdapServer(),
-                  'dsOnlyReplServer'     : server3.isOnlyReplServer(),
-                  'replicationDnList'    : [synchroSuffix]
-                }                      
-              </call>
+              </catch>
   
+              <finally>
+                <message>'Test Cases Completed.'</message>
+              </finally>
 
-              <script>
-                # Add 3rd server to replicated servers list now that replication
-                # has been enabled on the 3rd one
-                _topologyServerList = _topologyServerList + [server3]
-                _splitServerList = _splitServerList + [server3]
-                consumerList = consumerList + [server3]
-              </script>                            
-              
-              <paralleliterate var="server" 
-                               in="_topologyServerList" 
-                               indexvar="i">
-                <sequence>
-                  <script>
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
-                  </script>
-                  <!-- Search for entry add -->
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : clientHost,
-                      'dsPath'           : clientPath,
-                      'dsInstanceHost'   : replServer.getHostname(),
-                      'dsInstancePort'   : replServer.getPort(),
-                      'dsInstanceDn'     : replServer.getRootDn(),
-                      'dsInstancePswd'   : replServer.getRootPwd(),
-                      'dsBaseDN'         : 'dc=replicationChanges',
-                      'dsFilter'         : 'uid=*'
-                    }                
-                  </call>
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <message>
-                    '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
-                    (replServer.getHostname(), replServer.getPort(), searchResult)
-                  </message>
-                </sequence>
-              </paralleliterate>
-              
-              <!-- Copy backup to new server and restore it -->
-              <script>
-                server3BackupDir = '%s' % server3.getTmpDir()
-              </script>
-              <call function="'CopyFolderByExtension'">
-                { 'location'   : masterHost,
-                  'remotehost' : server3.getHostname(),
-                  'srcfolder'  : '%s/replication/master_backup_%s' \
-                                 % (masterBackupDir,m.hexdigest()),
-                  'destfolder' : '%s/replication/master_backup_%s' \
-                                 % (server3BackupDir,m.hexdigest()),
-                  'extension'  : '*'
-                }
-              </call>
+            </try>
 
-              <message>
-                '+++++ resynchronization add server: restore back-up on %s:%s'\
-                % (server3.getHostname(), server3.getPort())
-              </message>
-              <call function="'restoreTask'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : server3.getHostname(),
-                  'dsInstancePort' : server3.getPort(),
-                  'dsInstanceDn'   : server3.getRootDn(),
-                  'dsInstancePswd' : server3.getRootPwd(),
-                  'taskID'         : 'restore task - tc3',
-                  'backupDir'      : '%s/replication/master_backup_%s' \
-                                     % (server3BackupDir,m.hexdigest())
-                }
-              </call>
-              
-              <paralleliterate var="server" 
-                               in="_topologyServerList" 
-                               indexvar="i">
-                <sequence>
-                  <script>
-                    if globalSplitServers:
-                      replServer = _topologyReplServerList[i]
-                    else:
-                      replServer = server
-                  </script>
-                  <!-- Search for entry add -->
-                  <call function="'ldapSearchWithScript'">
-                    { 'location'         : clientHost,
-                      'dsPath'           : clientPath,
-                      'dsInstanceHost'   : replServer.getHostname(),
-                      'dsInstancePort'   : replServer.getPort(),
-                      'dsInstanceDn'     : replServer.getRootDn(),
-                      'dsInstancePswd'   : replServer.getRootPwd(),
-                      'dsBaseDN'         : 'dc=replicationChanges',
-                      'dsFilter'         : 'uid=*'
-                    }                
-                  </call>
-                  <script>
-                    searchRC = STAXResult[0][0]
-                    searchResult = STAXResult[0][1]
-                    resultLength = len(searchResult) > 0
-                  </script>
-                  <message>
-                    '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
-                    (replServer.getHostname(), replServer.getPort(), searchResult)
-                  </message>
-                </sequence>
-              </paralleliterate>
-                                
-              <!-- Verify the synchronization of the trees among the servers in
-                the topology -->
-              <!-- If the trees don't match, we may have come across Issue 4052
-               (Ghost adds in Replication Server) -->              
-              <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 Resync' }
-          </call>
+          </sequence>
           
-          <call function="'testSuite_Postamble'"/>
-        </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>
+ 
+        </try>
       </block>
     </sequence>
   </function>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/resynchronization/resynchronization_tests.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/resynchronization/resynchronization_tests.xml
new file mode 100644
index 0000000..1cf7fcb
--- /dev/null
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/resynchronization/resynchronization_tests.xml
@@ -0,0 +1,897 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../../../shared/stax.dtd">
+<!--
+ ! CDDL HEADER START
+ !
+ ! The contents of this file are subject to the terms of the
+ ! 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.
+ ! 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,
+ ! 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 2007-2010 Sun Microsystems, Inc.
+ !      Portions Copyright 2011-2012 ForgeRock AS.
+ ! -->
+<stax>
+
+  <!--- Test Case information
+  #@TestMarker          Replication Re-Synchronization Tests
+  #@TestName            Replication: Re-Synchronization: Preamble
+  #@TestID              Preamble
+  #@TestPurpose         Remove and disable 3rd server
+  #@TestPreamble        None
+  #@TestSteps           Disable 3rd server
+  #@TestPostamble       None
+  #@TestResult          None
+  -->
+  <function name="replication_resync_001" scope="local">
+    <testcase name="getTestCaseName('Resync Preamble')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Disable replication on 3rd server.' % msg1 }
+            </call>
+    
+            <!-- Remove 3rd server from replication topology (i.e. disable
+                 replication) -->          
+            <call function="'disableReplication'">
+              { 'location'            : clientHost,
+                'dsPath'              : clientPath,
+                'dsInstanceHost'      : server3.getHostname(),
+                'dsInstanceAdminPort' : server3.getAdminPort(),
+                'disableAll'          : True
+              }
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>          
+                    
+  <!--- Test Case information
+  #@TestMarker          Replication Re-Synchronization Tests
+  #@TestName            Replication: Re-Synchronization: Off-line
+                        initialisation
+  #@TestID              Off-line initialisation
+  #@TestPurpose         Initialise replicated servers using off-line
+                        backup/restore
+  #@TestPreamble        Back-up server A
+  #@TestSteps           Add entry on server A
+  #@TestSteps           Stop servers
+  #@TestSteps           Restore back-up on other servers
+  #@TestSteps           Start servers
+  #@TestPostamble
+  #@TestResult          Success if trees synchronized
+  -->
+  <function name="replication_resync_002" scope="local">
+    <testcase name="getTestCaseName('Off-line initialisation')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Initialise replicated servers using off-line backup/restore.' % msg1 }
+            </call>
+            
+            <script>
+              m = md5_hash()
+              m.update(STAXCurrentTestcase)
+            </script>
+
+            <!-- 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_%s' \
+                                % (masterBackupDir,m.hexdigest())
+              }
+            </call>
+                           
+            <!-- Add entry to "master" server -->
+            <message>
+              '+++++ resynchronization off-line: add entry to %s:%s' \
+              % (masterHost, master.getPort())
+            </message>
+            <call function="'addEntry'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(), 
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'entryToBeAdded' : '%s/replication/tfitter.ldif' \
+                                   % clientDataDir
+              }
+            </call>
+              
+            <!-- Stop the "consumer" servers -->
+            <call function="'stopServers'">
+              [consumerList]
+            </call>                
+            
+            <!-- Copy master backup to "consumer" servers and restore it -->
+            <paralleliterate var="consumer" in="consumerList">
+              <sequence>
+                <script>
+                  consumerBackupDir = '%s' % consumer.getTmpDir()
+                </script>
+                <call function="'CopyFolderByExtension'">
+                  { 'location'   : masterHost,
+                    'remotehost' : consumer.getHostname(),
+                    'srcfolder'  : '%s/replication/master_backup_%s' \
+                                   % (masterBackupDir,m.hexdigest()),
+                    'destfolder' : '%s/replication/master_backup_%s' \
+                                   % (consumerBackupDir,m.hexdigest()),
+                    'extension'  : '*'
+                  }
+                </call>
+
+                <message>
+                  '+++++ resynchronization off-line: restore backup on %s:%s'\
+                  % (consumer.getHostname(), consumer.getPort())
+                </message>
+                <call function="'restore'">
+                  { 'location'  :  consumer.getHostname(),
+                    'dsPath'    :  '%s/%s' % (consumer.getDir(), OPENDSNAME),
+                    'backupDir' :  '%s/replication/master_backup_%s' \
+                                   % (consumerBackupDir,m.hexdigest())
+                  }
+                </call>
+              </sequence>
+            </paralleliterate>
+            
+            <!-- Start the "consumer" servers -->
+            <call function="'startServers'">
+              [consumerList]
+            </call>
+            
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+          
+  <!--- Test Case information
+  #@TestMarker          Replication Re-Synchronization Tests
+  #@TestName            Replication: Re-Synchronization: On-line 
+                        initialisation
+  #@TestID              On-line initialisation
+  #@TestPurpose         Initialise replicated servers using on-line
+                        backup/restore
+  #@TestPreamble
+  #@TestSteps           Call dsreplication pre-external-initialization
+  #@TestSteps           Import data on server A
+  #@TestSteps           Back-up server A
+  #@TestSteps           Call dsreplication post-external-initialization            
+  #@TestSteps           Add entry on server A
+  #@TestSteps           Restore back-up on other servers
+  #@TestPostamble
+  #@TestResult          Success if trees synchronized
+  -->
+  <function name="replication_resync_003" scope="local">
+    <testcase name="getTestCaseName('On-line initialisation')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Initialise replicated servers using on-line backup/restore.' % msg1 }
+            </call>
+
+            <script>
+              m = md5_hash()
+              m.update(STAXCurrentTestcase)
+            </script>
+
+            <!-- Pre-initialise the servers in the topology -->
+            <message>
+              '+++++ resynchronization on-line: prepare servers for external \
+              initialization'
+            </message>                
+            <call function="'preInitializeReplication'">
+              { 'location'            : clientHost,
+                'dsPath'              : clientPath,
+                'dsInstanceHost'      : masterHost,
+                'dsInstanceAdminPort' : master.getAdminPort(),
+                'localOnly'           : False,
+                'replicationDnList'   : [synchroSuffix],
+                'adminUID'            : adminUID,
+                'adminPswd'           : adminPswd
+              }
+            </call>
+              
+            <!-- Import data into "master" server -->
+            <message>
+              '+++++ resynchronization on-line: import data on %s:%s' \
+              % (masterHost, master.getPort())
+            </message>
+            <call function="'ImportLdifWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstanceAdminPort' : master.getAdminPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'ldifFile'       : '%s/replication/Example.ldif' \
+                                   % masterDataDir
+              }
+            </call>
+            
+            <!-- Check some data was imported into "master" server -->
+            <call function="'checkImport'">
+              { 'location'        : clientHost,
+                'dsPath'          : clientPath,
+                'dsHost'          : masterHost,
+                'dsPort'          : master.getPort(),
+                'dsAdminPort'     : master.getAdminPort(),
+                'dsDn'            : master.getRootDn(),
+                'dsPswd'          : master.getRootPwd(),
+                'expectedEntries' : ['uid=scarter,ou=People,o=example',
+                                     'uid=dmiller, ou=People, o=example',
+                                     'uid=rhunt, ou=People, o=example'],
+                'startDS'         :  'no'
+              }
+            </call>
+              
+            <!-- Backup "master" server -->
+            <message>
+              '+++++ resynchronization on-line: back-up server %s:%s' \
+              % (masterHost, master.getPort())
+            </message>
+            <call function="'backupTask'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'taskID'         : 'backup task - tc2',
+                'backupDir'      : '%s/replication/master_backup_%s' \
+                                   % (masterBackupDir,m.hexdigest())
+              }
+            </call>
+            
+            <!-- Post-initialise the servers in the topology -->
+            <message>
+              '+++++ resynchronization on-line: end external server \
+              initialization'
+            </message>                       
+            <call function="'postInitializeReplication'">
+              { 'location'            : clientHost,
+                'dsPath'              : clientPath,
+                'dsInstanceHost'      : masterHost,
+                'dsInstanceAdminPort' : master.getAdminPort(),
+                'replicationDnList'   : [synchroSuffix],
+                'adminUID'            : adminUID,
+                'adminPswd'           : adminPswd
+              }
+            </call>
+                          
+            <!-- Add entry to "master" server -->
+            <message>
+              '+++++ resynchronization on-line: add entry to %s:%s' \
+              % (masterHost, master.getPort())
+            </message>                        
+            <call function="'addEntry'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(), 
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'entryToBeAdded' : '%s/replication/tfitter.ldif' \
+                                   % clientDataDir
+              }
+            </call>
+            
+            <!-- Copy backup to "consumer" servers and restore it -->
+            <paralleliterate var="consumer" in="consumerList">
+              <sequence>
+                <script>
+                  consumerBackupDir = '%s' % consumer.getTmpDir()
+                </script>
+                <call function="'CopyFolderByExtension'">
+                  { 'location'   : masterHost,
+                    'remotehost' : consumer.getHostname(),
+                    'srcfolder'  : '%s/replication/master_backup_%s' \
+                                   % (masterBackupDir,m.hexdigest()),
+                    'destfolder' : '%s/replication/master_backup_%s' \
+                                   % (consumerBackupDir,m.hexdigest()),
+                    'extension'  : '*'
+                  }
+                </call>
+
+                <message>
+                  '+++++ resynchronization on-line: restore back-up on %s:%s'\
+                  % (consumer.getHostname(), consumer.getPort())
+                </message>
+                <call function="'restoreTask'">
+                  { 'location'       : clientHost,
+                    'dsPath'         : clientPath,
+                    'dsInstanceHost' : consumer.getHostname(),
+                    'dsInstancePort' : consumer.getPort(),
+                    'dsInstanceDn'   : consumer.getRootDn(),
+                    'dsInstancePswd' : consumer.getRootPwd(),
+                    'taskID'         : 'restore task - tc2',
+                    'backupDir'   : '%s/replication/master_backup_%s' \
+                                    % (consumerBackupDir,m.hexdigest())
+                  }
+                </call>
+              </sequence>
+            </paralleliterate>              
+                              
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+              
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+          
+  <!--- Test Case information
+  #@TestMarker          Replication Re-Synchronization Tests
+  #@TestName            Replication: Re-Synchronization: Add new server
+  #@TestID              Add new server
+  #@TestPurpose         Initialise newly added replicated server 
+                        using on-line backup/restore
+  #@TestPreamble
+  #@TestSteps           Call dsreplication pre-external-initialization
+  #@TestSteps           Import data on server A
+  #@TestSteps           Back-up server A
+  #@TestSteps           Initialise other servers from server A            
+  #@TestSteps           Add entry on server A
+  #@TestSteps           Add server: enable replication
+  #@TestSteps           Restore back-up on new server
+  #@TestPostamble
+  #@TestResult          Success if trees synchronized
+  -->
+  <function name="replication_resync_004" scope="local">
+    <testcase name="getTestCaseName('Add new Server')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Initialise newly added server using on-line backup/restore.' % msg1 }
+            </call>
+
+            <script>
+              m = md5_hash()
+              m.update(STAXCurrentTestcase)
+            </script>
+
+            <paralleliterate var="server" 
+                             in="_topologyServerList" 
+                             indexvar="i">
+              <sequence>
+                <script>
+                  if globalSplitServers:
+                    replServer = _topologyReplServerList[i]
+                  else:
+                    replServer = server
+                </script>
+                <!-- Search for entry add -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'         : clientHost,
+                    'dsPath'           : clientPath,
+                    'dsInstanceHost'   : replServer.getHostname(),
+                    'dsInstancePort'   : replServer.getPort(),
+                    'dsInstanceDn'     : replServer.getRootDn(),
+                    'dsInstancePswd'   : replServer.getRootPwd(),
+                    'dsBaseDN'         : 'dc=replicationChanges',
+                    'dsFilter'         : 'uid=*'
+                  }                
+                </call>
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <message>
+                  '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
+                  (replServer.getHostname(), replServer.getPort(), searchResult)
+                </message>
+              </sequence>
+            </paralleliterate>
+                          
+            <!-- Pre-initialise the servers in the topology -->
+            <message>
+              '+++++ resynchronization add server: prepare servers for \
+              external initialization'
+            </message>                
+            <call function="'preInitializeReplication'">
+              { 'location'            : clientHost,
+                'dsPath'              : clientPath,
+                'dsInstanceHost'      : masterHost,
+                'dsInstanceAdminPort' : master.getAdminPort(),
+                'localOnly'           : False,
+                'replicationDnList'   : [synchroSuffix],
+                'adminUID'            : adminUID,
+                'adminPswd'           : adminPswd
+              }
+            </call>
+            
+            <paralleliterate var="server" 
+                             in="_topologyServerList" 
+                             indexvar="i">
+              <sequence>
+                <script>
+                  if globalSplitServers:
+                    replServer = _topologyReplServerList[i]
+                  else:
+                    replServer = server
+                </script>
+                <!-- Search for entry add -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'         : clientHost,
+                    'dsPath'           : clientPath,
+                    'dsInstanceHost'   : replServer.getHostname(),
+                    'dsInstancePort'   : replServer.getPort(),
+                    'dsInstanceDn'     : replServer.getRootDn(),
+                    'dsInstancePswd'   : replServer.getRootPwd(),
+                    'dsBaseDN'         : 'dc=replicationChanges',
+                    'dsFilter'         : 'uid=*'
+                  }                
+                </call>
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <message>
+                  '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
+                  (replServer.getHostname(), replServer.getPort(), searchResult)
+                </message>
+              </sequence>
+            </paralleliterate>
+            
+            <!-- Import data into "master" server -->
+            <message>
+              '+++++ resynchronization add server: import data on %s:%s' \
+              % (masterHost, master.getPort())
+            </message>
+            <call function="'ImportLdifWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstanceAdminPort' : master.getAdminPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'ldifFile'       : '%s/replication/Example.ldif' \
+                                   % masterDataDir
+              }
+            </call>
+            
+            <!-- Check some data was imported into "master" server -->
+            <call function="'checkImport'">
+              { 'location'        : clientHost,
+                'dsPath'          : clientPath,
+                'dsHost'          : masterHost,
+                'dsPort'          : master.getPort(),
+                'dsAdminPort'     : master.getAdminPort(),
+                'dsDn'            : master.getRootDn(),
+                'dsPswd'          : master.getRootPwd(),
+                'expectedEntries' : ['uid=scarter,ou=People,o=example',
+                                     'uid=dmiller, ou=People, o=example',
+                                     'uid=rhunt, ou=People, o=example'],
+                'startDS'         :  'no'
+              }
+            </call>
+              
+            <!-- Backup "master" server -->
+            <message>
+              '+++++ resynchronization add server: back-up server %s:%s' \
+              % (masterHost, master.getPort())
+            </message>
+            <call function="'backupTask'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'taskID'         : 'backup task - tc3',
+                'backupDir'      : '%s/replication/master_backup_%s' \
+                                   % (masterBackupDir,m.hexdigest())
+              }
+            </call>
+
+            <paralleliterate var="server" 
+                             in="_topologyServerList" 
+                             indexvar="i">
+              <sequence>
+                <script>
+                  if globalSplitServers:
+                    replServer = _topologyReplServerList[i]
+                  else:
+                    replServer = server
+                </script>
+                <!-- Search for entry add -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'         : clientHost,
+                    'dsPath'           : clientPath,
+                    'dsInstanceHost'   : replServer.getHostname(),
+                    'dsInstancePort'   : replServer.getPort(),
+                    'dsInstanceDn'     : replServer.getRootDn(),
+                    'dsInstancePswd'   : replServer.getRootPwd(),
+                    'dsBaseDN'         : 'dc=replicationChanges',
+                    'dsFilter'         : 'uid=*'
+                  }                
+                </call>
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <message>
+                  '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
+                  (replServer.getHostname(), replServer.getPort(), searchResult)
+                </message>
+              </sequence>
+            </paralleliterate>
+            
+            <message>
+              '+++++ resynchronization add server: Initialise topology from \
+              %s:%s' % (masterHost, master.getPort())
+            </message>
+            <!-- Initialise the servers in the topology -->
+            <call function="'initializeReplication'">
+              { 'location'                : clientHost,
+                'dsPath'                  : clientPath,
+                'sourceInstanceHost'      : masterHost,
+                'sourceInstanceAdminPort' : master.getAdminPort(),
+                'replicationDnList'       : [synchroSuffix]
+              }
+            </call>
+            
+            <paralleliterate var="server" 
+                             in="_topologyServerList" 
+                             indexvar="i">
+              <sequence>
+                <script>
+                  if globalSplitServers:
+                    replServer = _topologyReplServerList[i]
+                  else:
+                    replServer = server
+                </script>
+                <!-- Search for entry add -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'         : clientHost,
+                    'dsPath'           : clientPath,
+                    'dsInstanceHost'   : replServer.getHostname(),
+                    'dsInstancePort'   : replServer.getPort(),
+                    'dsInstanceDn'     : replServer.getRootDn(),
+                    'dsInstancePswd'   : replServer.getRootPwd(),
+                    'dsBaseDN'         : 'dc=replicationChanges',
+                    'dsFilter'         : 'uid=*'
+                  }                
+                </call>
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <message>
+                  '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
+                  (replServer.getHostname(), replServer.getPort(), searchResult)
+                </message>
+              </sequence>
+            </paralleliterate>
+            
+            <!-- Add entry to "master" server -->
+            <message>
+              '+++++ resynchronization add server: add entry to %s:%s' \
+              % (masterHost, master.getPort())
+            </message>                        
+            <call function="'addEntry'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(), 
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'entryToBeAdded' : '%s/replication/tfitter.ldif' \
+                                   % clientDataDir
+              }
+            </call>
+            
+            <paralleliterate var="server" 
+                             in="_topologyServerList" 
+                             indexvar="i">
+              <sequence>
+                <script>
+                  if globalSplitServers:
+                    replServer = _topologyReplServerList[i]
+                  else:
+                    replServer = server
+                </script>
+                <!-- Search for entry add -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'         : clientHost,
+                    'dsPath'           : clientPath,
+                    'dsInstanceHost'   : replServer.getHostname(),
+                    'dsInstancePort'   : replServer.getPort(),
+                    'dsInstanceDn'     : replServer.getRootDn(),
+                    'dsInstancePswd'   : replServer.getRootPwd(),
+                    'dsBaseDN'         : 'dc=replicationChanges',
+                    'dsFilter'         : 'uid=*'
+                  }                
+                </call>
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <message>
+                  '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
+                  (replServer.getHostname(), replServer.getPort(), searchResult)
+                </message>
+              </sequence>
+            </paralleliterate>
+            
+            <!-- Add new server to topology -->
+            <script>
+              if master.isOnlyLdapServer():
+                masterReplPort = None
+              else:
+                masterReplPort = masterReplicationServer.getPort()
+              
+              if server3.isOnlyLdapServer():
+                server3ReplPort = None
+              else:
+                replicationServer3 = server3.getChangelogServer()
+                server3ReplPort = replicationServer3.getPort() 
+            </script>
+
+            <message>
+              '+++++ resynchronization add server: Enable replication for \
+              server:\nHost: %s\nLdap port: %s\nReplication port: %s\n\
+              Replicated DN list: %s' \
+              % (server3.getHostname(), server3.getPort(), 
+                 server3ReplPort, [synchroSuffix])
+            </message>
+        
+            <call function="'enableReplication'">
+              { 'location'             : clientHost,
+                'dsPath'               : clientPath,
+                'refInstanceHost'      : masterHost,
+                'refInstanceAdminPort' : master.getAdminPort(),
+                'refInstanceDn'        : master.getRootDn(),
+                'refInstancePswd'      : master.getRootPwd(),
+                'refReplicationPort'   : masterReplPort,
+                'refOnlyLdapServer'    : master.isOnlyLdapServer(),
+                'refOnlyReplServer'    : master.isOnlyReplServer(),
+                'dsInstanceHost'       : server3.getHostname(),
+                'dsInstanceAdminPort'  : server3.getAdminPort(),
+                'dsInstanceDn'         : server3.getRootDn(),
+                'dsInstancePswd'       : server3.getRootPwd(),
+                'dsReplicationPort'    : server3ReplPort,
+                'dsOnlyLdapServer'     : server3.isOnlyLdapServer(),
+                'dsOnlyReplServer'     : server3.isOnlyReplServer(),
+                'replicationDnList'    : [synchroSuffix]
+              }                      
+            </call>
+
+
+            <script>
+              # Add 3rd server to replicated servers list now that replication
+              # has been enabled on the 3rd one
+              _topologyServerList = _topologyServerList + [server3]
+              _splitServerList = _splitServerList + [server3]
+              consumerList = consumerList + [server3]
+            </script>                            
+            
+            <paralleliterate var="server" 
+                             in="_topologyServerList" 
+                             indexvar="i">
+              <sequence>
+                <script>
+                  if globalSplitServers:
+                    replServer = _topologyReplServerList[i]
+                  else:
+                    replServer = server
+                </script>
+                <!-- Search for entry add -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'         : clientHost,
+                    'dsPath'           : clientPath,
+                    'dsInstanceHost'   : replServer.getHostname(),
+                    'dsInstancePort'   : replServer.getPort(),
+                    'dsInstanceDn'     : replServer.getRootDn(),
+                    'dsInstancePswd'   : replServer.getRootPwd(),
+                    'dsBaseDN'         : 'dc=replicationChanges',
+                    'dsFilter'         : 'uid=*'
+                  }                
+                </call>
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <message>
+                  '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
+                  (replServer.getHostname(), replServer.getPort(), searchResult)
+                </message>
+              </sequence>
+            </paralleliterate>
+            
+            <!-- Copy backup to new server and restore it -->
+            <script>
+              server3BackupDir = '%s' % server3.getTmpDir()
+            </script>
+            <call function="'CopyFolderByExtension'">
+              { 'location'   : masterHost,
+                'remotehost' : server3.getHostname(),
+                'srcfolder'  : '%s/replication/master_backup_%s' \
+                               % (masterBackupDir,m.hexdigest()),
+                'destfolder' : '%s/replication/master_backup_%s' \
+                               % (server3BackupDir,m.hexdigest()),
+                'extension'  : '*'
+              }
+            </call>
+
+            <message>
+              '+++++ resynchronization add server: restore back-up on %s:%s'\
+              % (server3.getHostname(), server3.getPort())
+            </message>
+            <call function="'restoreTask'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : server3.getHostname(),
+                'dsInstancePort' : server3.getPort(),
+                'dsInstanceDn'   : server3.getRootDn(),
+                'dsInstancePswd' : server3.getRootPwd(),
+                'taskID'         : 'restore task - tc3',
+                'backupDir'      : '%s/replication/master_backup_%s' \
+                                   % (server3BackupDir,m.hexdigest())
+              }
+            </call>
+            
+            <paralleliterate var="server" 
+                             in="_topologyServerList" 
+                             indexvar="i">
+              <sequence>
+                <script>
+                  if globalSplitServers:
+                    replServer = _topologyReplServerList[i]
+                  else:
+                    replServer = server
+                </script>
+                <!-- Search for entry add -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'         : clientHost,
+                    'dsPath'           : clientPath,
+                    'dsInstanceHost'   : replServer.getHostname(),
+                    'dsInstancePort'   : replServer.getPort(),
+                    'dsInstanceDn'     : replServer.getRootDn(),
+                    'dsInstancePswd'   : replServer.getRootPwd(),
+                    'dsBaseDN'         : 'dc=replicationChanges',
+                    'dsFilter'         : 'uid=*'
+                  }                
+                </call>
+                <script>
+                  searchRC = STAXResult[0][0]
+                  searchResult = STAXResult[0][1]
+                  resultLength = len(searchResult) > 0
+                </script>
+                <message>
+                  '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
+                  (replServer.getHostname(), replServer.getPort(), searchResult)
+                </message>
+              </sequence>
+            </paralleliterate>
+                              
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <!-- If the trees don't match, we may have come across Issue 4052
+             (Ghost adds in Replication Server) -->              
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+              
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+</stax>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/schema/schema.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/schema/schema.xml
index 5277922..4063ffc 100644
--- a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/schema/schema.xml
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/schema/schema.xml
@@ -7,1050 +7,153 @@
  ! 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 2007-2008 Sun Microsystems, Inc.
- !      Portions Copyright 2011-2012 ForgeRock AS.
+ !      Copyright 2012 ForgeRock AS.
  ! -->
 <stax>
-
   <defaultcall function="replication_schema"/>
-
-  <function name="replication_schema">
-
+  <function name="replication_schema" scope="local">
     <sequence>
+      <block name="'replication_schema'">
+        <try>
+          <sequence>
+            <script>
+              CurrentTestPath['group'] = 'replication'        
+              CurrentTestPath['suite'] = 'schema'
+              
+              _group=CurrentTestPath['group']
+              _groupdir='%s/testcases/%s' % (TESTS_DIR,_group)
+              _label = 'Replication Schema'
+            </script>
 
-      <block name="'schema'">
+            <!--- Test Suite information
+            #@TestSuiteName       Replication Schema Tests
+            #@TestSuitePurpose    Verify that the total-update operations are replicated
+                                  correctly between two servers.
+            #@TestSuiteID         Schema Tests
+            #@TestSuiteGroup      Schema
+            #@TestGroup           Replication
+            #@TestScript          replication_schema.xml
+            #@TestHTMLLink        http://www.forgerock.org/
+              -->
+                  
+            <call function="'testSuite_Preamble'"/>
 
-        <sequence>
-            
-          <script>
-            if not CurrentTestPath.has_key('group'):
-              CurrentTestPath['group']='replication'                 
-            CurrentTestPath['suite']=STAXCurrentBlock
-          </script>            
-
-          <call function="'testSuite_Preamble'"/>
-
-          <!--- Test Suite information
-          #@TestSuiteName       Replication Schema Replication Tests
-          #@TestSuitePurpose    Verify that the schema is replicated as any 
-                                other suffix in a replicated topology.
-          #@TestSuiteID         Schema Replication Tests
-          #@TestSuiteGroup      Schema Replication
-          #@TestGroup           Replication
-          #@TestScript          replication_schema.xml
-          #@TestHTMLLink        http://opends.dev.java.net/
-          -->
-            
+            <try>
+              <sequence> 
                                                                         
-          <import machine="STAF_LOCAL_HOSTNAME"
-           file="'%s/testcases/replication/replication_setup.xml' % TESTS_DIR"/>
-          <call function="'replication_setup'" >
-            { 'label'    : 'Replication Schema' }
-          </call>
-                                    
-          <script>
-            synchroSuffix = master.getSynchronizedSuffixList()[0].getSuffixDn()    
-            
-            currentSchemaFile = '%s/config/schema/99-user.ldif' % masterPath
-            provSchemaFile = '%s/../last-99-user.ldif' % masterPath                    
-            
-            consumer = consumerList[0]
-            consumerHost = consumer.getHostname()
-            
-            msg1 = 'Replication: Schema:'              
-          </script>            
-              
-                                    
-          <!--- Test Case information
-          #@TestMarker          Replication Schema Replication Tests
-          #@TestName            Replication: Schema Replication: Add objectclass
-          #@TestID              Add objectclass
-          #@TestPurpose         Check schema replication when a new objectclass 
-                                is added
-          #@TestPreamble        Load entries
-          #@TestSteps           Add new objectclass definition on server1
-          #@TestSteps           Add entry of new objectclass on server2
-          #@TestPostamble
-          #@TestResult          Success if schema add and entry add replicated
-          -->               
-          <testcase name="getTestCaseName('Add objectclass')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              
-              <message>
-                 'Test Name = %s' % STAXCurrentTestcase
-              </message>
+                <import machine="STAF_LOCAL_HOSTNAME"
+                  file="'%s/testcases/replication/replication_setup.xml' 
+                    % (TESTS_DIR)"/>
+                <call function="'replication_setup'" >
+                  { 'label'    : _label }
+                </call>
 
-              <message>
-                '%s Add objectclass. Check schema replication when a new objectclass is added' % msg1
-              </message>
+                <!-- List of Import of Test Functions -->
+                <script>
+                  importList=[]
+                  importList.append('schema/schema_tests')
+                </script>
 
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Load entries into "master" server.' % msg1 }
-              </call>
-                              
-              <!-- Load entries into "master" server -->                                
-              <call function="'addEntry'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(), 
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'entryToBeAdded' : '%s/replication/Example.ldif' % \
-                                     clientDataDir
-                }
-              </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>                                                                       
 
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Add new object class.' % msg1 }
-              </call>
-                                
-              <script>
-                newObjectclass = '( testobjectclass-oid NAME \'testobjectclass-0\' SUP person MAY ( street $ c ) X-ORIGIN \'user defined\' )'
-              </script>
-                
-              <!-- Modify schema  in "master" server -->
-              <call function="'modifyAnAttribute'">
-                { 'dsPath'            : masterPath,
-                  'dsInstanceHost'    : masterHost ,
-                  'dsInstancePort'    : master.getPort(),
-                  'dsInstanceDn'      : master.getRootDn(),
-                  'dsInstancePswd'    : master.getRootPwd(),
-                  'DNToModify'        : 'cn=schema',
-                  'attributeName'     : 'objectClasses',
-                  'newAttributeValue' : newObjectclass, 
-                  'changetype'        : 'add'
-                }
-              </call>
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Add entry to "consumer" server using new objectclass.' % msg1 }
-              </call>
-
-              <!-- Add entry to "consumer" server -->                       
-              <call function="'addEntry'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : consumerHost,
-                  'dsInstancePort' : consumer.getPort(), 
-                  'dsInstanceDn'   : consumer.getRootDn(),
-                  'dsInstancePswd' : consumer.getRootPwd(),
-                  'entryToBeAdded' : '%s/replication/testuser-0.ldif' % \
-                                     clientDataDir
-                }
-              </call>           
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Verify the synchronization of the schema on all the servers.' % msg1 }
-              </call>
-                      
-              <!-- Verify the synchronization of the schema among the servers 
-                in the topology -->          
-              <call function="'verifySchemas'">
-                [ clientHost, clientPath, master, consumerList, '99-user.ldif' ]
-              </call> 
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Verify the synchronization of the trees on all the servers.' % msg1 }
-              </call>
-                
-              <!-- 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 Schema Replication Tests
-          #@TestName            Replication: Schema Replication: 
-                                Add attributetype
-          #@TestID              Add attributetype
-          #@TestPurpose         Check schema replication when a new 
-                                attributetype is added
-          #@TestPreamble
-          #@TestSteps           Add new attributeType and new objectclass 
-                                definition on server1
-          #@TestSteps           Add new entry containing new objectclass and
-                                new attributeType on server2 
-          #@TestPostamble
-          #@TestResult          Success if schema add and entry adds replicated
-          -->               
-          <testcase name="getTestCaseName('Add attributetype')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              
-              <message>
-                '%s Add Attributetype. schema replication when a new Attributetype is added' % msg1
-              </message>
-                                
-              <script>
-                newObjectclass = '( testobjectclass1-oid NAME \'testobjectclass-1\' SUP person MAY ( street $ testattribute-1 $ c ) X-ORIGIN \'user defined\' )'
-                newAttributetype = '( testattribute1-oid NAME \'testattribute-1\' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN \'user defined\' )'
-              </script>
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Add newAttributetype in "master" server.' % msg1 }
-              </call>
-                
-              <!-- Modify schema  in "master" server -->
-              <call function="'modifyAnAttribute'">
-                { 'dsPath'            : masterPath,
-                  'dsInstanceHost'    : masterHost ,
-                  'dsInstancePort'    : master.getPort(),
-                  'dsInstanceDn'      : master.getRootDn(),
-                  'dsInstancePswd'    : master.getRootPwd(),
-                  'DNToModify'        : 'cn=schema',
-                  'attributeName'     : 'attributeTypes',
-                  'newAttributeValue' : newAttributetype, 
-                  'changetype'        : 'add'
-                }
-              </call>
-              
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Add newObjectclass in "master" server.' % msg1 }
-              </call>
-            
-              <call function="'modifyAnAttribute'">
-                { 'dsPath'            : masterPath,
-                  'dsInstanceHost'    : masterHost ,
-                  'dsInstancePort'    : master.getPort(),
-                  'dsInstanceDn'      : master.getRootDn(),
-                  'dsInstancePswd'    : master.getRootPwd(),
-                  'DNToModify'        : 'cn=schema',
-                  'attributeName'     : 'objectClasses',
-                  'newAttributeValue' : newObjectclass, 
-                  'changetype'        : 'add'
-                }
-              </call>
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Add entry to "consumer" server.' % msg1 }
-              </call>
-
-              <!-- Add entry to "consumer" server -->                       
-              <call function="'addEntry'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : consumerHost,
-                  'dsInstancePort' : consumer.getPort(), 
-                  'dsInstanceDn'   : consumer.getRootDn(),
-                  'dsInstancePswd' : consumer.getRootPwd(),
-                  'entryToBeAdded' : '%s/replication/testuser-1.ldif' % \
-                                     clientDataDir
-                }
-              </call>           
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Verify the synchronization of the schema on all the servers.' % msg1 }
-              </call>
-
-              <!-- Verify the synchronization of the schema among the servers in
-                the topology -->          
-              <call function="'verifySchemas'">
-                [ clientHost, clientPath, master, consumerList, '99-user.ldif' ]
-              </call> 
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Verify the synchronization of the trees on all the servers.' % msg1 }
-              </call>
-                
-              <!-- 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 Schema Replication Tests
-          #@TestName            Replication: Schema Replication: 
-                                Delete objectclass
-          #@TestID              Delete objectclass
-          #@TestPurpose         Check schema replication when an objectclass 
-                                is deleted
-          #@TestPreamble
-          #@TestSteps           Remove user-defined objectclass definition on
-                                server1
-          #@TestSteps           Delete entry on server1
-          #@TestSteps           Add entry containing  removed objectclass on
-                                every server                          
-          #@TestPostamble
-          #@TestResult          Success if schema remove replicated and last
-                                entry add rejected on all servers (error 65:
-                                objectclass violation)
-          -->                    
-          <testcase name="getTestCaseName('Delete objectclass')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              
-              <message>
-                 'Test Name = %s' % STAXCurrentTestcase
-              </message>
-
-              <message>
-                '%s Delete objectclass. Check schema replication when an objectclass is deleted' % msg1
-              </message>
-                                
-              <script>
-                newObjectclass = '( testobjectclass-oid NAME \'testobjectclass-0\' SUP person MAY ( street $ c ) X-ORIGIN \'user defined\' )'
-              </script>
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Delete newObjectclass in "master" server.' % msg1 }
-              </call>
-                
-              <!-- Modify schema  in "master" server -->
-              <call function="'modifyAnAttribute'">
-                { 'dsPath'            : masterPath,
-                  'dsInstanceHost'    : masterHost ,
-                  'dsInstancePort'    : master.getPort(),
-                  'dsInstanceDn'      : master.getRootDn(),
-                  'dsInstancePswd'    : master.getRootPwd(),
-                  'DNToModify'        : 'cn=schema',
-                  'attributeName'     : 'objectClasses',
-                  'newAttributeValue' : newObjectclass, 
-                  'changetype'        : 'delete'
-                }
-              </call>
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Delete previously added entry.' % msg1 }
-              </call>
-
-              <!-- Delete previously added entry -->
-              <call function="'ldapDeleteWithScript'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : master.getHostname(),
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'dsDn'       :  ['cn=testuser-0,ou=People,%s' % synchroSuffix]
-                }
-              </call>
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Attempt to add entry to servers with deleted objectclass.' % msg1 }
-              </call>
-                                
-              <!-- Try to add entry to servers; should be rejected with error 65
-                (objectclass violation) -->
-              <iterate var="server" in="_topologyServerList">
-                <call function="'addEntry'">
-                  { 'location'       : clientHost,
-                    'dsPath'         : clientPath,
-                    'dsInstanceHost' : server.getHostname(),
-                    'dsInstancePort' : server.getPort(), 
-                    'dsInstanceDn'   : server.getRootDn(),
-                    'dsInstancePswd' : server.getRootPwd(),
-                    'entryToBeAdded' : '%s/replication/testuser-0.ldif' % \
-                                       clientDataDir,
-                    'expectedRC'     : 65
-                  }
-                </call>                             
-              </iterate> 
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Verify the synchronization of the schema on all the servers.' % msg1 }
-              </call>
-                       
-              <!-- Verify the synchronization of the schema among the servers in
-                the topology -->
-              <call function="'verifySchemas'">
-                [ clientHost, clientPath, master, consumerList, '99-user.ldif' ]
-              </call> 
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Verify the synchronization of the trees on all the servers.' % msg1 }
-              </call>
-                
-              <!-- 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 Schema Replication Tests
-          #@TestName            Replication: Schema Replication: 
-                                Modify objectclass
-          #@TestID              Modify objectclass
-          #@TestPurpose         Check schema replication when an objectclass is
-                                modified
-          #@TestPreamble
-          #@TestSteps           Remove user-defined objectclass definition on
-                                server1
-          #@TestSteps           Add modified version of removed user-defined 
-                                objectclass on server1 (make attributes
-                                MANDATORY)
-          #@TestSteps           Add entry containing newly added objectclass but
-                                without required attributes on every server
-          #@TestPostamble
-          #@TestResult          Success if schema modify replicated and entry
-                                add rejected with error 65 (objectclass 
-                                violation) on all servers
-          -->                    
-          <testcase name="getTestCaseName('Modify objectclass')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              
-              <message>
-                 'Test Name = %s' % STAXCurrentTestcase
-              </message>
-
-              <message>
-                '%s Modify objectclass. Check schema replication when an objectclass is modified' % msg1
-              </message>
-                                
-              <script>       
-                oldObjectclass = '( testobjectclass1-oid NAME \'testobjectclass-1\' SUP person MAY ( street $ testattribute-1 $ c ) X-ORIGIN \'user defined\' )'                             
-                newObjectclass = '( testobjectclass1-oid NAME \'testobjectclass-1\' SUP person MUST ( street $ testattribute-1 $ c ) X-ORIGIN \'user defined\' )'
-              </script>
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Delete oldObjectclass in "master" server.' % msg1 }
-              </call>
-                
-              <!-- Modify schema  in "master" server -->
-              <call function="'modifyAnAttribute'">
-                { 'dsPath'            : masterPath,
-                  'dsInstanceHost'    : masterHost ,
-                  'dsInstancePort'    : master.getPort(),
-                  'dsInstanceDn'      : master.getRootDn(),
-                  'dsInstancePswd'    : master.getRootPwd(),
-                  'DNToModify'        : 'cn=schema',
-                  'attributeName'     : 'objectClasses',
-                  'newAttributeValue' : oldObjectclass, 
-                  'changetype'        : 'delete'
-                }
-              </call>
-              
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Add newObjectclass in "master" server.' % msg1 }
-              </call>
-       
-              <call function="'modifyAnAttribute'">
-                { 'dsPath'            : masterPath,
-                  'dsInstanceHost'    : masterHost ,
-                  'dsInstancePort'    : master.getPort(),
-                  'dsInstanceDn'      : master.getRootDn(),
-                  'dsInstancePswd'    : master.getRootPwd(),
-                  'DNToModify'        : 'cn=schema',
-                  'attributeName'     : 'objectClasses',
-                  'newAttributeValue' : newObjectclass, 
-                  'changetype'        : 'add'
-                }
-              </call>
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Attempt to add entry to servers with deleted objectclass.' % msg1 }
-              </call>
-                                
-              <!-- Try to add entry to servers; should be rejected with error 65
-                (objectclass violation) -->
-              <iterate var="server" in="_topologyServerList">
-                <call function="'addEntry'">
-                  { 'location'       : clientHost,
-                    'dsPath'         : clientPath,
-                    'dsInstanceHost' : server.getHostname(),
-                    'dsInstancePort' : server.getPort(), 
-                    'dsInstanceDn'   : server.getRootDn(),
-                    'dsInstancePswd' : server.getRootPwd(),
-                    'entryToBeAdded' : '%s/replication/testuser-2.ldif' % \
-                                       clientDataDir,
-                    'expectedRC'     : 65
-                  }
-                </call>                             
-              </iterate> 
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Verify the synchronization of the schema on all the servers.' % msg1 }
-              </call>
-                       
-              <!-- Verify the synchronization of the schema among the servers in
-                the topology -->
-              <call function="'verifySchemas'">
-                [ clientHost, clientPath, master, consumerList, '99-user.ldif' ]
-              </call> 
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Verify the synchronization of the trees on all the servers.' % msg1 }
-              </call>
-                
-              <!-- 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 Schema Replication Tests
-          #@TestName            Replication: Schema Replication: Add objectclass
-                                (edit schema file)
-          #@TestID              Add objectclass (edit schema file)
-          #@TestPurpose         Check schema replication when a new objectclass
-                                is added manually
-          #@TestPreamble
-          #@TestSteps           Stop servers
-          #@TestSteps           Edit 99-user.ldif to add new objectclass 
-                                definition on server1
-          #@TestSteps           Start servers
-          #@TestSteps           Add entry of new objectclass on server2
-          #@TestPostamble
-          #@TestResult          Success if schema add and entry add replicated
-          -->               
-          <testcase name="getTestCaseName
-                          ('Add objectclass (edit schema file)')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              
-              <message>
-                 'Test Name = %s' % STAXCurrentTestcase
-              </message>
-
-              <message>
-                '%s Add objectclass. (edit schema file). \
-                 Check schema replication when a new objectclass \
-                 is added manually ' % msg1
-              </message>
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Stop the servers in the topology.' % msg1 }
-              </call>
-
-              <!-- Stop the servers in the topology -->
-              <call function="'stopServers'">
-                [_topologyServerList]
-              </call>
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Modify schema  in "master" server.' % msg1 }
-              </call>
-                                  
-              <!-- Modify schema  in "master" server -->
-              <call function="'copyFile'">
-                { 'location'   : masterHost,
-                  'remotehost' : masterHost,
-                  'srcfile'    : currentSchemaFile,
-                  'destfile'   : provSchemaFile
-                }
-              </call>
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Edit schema file.' % msg1 }
-              </call>
-
-              <call function="'LdifModifyWithScript'">
-                { 'location'    : masterHost,
-                  'dsPath'      : masterPath, 
-                  'sourceLdif'  : provSchemaFile,
-                  'changesLdif' : '%s/replication/schemamods-0.ldif' % \
-                                  masterDataDir,
-                  'targetLdif'  : currentSchemaFile
-                }
-              </call>
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Stop the servers in the topology.' % msg1 }
-              </call>
-                                                              
-              <!-- Start the servers in the topology -->
-              <call function="'startServers'">
-                [_topologyServerList]
-              </call>                                                                  
-
-              <call function="'Sleep'">
-                { 'sleepForMilliSeconds'  :  1000 }
-              </call>
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Add entry to "consumer" server.' % msg1 }
-              </call>
-                
-              <!-- Add entry to "consumer" server -->                       
-              <call function="'addEntry'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : consumerHost,
-                  'dsInstancePort' : consumer.getPort(), 
-                  'dsInstanceDn'   : consumer.getRootDn(),
-                  'dsInstancePswd' : consumer.getRootPwd(),
-                  'entryToBeAdded' : '%s/replication/newtestuser-0.ldif' % \
-                                     clientDataDir,
-                  'knownIssue'     : 'OPENDJ-452'
-                }
-              </call>           
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Verify the synchronization of the schema on all the servers.' % msg1 }
-              </call>
-                       
-              <!-- Verify the synchronization of the schema among the servers in
-                the topology -->          
-              <call function="'verifySchemas'">
-                [ clientHost, clientPath, master, consumerList, '99-user.ldif' ]
-              </call> 
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Verify the synchronization of the trees on all the servers.' % msg1 }
-              </call>
-                
-              <!-- 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 Schema Replication Tests
-          #@TestName            Replication: Schema Replication: Add 
-                                attributetype (edit schema file)
-          #@TestID              Add attributetype (edit schema file)
-          #@TestPurpose         Check schema replication when a new 
-                                attributetype is added manually
-          #@TestPreamble
-          #@TestSteps           Stop servers
-          #@TestSteps           Edit 99-user.ldif to add new objectclass and 
-                                new attributeType definition on server1            
-          #@TestSteps           Start servers
-          #@TestSteps           Add new entry containing new objectclass and
-                                new attributeType on server2               
-          #@TestPostamble
-          #@TestResult          Success if schema add and entry adds replicated
-          -->               
-          <testcase name="getTestCaseName
-                          ('Add attributetype (edit schema file)')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                 'Replication: Schema Replication: Add attributetype (edit \
-                 schema file). Check schema replication when a new \
-                 attributetype is added manually'
-              </message>
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Stop the servers in the topology.' % msg1 }
-              </call>
-
-              <!-- Stop the servers in the topology -->
-              <call function="'stopServers'">
-                [_topologyServerList]
-              </call>
- 
-               <call function="'testStep'">
-                { 'stepMessage' : '%s Modify schema  in "master" server .' % msg1 }
-              </call>
-                                 
-              <!-- Modify schema  in "master" server -->
-              <call function="'copyFile'">
-                { 'location'   : masterHost,
-                  'remotehost' : masterHost,
-                  'srcfile'    : currentSchemaFile,
-                  'destfile'   : provSchemaFile
-                }
-              </call>
-              <call function="'LdifModifyWithScript'">
-                { 'location'    : masterHost,
-                  'dsPath'      : masterPath, 
-                  'sourceLdif'  : provSchemaFile,
-                  'changesLdif' : '%s/replication/schemamods-1.ldif' % \
-                                  masterDataDir,
-                  'targetLdif'  : currentSchemaFile
-                }
-              </call>
-
-               <call function="'testStep'">
-                { 'stepMessage' : '%s Start the servers in the topology.' % msg1 }
-              </call>
-                                                              
-              <!-- Start the servers in the topology -->
-              <call function="'startServers'">
-                [_topologyServerList]
-              </call>                                                                                                     
-
-              <call function="'Sleep'">
-                { 'sleepForMilliSeconds'  :  1000 }
-              </call>
-
-               <call function="'testStep'">
-                { 'stepMessage' : '%s Add entry to "consumer" server.' % msg1 }
-              </call>
-                                
-              <!-- Add entry to "consumer" server -->                       
-              <call function="'addEntry'">
-                { 'location'       : clientHost,
-                  'dsPath'         : clientPath,
-                  'dsInstanceHost' : consumerHost,
-                  'dsInstancePort' : consumer.getPort(), 
-                  'dsInstanceDn'   : consumer.getRootDn(),
-                  'dsInstancePswd' : consumer.getRootPwd(),
-                  'entryToBeAdded' : '%s/replication/newtestuser-1.ldif' % \
-                                     clientDataDir,
-                  'knownIssue'     : 'OPENDJ-452'
-                }
-              </call>           
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Verify the synchronization of the schema on all the servers.' % msg1 }
-              </call>
-                       
-              <!-- Verify the synchronization of the schema among the servers in
-                the topology -->          
-              <call function="'verifySchemas'">
-                [ clientHost, clientPath, master, consumerList, '99-user.ldif' ]
-              </call> 
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Verify the synchronization of the trees on all the servers.' % msg1 }
-              </call>
-                
-              <!-- 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 Schema Replication Tests
-          #@TestName            Replication: Schema Replication: Delete 
-                                objectclass (edit schema file)
-          #@TestID              Delete objectclass (edit schema file)
-          #@TestPurpose         Check schema replication when an objectclass is
-                                deleted manually
-          #@TestPreamble
-          #@TestSteps           Stop servers
-          #@TestSteps           Edit 99-user.ldif to remove user-defined 
-                                objectclass definition on server1
-          #@TestSteps           Start servers              
-          #@TestSteps           Delete entry on server1
-          #@TestSteps           Add entry containing  removed objectclass on
-                                every server                          
-          #@TestPostamble
-          #@TestResult          Success if schema remove replicated and last
-                                entry add rejected on all servers (error 65:
-                                objectclass violation)
-          -->                    
-          <testcase name="getTestCaseName
-                          ('Delete objectclass (edit schema file)')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                 'Replication: Schema Replication: Delete objectclass (edit \
-                 schema file). Check schema replication when an objectclass is \
-                 deleted manually'
-              </message>
-
-               <call function="'testStep'">
-                { 'stepMessage' : '%s Stop the servers in the topology.' % msg1 }
-              </call>
-
-              <!-- Stop the servers in the topology -->
-              <call function="'stopServers'">
-                [_topologyServerList]
-              </call>
-
-               <call function="'testStep'">
-                { 'stepMessage' : '%s Modify schema  in "master" server.' % msg1 }
-              </call>
-                                  
-              <!-- Modify schema  in "master" server -->
-              <call function="'copyFile'">
-                { 'location'   : masterHost,
-                  'remotehost' : masterHost,
-                  'srcfile'    : currentSchemaFile,
-                  'destfile'   : provSchemaFile
-                }
-              </call>
-              <call function="'LdifModifyWithScript'">
-                { 'location'    : masterHost,
-                  'dsPath'      : masterPath, 
-                  'sourceLdif'  : provSchemaFile,
-                  'changesLdif' : '%s/replication/schemamods-2.ldif' % \
-                                  masterDataDir,
-                  'targetLdif'  : currentSchemaFile
-                }
-              </call>
-
-               <call function="'testStep'">
-                { 'stepMessage' : '%s Start the servers in the topology.' % msg1 }
-              </call>
-                                                              
-              <!-- Start the servers in the topology -->
-              <call function="'startServers'">
-                [_topologyServerList]
-              </call>                                                     
-
-               <call function="'testStep'">
-                { 'stepMessage' : '%s Delete previously added entry.' % msg1 }
-              </call>
-                
-              <!-- Delete previously added entry -->
-              <call function="'ldapDeleteWithScript'">
-                { 'location'       :  clientHost,
-                  'dsPath'         :  clientPath,
-                  'dsInstanceHost' :  master.getHostname(),
-                  'dsInstancePort' :  master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' :  master.getRootPwd(),
-                  'dsDn'    :  ['cn=newtestuser-0,ou=People,%s' % synchroSuffix],
-                  'knownIssue'     : 'OPENDJ-452'
+                <!-- Specific to replication tests -->
+                <script>
+                  msg1 = 'Replication: Schema:'
+                  synchroSuffix = master.getSynchronizedSuffixList()[0].getSuffixDn()    
                   
-
-                }
-              </call>
-                                
-              <call function="'Sleep'">
-                { 'sleepForMilliSeconds'  :  1000 }
-              </call>
-
-               <call function="'testStep'">
-                { 'stepMessage' : '%s Try to add entry to servers.' % msg1 }
-              </call>
-                                
-              <!-- Try to add entry to servers; should be rejected with error 65
-                (objectclass violation) -->
-              <!-- If the add doesn't return 65, it may mean we came across
-                issue OPENDJ-453 (Manual schema objectclass delete not replicated) -->
-              <iterate var="server" in="_topologyServerList">
-                <call function="'addEntry'">
-                  { 'location'       : clientHost,
-                    'dsPath'         : clientPath,
-                    'dsInstanceHost' : server.getHostname(),
-                    'dsInstancePort' : server.getPort(), 
-                    'dsInstanceDn'   : server.getRootDn(),
-                    'dsInstancePswd' : server.getRootPwd(),
-                    'entryToBeAdded' : '%s/replication/newtestuser-0.ldif' % \
-                                       clientDataDir,
-                    'expectedRC'     : 65,
-                    'knownIssue'     : 'OPENDJ-453'
-                  }
-                </call>                             
-              </iterate> 
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Verify the synchronization of the schema on all the servers.' % msg1 }
-              </call>
-                       
-              <!-- Verify the synchronization of the schema among the servers in
-                the topology -->
-              <call function="'verifySchemas'">
-                [ clientHost, clientPath, master, consumerList, '99-user.ldif' ]
-              </call> 
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Verify the synchronization of the trees on all the servers.' % msg1 }
-              </call>
-                
-              <!-- 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 Schema Replication Tests
-          #@TestName            Replication: Schema Replication: Modify 
-                                objectclass (edit schema file)
-          #@TestID              Modify objectclass (edit schema file)
-          #@TestPurpose         Check schema replication when an objectclass is
-                                modified manually
-          #@TestPreamble
-          #@TestSteps           Stop servers
-          #@TestSteps           Edit 99-user.ldif to modify user-defined 
-                                objectclass (make attributes MANDATORY) on
-                                server1
-          #@TestSteps           Start servers              
-          #@TestSteps           Add entry containing newly added objectclass but
-                                without required attributes on every server
-          #@TestPostamble
-          #@TestResult          Success if schema modify replicated and entry
-                                add rejected with error 65 (objectclass 
-                                violation) on all servers
-          -->                    
-          <testcase name="getTestCaseName
-                          ('Modify objectclass (edit schema file)')">
-            <sequence>            
-              <call function="'testCase_Preamble'"/>
-              <message>
-                 'Replication: Schema Replication: Modify objectclass (edit \
-                 schema file). Check schema replication when an objectclass is \
-                 modified manually'
-              </message>
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Stop the servers in the topology.' % msg1 }
-              </call>
-
-              <!-- Stop the servers in the topology -->
-              <call function="'stopServers'">
-                [_topologyServerList]
-              </call>
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Modify schema  in "master" server.' % msg1 }
-              </call>
-                                
-              <!-- Modify schema  in "master" server -->
-              <call function="'copyFile'">
-                { 'location'   : masterHost,
-                  'remotehost' : masterHost,
-                  'srcfile'    : currentSchemaFile,
-                  'destfile'   : provSchemaFile
-                }
-              </call>
-              <call function="'LdifModifyWithScript'">
-                { 'location'    : masterHost,
-                  'dsPath'      : masterPath, 
-                  'sourceLdif'  : provSchemaFile,
-                  'changesLdif' : '%s/replication/schemamods-3.ldif' % \
-                                  masterDataDir,
-                  'targetLdif'  : currentSchemaFile 
-                }
-              </call>
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Start the servers in the topology.' % msg1 }
-              </call>
-                                                              
-              <!-- Start the servers in the topology -->
-              <call function="'startServers'">
-                [_topologyServerList]
-              </call>                     
-
-              <call function="'Sleep'">
-                { 'sleepForMilliSeconds'  :  1000 }
-              </call>
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Try to add entry to servers.' % msg1 }
-              </call>
-                                                                                                                                
-              <!-- Try to add entry to servers; should be rejected with error 65
-                (objectclass violation) -->
-              <!-- If the add doesn't return 65, it may mean we came across
-                issue OPENDJ-453 (Manual schema objectclass delete not replicated) -->
-              <iterate var="server" in="_topologyServerList">
-                <call function="'addEntry'">
-                  { 'location'       : clientHost,
-                    'dsPath'         : clientPath,
-                    'dsInstanceHost' : server.getHostname(),
-                    'dsInstancePort' : server.getPort(), 
-                    'dsInstanceDn'   : server.getRootDn(),
-                    'dsInstancePswd' : server.getRootPwd(),
-                    'entryToBeAdded' : '%s/replication/newtestuser-2.ldif' % \
-                                       clientDataDir,
-                    'expectedRC'     : 65,
-                    'knownIssue'     : ['OPENDJ-453','OPENDJ-452']
-                  }
-                </call>                             
-              </iterate> 
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Verify the synchronization of the schema on all the servers.' % msg1 }
-              </call>
-                       
-              <!-- Verify the synchronization of the schema among the servers in
-                the topology -->
-              <!-- Since this testcase inherits the 99-user.ldif from the one
-                before, as long as OPENDJ-453 is still present, the schema files will
-                differ as the second server will still have newobjectclass-0 -->
-              <call function="'verifySchemas'">
-                [ clientHost, clientPath, master, consumerList, '99-user.ldif',
-                  'OPENDJ-453' ]
-              </call> 
-
-              <call function="'testStep'">
-                { 'stepMessage' : '%s Verify the synchronization of the trees on all the servers.' % msg1 }
-              </call>
-                
-              <!-- 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 Schema' }
-          </call>
-                          
-          <call function="'testSuite_Postamble'"/>
+                  currentSchemaFile = '%s/config/schema/99-user.ldif' % masterPath
+                  provSchemaFile = '%s/../last-99-user.ldif' % masterPath                    
                   
-        </sequence>
+                  consumer = consumerList[0]
+                  consumerHost = consumer.getHostname()
+                </script>
+                                                    
+                <!-- List of Test Cases -->
+                <script>
+                  testsList=[]
+                  testsList.append('replication_schema_001')
+                  testsList.append('replication_schema_002')
+                  testsList.append('replication_schema_003')
+                  testsList.append('replication_schema_004')
+                  testsList.append('replication_schema_005')
+                  testsList.append('replication_schema_006')
+                  testsList.append('replication_schema_007')
+                  testsList.append('replication_schema_008')
+                </script>
 
+                <!-- Execute the Tests -->
+                <iterate var="__test" in="testsList">
+                  <sequence>
+                    <call function="'%s' % (__test)" />
+                  </sequence>
+                </iterate>                
+                                
+              </sequence>
+
+              <catch exception="'STAFException.TestSuite.SetupException'">
+                <sequence>
+                  <message log="1" level="'fatal'">
+                    'Setup of test suite failed.'
+                  </message>
+                  <rethrow/>
+                </sequence>
+              </catch>
+  
+              <finally>
+                <message>'Test Cases Completed.'</message>
+              </finally>
+
+            </try>
+
+          </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>
+ 
+        </try>
       </block>
-    
     </sequence>
-
   </function>
-
 </stax>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/schema/schema_tests.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/schema/schema_tests.xml
new file mode 100644
index 0000000..85cac80
--- /dev/null
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/schema/schema_tests.xml
@@ -0,0 +1,1131 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../../../shared/stax.dtd">
+<!--
+ ! CDDL HEADER START
+ !
+ ! The contents of this file are subject to the terms of the
+ ! 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.
+ ! 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,
+ ! 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 2007-2008 Sun Microsystems, Inc.
+ !      Portions Copyright 2011-2012 ForgeRock AS.
+ ! -->
+<stax>
+                                    
+  <!--- Test Case information
+  #@TestMarker          Replication Schema Replication Tests
+  #@TestName            Replication: Schema Replication: Add objectclass
+  #@TestID              Add objectclass
+  #@TestPurpose         Check schema replication when a new objectclass 
+                        is added
+  #@TestPreamble        Load entries
+  #@TestSteps           Add new objectclass definition on server1
+  #@TestSteps           Add entry of new objectclass on server2
+  #@TestPostamble
+  #@TestResult          Success if schema add and entry add replicated
+  -->
+  <function name="replication_schema_001" scope="local">
+    <testcase name="getTestCaseName('Add objectclass')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check schema replication when a new objectclass is added.' % msg1 }
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Load entries into "master" server.' % msg1 }
+            </call>
+                            
+            <!-- Load entries into "master" server -->                                
+            <call function="'addEntry'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(), 
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'entryToBeAdded' : '%s/replication/Example.ldif' % \
+                                   clientDataDir
+              }
+            </call>                     
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Add new object class.' % msg1 }
+            </call>
+                              
+            <script>
+              newObjectclass = '( testobjectclass-oid NAME \'testobjectclass-0\' SUP person MAY ( street $ c ) X-ORIGIN \'user defined\' )'
+            </script>
+              
+            <!-- Modify schema  in "master" server -->
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'            : masterPath,
+                'dsInstanceHost'    : masterHost ,
+                'dsInstancePort'    : master.getPort(),
+                'dsInstanceDn'      : master.getRootDn(),
+                'dsInstancePswd'    : master.getRootPwd(),
+                'DNToModify'        : 'cn=schema',
+                'attributeName'     : 'objectClasses',
+                'newAttributeValue' : newObjectclass, 
+                'changetype'        : 'add'
+              }
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Add entry to "consumer" server using new objectclass.' % msg1 }
+            </call>
+
+            <!-- Add entry to "consumer" server -->                       
+            <call function="'addEntry'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : consumerHost,
+                'dsInstancePort' : consumer.getPort(), 
+                'dsInstanceDn'   : consumer.getRootDn(),
+                'dsInstancePswd' : consumer.getRootPwd(),
+                'entryToBeAdded' : '%s/replication/testuser-0.ldif' % \
+                                   clientDataDir
+              }
+            </call>           
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify the synchronization of the schema on all the servers.' % msg1 }
+            </call>
+                    
+            <!-- Verify the synchronization of the schema among the servers 
+              in the topology -->          
+            <call function="'verifySchemas'">
+              [ clientHost, clientPath, master, consumerList, '99-user.ldif' ]
+            </call> 
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify the synchronization of the trees on all the servers.' % msg1 }
+            </call>
+              
+            <!-- Verify the synchronization of the trees among the servers in 
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>           
+                                
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>                     
+          
+
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Schema Replication Tests
+  #@TestName            Replication: Schema Replication: 
+                        Add attributetype
+  #@TestID              Add attributetype
+  #@TestPurpose         Check schema replication when a new 
+                        attributetype is added
+  #@TestPreamble
+  #@TestSteps           Add new attributeType and new objectclass 
+                        definition on server1
+  #@TestSteps           Add new entry containing new objectclass and
+                        new attributeType on server2 
+  #@TestPostamble
+  #@TestResult          Success if schema add and entry adds replicated
+  -->
+  <function name="replication_schema_002" scope="local">
+    <testcase name="getTestCaseName('Add attributetype')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check schema replication when a new Attributetype is added.' % msg1 }
+            </call>
+                                
+            <script>
+              newObjectclass = '( testobjectclass1-oid NAME \'testobjectclass-1\' SUP person MAY ( street $ testattribute-1 $ c ) X-ORIGIN \'user defined\' )'
+              newAttributetype = '( testattribute1-oid NAME \'testattribute-1\' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN \'user defined\' )'
+            </script>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Add newAttributetype in "master" server.' % msg1 }
+            </call>
+              
+            <!-- Modify schema  in "master" server -->
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'            : masterPath,
+                'dsInstanceHost'    : masterHost ,
+                'dsInstancePort'    : master.getPort(),
+                'dsInstanceDn'      : master.getRootDn(),
+                'dsInstancePswd'    : master.getRootPwd(),
+                'DNToModify'        : 'cn=schema',
+                'attributeName'     : 'attributeTypes',
+                'newAttributeValue' : newAttributetype, 
+                'changetype'        : 'add'
+              }
+            </call>
+            
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Add newObjectclass in "master" server.' % msg1 }
+            </call>
+          
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'            : masterPath,
+                'dsInstanceHost'    : masterHost ,
+                'dsInstancePort'    : master.getPort(),
+                'dsInstanceDn'      : master.getRootDn(),
+                'dsInstancePswd'    : master.getRootPwd(),
+                'DNToModify'        : 'cn=schema',
+                'attributeName'     : 'objectClasses',
+                'newAttributeValue' : newObjectclass, 
+                'changetype'        : 'add'
+              }
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Add entry to "consumer" server.' % msg1 }
+            </call>
+
+            <!-- Add entry to "consumer" server -->                       
+            <call function="'addEntry'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : consumerHost,
+                'dsInstancePort' : consumer.getPort(), 
+                'dsInstanceDn'   : consumer.getRootDn(),
+                'dsInstancePswd' : consumer.getRootPwd(),
+                'entryToBeAdded' : '%s/replication/testuser-1.ldif' % \
+                                   clientDataDir
+              }
+            </call>           
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify the synchronization of the schema on all the servers.' % msg1 }
+            </call>
+
+            <!-- Verify the synchronization of the schema among the servers in
+              the topology -->          
+            <call function="'verifySchemas'">
+              [ clientHost, clientPath, master, consumerList, '99-user.ldif' ]
+            </call> 
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify the synchronization of the trees on all the servers.' % msg1 }
+            </call>
+              
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>               
+                                                
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>                                           
+            
+
+
+  <!-- Test Case information
+  #@TestMarker          Replication Schema Replication Tests
+  #@TestName            Replication: Schema Replication: 
+                        Delete objectclass
+  #@TestID              Delete objectclass
+  #@TestPurpose         Check schema replication when an objectclass 
+                        is deleted
+  #@TestPreamble
+  #@TestSteps           Remove user-defined objectclass definition on
+                        server1
+  #@TestSteps           Delete entry on server1
+  #@TestSteps           Add entry containing  removed objectclass on
+                        every server                          
+  #@TestPostamble
+  #@TestResult          Success if schema remove replicated and last
+                        entry add rejected on all servers (error 65:
+                        objectclass violation)
+  -->
+  <function name="replication_schema_003" scope="local">
+    <testcase name="getTestCaseName('Delete objectclass')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check schema replication when an objectclass is deleted.' % msg1 }
+            </call>
+                                
+            <script>
+              newObjectclass = '( testobjectclass-oid NAME \'testobjectclass-0\' SUP person MAY ( street $ c ) X-ORIGIN \'user defined\' )'
+            </script>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Delete newObjectclass in "master" server.' % msg1 }
+            </call>
+              
+            <!-- Modify schema  in "master" server -->
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'            : masterPath,
+                'dsInstanceHost'    : masterHost ,
+                'dsInstancePort'    : master.getPort(),
+                'dsInstanceDn'      : master.getRootDn(),
+                'dsInstancePswd'    : master.getRootPwd(),
+                'DNToModify'        : 'cn=schema',
+                'attributeName'     : 'objectClasses',
+                'newAttributeValue' : newObjectclass, 
+                'changetype'        : 'delete'
+              }
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Delete previously added entry.' % msg1 }
+            </call>
+
+            <!-- Delete previously added entry -->
+            <call function="'ldapDeleteWithScript'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : master.getHostname(),
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'dsDn'       :  ['cn=testuser-0,ou=People,%s' % synchroSuffix]
+              }
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Attempt to add entry to servers with deleted objectclass.' % msg1 }
+            </call>
+                              
+            <!-- Try to add entry to servers; should be rejected with error 65
+              (objectclass violation) -->
+            <iterate var="server" in="_topologyServerList">
+              <call function="'addEntry'">
+                { 'location'       : clientHost,
+                  'dsPath'         : clientPath,
+                  'dsInstanceHost' : server.getHostname(),
+                  'dsInstancePort' : server.getPort(), 
+                  'dsInstanceDn'   : server.getRootDn(),
+                  'dsInstancePswd' : server.getRootPwd(),
+                  'entryToBeAdded' : '%s/replication/testuser-0.ldif' % \
+                                     clientDataDir,
+                  'expectedRC'     : 65
+                }
+              </call>                             
+            </iterate> 
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify the synchronization of the schema on all the servers.' % msg1 }
+            </call>
+                     
+            <!-- Verify the synchronization of the schema among the servers in
+              the topology -->
+            <call function="'verifySchemas'">
+              [ clientHost, clientPath, master, consumerList, '99-user.ldif' ]
+            </call> 
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify the synchronization of the trees on all the servers.' % msg1 }
+            </call>
+              
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+           
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>                                                                     
+ 
+
+
+  <!-- Test Case information
+  #@TestMarker          Replication Schema Replication Tests
+  #@TestName            Replication: Schema Replication: 
+                        Modify objectclass
+  #@TestID              Modify objectclass
+  #@TestPurpose         Check schema replication when an objectclass is
+                        modified
+  #@TestPreamble
+  #@TestSteps           Remove user-defined objectclass definition on
+                        server1
+  #@TestSteps           Add modified version of removed user-defined 
+                        objectclass on server1 (make attributes
+                        MANDATORY)
+  #@TestSteps           Add entry containing newly added objectclass but
+                        without required attributes on every server
+  #@TestPostamble
+  #@TestResult          Success if schema modify replicated and entry
+                        add rejected with error 65 (objectclass 
+                        violation) on all servers
+  -->
+  <function name="replication_schema_004" scope="local">
+    <testcase name="getTestCaseName('Modify objectclass')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check schema replication when an objectclass is modified.' % msg1 }
+            </call>
+                                
+            <script>       
+              oldObjectclass = '( testobjectclass1-oid NAME \'testobjectclass-1\' SUP person MAY ( street $ testattribute-1 $ c ) X-ORIGIN \'user defined\' )'                             
+              newObjectclass = '( testobjectclass1-oid NAME \'testobjectclass-1\' SUP person MUST ( street $ testattribute-1 $ c ) X-ORIGIN \'user defined\' )'
+            </script>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Delete oldObjectclass in "master" server.' % msg1 }
+            </call>
+              
+            <!-- Modify schema  in "master" server -->
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'            : masterPath,
+                'dsInstanceHost'    : masterHost ,
+                'dsInstancePort'    : master.getPort(),
+                'dsInstanceDn'      : master.getRootDn(),
+                'dsInstancePswd'    : master.getRootPwd(),
+                'DNToModify'        : 'cn=schema',
+                'attributeName'     : 'objectClasses',
+                'newAttributeValue' : oldObjectclass, 
+                'changetype'        : 'delete'
+              }
+            </call>
+            
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Add newObjectclass in "master" server.' % msg1 }
+            </call>
+     
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'            : masterPath,
+                'dsInstanceHost'    : masterHost ,
+                'dsInstancePort'    : master.getPort(),
+                'dsInstanceDn'      : master.getRootDn(),
+                'dsInstancePswd'    : master.getRootPwd(),
+                'DNToModify'        : 'cn=schema',
+                'attributeName'     : 'objectClasses',
+                'newAttributeValue' : newObjectclass, 
+                'changetype'        : 'add'
+              }
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Attempt to add entry to servers with deleted objectclass.' % msg1 }
+            </call>
+                              
+            <!-- Try to add entry to servers; should be rejected with error 65
+              (objectclass violation) -->
+            <iterate var="server" in="_topologyServerList">
+              <call function="'addEntry'">
+                { 'location'       : clientHost,
+                  'dsPath'         : clientPath,
+                  'dsInstanceHost' : server.getHostname(),
+                  'dsInstancePort' : server.getPort(), 
+                  'dsInstanceDn'   : server.getRootDn(),
+                  'dsInstancePswd' : server.getRootPwd(),
+                  'entryToBeAdded' : '%s/replication/testuser-2.ldif' % \
+                                     clientDataDir,
+                  'expectedRC'     : 65
+                }
+              </call>                             
+            </iterate> 
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify the synchronization of the schema on all the servers.' % msg1 }
+            </call>
+                     
+            <!-- Verify the synchronization of the schema among the servers in
+              the topology -->
+            <call function="'verifySchemas'">
+              [ clientHost, clientPath, master, consumerList, '99-user.ldif' ]
+            </call> 
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify the synchronization of the trees on all the servers.' % msg1 }
+            </call>
+              
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+                 
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>                                                                     
+
+
+                                    
+  <!--- Test Case information
+  #@TestMarker          Replication Schema Replication Tests
+  #@TestName            Replication: Schema Replication: Add objectclass
+                        (edit schema file)
+  #@TestID              Add objectclass (edit schema file)
+  #@TestPurpose         Check schema replication when a new objectclass
+                        is added manually
+  #@TestPreamble
+  #@TestSteps           Stop servers
+  #@TestSteps           Edit 99-user.ldif to add new objectclass 
+                        definition on server1
+  #@TestSteps           Start servers
+  #@TestSteps           Add entry of new objectclass on server2
+  #@TestPostamble
+  #@TestResult          Success if schema add and entry add replicated
+  -->
+  <function name="replication_schema_005" scope="local">
+    <testcase name="getTestCaseName('Add objectclass (edit schema file)')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check schema replication when a new objectclass is manually added.' % msg1 }
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Stop the servers in the topology.' % msg1 }
+            </call>
+
+            <!-- Stop the servers in the topology -->
+            <call function="'stopServers'">
+              [_topologyServerList]
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Modify schema  in "master" server.' % msg1 }
+            </call>
+                                
+            <!-- Modify schema  in "master" server -->
+            <call function="'copyFile'">
+              { 'location'   : masterHost,
+                'remotehost' : masterHost,
+                'srcfile'    : currentSchemaFile,
+                'destfile'   : provSchemaFile
+              }
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Edit schema file.' % msg1 }
+            </call>
+
+            <call function="'LdifModifyWithScript'">
+              { 'location'    : masterHost,
+                'dsPath'      : masterPath, 
+                'sourceLdif'  : provSchemaFile,
+                'changesLdif' : '%s/replication/schemamods-0.ldif' % \
+                                masterDataDir,
+                'targetLdif'  : currentSchemaFile
+              }
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Stop the servers in the topology.' % msg1 }
+            </call>
+                                                            
+            <!-- Start the servers in the topology -->
+            <call function="'startServers'">
+              [_topologyServerList]
+            </call>                                                                  
+
+            <call function="'Sleep'">
+              { 'sleepForMilliSeconds'  :  1000 }
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Add entry to "consumer" server.' % msg1 }
+            </call>
+              
+            <!-- Add entry to "consumer" server -->                       
+            <call function="'addEntry'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : consumerHost,
+                'dsInstancePort' : consumer.getPort(), 
+                'dsInstanceDn'   : consumer.getRootDn(),
+                'dsInstancePswd' : consumer.getRootPwd(),
+                'entryToBeAdded' : '%s/replication/newtestuser-0.ldif' % \
+                                   clientDataDir,
+                'knownIssue'     : 'OPENDJ-452'
+              }
+            </call>           
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify the synchronization of the schema on all the servers.' % msg1 }
+            </call>
+                     
+            <!-- Verify the synchronization of the schema among the servers in
+              the topology -->          
+            <call function="'verifySchemas'">
+              [ clientHost, clientPath, master, consumerList, '99-user.ldif' ]
+            </call> 
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify the synchronization of the trees on all the servers.' % msg1 }
+            </call>
+              
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+             
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>                     
+          
+
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Schema Replication Tests
+  #@TestName            Replication: Schema Replication: Add 
+                        attributetype (edit schema file)
+  #@TestID              Add attributetype (edit schema file)
+  #@TestPurpose         Check schema replication when a new 
+                        attributetype is added manually
+  #@TestPreamble
+  #@TestSteps           Stop servers
+  #@TestSteps           Edit 99-user.ldif to add new objectclass and 
+                        new attributeType definition on server1            
+  #@TestSteps           Start servers
+  #@TestSteps           Add new entry containing new objectclass and
+                        new attributeType on server2               
+  #@TestPostamble
+  #@TestResult          Success if schema add and entry adds replicated
+  -->
+  <function name="replication_schema_006" scope="local">
+    <testcase name="getTestCaseName('Add attributetype (edit schema file)')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check schema replication when a new attributetype is manually added.' % msg1 }
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Stop the servers in the topology.' % msg1 }
+            </call>
+
+            <!-- Stop the servers in the topology -->
+            <call function="'stopServers'">
+              [_topologyServerList]
+            </call>
+
+             <call function="'testStep'">
+              { 'stepMessage' : '%s Modify schema  in "master" server .' % msg1 }
+            </call>
+                               
+            <!-- Modify schema  in "master" server -->
+            <call function="'copyFile'">
+              { 'location'   : masterHost,
+                'remotehost' : masterHost,
+                'srcfile'    : currentSchemaFile,
+                'destfile'   : provSchemaFile
+              }
+            </call>
+            <call function="'LdifModifyWithScript'">
+              { 'location'    : masterHost,
+                'dsPath'      : masterPath, 
+                'sourceLdif'  : provSchemaFile,
+                'changesLdif' : '%s/replication/schemamods-1.ldif' % \
+                                masterDataDir,
+                'targetLdif'  : currentSchemaFile
+              }
+            </call>
+
+             <call function="'testStep'">
+              { 'stepMessage' : '%s Start the servers in the topology.' % msg1 }
+            </call>
+                                                            
+            <!-- Start the servers in the topology -->
+            <call function="'startServers'">
+              [_topologyServerList]
+            </call>                                                                                                     
+
+            <call function="'Sleep'">
+              { 'sleepForMilliSeconds'  :  1000 }
+            </call>
+
+             <call function="'testStep'">
+              { 'stepMessage' : '%s Add entry to "consumer" server.' % msg1 }
+            </call>
+                              
+            <!-- Add entry to "consumer" server -->                       
+            <call function="'addEntry'">
+              { 'location'       : clientHost,
+                'dsPath'         : clientPath,
+                'dsInstanceHost' : consumerHost,
+                'dsInstancePort' : consumer.getPort(), 
+                'dsInstanceDn'   : consumer.getRootDn(),
+                'dsInstancePswd' : consumer.getRootPwd(),
+                'entryToBeAdded' : '%s/replication/newtestuser-1.ldif' % \
+                                   clientDataDir,
+                'knownIssue'     : 'OPENDJ-452'
+              }
+            </call>           
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify the synchronization of the schema on all the servers.' % msg1 }
+            </call>
+                     
+            <!-- Verify the synchronization of the schema among the servers in
+              the topology -->          
+            <call function="'verifySchemas'">
+              [ clientHost, clientPath, master, consumerList, '99-user.ldif' ]
+            </call> 
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify the synchronization of the trees on all the servers.' % msg1 }
+            </call>
+              
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->          
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+                 
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>                                           
+            
+
+
+            
+  <!-- Test Case information
+  #@TestMarker          Replication Schema Replication Tests
+  #@TestName            Replication: Schema Replication: Delete 
+                        objectclass (edit schema file)
+  #@TestID              Delete objectclass (edit schema file)
+  #@TestPurpose         Check schema replication when an objectclass is
+                        deleted manually
+  #@TestPreamble
+  #@TestSteps           Stop servers
+  #@TestSteps           Edit 99-user.ldif to remove user-defined 
+                        objectclass definition on server1
+  #@TestSteps           Start servers              
+  #@TestSteps           Delete entry on server1
+  #@TestSteps           Add entry containing  removed objectclass on
+                        every server                          
+  #@TestPostamble
+  #@TestResult          Success if schema remove replicated and last
+                        entry add rejected on all servers (error 65:
+                        objectclass violation)
+  -->
+  <function name="replication_schema_007" scope="local">
+    <testcase name="getTestCaseName('Delete objectclass (edit schema file)')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check schema replication when a new objectclass is manually deleted.' % msg1 }
+            </call>
+
+             <call function="'testStep'">
+              { 'stepMessage' : '%s Stop the servers in the topology.' % msg1 }
+            </call>
+
+            <!-- Stop the servers in the topology -->
+            <call function="'stopServers'">
+              [_topologyServerList]
+            </call>
+
+             <call function="'testStep'">
+              { 'stepMessage' : '%s Modify schema  in "master" server.' % msg1 }
+            </call>
+                                
+            <!-- Modify schema  in "master" server -->
+            <call function="'copyFile'">
+              { 'location'   : masterHost,
+                'remotehost' : masterHost,
+                'srcfile'    : currentSchemaFile,
+                'destfile'   : provSchemaFile
+              }
+            </call>
+            <call function="'LdifModifyWithScript'">
+              { 'location'    : masterHost,
+                'dsPath'      : masterPath, 
+                'sourceLdif'  : provSchemaFile,
+                'changesLdif' : '%s/replication/schemamods-2.ldif' % \
+                                masterDataDir,
+                'targetLdif'  : currentSchemaFile
+              }
+            </call>
+
+             <call function="'testStep'">
+              { 'stepMessage' : '%s Start the servers in the topology.' % msg1 }
+            </call>
+                                                            
+            <!-- Start the servers in the topology -->
+            <call function="'startServers'">
+              [_topologyServerList]
+            </call>                                                     
+
+             <call function="'testStep'">
+              { 'stepMessage' : '%s Delete previously added entry.' % msg1 }
+            </call>
+              
+            <!-- Delete previously added entry -->
+            <call function="'ldapDeleteWithScript'">
+              { 'location'       :  clientHost,
+                'dsPath'         :  clientPath,
+                'dsInstanceHost' :  master.getHostname(),
+                'dsInstancePort' :  master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' :  master.getRootPwd(),
+                'dsDn'    :  ['cn=newtestuser-0,ou=People,%s' % synchroSuffix],
+                'knownIssue'     : 'OPENDJ-452'
+                
+
+              }
+            </call>
+                              
+            <call function="'Sleep'">
+              { 'sleepForMilliSeconds'  :  1000 }
+            </call>
+
+             <call function="'testStep'">
+              { 'stepMessage' : '%s Try to add entry to servers.' % msg1 }
+            </call>
+                              
+            <!-- Try to add entry to servers; should be rejected with error 65
+              (objectclass violation) -->
+            <!-- If the add doesn't return 65, it may mean we came across
+              issue OPENDJ-453 (Manual schema objectclass delete not replicated) -->
+            <iterate var="server" in="_topologyServerList">
+              <call function="'addEntry'">
+                { 'location'       : clientHost,
+                  'dsPath'         : clientPath,
+                  'dsInstanceHost' : server.getHostname(),
+                  'dsInstancePort' : server.getPort(), 
+                  'dsInstanceDn'   : server.getRootDn(),
+                  'dsInstancePswd' : server.getRootPwd(),
+                  'entryToBeAdded' : '%s/replication/newtestuser-0.ldif' % \
+                                     clientDataDir,
+                  'expectedRC'     : 65,
+                  'knownIssue'     : 'OPENDJ-453'
+                }
+              </call>                             
+            </iterate> 
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify the synchronization of the schema on all the servers.' % msg1 }
+            </call>
+                     
+            <!-- Verify the synchronization of the schema among the servers in
+              the topology -->
+            <call function="'verifySchemas'">
+              [ clientHost, clientPath, master, consumerList, '99-user.ldif' ]
+            </call> 
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify the synchronization of the trees on all the servers.' % msg1 }
+            </call>
+              
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+
+  <!-- Test Case information
+  #@TestMarker          Replication Schema Replication Tests
+  #@TestName            Replication: Schema Replication: Modify 
+                        objectclass (edit schema file)
+  #@TestID              Modify objectclass (edit schema file)
+  #@TestPurpose         Check schema replication when an objectclass is
+                        modified manually
+  #@TestPreamble
+  #@TestSteps           Stop servers
+  #@TestSteps           Edit 99-user.ldif to modify user-defined 
+                        objectclass (make attributes MANDATORY) on
+                        server1
+  #@TestSteps           Start servers              
+  #@TestSteps           Add entry containing newly added objectclass but
+                        without required attributes on every server
+  #@TestPostamble
+  #@TestResult          Success if schema modify replicated and entry
+                        add rejected with error 65 (objectclass 
+                        violation) on all servers
+  -->
+  <function name="replication_schema_008" scope="local">
+    <testcase name="getTestCaseName('Modify objectclass (edit schema file)')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+    
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Check schema replication when a new objectclass is manually modified.' % msg1 }
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Stop the servers in the topology.' % msg1 }
+            </call>
+
+            <!-- Stop the servers in the topology -->
+            <call function="'stopServers'">
+              [_topologyServerList]
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Modify schema  in "master" server.' % msg1 }
+            </call>
+                              
+            <!-- Modify schema  in "master" server -->
+            <call function="'copyFile'">
+              { 'location'   : masterHost,
+                'remotehost' : masterHost,
+                'srcfile'    : currentSchemaFile,
+                'destfile'   : provSchemaFile
+              }
+            </call>
+            <call function="'LdifModifyWithScript'">
+              { 'location'    : masterHost,
+                'dsPath'      : masterPath, 
+                'sourceLdif'  : provSchemaFile,
+                'changesLdif' : '%s/replication/schemamods-3.ldif' % \
+                                masterDataDir,
+                'targetLdif'  : currentSchemaFile 
+              }
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Start the servers in the topology.' % msg1 }
+            </call>
+                                                            
+            <!-- Start the servers in the topology -->
+            <call function="'startServers'">
+              [_topologyServerList]
+            </call>                     
+
+            <call function="'Sleep'">
+              { 'sleepForMilliSeconds'  :  1000 }
+            </call>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Try to add entry to servers.' % msg1 }
+            </call>
+                                                                                                                              
+            <!-- Try to add entry to servers; should be rejected with error 65
+              (objectclass violation) -->
+            <!-- If the add doesn't return 65, it may mean we came across
+              issue OPENDJ-453 (Manual schema objectclass delete not replicated) -->
+            <iterate var="server" in="_topologyServerList">
+              <call function="'addEntry'">
+                { 'location'       : clientHost,
+                  'dsPath'         : clientPath,
+                  'dsInstanceHost' : server.getHostname(),
+                  'dsInstancePort' : server.getPort(), 
+                  'dsInstanceDn'   : server.getRootDn(),
+                  'dsInstancePswd' : server.getRootPwd(),
+                  'entryToBeAdded' : '%s/replication/newtestuser-2.ldif' % \
+                                     clientDataDir,
+                  'expectedRC'     : 65,
+                  'knownIssue'     : ['OPENDJ-453','OPENDJ-452']
+                }
+              </call>                             
+            </iterate> 
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify the synchronization of the schema on all the servers.' % msg1 }
+            </call>
+                     
+            <!-- Verify the synchronization of the schema among the servers in
+              the topology -->
+            <!-- Since this testcase inherits the 99-user.ldif from the one
+              before, as long as OPENDJ-453 is still present, the schema files will
+              differ as the second server will still have newobjectclass-0 -->
+            <call function="'verifySchemas'">
+              [ clientHost, clientPath, master, consumerList, '99-user.ldif',
+                'OPENDJ-453' ]
+            </call> 
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Verify the synchronization of the trees on all the servers.' % msg1 }
+            </call>
+              
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call> 
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+</stax>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/totalupdate/totalupdate.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/totalupdate/totalupdate.xml
index e5cc13c..ff431db 100644
--- a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/totalupdate/totalupdate.xml
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/totalupdate/totalupdate.xml
@@ -7,551 +7,141 @@
  ! 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 2007-2010 Sun Microsystems, Inc.
- !      Portions Copyright 2012 ForgeRock AS.
+ !      Copyright 2012 ForgeRock AS.
  ! -->
 <stax>
   <defaultcall function="replication_totalupdate"/>
-  <function name="replication_totalupdate">
+  <function name="replication_totalupdate" scope="local">
     <sequence>
-      <block name="'total-update'">
-        <sequence>
-          <script>
-            if not CurrentTestPath.has_key('group'):
-              CurrentTestPath['group']='replication'
-            CurrentTestPath['suite']=STAXCurrentBlock
-          </script>
-          
-          <call function="'testSuite_Preamble'"/>
-            
-          <!--- Test Suite information
-          #@TestSuiteName       Replication Total Update Tests
-          #@TestSuitePurpose    Verify that all the contents of a given suffix
-                                can be pushed in one shot from one server to
-                                other servers in the topology.
-          #@TestSuiteID         Total Update Tests
-          #@TestSuiteGroup      Total Update
-          #@TestGroup           Replication
-          #@TestScript          replication_totalupdate.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'" >
-            { 'label'    : 'Replication Totalupdate' }
-          </call>
-          
-          <script>
-            server1DataDir = '%s' % server1.getDataDir()
-          </script>
-          
-          <!--- Test Case : Total Update -->          
-          <!--- Test Case information
-          #@TestMarker          Replication Total Update Tests
-          #@TestName            Replication: Total Update: Simple LDIF
-          #@TestID              Simple LDIF
-          #@TestPurpose         Initialize server with total update
-          #@TestPreamble
-          #@TestSteps           Stop server A
-          #@TestSteps           Import data into server A
-          #@TestSteps           Start server A
-          #@TestSteps           Initialise (dsreplication initialize)
-                                every other server from server A
-          #@TestSteps           Check suffix has been initialised on every 
-                                server
-          #@TestSteps           Add entry on server A
-          #@TestPostamble
-          #@TestResult          Success if initialisation call succeeds for all
-                                servers and all servers are synchronised
-          -->                           
-          <testcase name="getTestCaseName('Simple LDIF')">
-            <sequence>
-            
-              <call function="'testCase_Preamble'"/>
-
-              <message>
-                'Replication: Total Update: Simple LDIF. Initialize server \
-                with total update'
-              </message>                                
+      <block name="'replication_totalupdate'">
+        <try>
+          <sequence>
+            <script>
+              CurrentTestPath['group'] = 'replication'        
+              CurrentTestPath['suite'] = 'totalupdate'
               
-              <!-- Stop "master" Directory Server -->
-              <call function="'StopDsWithScript'">
-                { 'location'    : masterHost,
-                  'dsPath'      : masterPath,
-                  'dsHost'      : masterHost,
-                  'dsAdminPort' : master.getAdminPort(),
-                  'dsBindDN'    : master.getRootDn(),
-                  'dsBindPwd'   : master.getRootPwd()
-                }
-              </call>
-              
-              <!-- Check that the Directory Server is stopped -->
-              
-              <!-- Import data into "master" Directory Server -->
-              <call function="'ImportLdifWithScript'">
-                { 'location'     : masterHost,
-                  'dsPath'       : masterPath,
-                  'backEnd'      : DIRECTORY_INSTANCE_BE,
-                  'ldifFile'     : '%s/replication/Example.ldif' % masterDataDir
-                }
-              </call>
-              
-              <!-- Start the Directory Server -->
-              <call function="'StartDsWithScript'">
-                { 'location'  : masterHost,
-                  'dsPath'    : masterPath
-                }
-              </call>
-              
-              <!-- Wait for DS to start -->
-              <call function="'isAlive'">
-                { 'location'         : masterHost,
-                  'dsPath'           : masterPath,
-                  'dsInstanceHost'   : masterHost,
-                  'dsInstancePort'   : master.getPort() ,
-                  'dsInstanceDn'     : master.getRootDn() ,
-                  'dsInstancePswd'   : master.getRootPwd() ,
-                  'noOfLoops'        : 10 ,
-                  'noOfMilliSeconds' : 2000
-                }
-              </call>
-              
-              <!-- Check some data was imported into Directory Server -->
-              <call function="'checkImport'">
-                { 'location'        : masterHost,
-                  'dsPath'          : masterPath,
-                  'dsHost'          : masterHost,
-                  'dsPort'          : master.getPort(),
-                  'dsAdminPort'     : master.getAdminPort(),
-                  'dsDn'            : master.getRootDn(),
-                  'dsPswd'          : master.getRootPwd(),
-                  'expectedEntries' : ['uid=scarter,ou=People,o=example',
-                                       'uid=dmiller, ou=People, o=example',
-                                       'uid=rhunt, ou=People, o=example'],
-                  'startDS'         : 'no'
-                }
-              </call>
+              _group=CurrentTestPath['group']
+              _groupdir='%s/testcases/%s' % (TESTS_DIR,_group)
+              _label = 'Replication TotalUpdate'
+            </script>
 
-
-              <iterate var="server" in="consumerList">
-                <sequence>                                                                            
-                  <!-- Perform the total update -->
-                  <call function="'initializeReplication'">
-                    { 'location'                :  clientHost,
-                      'dsPath'                  :  clientPath,
-                      'dsInstanceHost'          :  server.getHostname(),
-                      'dsInstanceAdminPort'     :  server.getAdminPort(),
-                      'sourceInstanceHost'      :  masterHost,
-                      'sourceInstanceAdminPort' :  master.getAdminPort(),
-                      'replicationDnList'       :  ['o=example']
-                    }
-                  </call>
-                                                            
-                  <!-- Verify the total update -->
-                  <call function="'checkImport'">
-                    { 'location'    : server.getHostname(),
-                      'dsPath'      : '%s/%s' % (server.getDir(),OPENDSNAME),
-                      'dsHost'      : server.getHostname(),
-                      'dsPort'      : server.getPort(),
-                      'dsAdminPort' : server.getAdminPort(),
-                      'dsDn'        : server.getRootDn(),
-                      'dsPswd'      : server.getRootPwd(),
-                      'expectedEntries' : ['uid=scarter,ou=People,o=example',
-                                           'uid=dmiller, ou=People, o=example',
-                                           'uid=rhunt, ou=People, o=example'],
-                      'startDS'  : 'no'
-                    }
-                  </call>                                                                                
-                </sequence>
-              </iterate>
-                
-              <!-- To make sure replication is working: add entry to "master" 
-                server -->
-              <script>
-                listAttr = []
-                listAttr.append('objectclass:top')
-                listAttr.append('objectclass:organizationalperson')
-                listAttr.append('objectclass:inetorgperson')
-                listAttr.append('objectclass:person')
-                listAttr.append('givenname:Professor Moriarty')
-                listAttr.append('sn:Moriarty')
-                listAttr.append('cn:Professor Moriarty')
-                listAttr.append('l:London')
-              </script>
-      
-              <call function="'addAnEntry'">
-                { 'location'       : masterHost,
-                  'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToAdd'        : 'uid=pmoriarty, ou=People, o=example',
-                  'listAttributes' : listAttr
-                }
-              </call>
-                                               
-              <!-- Verify the synchronization of the trees among the servers in
-                the topology -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, master, consumerList, 'o=example' ]
-              </call>
-                           
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>
-
-
-
-          <!--- Test Case information
-          #@TestMarker          Replication Total Update Tests
-          #@TestName            Replication: Total Update: Schema total update
-          #@TestID              Schema total update
-          #@TestPurpose         Initialize the schema with total update.
-          #@TestPreamble
-          #@TestSteps           Add entry belonging to undefined new schema on
-                                server B
-          #@TestSteps           Disable replication for cn=schema on server A
-          #@TestSteps           Add new objectClass and new attrType definition
-                                to schema in server A
-          #@TestSteps           Enable replication for cn=schema on server A
-                                (which also initialises cn=schema)
-          #@TestSteps           Add entry belonging to new schema on server B
-          #@TestPostamble
-          #@TestResult          Success if first entry add attempt on server B
-                                fails with error 65 (objectclass violation)
-                                whereas second add attempt succeeds.
-          -->
-          <testcase name="getTestCaseName('Schema total update')">
-            <sequence>
-            
-              <call function="'testCase_Preamble'"/>
-
-              <message>
-                'Replication: Total Update: Schema total update. \
-                Initialize schema with total update'
-              </message>
-
-              <script>
-                consumer = consumerList[0]
-              </script>
-                                       
-              <!-- Try to add entry belonging to new schema to "consumer" 
-                server; should be rejected with error 65 (objectclass violation)
+            <!--- Test Suite information
+            #@TestSuiteName       Replication TotalUpdate Tests
+            #@TestSuitePurpose    Verify that the total-update operations are replicated
+                                  correctly between two servers.
+            #@TestSuiteID         TotalUpdate Tests
+            #@TestSuiteGroup      TotalUpdate
+            #@TestGroup           Replication
+            #@TestScript          replication_totalupdate.xml
+            #@TestHTMLLink        http://www.forgerock.org/
               -->
-              <call function="'addEntry'">
-                { 'location'        : clientHost,
-                  'dsPath'          : clientPath,
-                  'dsInstanceHost'  : consumer.getHostname(),
-                  'dsInstancePort'  : consumer.getPort(),
-                  'dsInstanceDn'    : consumer.getRootDn(),
-                  'dsInstancePswd'  : consumer.getRootPwd(),
-                  'entryToBeAdded'  : '%s/replication/testuser-1.ldif' \
-                                      % clientDataDir,
-                  'expectedRC'      : 65
-                }
-              </call>
+                  
+            <call function="'testSuite_Preamble'"/>
 
+            <try>
+              <sequence> 
+                                                                        
+                <import machine="STAF_LOCAL_HOSTNAME"
+                  file="'%s/testcases/replication/replication_setup.xml' 
+                    % (TESTS_DIR)"/>
+                <call function="'replication_setup'" >
+                  { 'label'    : _label }
+                </call>
 
-              <!-- Disable schema replication on "master" server -->       
-              <call function="'disableReplication'">
-                { 'location'            : clientHost,
-                  'dsPath'              : clientPath,
-                  'dsInstanceHost'      : masterHost,
-                  'dsInstanceAdminPort' : master.getAdminPort(),
-                  'replicationDnList'   : ['cn=schema']
-                }
-              </call>
-                
-              <script>
-                newObjectclass = '( testobjectclass1-oid NAME \
-                \'testobjectclass-1\' SUP person MAY ( street $ \
-                testattribute-1 $ c ) X-ORIGIN \'user defined\' )'
-                newAttributetype = '( testattribute1-oid NAME \
-                \'testattribute-1\' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 \
-                X-ORIGIN \'user defined\' )'
-              </script>
-                
-              <!-- Modify schema  in "master" server -->
-              <call function="'modifyAnAttribute'">
-                { 'dsPath'            : masterPath,
-                  'dsInstanceHost'    : masterHost ,
-                  'dsInstancePort'    : master.getPort(),
-                  'dsInstanceDn'      : master.getRootDn(),
-                  'dsInstancePswd'    : master.getRootPwd(),
-                  'DNToModify'        : 'cn=schema',
-                  'attributeName'     : 'attributeTypes',
-                  'newAttributeValue' : newAttributetype, 
-                  'changetype'        : 'add'
-                }
-              </call>
-              <call function="'modifyAnAttribute'">
-                { 'dsPath'            : masterPath,
-                  'dsInstanceHost'    : masterHost ,
-                  'dsInstancePort'    : master.getPort(),
-                  'dsInstanceDn'      : master.getRootDn(),
-                  'dsInstancePswd'    : master.getRootPwd(),
-                  'DNToModify'        : 'cn=schema',
-                  'attributeName'     : 'objectClasses',
-                  'newAttributeValue' : newObjectclass,
-                  'changetype'        : 'add'
-                }
-              </call>
-                
-              <!-- Re-enable schema replication on "master" server, and 
-                at the same time initialise the schema across the topology -->
-              <script>
-                if master.isOnlyLdapServer():
-                  masterReplPort = None
-                else:
-                  masterReplPort = masterReplicationServer.getPort()
-                
-                if consumer.isOnlyLdapServer():
-                  consumerReplPort = None
-                else:
-                  replicationServer = consumer.getChangelogServer()
-                  consumerReplPort = replicationServer.getPort() 
-              </script>          
-              <call function="'enableReplication'">
-                { 'location'             : clientHost,
-                  'dsPath'               : clientPath,
-                  'refInstanceHost'      : masterHost,
-                  'refInstanceAdminPort' : master.getAdminPort(),
-                  'refInstanceDn'        : master.getRootDn(),
-                  'refInstancePswd'      : master.getRootPwd(),
-                  'refReplicationPort'   : masterReplPort,
-                  'refOnlyLdapServer'    : master.isOnlyLdapServer(),
-                  'refOnlyReplServer'    : master.isOnlyReplServer(),
-                  'dsInstanceHost'       : consumer.getHostname(),
-                  'dsInstanceAdminPort'  : consumer.getAdminPort(),
-                  'dsInstanceDn'         : consumer.getRootDn(),
-                  'dsInstancePswd'       : consumer.getRootPwd(),
-                  'dsReplicationPort'    : consumerReplPort,
-                  'dsOnlyLdapServer'     : consumer.isOnlyLdapServer(),
-                  'dsOnlyReplServer'     : consumer.isOnlyReplServer(),
-                  'replicationDnList'    : ['cn=schema']
-                }                      
-              </call>
-                
-              <!-- Add entry to "consumer" server -->    
-              <call function="'addEntry'">
-                { 'location'        : clientHost,
-                  'dsPath'          : clientPath,
-                  'dsInstanceHost'  : consumer.getHostname(),
-                  'dsInstancePort'  : consumer.getPort(),
-                  'dsInstanceDn'    : consumer.getRootDn(),
-                  'dsInstancePswd'  : consumer.getRootPwd(),
-                  'entryToBeAdded'  : '%s/replication/testuser-1.ldif' \
-                                      % clientDataDir
-                }
-              </call>
+                <!-- List of Import of Test Functions -->
+                <script>
+                  importList=[]
+                  importList.append('totalupdate/totalupdate_tests')
+                </script>
 
-              <!-- Verify the synchronization of the schema among the servers
-                in the topology -->
-              <!-- If the schema files differ, it could be due to Issue OPENDJ-449
-                (Replication adds modifiersName and modifyTimestamp to schema 
-                updates) -->
-              <call function="'verifySchemas'">
-                [ clientHost, clientPath, master, consumerList, '99-user.ldif',
-                  'OPENDJ-449' ]
-              </call> 
-                                                
-              <!-- Verify the synchronization of the trees among the servers in
-                the topology -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, master, consumerList, 'o=example' ]
-              </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>                                                                       
 
-              
-              <call function="'testCase_Postamble'"/>
-            </sequence>
-          </testcase>
+                <!-- Specific to replication tests -->
+                <script>
+                  msg1 = 'Replication: TotalUpdate:'
+                  server1DataDir = '%s' % server1.getDataDir()
+                </script>
+                                                    
+                <!-- List of Test Cases -->
+                <script>
+                  testsList=[]
+                  testsList.append('replication_totalupdate_001')
+                  testsList.append('replication_totalupdate_002')
+                  testsList.append('replication_totalupdate_003')
+                </script>
 
-                          
+                <!-- Execute the Tests -->
+                <iterate var="__test" in="testsList">
+                  <sequence>
+                    <call function="'%s' % (__test)" />
+                  </sequence>
+                </iterate>                
+                                
+              </sequence>
 
-          <!--- Test Case information
-          #@TestMarker          Replication Total Update Tests
-          #@TestName            Replication: Total Update: Initialize all
-          #@TestID              Initialize all
-          #@TestPurpose         Initialize all servers with total update
-          #@TestPreamble
-          #@TestSteps           Stop server A
-          #@TestSteps           Import data into server A
-          #@TestSteps           Start server A
-          #@TestSteps           Initialise (dsreplication initialize all) all
-                                the servers from server A
-          #@TestSteps           Check suffix has been initialised on every 
-                                server
-          #@TestSteps           Add entry on server A
-          #@TestPostamble
-          #@TestResult          Success if initialisation call succeeds for all
-                                servers and all servers are synchronised
-          -->
-          <testcase name="getTestCaseName('Initialize all')">
-            <sequence>
-            
-              <call function="'testCase_Preamble'"/>
-
-              <message>
-                'Replication: Total Update: Initialize all. Initialize all \
-                servers with total update'
-              </message>
-              
-              <!-- Stop "master" Directory Server -->
-              <call function="'StopDsWithScript'">
-                { 'location'    : masterHost,
-                  'dsPath'      : masterPath,
-                  'dsHost'      : masterHost,
-                  'dsAdminPort' : master.getAdminPort(),
-                  'dsBindDN'    : master.getRootDn(),
-                  'dsBindPwd'   : master.getRootPwd()
-                }
-              </call>
-              
-              <!-- Check that the Directory Server is stopped -->
-              
-              <!-- Import data into "master" Directory Server -->
-              <call function="'ImportLdifWithScript'">
-                { 'location'   : masterHost,
-                  'dsPath'     : masterPath,
-                  'backEnd'    : DIRECTORY_INSTANCE_BE,
-                  'ldifFile'   : '%s/replication/Short_Example.ldif' \
-                                 % masterDataDir
-                }
-              </call>
-
-              <!-- Start the Directory Server -->
-              <call function="'StartDsWithScript'">
-                { 'location'  : masterHost,
-                  'dsPath'    : masterPath
-                }
-              </call>
-              
-              <!-- Wait for DS to start -->
-              <call function="'isAlive'">
-                { 'location'         : masterHost,
-                  'dsPath'           : masterPath,
-                  'dsInstanceHost'   : masterHost,
-                  'dsInstancePort'   : master.getPort() ,
-                  'dsInstanceDn'     : master.getRootDn() ,
-                  'dsInstancePswd'   : master.getRootPwd() ,
-                  'noOfLoops'        : 10 ,
-                  'noOfMilliSeconds' : 2000
-                }
-              </call>
-              
-              <!-- Check some data was imported into Directory Server -->
-              <call function="'checkImport'">
-                { 'location'        : masterHost,
-                  'dsPath'          : masterPath,
-                  'dsHost'          : masterHost,
-                  'dsPort'          : master.getPort(),
-                  'dsAdminPort'     : master.getAdminPort(),
-                  'dsDn'            : master.getRootDn(),
-                  'dsPswd'          : master.getRootPwd(),
-                  'expectedEntries' : ['uid=scarter,ou=People,o=example',
-                                       'uid=dmiller, ou=People, o=example',
-                                       'uid=sholmes, ou=People, o=example'],
-                  'startDS'         : 'no'
-                }
-              </call>
-
-
-              <!-- Perform the total update -->
-              <call function="'initializeReplication'">
-                { 'location'                : clientHost,
-                  'dsPath'                  : clientPath,
-                  'sourceInstanceHost'      : masterHost,
-                  'sourceInstanceAdminPort' : master.getAdminPort(),
-                  'replicationDnList'       : ['o=example']
-                }
-              </call>
-
-
-              <iterate var="server" in="consumerList">
-                <sequence>                                               
-                  <!-- Verify the total update -->
-                  <call function="'checkImport'">
-                    { 'location'    : server.getHostname(),
-                      'dsPath'      : '%s/%s' % (server.getDir(),OPENDSNAME),
-                      'dsHost'      : server.getHostname(),
-                      'dsPort'      : server.getPort(),
-                      'dsAdminPort' : server.getAdminPort(),
-                      'dsDn'        : server.getRootDn(),
-                      'dsPswd'      : server.getRootPwd(),
-                      'expectedEntries' : ['uid=scarter,ou=People,o=example',
-                                           'uid=dmiller, ou=People, o=example',
-                                           'uid=sholmes, ou=People, o=example'],
-                      'startDS'  : 'no'
-                    }
-                  </call>                                                         
+              <catch exception="'STAFException.TestSuite.SetupException'">
+                <sequence>
+                  <message log="1" level="'fatal'">
+                    'Setup of test suite failed.'
+                  </message>
+                  <rethrow/>
                 </sequence>
-              </iterate>
+              </catch>
+  
+              <finally>
+                <message>'Test Cases Completed.'</message>
+              </finally>
 
-              <!-- To make sure replication is working: add entry to "master"
-                server -->
-              <script>
-                listAttr = []
-                listAttr.append('objectclass:top')
-                listAttr.append('objectclass:organizationalperson')
-                listAttr.append('objectclass:inetorgperson')
-                listAttr.append('objectclass:person')
-                listAttr.append('givenname:Professor Moriarty')
-                listAttr.append('sn:Moriarty')
-                listAttr.append('cn:Professor Moriarty')
-                listAttr.append('l:London')
-              </script>
-      
-              <call function="'addAnEntry'">
-                { 'location'       : masterHost,
-                  'dsPath'         : masterPath,
-                  'dsInstanceHost' : masterHost,
-                  'dsInstancePort' : master.getPort(),
-                  'dsInstanceDn'   : master.getRootDn(),
-                  'dsInstancePswd' : master.getRootPwd(),
-                  'DNToAdd'        : 'uid=pmoriarty, ou=People, o=example',
-                  'listAttributes' : listAttr
-                }
-              </call>
-                           
-              <!-- Verify the synchronization of the trees among the servers in
-                the topology -->
-              <call function="'verifyTrees'">
-                [ clientHost, clientPath, master, consumerList, 'o=example' ]
-              </call>
+            </try>
 
-              <call function="'testCase_Postamble'"/>
+          </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>
-          </testcase>
-                                                   
-          
-          <import machine="STAF_LOCAL_HOSTNAME"
-            file="'%s/testcases/replication/replication_cleanup.xml' 
-                 % (TESTS_DIR)"/>
-          <call function="'replication_cleanup'" >
-            { 'label'    : 'Replication Totalupdate' }
-          </call>
-          
-          <call function="'testSuite_Postamble'"/>
-        </sequence>
+          </finally>
+ 
+        </try>
       </block>
     </sequence>
   </function>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/totalupdate/totalupdate_tests.xml b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/totalupdate/totalupdate_tests.xml
new file mode 100644
index 0000000..cd4b9b9
--- /dev/null
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/testcases/replication/totalupdate/totalupdate_tests.xml
@@ -0,0 +1,565 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../../../shared/stax.dtd">
+<!--
+ ! CDDL HEADER START
+ !
+ ! The contents of this file are subject to the terms of the
+ ! 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.
+ ! 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,
+ ! 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 2007-2010 Sun Microsystems, Inc.
+ !      Portions Copyright 2012 ForgeRock AS.
+ ! -->
+<stax>
+          
+  <!--- Test Case : Total Update -->          
+  <!--- Test Case information
+  #@TestMarker          Replication Total Update Tests
+  #@TestName            Replication: Total Update: Simple LDIF
+  #@TestID              Simple LDIF
+  #@TestPurpose         Initialize server with total update
+  #@TestPreamble
+  #@TestSteps           Stop server A
+  #@TestSteps           Import data into server A
+  #@TestSteps           Start server A
+  #@TestSteps           Initialise (dsreplication initialize)
+                        every other server from server A
+  #@TestSteps           Check suffix has been initialised on every 
+                        server
+  #@TestSteps           Add entry on server A
+  #@TestPostamble
+  #@TestResult          Success if initialisation call succeeds for all
+                        servers and all servers are synchronised
+  -->
+  <function name="replication_totalupdate_001" scope="local">
+    <testcase name="getTestCaseName('Simple LDIF')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Simple LDIF. Initialize server with total update.' % msg1 }
+            </call>                               
+              
+            <!-- Stop "master" Directory Server -->
+            <call function="'StopDsWithScript'">
+              { 'location'    : masterHost,
+                'dsPath'      : masterPath,
+                'dsHost'      : masterHost,
+                'dsAdminPort' : master.getAdminPort(),
+                'dsBindDN'    : master.getRootDn(),
+                'dsBindPwd'   : master.getRootPwd()
+              }
+            </call>
+            
+            <!-- Check that the Directory Server is stopped -->
+            
+            <!-- Import data into "master" Directory Server -->
+            <call function="'ImportLdifWithScript'">
+              { 'location'     : masterHost,
+                'dsPath'       : masterPath,
+                'backEnd'      : DIRECTORY_INSTANCE_BE,
+                'ldifFile'     : '%s/replication/Example.ldif' % masterDataDir
+              }
+            </call>
+            
+            <!-- Start the Directory Server -->
+            <call function="'StartDsWithScript'">
+              { 'location'  : masterHost,
+                'dsPath'    : masterPath
+              }
+            </call>
+            
+            <!-- Wait for DS to start -->
+            <call function="'isAlive'">
+              { 'location'         : masterHost,
+                'dsPath'           : masterPath,
+                'dsInstanceHost'   : masterHost,
+                'dsInstancePort'   : master.getPort() ,
+                'dsInstanceDn'     : master.getRootDn() ,
+                'dsInstancePswd'   : master.getRootPwd() ,
+                'noOfLoops'        : 10 ,
+                'noOfMilliSeconds' : 2000
+              }
+            </call>
+            
+            <!-- Check some data was imported into Directory Server -->
+            <call function="'checkImport'">
+              { 'location'        : masterHost,
+                'dsPath'          : masterPath,
+                'dsHost'          : masterHost,
+                'dsPort'          : master.getPort(),
+                'dsAdminPort'     : master.getAdminPort(),
+                'dsDn'            : master.getRootDn(),
+                'dsPswd'          : master.getRootPwd(),
+                'expectedEntries' : ['uid=scarter,ou=People,o=example',
+                                     'uid=dmiller, ou=People, o=example',
+                                     'uid=rhunt, ou=People, o=example'],
+                'startDS'         : 'no'
+              }
+            </call>
+
+
+            <iterate var="server" in="consumerList">
+              <sequence>                                                                            
+                <!-- Perform the total update -->
+                <call function="'initializeReplication'">
+                  { 'location'                :  clientHost,
+                    'dsPath'                  :  clientPath,
+                    'dsInstanceHost'          :  server.getHostname(),
+                    'dsInstanceAdminPort'     :  server.getAdminPort(),
+                    'sourceInstanceHost'      :  masterHost,
+                    'sourceInstanceAdminPort' :  master.getAdminPort(),
+                    'replicationDnList'       :  ['o=example']
+                  }
+                </call>
+                                                          
+                <!-- Verify the total update -->
+                <call function="'checkImport'">
+                  { 'location'    : server.getHostname(),
+                    'dsPath'      : '%s/%s' % (server.getDir(),OPENDSNAME),
+                    'dsHost'      : server.getHostname(),
+                    'dsPort'      : server.getPort(),
+                    'dsAdminPort' : server.getAdminPort(),
+                    'dsDn'        : server.getRootDn(),
+                    'dsPswd'      : server.getRootPwd(),
+                    'expectedEntries' : ['uid=scarter,ou=People,o=example',
+                                         'uid=dmiller, ou=People, o=example',
+                                         'uid=rhunt, ou=People, o=example'],
+                    'startDS'  : 'no'
+                  }
+                </call>                                                                                
+              </sequence>
+            </iterate>
+              
+            <!-- To make sure replication is working: add entry to "master" 
+              server -->
+            <script>
+              listAttr = []
+              listAttr.append('objectclass:top')
+              listAttr.append('objectclass:organizationalperson')
+              listAttr.append('objectclass:inetorgperson')
+              listAttr.append('objectclass:person')
+              listAttr.append('givenname:Professor Moriarty')
+              listAttr.append('sn:Moriarty')
+              listAttr.append('cn:Professor Moriarty')
+              listAttr.append('l:London')
+            </script>
+    
+            <call function="'addAnEntry'">
+              { 'location'       : masterHost,
+                'dsPath'         : masterPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'DNToAdd'        : 'uid=pmoriarty, ou=People, o=example',
+                'listAttributes' : listAttr
+              }
+            </call>
+                                             
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, 'o=example' ]
+            </call>
+                           
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+
+
+  <!--- Test Case information
+  #@TestMarker          Replication Total Update Tests
+  #@TestName            Replication: Total Update: Schema total update
+  #@TestID              Schema total update
+  #@TestPurpose         Initialize the schema with total update.
+  #@TestPreamble
+  #@TestSteps           Add entry belonging to undefined new schema on
+                        server B
+  #@TestSteps           Disable replication for cn=schema on server A
+  #@TestSteps           Add new objectClass and new attrType definition
+                        to schema in server A
+  #@TestSteps           Enable replication for cn=schema on server A
+                        (which also initialises cn=schema)
+  #@TestSteps           Add entry belonging to new schema on server B
+  #@TestPostamble
+  #@TestResult          Success if first entry add attempt on server B
+                        fails with error 65 (objectclass violation)
+                        whereas second add attempt succeeds.
+  -->
+  <function name="replication_totalupdate_002" scope="local">
+    <testcase name="getTestCaseName('Schema total update')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Initialize schema with total update.' % msg1 }
+            </call>
+
+            <script>
+              consumer = consumerList[0]
+            </script>
+                                     
+            <!-- Try to add entry belonging to new schema to "consumer" 
+              server; should be rejected with error 65 (objectclass violation)
+            -->
+            <call function="'addEntry'">
+              { 'location'        : clientHost,
+                'dsPath'          : clientPath,
+                'dsInstanceHost'  : consumer.getHostname(),
+                'dsInstancePort'  : consumer.getPort(),
+                'dsInstanceDn'    : consumer.getRootDn(),
+                'dsInstancePswd'  : consumer.getRootPwd(),
+                'entryToBeAdded'  : '%s/replication/testuser-1.ldif' \
+                                    % clientDataDir,
+                'expectedRC'      : 65
+              }
+            </call>
+
+
+            <!-- Disable schema replication on "master" server -->       
+            <call function="'disableReplication'">
+              { 'location'            : clientHost,
+                'dsPath'              : clientPath,
+                'dsInstanceHost'      : masterHost,
+                'dsInstanceAdminPort' : master.getAdminPort(),
+                'replicationDnList'   : ['cn=schema']
+              }
+            </call>
+              
+            <script>
+              newObjectclass = '( testobjectclass1-oid NAME \
+              \'testobjectclass-1\' SUP person MAY ( street $ \
+              testattribute-1 $ c ) X-ORIGIN \'user defined\' )'
+              newAttributetype = '( testattribute1-oid NAME \
+              \'testattribute-1\' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 \
+              X-ORIGIN \'user defined\' )'
+            </script>
+              
+            <!-- Modify schema  in "master" server -->
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'            : masterPath,
+                'dsInstanceHost'    : masterHost ,
+                'dsInstancePort'    : master.getPort(),
+                'dsInstanceDn'      : master.getRootDn(),
+                'dsInstancePswd'    : master.getRootPwd(),
+                'DNToModify'        : 'cn=schema',
+                'attributeName'     : 'attributeTypes',
+                'newAttributeValue' : newAttributetype, 
+                'changetype'        : 'add'
+              }
+            </call>
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'            : masterPath,
+                'dsInstanceHost'    : masterHost ,
+                'dsInstancePort'    : master.getPort(),
+                'dsInstanceDn'      : master.getRootDn(),
+                'dsInstancePswd'    : master.getRootPwd(),
+                'DNToModify'        : 'cn=schema',
+                'attributeName'     : 'objectClasses',
+                'newAttributeValue' : newObjectclass,
+                'changetype'        : 'add'
+              }
+            </call>
+              
+            <!-- Re-enable schema replication on "master" server, and 
+              at the same time initialise the schema across the topology -->
+            <script>
+              if master.isOnlyLdapServer():
+                masterReplPort = None
+              else:
+                masterReplPort = masterReplicationServer.getPort()
+              
+              if consumer.isOnlyLdapServer():
+                consumerReplPort = None
+              else:
+                replicationServer = consumer.getChangelogServer()
+                consumerReplPort = replicationServer.getPort() 
+            </script>          
+            <call function="'enableReplication'">
+              { 'location'             : clientHost,
+                'dsPath'               : clientPath,
+                'refInstanceHost'      : masterHost,
+                'refInstanceAdminPort' : master.getAdminPort(),
+                'refInstanceDn'        : master.getRootDn(),
+                'refInstancePswd'      : master.getRootPwd(),
+                'refReplicationPort'   : masterReplPort,
+                'refOnlyLdapServer'    : master.isOnlyLdapServer(),
+                'refOnlyReplServer'    : master.isOnlyReplServer(),
+                'dsInstanceHost'       : consumer.getHostname(),
+                'dsInstanceAdminPort'  : consumer.getAdminPort(),
+                'dsInstanceDn'         : consumer.getRootDn(),
+                'dsInstancePswd'       : consumer.getRootPwd(),
+                'dsReplicationPort'    : consumerReplPort,
+                'dsOnlyLdapServer'     : consumer.isOnlyLdapServer(),
+                'dsOnlyReplServer'     : consumer.isOnlyReplServer(),
+                'replicationDnList'    : ['cn=schema']
+              }                      
+            </call>
+              
+            <!-- Add entry to "consumer" server -->    
+            <call function="'addEntry'">
+              { 'location'        : clientHost,
+                'dsPath'          : clientPath,
+                'dsInstanceHost'  : consumer.getHostname(),
+                'dsInstancePort'  : consumer.getPort(),
+                'dsInstanceDn'    : consumer.getRootDn(),
+                'dsInstancePswd'  : consumer.getRootPwd(),
+                'entryToBeAdded'  : '%s/replication/testuser-1.ldif' \
+                                    % clientDataDir
+              }
+            </call>
+
+            <!-- Verify the synchronization of the schema among the servers
+              in the topology -->
+            <!-- If the schema files differ, it could be due to Issue OPENDJ-449
+              (Replication adds modifiersName and modifyTimestamp to schema 
+              updates) -->
+            <call function="'verifySchemas'">
+              [ clientHost, clientPath, master, consumerList, '99-user.ldif',
+                'OPENDJ-449' ]
+            </call> 
+                                              
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, 'o=example' ]
+            </call>                
+             
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+                          
+
+  <!--- Test Case information
+  #@TestMarker          Replication Total Update Tests
+  #@TestName            Replication: Total Update: Initialize all
+  #@TestID              Initialize all
+  #@TestPurpose         Initialize all servers with total update
+  #@TestPreamble
+  #@TestSteps           Stop server A
+  #@TestSteps           Import data into server A
+  #@TestSteps           Start server A
+  #@TestSteps           Initialise (dsreplication initialize all) all
+                        the servers from server A
+  #@TestSteps           Check suffix has been initialised on every 
+                        server
+  #@TestSteps           Add entry on server A
+  #@TestPostamble
+  #@TestResult          Success if initialisation call succeeds for all
+                        servers and all servers are synchronised
+  -->
+  <function name="replication_totalupdate_003" scope="local">
+    <testcase name="getTestCaseName('Initialize all')">                     
+      <sequence> 
+        <try>
+          <sequence>
+       
+            <call function="'testCase_Preamble'"/>
+
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <call function="'testStep'">
+              { 'stepMessage' : '%s Initialize all servers with total update.' % msg1 }
+            </call>
+              
+            <!-- Stop "master" Directory Server -->
+            <call function="'StopDsWithScript'">
+              { 'location'    : masterHost,
+                'dsPath'      : masterPath,
+                'dsHost'      : masterHost,
+                'dsAdminPort' : master.getAdminPort(),
+                'dsBindDN'    : master.getRootDn(),
+                'dsBindPwd'   : master.getRootPwd()
+              }
+            </call>
+            
+            <!-- Check that the Directory Server is stopped -->
+            
+            <!-- Import data into "master" Directory Server -->
+            <call function="'ImportLdifWithScript'">
+              { 'location'   : masterHost,
+                'dsPath'     : masterPath,
+                'backEnd'    : DIRECTORY_INSTANCE_BE,
+                'ldifFile'   : '%s/replication/Short_Example.ldif' \
+                               % masterDataDir
+              }
+            </call>
+
+            <!-- Start the Directory Server -->
+            <call function="'StartDsWithScript'">
+              { 'location'  : masterHost,
+                'dsPath'    : masterPath
+              }
+            </call>
+            
+            <!-- Wait for DS to start -->
+            <call function="'isAlive'">
+              { 'location'         : masterHost,
+                'dsPath'           : masterPath,
+                'dsInstanceHost'   : masterHost,
+                'dsInstancePort'   : master.getPort() ,
+                'dsInstanceDn'     : master.getRootDn() ,
+                'dsInstancePswd'   : master.getRootPwd() ,
+                'noOfLoops'        : 10 ,
+                'noOfMilliSeconds' : 2000
+              }
+            </call>
+            
+            <!-- Check some data was imported into Directory Server -->
+            <call function="'checkImport'">
+              { 'location'        : masterHost,
+                'dsPath'          : masterPath,
+                'dsHost'          : masterHost,
+                'dsPort'          : master.getPort(),
+                'dsAdminPort'     : master.getAdminPort(),
+                'dsDn'            : master.getRootDn(),
+                'dsPswd'          : master.getRootPwd(),
+                'expectedEntries' : ['uid=scarter,ou=People,o=example',
+                                     'uid=dmiller, ou=People, o=example',
+                                     'uid=sholmes, ou=People, o=example'],
+                'startDS'         : 'no'
+              }
+            </call>
+
+
+            <!-- Perform the total update -->
+            <call function="'initializeReplication'">
+              { 'location'                : clientHost,
+                'dsPath'                  : clientPath,
+                'sourceInstanceHost'      : masterHost,
+                'sourceInstanceAdminPort' : master.getAdminPort(),
+                'replicationDnList'       : ['o=example']
+              }
+            </call>
+
+
+            <iterate var="server" in="consumerList">
+              <sequence>                                               
+                <!-- Verify the total update -->
+                <call function="'checkImport'">
+                  { 'location'    : server.getHostname(),
+                    'dsPath'      : '%s/%s' % (server.getDir(),OPENDSNAME),
+                    'dsHost'      : server.getHostname(),
+                    'dsPort'      : server.getPort(),
+                    'dsAdminPort' : server.getAdminPort(),
+                    'dsDn'        : server.getRootDn(),
+                    'dsPswd'      : server.getRootPwd(),
+                    'expectedEntries' : ['uid=scarter,ou=People,o=example',
+                                         'uid=dmiller, ou=People, o=example',
+                                         'uid=sholmes, ou=People, o=example'],
+                    'startDS'  : 'no'
+                  }
+                </call>                                                         
+              </sequence>
+            </iterate>
+
+            <!-- To make sure replication is working: add entry to "master"
+              server -->
+            <script>
+              listAttr = []
+              listAttr.append('objectclass:top')
+              listAttr.append('objectclass:organizationalperson')
+              listAttr.append('objectclass:inetorgperson')
+              listAttr.append('objectclass:person')
+              listAttr.append('givenname:Professor Moriarty')
+              listAttr.append('sn:Moriarty')
+              listAttr.append('cn:Professor Moriarty')
+              listAttr.append('l:London')
+            </script>
+    
+            <call function="'addAnEntry'">
+              { 'location'       : masterHost,
+                'dsPath'         : masterPath,
+                'dsInstanceHost' : masterHost,
+                'dsInstancePort' : master.getPort(),
+                'dsInstanceDn'   : master.getRootDn(),
+                'dsInstancePswd' : master.getRootPwd(),
+                'DNToAdd'        : 'uid=pmoriarty, ou=People, o=example',
+                'listAttributes' : listAttr
+              }
+            </call>
+                         
+            <!-- Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, 'o=example' ]
+            </call>
+
+          </sequence>
+  
+          <catch exception="'STAXException'" typevar="eType" var="eInfo">
+            <message log="1" level="'fatal'">
+              '%s: Test failed. eInfo(%s)' % (eType,eInfo)
+            </message>
+          </catch>
+          <finally>
+            <sequence>
+              <call function="'testCase_Postamble'"/>
+            </sequence>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+</stax>

--
Gitblit v1.10.0