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

ugaston
10.50.2007 9dde9d2af6504fa06e7a2d4fb43549a74dd5e868
New basic replication testcases + new shared functions library (tools.xml)
3 files added
7 files modified
2716 ■■■■■ changed files
opends/tests/functional-tests/shared/data/replication/photo1.uu 361 ●●●●● patch | view | raw | blame | history
opends/tests/functional-tests/shared/data/replication/photo2.uu 348 ●●●●● patch | view | raw | blame | history
opends/tests/functional-tests/shared/functions/environment.xml 2 ●●●●● patch | view | raw | blame | history
opends/tests/functional-tests/shared/functions/ldap.xml 10 ●●●●● patch | view | raw | blame | history
opends/tests/functional-tests/shared/functions/tools.xml 431 ●●●●● patch | view | raw | blame | history
opends/tests/functional-tests/shared/python/replication.py 55 ●●●●● patch | view | raw | blame | history
opends/tests/functional-tests/testcases/replication/basic/replication_basic.xml 1480 ●●●●● patch | view | raw | blame | history
opends/tests/functional-tests/testcases/replication/basic/replication_basic_setup.xml 5 ●●●● patch | view | raw | blame | history
opends/tests/functional-tests/testcases/replication/replication_cleanup.xml 6 ●●●● patch | view | raw | blame | history
opends/tests/functional-tests/testcases/replication/replication_setup.xml 18 ●●●●● patch | view | raw | blame | history
opends/tests/functional-tests/shared/data/replication/photo1.uu
New file
@@ -0,0 +1,361 @@
 /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQ
 QEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQ
 kFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
 T/wAARCAF6AScDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtR
 AAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFh
 cYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJip
 KTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8v
 P09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBA
 QAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKj
 U2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoq
 OkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADA
 MBAAIRAxEAPwD9MV/zxT1/zxQtDdR/KuWwC05e/Wk/zij7xzzzVAO9OlKnSlHTtS/5xQOwUUf5xR
 QMKUfl70LS0BYP09qKKKACnLTactOwWFopD1FOPQUWFYFoagDNKBijYY3OOP0pVGD/AEp1FFxiL0
 paKKQBSH64paKdwEH0xSNTqKLgMpD+NSU1qNwGH8KSnnoaQ9BSAbRRRQAjUm3NK1JQAhSkJzTqa1
 K4DWopaKYEa0tA6UHv9KSIFHWnnoKSimOwq07/AD0pF5yPWl6celBQq/eH+FB+9SDoaVvvCgB3ak
 pe1JQAUUU5aABfx/Cl/P8AGiiqQCj/AOvSj/69NopgK1Opq06pYBRRRSAKO4oooARe1Kf89aB+NB
 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
opends/tests/functional-tests/shared/data/replication/photo2.uu
New file
@@ -0,0 +1,348 @@
 /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQ
 QEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQ
 kFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
 T/wAARCAF6AScDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtR
 AAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFh
 cYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJip
 KTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8v
 P09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBA
 QAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKj
 U2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoq
 OkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADA
 MBAAIRAxEAPwD2BTk//Xp45wTz70wAgU8dOBkVzghyZKj9OKDxQOKXHB+vrVliqDux3paQDnPtTs
 joBQADrS5pMGgDBoAdQOtGKUA56UCsBz06r1pSORxR1pxPIoCw3g5p3JYZI4HFM5U596eoJYDPSg
 T3FQZzgYoUYUlgfalU5Zj3H607cC2Ax9B6UhieWF6ckACkYhXYAYzz39KUnbyB8vYikY5Xdg9OaV
 xXFT15xSgdR346ijnGT1B6etJGuw44yPemIccA5/Q9qQcNxyPc0pOGHel3E9f51I7hjPOcUf54oI
 9RS7TkjBJHpQJCDg5pMfNkcU7BAzQy468UFajCCz8ZyOnvSsBg54z6inAZOPWm5GQDj60DGEZXgA
 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
 8YPqKhCZoXBxnDHPdetFOuPlJxxwOlFa3IP//Z
opends/tests/functional-tests/shared/functions/environment.xml
@@ -62,6 +62,8 @@
      <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
        file="'%s/signals.xml' % (TESTS_FUNCTIONS_DIR)" />
      <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
        file="'%s/tools.xml' % (TESTS_FUNCTIONS_DIR)" />
                
    </sequence>  
        
opends/tests/functional-tests/shared/functions/ldap.xml
@@ -929,6 +929,12 @@
        </function-arg-description>
        <function-arg-property name="type" value="string"/>
      </function-arg-def>
      <function-arg-def name="outputFile" type="optional">
        <function-arg-description>
          Output file containing the search result in ldif format.
        </function-arg-description>
        <function-arg-property name="type" value="filepath"/>
      </function-arg-def>
      <function-arg-def name="expectedRC" type="optional" default="0">
        <function-arg-description>
          Expected return code value. Default value is 0
@@ -1103,9 +1109,11 @@
        <envs>
          ['PATH=/bin:/usr/bin:%s' % dsBinPath, 'JAVA_HOME=%s' % JAVA_HOME]
        </envs>         
        <stdout if="outputFile != None" mode="'replace'">'%s/../%s' % (dsPath,outputFile)</stdout>
        <stderr mode="'stdout'"/>
        <returnstdout/>
      </process>
      <script>
        STAXCode=RC
        STAXReason=STAXResult
@@ -2796,7 +2804,7 @@
          STAFCmdParamsList.append('-a "%s"' % attributeName)
        if newAttributeValue:
          STAFCmdParamsList.append('-v "%s"' % newAttributeValue)
          STAFCmdParamsList.append('-v "%s"' % newAttributeValue)
        if changetype:
          STAFCmdParamsList.append('-t "%s"' % changetype)
opends/tests/functional-tests/shared/functions/tools.xml
New file
@@ -0,0 +1,431 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE stax SYSTEM "../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-2007 Sun Microsystems, Inc.
 ! -->
<stax>
  <!-- This function uses make ldif to generate LDIF data files -->
  <function name="MakeLdif">
    <function-prolog>
      This function uses make ldif to generate LDIF data files
    </function-prolog>
    <function-map-args>
      <function-arg-def name="location" type="optional" default="'%s' % STAXServiceMachine">
        <function-arg-description>
          Location of target host
        </function-arg-description>
        <function-arg-property name="type" value="hostname"/>
      </function-arg-def>
      <function-arg-def name="dsPath" type="optional" default="'%s/%s' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)">
        <function-arg-description>
          Pathname to installation root
        </function-arg-description>
        <function-arg-property name="type" value="filepath"/>
      </function-arg-def>
      <function-arg-def name="version" type="optional">
        <function-arg-description>
          Display Directory Server version information
        </function-arg-description>
        <function-arg-property name="type" value="string"/>
      </function-arg-def>
      <function-arg-def name="templateFile" type="optional">
        <function-arg-description>
          Path to the template file
        </function-arg-description>
        <function-arg-property name="type" value="filename"/>
      </function-arg-def>
      <function-arg-def name="ldifFile" type="optional">
        <function-arg-description>
          Path to the LDIF file
        </function-arg-description>
        <function-arg-property name="type" value="filename"/>
      </function-arg-def>
      <function-arg-def name="randomSeed " type="optional">
        <function-arg-description>
          The seed to use to initialize the random number generator
        </function-arg-description>
        <function-arg-property name="type" value="integer"/>
      </function-arg-def>
      <function-arg-def name="Help" type="optional">
        <function-arg-description>
          Help option
        </function-arg-description>
        <function-arg-property name="help" value="option"/>
      </function-arg-def>
    </function-map-args>
    <sequence>
      <!-- Build the Command -->
      <script>
        STAFCmdParamsList=[]
        STAFCmdParams=''
        if dsPath:
          dsBinPath='%s/%s' % (dsPath,fileFolder)
          STAFCmd='%s/make-ldif%s' % (dsBinPath,fileExt)
        if version:
          STAFCmdParamsList.append('-V')
        if templateFile:
          STAFCmdParamsList.append('-t %s' % templateFile)
        if ldifFile:
          STAFCmdParamsList.append('-o "%s"' % ldifFile)
        if randomSeed:
          STAFCmdParamsList.append('-s "%s"' % randomSeed)
        if Help:
          STAFCmdParamsList.append('-H')
        STAFCmdParams=' '.join(STAFCmdParamsList)
      </script>
      <message>
        '%s %s' % (STAFCmd, STAFCmdParams)
      </message>
      <process name="'Make Ldif Script'">
        <location>'%s' % location</location>
        <command>'%s' % STAFCmd</command>
        <parms>'%s' % STAFCmdParams</parms>
        <workdir>'%s' % dsBinPath</workdir>
        <envs>
          ['PATH=/bin:/usr/bin:%s' % dsBinPath, 'JAVA_HOME=%s' % JAVA_HOME]
        </envs>
        <console use="'same'"/>
        <stderr mode="'stdout'"/>
        <returnstdout/>
      </process>
      <script>
        STAXCode, STAXReason=STAXResult
      </script>
      <if expr="STAXCode != 0">
        <sequence>
          <message level="'error'">
            'make-ldif failed (Code=%s,Reason=%s).' % (STAXCode,STAXReason)
          </message>
        </sequence>
      </if>
      <return>[STAXCode, STAXReason]</return>
    </sequence>
  </function>
  <!-- This function starts DS using the start-ds script -->
  <function name="LdifDiffWithScript">
    <function-prolog>
      This function  compares two LDIF files and reports the differences in LDIF format
    </function-prolog>
    <function-map-args>
      <function-arg-def name="location" type="optional" default="'%s' % STAXServiceMachine">
        <function-arg-description>
          Location of target host
        </function-arg-description>
        <function-arg-property name="type" value="hostname"/>
      </function-arg-def>
     <function-arg-def name="dsPath" type="optional" default="'%s/%s' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)">
        <function-arg-description>
          Pathname to installation root
        </function-arg-description>
        <function-arg-property name="type" value="filepath"/>
      </function-arg-def>
      <function-arg-def name="version" type="optional">
        <function-arg-description>
          Display Directory Server version information
        </function-arg-description>
        <function-arg-property name="type" value="string"/>
      </function-arg-def>
      <function-arg-def name="sourceLdif" type="required">
        <function-arg-description>
          LDIF file to use as the source data
        </function-arg-description>
        <function-arg-property name="type" value="filepath"/>
      </function-arg-def>
      <function-arg-def name="targetLdif" type="required">
        <function-arg-description>
          LDIF file to use as the target data
        </function-arg-description>
        <function-arg-property name="type" value="filepath"/>
      </function-arg-def>
      <function-arg-def name="outputLdif" type="required">
        <function-arg-description>
          File to which the diffs should be written
        </function-arg-description>
        <function-arg-property name="type" value="filepath"/>
      </function-arg-def>
      <function-arg-def name="overwriteExisting" type="optional" default="True">
        <function-arg-description>
          Overwrite existing output file rather than append to it
        </function-arg-description>
        <function-arg-property name="type" value="option"/>
      </function-arg-def>
      <function-arg-def name="singleValueChanges" type="optional">
        <function-arg-description>
          Write each attribute-level change as a separate modification
          per attribute value rather than one modification per entry
        </function-arg-description>
        <function-arg-property name="type" value="option"/>
      </function-arg-def>
      <function-arg-def name="Help" type="optional">
        <function-arg-description>
          Help option
        </function-arg-description>
        <function-arg-property name="help" value="option"/>
      </function-arg-def>
    </function-map-args>
    <sequence>
      <!-- Build the Command -->
      <script>
        STAFCmdParamsList=[]
        STAFCmdParams=''
        if dsPath:
          dsBinPath='%s/%s' % (dsPath,fileFolder)
          STAFCmd='%s/ldif-diff%s' % (dsBinPath,fileExt)
        if version:
          STAFCmdParamsList.append('-V')
        if sourceLdif:
          STAFCmdParamsList.append('-s %s' % sourceLdif)
        if targetLdif:
          STAFCmdParamsList.append('-t %s' % targetLdif)
        if outputLdif:
          STAFCmdParamsList.append('-o %s' % outputLdif)
        if overwriteExisting:
          STAFCmdParamsList.append('-O')
        if singleValueChanges:
          STAFCmdParamsList.append('-S')
        if Help:
          STAFCmdParamsList.append('-H')
        STAFCmdParams=' '.join(STAFCmdParamsList)
      </script>
      <message>
        '%s %s' % (STAFCmd, STAFCmdParams)
      </message>
      <process name="'LDIF Diff Script'">
        <location>'%s' % location</location>
        <command>'%s' % STAFCmd</command>
        <parms>'%s' % STAFCmdParams</parms>
        <workdir>'%s' % dsBinPath</workdir>
        <envs>
          ['PATH=/bin:/usr/bin:%s' % dsBinPath, 'JAVA_HOME=%s' % JAVA_HOME]
        </envs>
        <console use="'same'"/>
        <stderr mode="'stdout'"/>
        <returnstdout/>
        <returnfile>outputLdif</returnfile>
      </process>
      <script>
        STAXCode=RC
        STAXReason=STAXResult
      </script>
      <script>
        diffsInfo = STAXReason[1]
        diffs = diffsInfo[1]
        if (diffsInfo[0] == 0) and (diffs.startswith("# No differences were detected between the source and target LDIF files")) :
          diffRC = 0
        else:
          diffRC = 1
      </script>
      <return> diffRC </return>
    </sequence>
  </function>
  <function name="verifyTrees">
    <function-prolog>
      This function verifies that the trees in a group of ldap servers are synchronized.
    </function-prolog>
    <function-list-args>
      <function-arg-def name="location" type="optional" default="'%s' % STAXServiceMachine">
        <function-arg-description>
          Location of target host
        </function-arg-description>
        <function-arg-property name="type" value="hostname"/>
      </function-arg-def>
     <function-arg-def name="dsPath" type="optional" default="'%s/%s' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)">
        <function-arg-description>
          Pathname to installation root
        </function-arg-description>
        <function-arg-property name="type" value="filepath"/>
      </function-arg-def>
      <function-arg-def name="referenceServer" type="required">
        <function-arg-description>
          Server that should be taken as reference.
        </function-arg-description>
        <function-arg-property name="type" value="Server"/>
      </function-arg-def>
      <function-arg-def name="serverList" type="required">
        <function-arg-description>
          List of the servers to verify against the referenceServer.
        </function-arg-description>
        <function-arg-property name="type" value="Server-list"/>
      </function-arg-def>
      <function-arg-def name="treeSuffix" type="required">
        <function-arg-description>
          Suffix of the tree to verify.
        </function-arg-description>
        <function-arg-property name="type" value="DN"/>
      </function-arg-def>
    </function-list-args>
    <sequence>
      <script>
        myRC = 0
        failedServers = []
        failingServerList = ''
        referenceTree = 'referenceTree.ldif'
        sampleTree = 'sampleTree.ldif'
        treeDiffs = 'treeDiffs.ldif'
      </script>
      <!-- Retrieve the tree from the reference server -->
      <call function="'ldapSearchWithScript'">
        { 'location'         : location,
          'dsPath'           : dsPath,
          'dsInstanceHost'  : referenceServer.getHostname() ,
          'dsInstancePort'  : referenceServer.getPort() ,
          'dsInstanceDn'  : referenceServer.getRootDn() ,
          'dsInstancePswd'  : referenceServer.getRootPwd() ,
          'dsBaseDN'  : treeSuffix,
          'dsFilter'  : 'objectclass=*',
          'outputFile'  : referenceTree }
      </call>
      <if expr="RC != 0">
        <!-- If the reference tree could not be retrieved, return an error -->
        <return> [1, None] </return>
      </if>
      <iterate var="server" in="serverList">
        <sequence>
          <!-- Retrieve the same tree for every other server in the list -->
          <call function="'ldapSearchWithScript'">
            { 'location'         : location,
              'dsPath'           : dsPath,
              'dsInstanceHost'  : server.getHostname() ,
              'dsInstancePort'  : server.getPort() ,
              'dsInstanceDn'  : server.getRootDn() ,
              'dsInstancePswd'  : server.getRootPwd() ,
              'dsBaseDN'  : treeSuffix,
              'dsFilter'  : 'objectclass=*',
              'outputFile'  : sampleTree }
          </call>
          <if expr="RC == 0">
            <sequence>
              <!-- Compare this tree to the reference one -->
              <call function="'LdifDiffWithScript'">
                { 'location'  : location,
                  'dsPath'  : dsPath,
                  'sourceLdif'  : '%s/../%s' % (dsPath, sampleTree),
                  'targetLdif'  : '%s/../%s' % (dsPath, referenceTree),
                  'outputLdif' : '%s/../%s' % (dsPath, treeDiffs) }
              </call>
              <script>
                if STAXResult != 0 :
                  failedServers.append('%s:%s' % (server.getHostname(), server.getPort()))
              </script>
            </sequence>
          <else>
            <script>
              failedServers.append('%s:%s' % (server.getHostname(), server.getPort()))
            </script>
          </else>
          </if>
        </sequence>
      </iterate>
      <if expr="len(failedServers) > 0">
        <!-- If at least one server failed to successfully compare to the reference tree,
           !   return an error, along with the list of the servers that failed to do so -->
        <script>
          myRC = 1
          comma = ','
          failingServerList = 'List of non-synchronized servers (tree verify FAILED): %s ' % comma.join(failedServers)
        </script>
      <else>
        <script>
          failingServerList = 'All servers synchronized (tree verify SUCCEEDED).'
        </script>
      </else>
      </if>
      <call function="'checktestRC'">
        { 'returncode' : myRC,
          'result'     : failingServerList ,
          'expected'   : 0 }
      </call>
      <return> [myRC, failedServers] </return>
    </sequence>
  </function>
</stax>
opends/tests/functional-tests/shared/python/replication.py
@@ -365,7 +365,35 @@
  ldifLines.append('dn: %s' % dn)
  ldifLines.append('changetype: modify')
  ldifLines.append('%s: %s' % (mod_type,attr_type))
  ldifLines.append('%s: %s' % (attr_type,attr_value))
  if attr_value != None :
    ldifLines.append('%s: %s' % (attr_type,attr_value))
  # write out the ldif file
  outfile = open(path,"w")
  for line in ldifLines:
    outfile.write("%s\n" % line)
  outfile.close()
# Define the function that writes a ldif file with the modify to operate
# on an entry in a given suffix.
def write_replication_mod_binary_ldif_file(path, dn, mod_type, attr_type, binary_value_path):
  # open file and read the binary value (which is encoded in base64)
  binaryValueFile = open(binary_value_path, "r")
  binaryValue = binaryValueFile.read()
  binaryValueFile.close()
  ldifLines = []
  ldifLines.append('dn: %s' % dn)
  ldifLines.append('changetype: modify')
  ldifLines.append('%s: %s' % (mod_type,attr_type))
  ldifLines.append('%s:: %s' % (attr_type,binaryValue))
  
  
  # write out the ldif file
@@ -377,3 +405,28 @@
  outfile.close()  
  
  
# Define the function that writes a ldif file with the modDN to operate
# on an entry in a given suffix.
def write_replication_moddn_ldif_file(path, dn, newrdn, newsuperior, deleteoldrdn):
  ldifLines = []
  ldifLines.append('dn: %s' % dn)
  ldifLines.append('changetype: moddn')
  ldifLines.append('newRDN: %s' % newrdn)
  ldifLines.append('deleteOldRDN: %s' % deleteoldrdn)
  if newsuperior != None:
    ldifLines.append('newSuperior: %s' % newsuperior)
  # write out the ldif file
  outfile = open(path,"w")
  for line in ldifLines:
    outfile.write("%s\n" % line)
  outfile.close()
opends/tests/functional-tests/testcases/replication/basic/replication_basic.xml
@@ -33,7 +33,7 @@
    <sequence>
      <block name="'basic'">
      <block name="'basic'">
        <sequence>
    
@@ -69,7 +69,8 @@
              <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,
@@ -79,29 +80,25 @@
                  'dsInstancePswd' : server1.getRootPwd(),
                  'entryToBeAdded' : '%s/replication_add_root_suffix.ldif' % clientDataDir }
              </call>
              <call function="'checkRC'">
                  { 'returncode' : RC,
                    'result'     : STAXResult }
              </call>
              <call function="'SearchObject'">
                { 'location' : clientHost,
                  'dsPath' : clientPath,
                  'dsInstanceHost'   : server2.getHostname() ,
                  'dsInstancePort'   : server2.getPort() ,
                  'dsInstanceDn'     : server2.getRootDn() ,
                  'dsInstancePswd'   : server2.getRootPwd() ,
              <!-- Check modify worked on "master" server -->
              <call function="'ldapSearchWithScript'">
                { 'location'         : clientHost,
                  'dsPath'           : clientPath,
                  'dsInstanceHost'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.getRootPwd() ,
                  'dsBaseDN'         : synchroSuffix ,
                  'dsFilter'         : 'objectclass=*' }                  
              </call>
              <call function="'checktestRC'">
                  { 'returncode' : RC,
                    'result'     : STAXResult,
                    'expected'   : 0 }
              </call>
              <!-- Verify the synchronization of the trees among the servers in the topology -->
              <call function="'verifyTrees'">
                [ clientHost, clientPath, server1, [server2], synchroSuffix ]
              </call>
              <call function="'testCase_Postamble'"/>
            </sequence>
          </testcase>
@@ -124,7 +121,9 @@
              <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,
@@ -134,45 +133,44 @@
                  'dsInstancePswd'  : server1.getRootPwd() ,
                  'entryToBeAdded'  : '%s/replication_add_single.ldif' % clientDataDir }
              </call>
              <call function="'checkRC'">
                  { 'returncode' : RC ,
                    'result'     : STAXResult }
              </call>
              <call function="'modifyEntry'">
              <call function="'ldapModifyWithScript'">
                { 'location'          : clientHost,
                  'dsPath'            : clientPath,
                  'dsInstanceHost'    : server1.getHostname() ,
                  'dsInstancePort'    : server1.getPort() ,
                  'dsInstanceDn'      : server1.getRootDn() ,
                  'dsInstancePswd'    : server1.getRootPwd() ,
                  'entryToBeModified' : '%s/replication_mod.ldif' % clientDataDir }
                  'dsFilename' : '%s/replication_mod.ldif' % clientDataDir }
              </call>
              <call function="'checkRC'">
                  { 'returncode' : RC ,
                    'result'     : STAXResult }
              </call>
              <call function="'SearchObject'">
              <!-- Check modify worked on "master" server -->
              <call function="'ldapSearchWithScript'">
                { 'location'         : clientHost,
                  'dsPath'           : clientPath,
                  'dsInstanceHost'   : server2.getHostname() ,
                  'dsInstancePort'   : server2.getPort() ,
                  'dsInstanceDn'     : server2.getRootDn() ,
                  'dsInstancePswd'   : server2.getRootPwd() ,
                  'dsInstanceHost'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.getRootPwd() ,
                  'dsBaseDN'         : entryDn,
                  'dsFilter'         : '%s=%s' % (attr_type,attr_value) }
                  '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' : RC ,
                    'result'     : STAXResult ,
                    'expected'   : 0 }
              </call>
                  { 'returncode' : resultLength ,
                    'result'     : searchResult ,
                    'expected'   : 1 }
              </call>
              <!-- Verify the synchronization of the trees among the servers in the topology -->
              <call function="'verifyTrees'">
                [ clientHost, clientPath, server1, [server2], synchroSuffix ]
              </call>
              <call function="'testCase_Postamble'"/>
            </sequence>
          </testcase>
@@ -194,7 +192,9 @@
              <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,
@@ -204,30 +204,1372 @@
                  'dsInstancePswd'   : server1.getRootPwd() ,
                  'dsBaseDN'         : entryDn }
              </call>
              <call function="'checkRC'">
                  { 'returncode' : RC ,
                    'result'     : STAXResult }
              </call>
              <call function="'SearchObject'">
                { 'location' : clientHost,
                  'dsPath' : clientPath,
                  'dsInstanceHost'   : server2.getHostname() ,
                  'dsInstancePort'   : server2.getPort() ,
                  'dsInstanceDn'     : server2.getRootDn() ,
                  'dsInstancePswd'   : server2.getRootPwd() ,
              <!-- Check modify worked on "master" server -->
              <call function="'ldapSearchWithScript'">
                { 'location'         : clientHost,
                  'dsPath'           : clientPath,
                  'dsInstanceHost'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.getRootPwd() ,
                  'dsBaseDN'         : entryDn,
                  'dsFilter'         : 'objectclass=*' ,
                  'expectedRC'       : 32
                }
              </call>
                  'expectedRC'  : 32 }
              </call>
              <!-- Verify the synchronization of the trees among the servers in the topology -->
              <call function="'verifyTrees'">
                [ clientHost, clientPath, server1, [server2], 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
          #@TestSteps
          #@TestPostamble
          #@TestResult
          -->
          <testcase name="'Replication: Basic: 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'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.getRootPwd() ,
                  'dsBaseDN'         : synchroSuffix }
              </call>
              <!-- Modify "master" server -->
              <call function="'addEntry'">
                { 'location'       : clientHost,
                  'dsPath'         : clientPath,
                  'dsInstanceHost' : server1.getHostname(),
                  'dsInstancePort' : server1.getPort(),
                  'dsInstanceDn'   : server1.getRootDn(),
                  'dsInstancePswd' : server1.getRootPwd(),
                  'entryToBeAdded' : '%s/replication/Example.ldif' % clientDataDir }
              </call>
              <!-- Check modify worked on "master" server -->
              <call function="'ldapSearchWithScript'">
                { 'location'         : clientHost,
                  'dsPath'           : clientPath,
                  'dsInstanceHost'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.getRootPwd() ,
                  'dsBaseDN'         : 'uid=scarter,ou=People,%s' % synchroSuffix,
                  'dsFilter'         : 'objectclass=*' }
              </call>
              <!-- Verify the synchronization of the trees among the servers in the topology -->
              <call function="'verifyTrees'">
                [ clientHost, clientPath, server1, [server2], 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
          #@TestPostamble
          #@TestResult
          -->
          <testcase name="'Replication: Basic: 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' : server1Path,
                  'dsInstanceHost'   : server1.getHostname() ,
                  'dsInstancePort'    : server1.getPort(),
                  'dsInstanceDn'    : server1.getRootDn(),
                  'dsInstancePswd'    : server1.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'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.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, server1, [server2], 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
          #@TestPostamble
          #@TestResult
          -->
          <testcase name="'Replication: Basic: 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' : server1Path,
                  'dsInstanceHost'   : server1.getHostname() ,
                  'dsInstancePort'    : server1.getPort(),
                  'dsInstanceDn'    : server1.getRootDn(),
                  'dsInstancePswd'    : server1.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'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.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, server1, [server2], 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
          #@TestPostamble
          #@TestResult
          -->
          <testcase name="'Replication: Basic: 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' % (logsTestDataDir,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,logsTestDataDir,clientDataDir)
              </message>
              <call function="'copyFile'">
                { 'srcfile'    : filePath,
                  'destfile'   : '%s/%s' % (clientDataDir,filename),
                  'remotehost' : client.getHostname() }
              </call>
              <!-- Modify "master" server -->
              <call function="'ldapModifyWithScript'">
                { 'location'          : clientHost,
                  'dsPath'            : clientPath,
                  'dsInstanceHost'    : server1.getHostname() ,
                  'dsInstancePort'    : server1.getPort() ,
                  'dsInstanceDn'      : server1.getRootDn() ,
                  'dsInstancePswd'    : server1.getRootPwd() ,
                  'dsFilename' : '%s/%s' % (clientDataDir, filename) }
              </call>
              <!-- Check modify worked on "master" server -->
              <call function="'ldapSearchWithScript'">
                { 'location'         : clientHost,
                  'dsPath'           : clientPath,
                  'dsInstanceHost'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.getRootPwd() ,
                  'dsBaseDN'         : 'uid=smason, ou=People,%s' % synchroSuffix,
                  'dsFilter'         : 'roomNumber=*',
                  '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, server1, [server2], 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
          #@TestPostamble
          #@TestResult
          -->
          <testcase name="'Replication: Basic: 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' : server1Path,
                  'dsInstanceHost'   : server1.getHostname() ,
                  'dsInstancePort'    : server1.getPort(),
                  'dsInstanceDn'    : server1.getRootDn(),
                  'dsInstancePswd'    : server1.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'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.getRootPwd() ,
                  'dsBaseDN'         : 'uid=jwalker, ou=People,%s' % synchroSuffix,
                  'dsFilter'         : 'roomNumber=3915' ,
                  '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, server1, [server2], 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
          #@TestPostamble
          #@TestResult
          -->
          <testcase name="'Replication: Basic: 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' : server1Path,
                  'dsInstanceHost'  : server1.getHostname() ,
                  'dsInstancePort'  : server1.getPort(),
                  'dsInstanceDn'  : server1.getRootDn(),
                  'dsInstancePswd'  : server1.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'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.getRootPwd() ,
                  'dsBaseDN'    : 'uid=jwallace, ou=People,%s' % synchroSuffix,
                  'dsFilter'  : '&amp;(postaladdress=Residence Parc Europe)(postaladdress=Appartement #6)(postaladdress=31 Rue General Mangin)(postaladdress=38100 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, server1, [server2], 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
          #@TestPostamble
          #@TestResult
          -->
          <testcase name="'Replication: Basic: 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' : server1Path,
                  'dsInstanceHost'   : server1.getHostname() ,
                  'dsInstancePort'    : server1.getPort(),
                  'dsInstanceDn'    : server1.getRootDn(),
                  'dsInstancePswd'    : server1.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'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.getRootPwd() ,
                  'dsBaseDN'    : 'uid=jwallace, ou=People,%s' % synchroSuffix,
                  'dsFilter'  : '|(postaladdress=Appartement #6)(postaladdress=38100 Grenoble)',
                  '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, server1, [server2], 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
          #@TestPostamble
          #@TestResult
          -->
          <testcase name="'Replication: Basic: 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' : server1Path,
                  'dsInstanceHost'   : server1.getHostname() ,
                  'dsInstancePort'    : server1.getPort(),
                  'dsInstanceDn'    : server1.getRootDn(),
                  'dsInstancePswd'    : server1.getRootPwd(),
                  'DNToModify'    : 'uid=jwallace, ou=People,%s' % synchroSuffix,
                  'listAttributes' : valuesToReplace,
                  'changetype' : 'replace' }
              </call>
              <!-- Check modify worked on "master" server -->
              <call function="'ldapSearchWithScript'">
                { 'location'         : clientHost,
                  'dsPath'           : clientPath,
                  'dsInstanceHost'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.getRootPwd() ,
                  'dsBaseDN'    : 'uid=jwallace, ou=People,%s' % synchroSuffix,
                  'dsFilter'  : '&amp;(postaladdress=Residence Letilleuil)(postaladdress=18 rue Nicolas Chorier)',
                  '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, server1, [server2], 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
          #@TestPostamble
          #@TestResult
          -->
          <testcase name="'Replication: Basic: 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' : server1Path,
                  'dsInstanceHost'   : server1.getHostname() ,
                  'dsInstancePort'    : server1.getPort(),
                  'dsInstanceDn'    : server1.getRootDn(),
                  'dsInstancePswd'    : server1.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'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.getRootPwd() ,
                  'dsBaseDN'    : 'uid=jwallace, ou=People,%s' % synchroSuffix,
                  'dsFilter'  : 'postaladdress=38000 Grenoble',
                  '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, server1, [server2], 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
          #@TestPostamble
          #@TestResult
          -->
          <testcase name="'Replication: Basic: 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' : server1Path,
                  'dsInstanceHost'   : server1.getHostname() ,
                  'dsInstancePort'    : server1.getPort(),
                  'dsInstanceDn'    : server1.getRootDn(),
                  'dsInstancePswd'    : server1.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'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.getRootPwd() ,
                  'dsBaseDN'    : 'uid=jwallace, ou=People,%s' % synchroSuffix,
                  'dsFilter'  : 'postaladdress=Residence Letilleuil',
                  '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, server1, [server2], 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
          #@TestPostamble
          #@TestResult
          -->
          <testcase name="'Replication: Basic: 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>
              <script>
                entryAttributes = []
                entryAttributes.append('cn: Tom Fitter')
                entryAttributes.append('sn: Fitter')
                entryAttributes.append('givenname: Tom')
                entryAttributes.append('objectclass: top')
                entryAttributes.append('objectclass: person')
                entryAttributes.append('objectclass: organizationalPerson')
                entryAttributes.append('objectclass: inetOrgPerson')
                entryAttributes.append('ou: Accounting')
                entryAttributes.append('ou: People')
                entryAttributes.append('l: Sunnyvale')
                entryAttributes.append('uid: tfitter')
                entryAttributes.append('mail: tfitter@example.com')
                entryAttributes.append('telephonenumber: +1 804  555 8974')
                entryAttributes.append('facsimiletelephonenumber: +1 804 555 1579')
                entryAttributes.append('roomnumber: 2164')
                entryAttributes.append('userpassword: hamstring')
                entryAttributes.append('description: PROFESSION Tap Fitter and PLUMBER')
                valuesToReplace = []
                valuesToReplace.append('description: Profession Tap Fitter and Plumber')
              </script>
              <!-- Modify "master" server -->
              <call function="'addAnEntry'">
                { 'dsPath' : server1Path,
                  'dsInstanceHost'   : server1.getHostname() ,
                  'dsInstancePort'    : server1.getPort(),
                  'dsInstanceDn'    : server1.getRootDn(),
                  'dsInstancePswd'    : server1.getRootPwd(),
                  'DNToAdd'   : 'uid=tfitter, ou=People,%s' % synchroSuffix,
                  'listAttributes' : entryAttributes }
              </call>
              <call function="'modifyAnAttribute'">
                { 'dsPath' : server1Path,
                  'dsInstanceHost'   : server1.getHostname() ,
                  'dsInstancePort'    : server1.getPort(),
                  'dsInstanceDn'    : server1.getRootDn(),
                  'dsInstancePswd'    : server1.getRootPwd(),
                  'DNToModify'    : 'uid=tfitter, ou=People,%s' % synchroSuffix,
                  'listAttributes' : valuesToReplace,
                  'changetype' : 'replace' }
              </call>
              <!-- Check modify worked on "master" server -->
              <call function="'ldapSearchWithScript'">
                { 'location'         : clientHost,
                  'dsPath'           : clientPath,
                  'dsInstanceHost'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.getRootPwd() ,
                  'dsBaseDN'    : 'uid=tfitter, ou=People,%s' % synchroSuffix,
                  'dsFilter'  : 'description=Profession Tap Fitter and Plumber',
                  '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, server1, [server2], 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
          #@TestPostamble
          #@TestResult
          -->
          <testcase name="'Replication: Basic: 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' % (logsTestDataDir,filename)
                binaryFilePath = '%s/photo1.uu' % testsGroupDir
                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,logsTestDataDir,clientDataDir)
              </message>
              <call function="'copyFile'">
                { 'srcfile'    : filePath,
                  'destfile'   : '%s/%s' % (clientDataDir,filename),
                  'remotehost' : client.getHostname() }
              </call>
              <!-- Modify "master" server -->
              <call function="'ldapModifyWithScript'">
                { 'location'          : clientHost,
                  'dsPath'            : clientPath,
                  'dsInstanceHost'    : server1.getHostname() ,
                  'dsInstancePort'    : server1.getPort() ,
                  'dsInstanceDn'      : server1.getRootDn() ,
                  'dsInstancePswd'    : server1.getRootPwd() ,
                  'dsFilename' : '%s/%s' % (clientDataDir, filename) }
              </call>
              <!-- Check modify worked on "master" server -->
              <call function="'ldapSearchWithScript'">
                { 'location'         : clientHost,
                  'dsPath'           : clientPath,
                  'dsInstanceHost'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.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, server1, [server2], 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
          #@TestPostamble
          #@TestResult
          -->
          <testcase name="'Replication: Basic: 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' % (logsTestDataDir,filename)
                binaryFilePath = '%s/photo2.uu' % testsGroupDir
                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,logsTestDataDir,clientDataDir)
              </message>
              <call function="'copyFile'">
                { 'srcfile'    : filePath,
                  'destfile'   : '%s/%s' % (clientDataDir,filename),
                  'remotehost' : client.getHostname() }
              </call>
              <!-- Modify "master" server -->
              <call function="'ldapModifyWithScript'">
                { 'location'          : clientHost,
                  'dsPath'            : clientPath,
                  'dsInstanceHost'    : server1.getHostname() ,
                  'dsInstancePort'    : server1.getPort() ,
                  'dsInstanceDn'      : server1.getRootDn() ,
                  'dsInstancePswd'    : server1.getRootPwd() ,
                  'dsFilename' : '%s/%s' % (clientDataDir, filename) }
              </call>
              <!-- Check modify worked on "master" server -->
              <call function="'ldapSearchWithScript'">
                { 'location'         : clientHost,
                  'dsPath'           : clientPath,
                  'dsInstanceHost'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.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, server1, [server2], 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
          #@TestPostamble
          #@TestResult
          -->
          <testcase name="'Replication: Basic: 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' % (logsTestDataDir,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,logsTestDataDir,clientDataDir)
              </message>
              <call function="'copyFile'">
                { 'srcfile'    : filePath,
                  'destfile'   : '%s/%s' % (clientDataDir,filename),
                  'remotehost' : client.getHostname() }
              </call>
              <!-- Modify "master" server -->
              <call function="'ldapModifyWithScript'">
                { 'location'          : clientHost,
                  'dsPath'            : clientPath,
                  'dsInstanceHost'    : server1.getHostname() ,
                  'dsInstancePort'    : server1.getPort() ,
                  'dsInstanceDn'      : server1.getRootDn() ,
                  'dsInstancePswd'    : server1.getRootPwd() ,
                  'dsFilename' : '%s/%s' % (clientDataDir, filename) }
              </call>
              <!-- Check modify worked on "master" server -->
              <call function="'ldapSearchWithScript'">
                { 'location'         : clientHost,
                  'dsPath'           : clientPath,
                  'dsInstanceHost'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.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, server1, [server2], 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
          #@TestPostamble
          #@TestResult
          -->
          <testcase name="'Replication: Basic: 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' % (logsTestDataDir,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,logsTestDataDir,clientDataDir)
              </message>
              <call function="'copyFile'">
                { 'srcfile'    : filePath,
                  'destfile'   : '%s/%s' % (clientDataDir,filename),
                  'remotehost' : client.getHostname() }
              </call>
              <!-- Modify "master" server -->
              <call function="'ldapModifyWithScript'">
                { 'location'          : clientHost,
                  'dsPath'            : clientPath,
                  'dsInstanceHost'    : server1.getHostname() ,
                  'dsInstancePort'    : server1.getPort() ,
                  'dsInstanceDn'      : server1.getRootDn() ,
                  'dsInstancePswd'    : server1.getRootPwd() ,
                  'dsFilename' : '%s/%s' % (clientDataDir, 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'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.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'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.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, server1, [server2], 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
          #@TestPostamble
          #@TestResult
          -->
          <testcase name="'Replication: Basic: 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' % (logsTestDataDir,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,logsTestDataDir,clientDataDir)
              </message>
              <call function="'copyFile'">
                { 'srcfile'    : filePath,
                  'destfile'   : '%s/%s' % (clientDataDir,filename),
                  'remotehost' : client.getHostname() }
              </call>
              <!-- Modify "master" server -->
              <call function="'ldapModifyWithScript'">
                { 'location'          : clientHost,
                  'dsPath'            : clientPath,
                  'dsInstanceHost'    : server1.getHostname() ,
                  'dsInstancePort'    : server1.getPort() ,
                  'dsInstanceDn'      : server1.getRootDn() ,
                  'dsInstancePswd'    : server1.getRootPwd() ,
                  'dsFilename' : '%s/%s' % (clientDataDir, 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'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.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'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.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, server1, [server2], 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
          #@TestPostamble
          #@TestResult
          -->
          <testcase name="'Replication: Basic: 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' % (logsTestDataDir,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,logsTestDataDir,clientDataDir)
              </message>
              <call function="'copyFile'">
                { 'srcfile'    : filePath,
                  'destfile'   : '%s/%s' % (clientDataDir,filename),
                  'remotehost' : client.getHostname() }
              </call>
              <!-- Modify "master" server -->
              <call function="'ldapModifyWithScript'">
                { 'location'          : clientHost,
                  'dsPath'            : clientPath,
                  'dsInstanceHost'    : server1.getHostname() ,
                  'dsInstancePort'    : server1.getPort() ,
                  'dsInstanceDn'      : server1.getRootDn() ,
                  'dsInstancePswd'    : server1.getRootPwd() ,
                  'dsFilename' : '%s/%s' % (clientDataDir, 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'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.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'   : server1.getHostname() ,
                  'dsInstancePort'   : server1.getPort() ,
                  'dsInstanceDn'     : server1.getRootDn() ,
                  'dsInstancePswd'   : server1.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, server1, [server2], synchroSuffix ]
              </call>
              <call function="'testCase_Postamble'"/>
            </sequence>
          </testcase>
          <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
            file="'%s/testcases/replication/replication_cleanup.xml' % (TESTS_DIR)"/>
          <call function="'replication_cleanup'" />
opends/tests/functional-tests/testcases/replication/basic/replication_basic_setup.xml
@@ -39,8 +39,10 @@
      </message>                
    
      <script>
        server1Path = '%s/%s' % (server1.getDir(),OPENDSNAME)
        synchroSuffix = server1.getSynchronizedSuffixList()[0].getSuffixDn()
        entryDn = 'uid=scarter,%s' % synchroSuffix
        grandchildEntryDn = 'uid=scarter,ou=People,o=replication tests,%s' % synchroSuffix
        mod_type = 'replace'
        attr_type = 'roomnumber'
        attr_value = '1111'           
@@ -109,7 +111,8 @@
          'destfile'   : '%s/%s' % (clientDataDir,filename),
          'remotehost' : client.getHostname() }
      </call>                   
      <call function="'checkRC'">
        { 'returncode' : RC ,
          'result'     : STAXResult }
opends/tests/functional-tests/testcases/replication/replication_cleanup.xml
@@ -35,11 +35,7 @@
      <block name="'replication-cleanup'">
        <sequence>
          <script>
            basicTopologyFile = '%s/config/replication/basic_topology.txt' % TESTS_DIR
          </script>
        <sequence>
                            
          <!-- Stop the servers in the topology -->                            
          <iterate var="server" in="_topologyServerList">               
opends/tests/functional-tests/testcases/replication/replication_setup.xml
@@ -30,23 +30,27 @@
  <defaultcall function="replication_setup"/>
  <function name="replication_setup">
    <function-map-args>
      <function-arg-def name="topologyFile" type="optional" default="'%s/config/replication/basic_topology.txt' % TESTS_DIR">
        <function-arg-description>
          Pathname to file describing the topology.
        </function-arg-description>
        <function-arg-property name="type" value="filepath"/>
      </function-arg-def>
    </function-map-args>
    <sequence>
      <block name="'replication-setup'">
        <sequence>
          <script>
            basicTopologyFile = '%s/config/replication/basic_topology.txt' % TESTS_DIR
          </script>
            
          <message>
             'Create DS topology as described in %s' % basicTopologyFile
             'Create DS topology as described in %s' % topologyFile
          </message>
              
          <call function="'createTopology'">
            { 'topologyDescFile' : basicTopologyFile,
            { 'topologyDescFile' : topologyFile,
              'sharedDataFolder' : 'replication' }
          </call>