From c2311e9b145e22d7ca8aa1c0a1f549fdae8608e1 Mon Sep 17 00:00:00 2001
From: Christophe Sovant <christophe.sovant@forgerock.com>
Date: Mon, 18 Feb 2013 09:15:59 +0000
Subject: [PATCH] CR-1292 Fix for replication tests

---
 opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog_consistency/externalchangelog_consistency_tests.xml | 2710 +++++++++++++++++++++++++++++++
 opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog/externalchangelog_consistency_tests.xml             | 2252 -------------------------
 opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog/externalchangelog.xml                               |   22 
 opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog_consistency/externalchangelog_consistency.xml       |  176 ++
 opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog/externalchangelog_common_ecl_tests.xml              |    4 
 opends/tests/staf-tests/functional-tests/testcases/security/client_auth/fingerprint_mapper.xml                                       |    2 
 6 files changed, 2,896 insertions(+), 2,270 deletions(-)

diff --git a/opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog/externalchangelog.xml b/opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog/externalchangelog.xml
index 76fa883..c3cd486 100644
--- a/opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog/externalchangelog.xml
+++ b/opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog/externalchangelog.xml
@@ -24,7 +24,7 @@
  ! CDDL HEADER END
  !
  !      Copyright 2008-2009 Sun Microsystems, Inc.
- !      Portions Copyright 2011 ForgeRock AS.
+ !      Portions Copyright 2011-2013 ForgeRock AS.
  ! -->
 <stax>
     
@@ -48,7 +48,7 @@
             <script>
               if not CurrentTestPath.has_key('group'):
                 CurrentTestPath['group']='replication'
-              CurrentTestPath['suite']=STAXCurrentBlock
+              CurrentTestPath['suite']='externalchangelog'
               
               _group = 'replication'
               _suite = 'externalchangelog'
@@ -119,23 +119,7 @@
                   # List of tests to run
                   testsList=[]
                   testsList.append('ecl_setup')
-                  testsList.append('ecl_add_cookies_001')
                   testsList.append('ecl_changenumbers_001')
-                  testsList.append('ecl_mod_cookies_001')
-                  testsList.append('ecl_changenumbers_002')
-                  testsList.append('ecl_draft_cookies_001')
-                  testsList.append('ecl_cookies_001')
-                  testsList.append('ecl_draft_changenumbers_001')
-                  testsList.append('ecl_cookies_002')
-                  testsList.append('ecl_draft_changenumbers_002')
-                  testsList.append('ecl_cookies_003')
-                  testsList.append('ecl_draft_changenumbers_003')
-                  testsList.append('ecl_purge_sleep_001')
-                  testsList.append('ecl_purge_001')
-                  testsList.append('ecl_purge_002')
-                  testsList.append('ecl_purge_003')
-                  testsList.append('ecl_purge_004')
-                  testsList.append('ecl_purge_005')
                   testsList.append('ecl_cleanup')
                 </script>
 
@@ -143,7 +127,7 @@
                 <iterate var="__test" in="testsList">
                   <sequence>
                     <call function="'%s' % (__test)" />
-                  </sequence>
+              </sequence>
                 </iterate>
 
               </sequence>
diff --git a/opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog/externalchangelog_common_ecl_tests.xml b/opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog/externalchangelog_common_ecl_tests.xml
index f1050eb..d5afc5e 100644
--- a/opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog/externalchangelog_common_ecl_tests.xml
+++ b/opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog/externalchangelog_common_ecl_tests.xml
@@ -24,7 +24,7 @@
  ! CDDL HEADER END
  !
  !      Copyright 2009-2010 Sun Microsystems, Inc.
- !      Portions Copyright 2011 ForgeRock AS.
+ !      Portions Copyright 2011-2013 ForgeRock AS.
  ! -->
 <stax>
     
@@ -12387,7 +12387,7 @@
                    indexvar="indx">
             <sequence>
               <script>
-                newSuffx      = "o=new_suffix_no_repl"
+                newSuffix     = "o=new_suffix_no_repl"
                 newReplSuffix = "o=new_suffix_repl"
                 
                 serverPath    = '%s/%s' % (server.getDir(), OPENDSNAME)
diff --git a/opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog/externalchangelog_consistency_tests.xml b/opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog/externalchangelog_consistency_tests.xml
index 273e31a..17621e2 100644
--- a/opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog/externalchangelog_consistency_tests.xml
+++ b/opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog/externalchangelog_consistency_tests.xml
@@ -23,7 +23,7 @@
  !
  ! CDDL HEADER END
  !
- !      Copyright 2011 ForgeRock AS.
+ !      Copyright 2011-2013 ForgeRock AS.
  ! -->
 <stax>
 
@@ -167,162 +167,6 @@
       </sequence>
     </testcase>
   </function>
-            
-  <!--- Test Case information
-  #@TestMarker          Replication
-  #@TestName            Replication : ECL: Add Cookies
-  #@TestID              ecl_add_cookies_001
-  #@TestPurpose         Verify that the 2 servers have consistent COOKIE on add.
-  #@TestPreamble
-  #@TestSteps           Step 1: Add entries in the various replication servers
-  #@TestSteps           Step 2: Check that the changeLogCookie and lastExternalChangelogCookie match
-  #@TestSteps           Step 3: Verify the synchronization of the trees among the servers in the topology
-  #@TestPostamble
-  #@TestResult          Test is successful if the result code is 0
-  -->
-  <function name="ecl_add_cookies_001" scope="local">
-    <testcase name="getTestCaseName('ecl_add_cookies_001')">                     
-      <sequence> 
-        <try>
-          <sequence>                
-            <call function="'testCase_Preamble'"/>
-            <message>
-               'Test Name = %s' % STAXCurrentTestcase
-            </message>
-     
-            <!-- Step 1: Add entries in the various replication servers -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Add entries in the various replication servers.' }
-            </call>
-
-            <script>
-              entrynum = 1
-            </script>
-            
-            <iterate var="server" in="_topologyServerList" indexvar="'entrynum'">
-              <sequence>
-                <!-- Add entry to both" servers -->
-                <script>
-                  replServer = server
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
-
-                  myEntry = person_entry('cn=Change%s' % entrynum, synchroSuffix)
-                  myEntry.addAttr('sn', 'Change%s' % entrynum)
-                  myEntry.addAttr('description', 'this is change %s' % entrynum)
-                  myEntry.addAttr('uid', 'Change%s'.lower() % entrynum)
-                  
-                  entrynum += 1
-                </script>
-
-                <message>
-                  'Add Entry (%s) on server %s:%s' \
-                  % (myEntry.getDn(), replServer.getHostname(), replServer.getPort())
-                </message>
-
-                <!-- Add an Entry under suffix -->          
-                <call function="'addAnEntry'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'DNToAdd'        : myEntry.getDn(),
-                    'listAttributes' : myEntry.getAttrList()
-                  }
-                </call>
-                
-              </sequence>
-            </iterate>
-
-            <!-- Step 2: Check that the changeLogCookie and lastExternalChangelogCookie match -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Check that the changeLogCookie and lastExternalChangelogCookie match.' }
-            </call>
-
-            <script>
-              entrynum = 1
-              cookiesList = []
-            </script>
-            <iterate var="server" in="_topologyServerList" indexvar="'entrynum'">
-              <sequence>
-                <!-- Add entry to both" servers -->
-                <script>
-                  replServer = server
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
-
-                </script>
-
-                <!-- Search for changeLogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : 'cn=changelog',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsAttributes'   : 'changeLogCookie' ,
-                    'dsControl'      : '1.3.6.1.4.1.26027.1.5.4:false:;',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
-                  cookiesList.append(clc)
-                  global_cookiesList.set(clc)
-                </script>
-
-                <!-- Search for lastExternalChangelogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : '',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsScope'        : 'base',
-                    'dsAttributes'   : 'lastExternalChangelogCookie',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  lecc = get_last_attr_from_entry(STAXResult,'lastExternalChangelogCookie')
-                  cookiesList.append(lecc)
-                </script>
-                       
-              </sequence>
-            </iterate>
-
-            <!-- Compare changeLogCookie and lastExternalChangelogCookie -->
-            <call function="'compareItems'">
-              { 'items' : cookiesList ,
-                'label' : 'changeLogCookies'
-              }
-            </call>
-
-            <!-- Step 3: Verify the synchronization of the trees among the servers in
-              the topology -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Verify the synchronization of the trees among the servers in the topology.' }
-            </call>    
-            <call function="'verifyTrees'">
-              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
-            </call>
-
-          </sequence>
-          <finally>
-            <call function="'testCase_Postamble'"/>
-          </finally>
-        </try>
-      </sequence>
-    </testcase>
-  </function>        
 
   <!--- Test Case information
   #@TestMarker          Replication
@@ -375,7 +219,8 @@
                     'dsBaseDN'       : 'cn=changelog',
                     'dsFilter'       : 'objectclass=*',
                     'dsAttributes'   : 'changeNumber',
-                    'extraParams'    : '-T'
+                    'extraParams'    : '-T',
+                    'knownIssue'     : 'OPENDJ-253'
                   }
                 </call>
 
@@ -533,2098 +378,7 @@
       </sequence>
     </testcase>
   </function>
-            
-  <!--- Test Case information
-  #@TestMarker          Replication
-  #@TestName            Replication : ECL: Cookie
-  #@TestID              ecl_mod_cookies_001
-  #@TestPurpose         Verify that the 2 servers have consistent COOKIE on modify
-  #@TestPreamble
-  #@TestSteps           Step 1: Modify Entries various replication servers
-  #@TestSteps           Step 2: Check that the changeLogCookie and lastExternalChangelogCookie match
-  #@TestSteps           Step 3: Verify the synchronization of the trees among the servers in the topology
-  #@TestPostamble
-  #@TestResult          Test is successful if the result code is 0
-  -->
-  <function name="ecl_mod_cookies_001" scope="local">
-    <testcase name="getTestCaseName('ecl_mod_cookies_001')">                     
-      <sequence> 
-        <try>
-          <sequence>                
-            <call function="'testCase_Preamble'"/>
-            <message>
-               'Test Name = %s' % STAXCurrentTestcase
-            </message>
-
-            <!-- Step1: Modify Entries various replication servers -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Modify Entries various replication servers.' }
-            </call>
-
-            <script>
-              entrynum = 1
-              cookiesList = []
-            </script>
-            <iterate var="server" in="_topologyServerList">
-              <sequence>
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-            
-                <!-- Modify entry to both" servers -->
-                <script>
-                  myEntry = person_entry('cn=Change%s' % entrynum, synchroSuffix)
-                  
-                  entrynum += 1
-                </script>
-
-                <message>
-                  'Modify Entry (%s) on server %s:%s' \
-                  % (myEntry.getDn(), replServer.getHostname(), replServer.getPort())
-                </message> 
-
-                <call function="'modifyAnAttribute'">
-                  { 'dsPath'                 : replServerPath,
-                    'dsInstanceHost'         : replServer.getHostname() ,
-                    'dsInstancePort'         : replServer.getPort() ,
-                    'dsInstanceDn'           : replServer.getRootDn() ,
-                    'dsInstancePswd'         : replServer.getRootPwd() ,
-                    'DNToModify'             : myEntry.getDn() ,
-                    'attributeName'          : 'description' ,
-                    'newAttributeValue'      : 'This is a new change' ,
-                    'changetype'             : 'add'
-                  }
-                </call>
-
-                <!-- Lets Read the Entry back to be sure -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : myEntry.getDn(),
-                    'dsFilter'       : 'objectclass=*',
-                    'dsAttributes'   : 'description',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-              </sequence>
-            </iterate>
-
-            <!-- Step2: Check that the changeLogCookie and lastExternalChangelogCookie match -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Check that the changeLogCookie and lastExternalChangelogCookie match.' }
-            </call>
-            <script>
-              mycookie = global_cookiesList.get()
-            </script>
-            <iterate var="server" in="_topologyServerList">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for changeLogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : 'cn=changelog',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsAttributes'   : 'changeLogCookie' ,
-                    'dsControl'      : '1.3.6.1.4.1.26027.1.5.4:false:%s' % mycookie,
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
-                  cookiesList.append(clc)
-                  global_cookiesList.set(clc)
-                </script>
-
-                <!-- Search for lastExternalChangelogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : '',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsScope'        : 'base',
-                    'dsAttributes'   : 'lastExternalChangelogCookie',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  lecc = get_last_attr_from_entry(STAXResult,'lastExternalChangelogCookie')
-                  cookiesList.append(lecc)
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare changeLogCookie and lastExternalChangelogCookie -->
-            <call function="'compareItems'">
-              { 'items' : cookiesList ,
-                'label' : 'changeLogCookies'
-              }
-            </call>
-
-            <!-- Step 3: Verify the synchronization of the trees among the servers in
-              the topology -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Verify the synchronization of the trees among the servers in the topology.' }
-            </call>    
-            <call function="'verifyTrees'">
-              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
-            </call>
-                
-          </sequence>
-          <finally>
-            <call function="'testCase_Postamble'"/>
-          </finally>
-        </try>
-      </sequence>
-    </testcase>
-  </function>
-            
-  <!--- Test Case information
-  #@TestMarker          Replication
-  #@TestName            Replication : ECL: ChangeNumbers
-  #@TestID              ecl_changenumbers_002
-  #@TestPurpose         Verify that the 2 servers have consistent change numbers after modify
-  #@TestPreamble
-  #@TestSteps           Step1: Check that the changeNumber and lastChangeNumber match
-  #@TestSteps           Step2: Check that firstChangeNumbers match
-  #@TestSteps           Step3: Count changelog entries in draft mode
-  #@TestPostamble
-  #@TestResult          Test is successful if the result code is 0
-  -->
-  <function name="ecl_changenumbers_002" scope="local">
-    <testcase name="getTestCaseName('ecl_changenumbers_002')">                     
-      <sequence> 
-        <try>
-          <sequence>                
-            <call function="'testCase_Preamble'"/>
-            <message>
-               'Test Name = %s' % STAXCurrentTestcase
-            </message>
-
-            <!-- Reset List  -->
-            <script>
-              cnsList = []
-            </script>
-
-            <!-- Step1: Check that the changeNumber and lastChangeNumber match -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Check that the changeNumber and lastChangeNumber match.' }
-            </call>
-
-            <iterate var="server" in="_topologyServerList">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for changeNumber -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : 'cn=changelog',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsAttributes'   : 'changeNumber',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  cn = get_last_attr_from_entry(STAXResult,'changeNumber')
-                  cnsList.append(cn)
-                  global_cnsList.set(cn)
-                </script>
-
-                <!-- Search for lastChangeNumber -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : '',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsScope'        : 'base',
-                    'dsAttributes'   : 'lastChangeNumber',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  lcn = get_last_attr_from_entry(STAXResult,'lastChangeNumber')
-                  cnsList.append(lcn)
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare changeNumber and lastChangeNumber -->
-            <call function="'compareItems'">
-              { 'items' : cnsList,
-                'label' : 'changeNumbers'
-              }
-            </call>
-
-            <!-- Step2: Check that firstChangeNumbers match -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Check that firstChangeNumbers match.' }
-            </call>
-
-            <script>
-              fcnsList = []
-            </script>
-            <iterate var="server" in="_topologyServerList">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for firstChangeNumber -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : '',
-                    'dsScope'        : 'base',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsAttributes'   : 'firstChangeNumber',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  fcn = get_last_attr_from_entry(STAXResult,'firstChangeNumber')
-                  fcnsList.append(fcn)
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare firstChangeNumbers -->
-            <call function="'compareItems'">
-              { 'items' : fcnsList ,
-                'label' : 'firstChangeNumber'
-              }
-            </call>
-
-            <!-- Step3: Count changelog entries in draft mode -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Count changelog entries in draft mode.' }
-            </call>
-
-            <script>
-              dncList = []
-              #4 changes + top
-              noOfEntries = 5
-            </script>
-            <iterate var="server" in="_topologyServerList">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Count the number of initial changes -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : 'cn=changelog',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsAttributes'   : 'dn' ,
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  dncount=int(count_attr(STAXResult))
-                  dncList.append(dncount)
-                </script>
-                
-                <if expr="dncount == noOfEntries">
-                  <message>
-                    'Search returned %s changes, expected %s' % (dncount,noOfEntries)
-                  </message>
-                <else>
-                  <sequence>
-                    <tcstatus result="'fail'"/>
-                    <message level="'error'">
-                      'Search returned %s changes, expected %s' % (dncount,noOfEntries)
-                    </message>
-                  </sequence>
-                </else>
-                </if>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare number of entries -->
-            <call function="'compareItems'">
-              { 'items' : dncList ,
-                'label' : 'numberOfEntries'
-              }
-            </call>
-                  
-          </sequence>
-          <finally>
-            <call function="'testCase_Postamble'"/>
-          </finally>
-        </try>
-      </sequence>
-    </testcase>
-  </function>
-
-  <!--- Test Case information
-  #@TestMarker          Replication
-  #@TestName            Replication : ECL: Draft Cookies
-  #@TestID              ecl_draft_cookies_001
-  #@TestPurpose         Verify in draft mode the 2 servers have consistent changeLogCookie
-  #@TestPreamble
-  #@TestSteps           Step1: Check that the changeLogCookie match
-  #@TestPostamble
-  #@TestResult          Test is successful if the result code is 0
-  -->
-  <function name="ecl_draft_cookies_001" scope="local">
-    <testcase name="getTestCaseName('ecl_draft_cookies_001')">                     
-      <sequence> 
-        <try>
-          <sequence>                
-            <call function="'testCase_Preamble'"/>
-            <message>
-               'Test Name = %s' % STAXCurrentTestcase
-            </message>
-
-            <script>
-              mychangenumber = global_cnsList.get()
-              cookiesList = []
-            </script>
-
-            <!-- Check that the changeLogCookie match -->
-            <iterate var="server" in="_topologyServerList">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for changeLogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : 'cn=changelog',
-                    'dsFilter'       : '(changenumber=%s)' % mychangenumber,
-                    'dsAttributes'   : 'changeLogCookie' ,
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
-                  cookiesList.append(clc)
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare changeLogCookie -->
-            <call function="'compareItems'">
-              { 'items' : cookiesList ,
-                'label' : 'changeLogCookies'
-              }
-            </call>
-                  
-          </sequence>
-          <finally>
-            <call function="'testCase_Postamble'"/>
-          </finally>
-        </try>
-      </sequence>
-    </testcase>
-  </function>
- 
-  <!--- Test Case information
-  #@TestMarker          Replication
-  #@TestName            Replication : ECL: Cookies
-  #@TestID              ecl_cookies_001
-  #@TestPurpose         Verify that after change to master all servers have consistent COOKIE
-  #@TestPreamble
-  #@TestSteps           Step1: Modify entry on one server
-  #@TestSteps           Step2: Check that the changeLogCookie and lastExternalChangelogCookie match
-  #@TestPostamble
-  #@TestResult          Test is successful if the result code is 0
-  -->
-  <function name="ecl_cookies_001" scope="local">
-    <testcase name="getTestCaseName('ecl_cookies_001')">                     
-      <sequence> 
-        <try>
-          <sequence>                
-            <call function="'testCase_Preamble'"/>
-            <message>
-               'Test Name = %s' % STAXCurrentTestcase
-            </message>
-
-            <!-- Step1: Modify entry on one server -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Modify entry on one server.' }
-            </call>
-
-            <script>
-              cookiesList = []
-              myEntry = person_entry('cn=Change1', synchroSuffix)
-            </script>
-
-            <message>
-              'Modify Entry (%s) on server %s:%s' \
-              % (myEntry.getDn(), masterHost, master.getPort())
-            </message> 
-
-            <call function="'modifyAnAttribute'">
-              { 'dsPath'                 : masterPath,
-                'dsInstanceHost'         : masterHost ,
-                'dsInstancePort'         : master.getPort() ,
-                'dsInstanceDn'           : master.getRootDn() ,
-                'dsInstancePswd'         : master.getRootPwd() ,
-                'DNToModify'             : myEntry.getDn() ,
-                'attributeName'          : 'description' ,
-                'newAttributeValue'      : 'this is a change on server 1',
-                'changetype'             : 'add'
-              }
-            </call>
-
-            <!-- Step2: Check that the changeLogCookie and lastExternalChangelogCookie match -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Check that the changeLogCookie and lastExternalChangelogCookie match.' }
-            </call>
-
-            <script>
-              mycookie = global_cookiesList.get()
-            </script>
-            <iterate var="server" in="_topologyServerList">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
-                </script>
-
-                <!-- Search for changeLogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : 'cn=changelog',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsAttributes'   : 'changeLogCookie' ,
-                    'dsControl'      : '1.3.6.1.4.1.26027.1.5.4:false:%s' % mycookie,
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
-                  cookiesList.append(clc)
-                  global_cookiesList.set(clc)
-                </script>
-
-                <!-- Search for lastExternalChangelogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : '',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsScope'        : 'base',
-                    'dsAttributes'   : 'lastExternalChangelogCookie',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  lecc = get_last_attr_from_entry(STAXResult,'lastExternalChangelogCookie')
-                  cookiesList.append(lecc)
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare changeLogCookie and lastExternalChangelogCookie -->
-            <call function="'compareItems'">
-              { 'items' : cookiesList ,
-                'label' : 'changeLogCookies'
-              }
-            </call>
-                  
-          </sequence>
-          <finally>
-            <call function="'testCase_Postamble'"/>
-          </finally>
-        </try>
-      </sequence>
-    </testcase>
-  </function>
-
-  <!--- Test Case information
-  #@TestMarker          Replication
-  #@TestName            Replication : ECL: Draft ChangeNumbers
-  #@TestID              ecl_draft_changenumbers_001
-  #@TestPurpose         Verify in draft mode servers have consistent changeNumber and lastChangeNumber
-  #@TestPreamble
-  #@TestSteps           Step1: Check that the changeNumber and lastChangeNumber match
-
-  #@TestPostamble
-  #@TestResult          Test is successful if the result code is 0
-  -->
-  <function name="ecl_draft_changenumbers_001" scope="local">
-    <testcase name="getTestCaseName('ecl_draft_changenumbers_001')">                     
-      <sequence> 
-        <try>
-          <sequence>                
-            <call function="'testCase_Preamble'"/>
-            <message>
-               'Test Name = %s' % STAXCurrentTestcase
-            </message>
-
-            <!-- Reset List  -->
-            <script>
-              cnsList = []
-            </script>
-
-            <!-- Step1: Check that the changeNumber and lastChangeNumber match -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Check that the changeNumber and lastChangeNumber match.' }
-            </call>
-
-            <script>
-              mychangenumber = global_cnsList.get()
-            </script>
-            <iterate var="server" in="_topologyServerList">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for changeNumber -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : 'cn=changelog',
-                    'dsFilter'       : '(changenumber>=%s)' % mychangenumber,
-                    'dsAttributes'   : 'changeNumber',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  cn = get_last_attr_from_entry(STAXResult,'changeNumber')
-                  cnsList.append(cn)
-                  global_cnsList.set(cn)
-                </script>
-
-                <!-- Search for lastChangeNumber -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : '',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsScope'        : 'base',
-                    'dsAttributes'   : 'lastChangeNumber',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  lcn = get_last_attr_from_entry(STAXResult,'lastChangeNumber')
-                  cnsList.append(lcn)
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare changeNumber and lastChangeNumber -->
-            <call function="'compareItems'">
-              { 'items' : cnsList,
-                'label' : 'changeNumbers'
-              }
-            </call>
-                  
-          </sequence>
-          <finally>
-            <call function="'testCase_Postamble'"/>
-          </finally>
-        </try>
-      </sequence>
-    </testcase>
-  </function>
-       
-  <!--- Test Case information
-  #@TestMarker          Replication
-  #@TestName            Replication : ECL: Cookie
-  #@TestID              ecl_cookies_002
-  #@TestPurpose         Verify that after change to consumer all servers have consistent COOKIE
-  #@TestPreamble
-  #@TestSteps           Step1: Modify entry on one server
-  #@TestSteps           Step2: Check that the changeLogCookie and lastExternalChangelogCookie match
-  #@TestPostamble
-  #@TestResult          Test is successful if the result code is 0
-  -->
-  <function name="ecl_cookies_002" scope="local">
-    <testcase name="getTestCaseName('ecl_cookies_002')">                     
-      <sequence> 
-        <try>
-          <sequence>                
-            <call function="'testCase_Preamble'"/>
-            <message>
-               'Test Name = %s' % STAXCurrentTestcase
-            </message>
-
-            <!-- Modify entry on one server -->
-            <script>
-              cookiesList = []
-              myEntry = person_entry('cn=Change1', synchroSuffix)
-              
-              consumerServer = consumerList[0]
-              consumerServerPath = '%s/%s' % (consumerServer.getDir(), OPENDSNAME)
-            </script>
-
-            <message>
-              'Modify Entry (%s) on server %s:%s' \
-              % (myEntry.getDn(), consumerServer.getHostname(), consumerServer.getPort())
-            </message> 
-
-            <call function="'modifyAnAttribute'">
-              { 'dsPath'                 : consumerServerPath,
-                'dsInstanceHost'         : consumerServer.getHostname() ,
-                'dsInstancePort'         : consumerServer.getPort() ,
-                'dsInstanceDn'           : consumerServer.getRootDn() ,
-                'dsInstancePswd'         : consumerServer.getRootPwd() ,
-                'DNToModify'             : myEntry.getDn() ,
-                'attributeName'          : 'description' ,
-                'newAttributeValue'      : 'this is a change on server 2',
-                'changetype'             : 'add'
-              }
-            </call>
-
-            <!-- Check that the changeLogCookie and lastExternalChangelogCookie match -->
-            <script>
-              mycookie = global_cookiesList.get()
-            </script>
-            <iterate var="server" in="_topologyServerList">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for changeLogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : 'cn=changelog',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsAttributes'   : 'changeLogCookie' ,
-                    'dsControl'      : '1.3.6.1.4.1.26027.1.5.4:false:%s' % mycookie,
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
-                  cookiesList.append(clc)
-                  global_cookiesList.set(clc)
-                </script>
-
-                <!-- Search for lastExternalChangelogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : '',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsScope'        : 'base',
-                    'dsAttributes'   : 'lastExternalChangelogCookie',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  lecc = get_last_attr_from_entry(STAXResult,'lastExternalChangelogCookie')
-                  cookiesList.append(lecc)
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare changeLogCookie and lastExternalChangelogCookie -->
-            <call function="'compareItems'">
-              { 'items' : cookiesList ,
-                'label' : 'changeLogCookies'
-              }
-            </call>
-                  
-          </sequence>
-          <finally>
-            <call function="'testCase_Postamble'"/>
-          </finally>
-        </try>
-      </sequence>
-    </testcase>
-  </function>
- 
-  <!--- Test Case information
-  #@TestMarker          Replication
-  #@TestName            Replication : ECL: Draft ChangeNumbers
-  #@TestID              ecl_draft_changenumbers_002
-  #@TestPurpose         Verify that the 2 servers have consistent changeNumber and lastChangeNumber
-  #@TestPreamble
-  #@TestSteps           Step1: Check that the changeNumber and lastChangeNumber match
-
-  #@TestPostamble
-  #@TestResult          Test is successful if the result code is 0
-  -->
-  <function name="ecl_draft_changenumbers_002" scope="local">
-    <testcase name="getTestCaseName('ecl_draft_changenumbers_002')">                     
-      <sequence> 
-        <try>
-          <sequence>                
-            <call function="'testCase_Preamble'"/>
-            <message>
-               'Test Name = %s' % STAXCurrentTestcase
-            </message>
-
-            <!-- Reset List  -->
-            <script>
-              cnsList = []
-              lcnsList = []
-            </script>
-
-            <!-- Step1: Check that the changeNumber and lastChangeNumber match -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Check that the changeNumber and lastChangeNumber match.' }
-            </call>
-
-            <script>
-              mychangenumber = global_cnsList.get()
-            </script>
-            <iterate var="server" in="_topologyServerList">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for changeNumber -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : 'cn=changelog',
-                    'dsFilter'       : '(changenumber>=%s)' % mychangenumber,
-                    'dsAttributes'   : 'changeNumber',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  cn = get_last_attr_from_entry(STAXResult,'changeNumber')
-                  cnsList.append(cn)
-                  global_cnsList.set(cn)
-                </script>
-
-                <!-- Search for lastChangeNumber -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : '',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsScope'        : 'base',
-                    'dsAttributes'   : 'lastChangeNumber',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  lcn = get_last_attr_from_entry(STAXResult,'lastChangeNumber')
-                  lcnsList.append(cn)
-                  global_lcnsList.set(lcn)
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare changeNumber and lastChangeNumber -->
-            <call function="'compareItems'">
-              { 'items' : cnsList + lcnsList,
-                'label' : 'changeNumbers'
-              }
-            </call>
-                  
-          </sequence>
-          <finally>
-            <call function="'testCase_Postamble'"/>
-          </finally>
-        </try>
-      </sequence>
-    </testcase>
-  </function>
-       
-  <!--- Test Case information
-  #@TestMarker          Replication
-  #@TestName            Replication : ECL: Cookie
-  #@TestID              ecl_cookies_003
-  #@TestPurpose         Verify that after multiple changes to master all servers have consistent COOKIE
-  #@TestPreamble
-  #@TestSteps           Step 1: Modify entries on one server
-  #@TestSteps           Step 2: Check that the changeLogCookie and lastExternalChangelogCookie match
-  #@TestPostamble
-  #@TestResult          Test is successful if the result code is 0
-  -->
-  <function name="ecl_cookies_003" scope="local">
-    <testcase name="getTestCaseName('ecl_cookies_003')">                     
-      <sequence> 
-        <try>
-          <sequence>                
-            <call function="'testCase_Preamble'"/>
-            <message>
-               'Test Name = %s' % STAXCurrentTestcase
-            </message>
-
-            <script>
-              cookiesList = []
-              nochanges = 0
-            </script>
-
-            <!-- Step 1: Modify entries on one server -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Modify entries on one server.' }
-            </call>
-
-            <loop from="1" to="2" var="entrynum">
-              <sequence>
-                <script>
-                  myEntry = person_entry('cn=Change%s' % entrynum,synchroSuffix)
-                  ldapObject=[]
-                </script>
-    
-                <message>
-                  'Modify Entry (%s) on server %s:%s' \
-                  % (myEntry.getDn(), masterHost, master.getPort())
-                </message> 
-
-                <loop from="1" to="2">
-                  <sequence>
-                
-                    <script>
-                      nochanges += 1
-                      ldapObject.append('description:change %s on server %s' % (nochanges,entrynum))                       
-                    </script>
-
-                  </sequence>
-                </loop>
-
-                <call function="'modifyAnAttribute'">
-                    { 'location'         : masterHost,
-                      'dsPath'           : masterPath,
-                      'dsInstanceHost'   : masterHost,
-                      'dsInstancePort'   : master.getPort() ,
-                      'dsInstanceDn'     : master.getRootDn() ,
-                      'dsInstancePswd'   : master.getRootPwd() ,
-                      'DNToModify'       : myEntry.getDn() ,
-                      'listAttributes'   : ldapObject ,
-                      'changetype'       : 'replace' }
-                </call>
-
-              </sequence>
-            </loop>
-
-            <!-- Step2: Check that the changeLogCookie and lastExternalChangelogCookie match -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Check that the changeLogCookie and lastExternalChangelogCookie match.' }
-            </call>
-
-            <script>
-              mycookie = global_cookiesList.get()
-            </script>
-            <iterate var="server" in="_topologyServerList">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for changeLogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : 'cn=changelog',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsAttributes'   : 'changeLogCookie' ,
-                    'dsControl'      : '1.3.6.1.4.1.26027.1.5.4:false:%s' % mycookie,
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
-                  cookiesList.append(clc)
-                  global_cookiesList.set(clc)
-                </script>
-
-                <!-- Search for lastExternalChangelogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : '',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsScope'        : 'base',
-                    'dsAttributes'   : 'lastExternalChangelogCookie',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  lecc = get_last_attr_from_entry(STAXResult,'lastExternalChangelogCookie')
-                  cookiesList.append(lecc)
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare changeLogCookie and lastExternalChangelogCookie -->
-            <call function="'compareItems'">
-              { 'items' : cookiesList ,
-                'label' : 'changeLogCookies'
-              }
-            </call>
-                  
-          </sequence>
-          <finally>
-            <call function="'testCase_Postamble'"/>
-          </finally>
-        </try>
-      </sequence>
-    </testcase>
-  </function>
-    
-  <!--- Test Case information
-  #@TestMarker          Replication
-  #@TestName            Replication : ECL: Draft ChangeNumbers
-  #@TestID              ecl_draft_changenumbers_003
-  #@TestPurpose         Verify that the servers have consistent changeNumbers
-  #@TestPreamble
-  #@TestSteps           Step1: Check that the changeNumbers match
-  #@TestSteps           Step2: Check that the lastChangeNumbers match
-  #@TestSteps           Step3: Check that the firstChangeNumbers match
-
-  #@TestPostamble
-  #@TestResult          Test is successful if the result code is 0
-  -->
-  <function name="ecl_draft_changenumbers_003" scope="local">
-    <testcase name="getTestCaseName('ecl_draft_changenumbers_003')">                     
-      <sequence> 
-        <try>
-          <sequence>                
-            <call function="'testCase_Preamble'"/>
-            <message>
-               'Test Name = %s' % STAXCurrentTestcase
-            </message>
-
-            <!-- Reset List  -->
-            <script>
-              cnsList = []
-            </script>
-
-            <!-- Step1: Check that the changeNumber match -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Check that the changeNumber match.' }
-            </call>
-
-            <script>
-              mychangenumber = global_cnsList.get()
-            </script>
-            <iterate var="server" in="_topologyServerList" indexvar="i">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
-                </script>
-
-                <!-- Search for changeNumber -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : 'cn=changelog',
-                    'dsFilter'       : 'changeNumber>=%s' % mychangenumber,
-                    'dsAttributes'   : 'changeNumber',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  cn = get_last_attr_from_entry(STAXResult,'changeNumber')
-                  cnsList.append(cn)
-                  global_cnsList.set(cn)
-                </script>
-              </sequence>
-            </iterate>
-
-            <!-- Step2: Check that the lastChangeNumber match -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Check that the lastChangeNumber match.' }
-            </call>
-
-            <script>
-              lcnsList = []
-            </script>
-            <iterate var="server" in="_topologyServerList" indexvar="i">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for lastChangeNumber -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : '',
-                    'dsFilter'       : 'lastChangeNumber>=%s' % mychangenumber,
-                    'dsScope'        : 'base',
-                    'dsAttributes'   : 'lastChangeNumber',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  lcn = get_last_attr_from_entry(STAXResult,'lastChangeNumber')
-                  cnsList.append(lcn)
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare lastChangeNumber -->
-            <call function="'compareItems'">
-              { 'items' : cnsList + lcnsList,
-                'label' : 'changeNumbers'
-              }
-            </call>
-
-            <!-- Step3: Check that the firstChangeNumbers match -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Check that the firstChangeNumbers match.' }
-            </call>
-
-            <script>
-              fcnsList = []
-            </script>
-            <iterate var="server" in="_topologyServerList">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for firstChangeNumber -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : '',
-                    'dsScope'        : 'base',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsAttributes'   : 'firstChangeNumber',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  fcn = get_last_attr_from_entry(STAXResult,'firstChangeNumber')
-                  fcnsList.append(fcn)
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare firstChangeNumbers -->
-            <call function="'compareItems'">
-              { 'items' : fcnsList ,
-                'label' : 'firstChangeNumber'
-              }
-            </call>
-                  
-          </sequence>
-          <finally>
-            <call function="'testCase_Postamble'"/>
-          </finally>
-        </try>
-      </sequence>
-    </testcase>
-  </function>
-
-  <!--- Test Case information
-  #@TestMarker          Replication
-  #@TestName            Replication : ECL: Purge Interval
-  #@TestID              ecl_purge_sleep_001
-  #@TestPurpose         Verify that purge interval is passed
-  #@TestPreamble
-  #@TestSteps           Step1: Check that the changeNumbers match
-  #@TestPostamble
-  #@TestResult          Test is successful if the result code is 0
-  -->
-  <function name="ecl_purge_sleep_001" scope="local">
-    <testcase name="getTestCaseName('ecl_purge_sleep_001')">                     
-      <sequence> 
-        <try>
-          <sequence>                
-            <call function="'testCase_Preamble'"/>
-            <message>
-               'Test Name = %s' % STAXCurrentTestcase
-            </message>
-
-            <script>
-              sleepMilliSeconds='%s000' % ecl_purge_delay
-              #TODO: change sleep time
-              #sleepMilliSeconds='1000'
-            </script>
-
-            <message>
-              'Sleeping for %s secs' % ecl_purge_delay
-            </message>
-  
-            <call function="'Sleep'">
-              { 'sleepForMilliSeconds' : sleepMilliSeconds }
-            </call>            
-
-            <tcstatus result="'pass'"/>
-
-          </sequence>
-          <finally>
-            <call function="'testCase_Postamble'"/>
-          </finally>
-        </try>
-      </sequence>
-    </testcase>
-  </function>
-
-  <!--- Test Case information
-  #@TestMarker          Replication
-  #@TestName            Replication : ECL: Post Purge
-  #@TestID              ecl_purge_001
-  #@TestPurpose         Verify that the 2 servers have consistent cookies and changenumber after purge
-  #@TestPreamble
-  #@TestSteps           Step1: Check that lastExternalChangelogCookie match
-  #@TestSteps           Step2: Search on servers with last cookie
-  #@TestSteps           Step3: Search on servers with changenumber (draft mode)
-  #@TestSteps           Step4: Check that the lastChangeNumber match
-  #@TestSteps           Step5: Check that the firstChangeNumbers match
-  #@TestPostamble
-  #@TestResult          Test is successful if the result code is 0
-  -->
-  <function name="ecl_purge_001" scope="local">
-    <testcase name="getTestCaseName('ecl_purge_001')">                     
-      <sequence> 
-        <try>
-          <sequence>                
-            <call function="'testCase_Preamble'"/>
-            <message>
-               'Test Name = %s' % STAXCurrentTestcase
-            </message>
-
-            <!-- Modify Entries various replication servers -->
-            <script>
-              lastCookiesList = []
-            </script>
-
-            <!-- Step 1: Check that lastExternalChangelogCookie match -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Check that lastExternalChangelogCookie match.' }
-            </call>
-
-            <iterate var="server" in="_topologyServerList">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for lastExternalChangelogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : '',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsScope'        : 'base',
-                    'dsAttributes'   : 'lastExternalChangelogCookie',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  lecc = get_last_attr_from_entry(STAXResult,'lastExternalChangelogCookie')
-                  lastCookiesList.append(lecc)
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare lastExternalChangelogCookie -->
-            <call function="'compareItems'">
-              { 'items' : lastCookiesList ,
-                'label' : 'lastExternalChangelogCookie'
-              }
-            </call>
-
-            <!-- Step 2: Search on servers with last cookie -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Search on servers with last cookie.' }
-            </call>
-
-            <script>
-              cookiesList = []
-              i = 0
-            </script>
-            <iterate var="server" in="_topologyServerList" indexvar="i">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for changeLogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : 'cn=changelog',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsAttributes'   : 'changeLogCookie' ,
-                    'dsControl'      : '1.3.6.1.4.1.26027.1.5.4:false:%s' % lastCookiesList[i],
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
-                  cookiesList.append(clc)
-                  i += 1
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare changeLogCookies -->
-            <call function="'compareItems'">
-              { 'items' : cookiesList ,
-                'label' : 'changeLogCookie'
-              }
-            </call>
-
-            <!-- Step 3: Search on servers with changenumber (draft mode) -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Search on servers with changenumber (draft mode).' }
-            </call>
-
-            <message>'Now checking draft mode.'</message>
-            <script>
-              mychangenumber = global_cnsList.get()
-              cookiesList = []
-              cnsList = []
-            </script>
-            <iterate var="server" in="_topologyServerList" indexvar="i">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
-                </script>
-
-                <!-- Search for changeNumber -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : 'cn=changelog',
-                    'dsFilter'       : 'changeNumber>=%s' % mychangenumber,
-                    'dsAttributes'   : 'changeNumber',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  cn = get_last_attr_from_entry(STAXResult,'changeNumber')
-                  cnsList.append(cn)
-                </script>
-
-                <!-- Search for changeLogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : 'cn=changelog',
-                    'dsFilter'       : 'changeNumber>=%s' % mychangenumber,
-                    'dsAttributes'   : 'changeLogCookie',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  cn = get_last_attr_from_entry(STAXResult,'changeLogCookie')
-                  cookiesList.append(cn)
-                </script>
-
-              </sequence>
-            </iterate>
-
-            <!-- Compare changeNumbers -->
-            <call function="'compareItems'">
-              { 'items' : cnsList ,
-                'label' : 'draftModeChangeNumber'
-              }
-            </call>
-
-            <!-- Compare changeLogCookies -->
-            <call function="'compareItems'">
-              { 'items' : cookiesList ,
-                'label' : 'draftModeChangeLogCookie'
-              }
-            </call>
-
-            <!-- Step4: Check that the lastChangeNumber match -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Check that the lastChangeNumber match.' }
-            </call>
-
-            <script>
-              lcnsList = []
-              i = 0
-            </script>
-            <iterate var="server" in="_topologyServerList" indexvar="i">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for lastChangeNumber -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : '',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsScope'        : 'base',
-                    'dsAttributes'   : 'lastChangeNumber',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  lcn = get_last_attr_from_entry(STAXResult,'lastChangeNumber')
-                  lcnsList.append(lcn)
-                  i += 1
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare lastChangeNumber -->
-            <call function="'compareItems'">
-              { 'items' : lcnsList,
-                'label' : 'lastChangeNumber'
-              }
-            </call>
-
-            <!-- Step5: Check that the firstChangeNumbers match -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Check that the firstChangeNumbers match.' }
-            </call>
-
-            <script>
-              fcnsList = []
-            </script>
-            <iterate var="server" in="_topologyServerList">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for firstChangeNumber -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : '',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsScope'        : 'base',
-                    'dsAttributes'   : 'firstChangeNumber',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  fcn = get_last_attr_from_entry(STAXResult,'firstChangeNumber')
-                  fcnsList.append(fcn)
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare firstChangeNumbers -->
-            <call function="'compareItems'">
-              { 'items' : fcnsList ,
-                'label' : 'firstChangeNumber'
-              }
-            </call>
-                              
-          </sequence>
-          <finally>
-            <call function="'testCase_Postamble'"/>
-          </finally>
-        </try>
-      </sequence>
-    </testcase>
-  </function>
-
-  <!--- Test Case information
-  #@TestMarker          Replication
-  #@TestName            Replication : ECL: Purge Masters Cookie
-  #@TestID              ecl_purge_002
-  #@TestPurpose         Verify that after purge change to master COOKIEs are consistent
-  #@TestPreamble
-  #@TestSteps           Step1: Modify entry on one server
-  #@TestSteps           Step2: Check that the changeLogCookie and lastExternalChangelogCookie match
-  #@TestPostamble
-  #@TestResult          Test is successful if the result code is 0
-  -->
-  <function name="ecl_purge_002" scope="local">
-    <testcase name="getTestCaseName('ecl_purge_002')">                     
-      <sequence> 
-        <try>
-          <sequence>                
-            <call function="'testCase_Preamble'"/>
-            <message>
-               'Test Name = %s' % STAXCurrentTestcase
-            </message>
-
-            <!-- Step1: Modify entry on one server -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Modify entry on one server.' }
-            </call>
-
-            <script>
-              cookiesList = []
-              myEntry = person_entry('cn=Change1', synchroSuffix)
-            </script>
-
-            <message>
-              'Modify Entry (%s) on server %s:%s' \
-              % (myEntry.getDn(), masterHost, master.getPort())
-            </message> 
-
-            <call function="'modifyAnAttribute'">
-              { 'dsPath'                 : masterPath,
-                'dsInstanceHost'         : masterHost ,
-                'dsInstancePort'         : master.getPort() ,
-                'dsInstanceDn'           : master.getRootDn() ,
-                'dsInstancePswd'         : master.getRootPwd() ,
-                'DNToModify'             : myEntry.getDn() ,
-                'attributeName'          : 'description' ,
-                'newAttributeValue'      : 'this is a change on server 1',
-                'changetype'             : 'add'
-              }
-            </call>
-
-            <!-- Step2: Check that the changeLogCookie and lastExternalChangelogCookie match -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Check that the changeLogCookie and lastExternalChangelogCookie match.' }
-            </call>
-
-            <script>
-              mycookie = global_cookiesList.get()
-            </script>
-            <iterate var="server" in="_topologyServerList">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for changeLogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : 'cn=changelog',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsAttributes'   : 'changeLogCookie' ,
-                    'dsControl'      : '1.3.6.1.4.1.26027.1.5.4:false:%s' % mycookie,
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
-                  cookiesList.append(clc)
-                  global_cookiesList.set(clc)
-                </script>
-
-                <!-- Search for lastExternalChangelogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : '',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsScope'        : 'base',
-                    'dsAttributes'   : 'lastExternalChangelogCookie',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  lecc = get_last_attr_from_entry(STAXResult,'lastExternalChangelogCookie')
-                  cookiesList.append(lecc)
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare changeLogCookie and lastExternalChangelogCookie -->
-            <call function="'compareItems'">
-              { 'items' : cookiesList ,
-                'label' : 'changeLogCookies'
-              }
-            </call>
-                  
-          </sequence>
-          <finally>
-            <call function="'testCase_Postamble'"/>
-          </finally>
-        </try>
-      </sequence>
-    </testcase>
-  </function>
-
-  <!--- Test Case information
-  #@TestMarker          Replication
-  #@TestName            Replication : ECL: Purge Consumers Cookie
-  #@TestID              ecl_purge_003
-  #@TestPurpose         Verify that after purge change to consumer COOKIEs are consistent
-  #@TestPreamble
-  #@TestSteps           Step1: Modify entry on one server
-  #@TestSteps           Step2: Check that the changeLogCookie and lastExternalChangelogCookie match
-  #@TestPostamble
-  #@TestResult          Test is successful if the result code is 0
-  -->
-  <function name="ecl_purge_003" scope="local">
-    <testcase name="getTestCaseName('ecl_purge_003')">                     
-      <sequence> 
-        <try>
-          <sequence>                
-            <call function="'testCase_Preamble'"/>
-            <message>
-               'Test Name = %s' % STAXCurrentTestcase
-            </message>
-
-            <!-- Modify entry on one server -->
-            <script>
-              cookiesList = []
-              myEntry = person_entry('cn=Change1', synchroSuffix)
-              
-              consumerServer = consumerList[0]
-              consumerServerPath = '%s/%s' % (consumerServer.getDir(), OPENDSNAME)
-            </script>
-
-            <message>
-              'Modify Entry (%s) on server %s:%s' \
-              % (myEntry.getDn(), consumerServer.getHostname(), consumerServer.getPort())
-            </message> 
-
-            <call function="'modifyAnAttribute'">
-              { 'dsPath'                 : consumerServerPath,
-                'dsInstanceHost'         : consumerServer.getHostname() ,
-                'dsInstancePort'         : consumerServer.getPort() ,
-                'dsInstanceDn'           : consumerServer.getRootDn() ,
-                'dsInstancePswd'         : consumerServer.getRootPwd() ,
-                'DNToModify'             : myEntry.getDn() ,
-                'attributeName'          : 'description' ,
-                'newAttributeValue'      : 'this is a change on server 2',
-                'changetype'             : 'add'
-              }
-            </call>
-
-            <!-- Check that the changeLogCookie and lastExternalChangelogCookie match -->
-            <iterate var="server" in="_topologyServerList">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for changeLogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : 'cn=changelog',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsAttributes'   : 'changeLogCookie' ,
-                    'dsControl'      : '1.3.6.1.4.1.26027.1.5.4:false:;',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
-                  cookiesList.append(clc)
-                </script>
-
-                <!-- Search for lastExternalChangelogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : '',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsScope'        : 'base',
-                    'dsAttributes'   : 'lastExternalChangelogCookie',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  lecc = get_last_attr_from_entry(STAXResult,'lastExternalChangelogCookie')
-                  cookiesList.append(lecc)
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare changeLogCookie and lastExternalChangelogCookie -->
-            <call function="'compareItems'">
-              { 'items' : cookiesList ,
-                'label' : 'changeLogCookies'
-              }
-            </call>
-                  
-          </sequence>
-          <finally>
-            <call function="'testCase_Postamble'"/>
-          </finally>
-        </try>
-      </sequence>
-    </testcase>
-  </function>
-
-  <!--- Test Case information
-  #@TestMarker          Replication
-  #@TestName            Replication : ECL: Purge ChangeNumbers
-  #@TestID              ecl_purge_004
-  #@TestPurpose         Verify that after purge the servers have consistent changeNumbers
-  #@TestPreamble
-  #@TestSteps           Step1: Check that the changeNumbers match
-  #@TestSteps           Step2: Check that the lastChangeNumbers match
-  #@TestSteps           Step3: Check that the firstChangeNumbers match
-
-  #@TestPostamble
-  #@TestResult          Test is successful if the result code is 0
-  -->
-  <function name="ecl_purge_004" scope="local">
-    <testcase name="getTestCaseName('ecl_purge_004')">                     
-      <sequence> 
-        <try>
-          <sequence>                
-            <call function="'testCase_Preamble'"/>
-            <message>
-               'Test Name = %s' % STAXCurrentTestcase
-            </message>
-
-            <!-- Reset List  -->
-            <script>
-              mychangenumber = global_cnsList.get()
-              cnsList = []
-            </script>
-
-            <!-- Step1: Check that the changeNumber match -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Check that the changeNumber match.' }
-            </call>
-
-            <iterate var="server" in="_topologyServerList" indexvar="i">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for changeNumber -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : 'cn=changelog',
-                    'dsFilter'       : 'changeNumber>=%s' % mychangenumber,
-                    'dsAttributes'   : 'changeNumber',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  cn = get_last_attr_from_entry(STAXResult,'changeNumber')
-                  cnsList.append(cn)
-                  global_cnsList.set(cn)
-                </script>
-              </sequence>
-            </iterate>
-
-            <!-- Step2: Check that the lastChangeNumber match -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Check that the lastChangeNumber match.' }
-            </call>
-
-            <script>
-              lcnsList = []
-              mylastcn = global_lcnsList.get()
-            </script>
-            <iterate var="server" in="_topologyServerList" indexvar="i">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for lastChangeNumber -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : '',
-                    'dsFilter'       : 'lastChangeNumber>=%s' % mylastcn,
-                    'dsScope'        : 'base',
-                    'dsAttributes'   : 'lastChangeNumber',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  lcn = get_last_attr_from_entry(STAXResult,'lastChangeNumber')
-                  cnsList.append(lcn)
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare lastChangeNumber -->
-            <call function="'compareItems'">
-              { 'items' : cnsList + lcnsList,
-                'label' : 'changeNumbers'
-              }
-            </call>
-
-            <!-- Step3: Check that the firstChangeNumbers match -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Check that the firstChangeNumbers match.' }
-            </call>
-
-            <script>
-              fcnsList = []
-            </script>
-            <iterate var="server" in="_topologyServerList">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for firstChangeNumber -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : '',
-                    'dsScope'        : 'base',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsAttributes'   : 'firstChangeNumber',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  fcn = get_last_attr_from_entry(STAXResult,'firstChangeNumber')
-                  fcnsList.append(fcn)
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare firstChangeNumbers -->
-            <call function="'compareItems'">
-              { 'items' : fcnsList ,
-                'label' : 'firstChangeNumber'
-              }
-            </call>
-                  
-          </sequence>
-          <finally>
-            <call function="'testCase_Postamble'"/>
-          </finally>
-        </try>
-      </sequence>
-    </testcase>
-  </function>
-
-  <!--- Test Case information
-  #@TestMarker          Replication
-  #@TestName            Replication : ECL: Purge No Cookie or CN
-  #@TestID              ecl_purge_005
-  #@TestPurpose         Verify that change can be found with no cookie nor cn
-  #@TestPreamble
-  #@TestSteps           Step 1: Search for changeLogCookie with no cookie in control
-  #@TestPostamble
-  #@TestResult          Test is successful if the result code is 0
-  -->
-  <function name="ecl_purge_005" scope="local">
-    <testcase name="getTestCaseName('ecl_purge_005')">                     
-      <sequence> 
-        <try>
-          <sequence>                
-            <call function="'testCase_Preamble'"/>
-            <message>
-               'Test Name = %s' % STAXCurrentTestcase
-            </message>
-
-            <script>
-              cookiesList = []
-              cnsList = []
-            </script>
-
-            <!-- Step2: Check that the changeLogCookie and lastExternalChangelogCookie match -->
-            <call function="'testStep'">
-              { 'stepMessage' : 'Check that the changeLogCookie and lastExternalChangelogCookie match.' }
-            </call>
-
-            <iterate var="server" in="_topologyServerList">
-              <sequence>
-
-                <script>
-                  replServer = server            
-                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
-                </script>
-
-                <!-- Search for changeLogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : 'cn=changelog',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsAttributes'   : 'changeLogCookie' ,
-                    'dsControl'      : '1.3.6.1.4.1.26027.1.5.4:false:;',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
-                  cookiesList.append(clc)
-                </script>
-
-                <!-- Search for lastExternalChangelogCookie -->
-                <call function="'ldapSearchWithScript'">
-                  { 'location'       : replServer.getHostname(),
-                    'dsPath'         : replServerPath,
-                    'dsInstanceHost' : replServer.getHostname(),
-                    'dsInstancePort' : replServer.getPort(),
-                    'dsInstanceDn'   : replServer.getRootDn(),
-                    'dsInstancePswd' : replServer.getRootPwd(),
-                    'dsBaseDN'       : 'cn=changelog',
-                    'dsFilter'       : 'objectclass=*',
-                    'dsAttributes'   : 'changeNumber',
-                    'extraParams'    : '-T'
-                  }
-                </call>
-
-                <script>
-                  cn = get_last_attr_from_entry(STAXResult,'changeNumber')
-                  cnsList.append(cn)
-                  global_cnsList.set(cn)
-                </script>
-                  
-              </sequence>
-            </iterate>
-
-            <!-- Compare changeLogCookies-->
-            <call function="'compareItems'">
-              { 'items' : cookiesList ,
-                'label' : 'changeLogCookies'
-              }
-            </call>
 
-            <!-- Compare changeLogCookies-->
-            <call function="'compareItems'">
-              { 'items' : cnsList ,
-                'label' : 'changeLogCookies'
-              }
-            </call>
-                  
-          </sequence>
-          <finally>
-            <call function="'testCase_Postamble'"/>
-          </finally>
-        </try>
-      </sequence>
-    </testcase>
-  </function>
         
   <!-- Definition of Postamble --> 
 
diff --git a/opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog_consistency/externalchangelog_consistency.xml b/opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog_consistency/externalchangelog_consistency.xml
new file mode 100644
index 0000000..864375e
--- /dev/null
+++ b/opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog_consistency/externalchangelog_consistency.xml
@@ -0,0 +1,176 @@
+<?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 2013 ForgeRock AS.
+ ! -->
+<stax>
+    
+  <defaultcall function="replication_externalchangelog_consistency"/>
+    
+  <function name="replication_externalchangelog_consistency">
+    <sequence>
+      <!-- Do not run the tests if servers are split, as it is not supported
+       !   by External Changelog to have RS separated from DS -->
+      <if expr="globalSplitServers == True">
+        <sequence>
+          <message>'External changelog not supported in replication split servers mode.'</message>
+          <message>'This test suite will not be run for this reason.'</message>
+          <return>0</return>
+        </sequence>
+      </if>
+      <block name="'externalchangelog_consistency'">
+        <try>
+          <sequence>
+
+            <script>
+              if not CurrentTestPath.has_key('group'):
+                CurrentTestPath['group']='replication'
+              CurrentTestPath['suite']='externalchangelog_consistency'
+              
+              _group = 'replication'
+              _suite = 'externalchangelog'
+              _groupdir='%s/testcases/%s' % (TESTS_DIR,_group)
+            </script>
+                
+            <call function="'testSuite_Preamble'"/>
+
+            <try>
+              
+              <sequence>
+                
+                <!--- Test Suite information
+                #@TestSuiteName       Replication External Changelog Tests
+                #@TestSuitePurpose    Test the event notification system provided by
+                                      the External Changelog.
+                #@TestSuiteID         External Changelog Tests
+                #@TestSuiteGroup      External Changelog
+                #@TestGroup           Replication
+                #@TestScript          replication_externalchangelog.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'"/>
+      
+                <!-- List of Import of Test Functions -->
+                <script>
+                  importList=[]
+                  importList.append('externalchangelog_consistency/externalchangelog_consistency_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>
+
+                <!-- List of Test Cases -->
+                <script>
+                  ecl_purge_delay = '120'
+
+                  # Globals for cookies, changenumbers, lastchangenumbers
+                  global_cookiesList=STAXGlobal([])
+                  global_cnsList=STAXGlobal([])
+                  global_lcnsList=STAXGlobal([])
+
+                  # List of tests to run
+                  testsList=[]
+                  testsList.append('ecl_setup')
+                  testsList.append('ecl_add_cookies_001')
+                  testsList.append('ecl_changenumbers_001')
+                  testsList.append('ecl_mod_cookies_001')
+                  testsList.append('ecl_changenumbers_002')
+                  testsList.append('ecl_draft_cookies_001')
+                  testsList.append('ecl_cookies_001')
+                  testsList.append('ecl_draft_changenumbers_001')
+                  testsList.append('ecl_cookies_002')
+                  testsList.append('ecl_draft_changenumbers_002')
+                  testsList.append('ecl_cookies_003')
+                  testsList.append('ecl_draft_changenumbers_003')
+                  testsList.append('ecl_purge_sleep_001')
+                  testsList.append('ecl_purge_001')
+                  testsList.append('ecl_purge_002')
+                  testsList.append('ecl_purge_003')
+                  testsList.append('ecl_purge_004')
+                  testsList.append('ecl_purge_005')
+                  testsList.append('ecl_cleanup')
+                </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'" />
+                 </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>
\ No newline at end of file
diff --git a/opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog_consistency/externalchangelog_consistency_tests.xml b/opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog_consistency/externalchangelog_consistency_tests.xml
new file mode 100644
index 0000000..cde3eff
--- /dev/null
+++ b/opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog_consistency/externalchangelog_consistency_tests.xml
@@ -0,0 +1,2710 @@
+<?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/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/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 2013 ForgeRock AS.
+ ! -->
+<stax>
+
+  <!-- Definition of Preamble -->             
+
+  <!--- Test Case information
+  #@TestMarker          Replication
+  #@TestName            Replication : ECL
+  #@TestID              ecl_setup
+  #@TestPurpose         Setup ecl
+  #@TestPreamble
+  #@TestSteps           Step1: TBD
+  #@TestPostamble
+  #@TestResult          Test is successful if the result code is 0
+  -->
+  <function name="ecl_setup" scope="local">
+    <testcase name="getTestCaseName('ecl_setup')">                     
+      <sequence> 
+        <try>
+          <sequence>                
+            <call function="'testCase_Preamble'"/>
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: External Changelog: - Setup. \
+              Set up environment for External Changelog tests'
+            </message>
+                
+            <message>
+              'Common ECL tests: reset data'
+            </message>
+
+            <!-- Pre external initialization set generation id (-1) and clears cn=changelog -->
+            <call function="'preInitializeReplication'">
+              { 'location'            : masterHost,
+                'dsPath'              : masterPath,
+                'dsInstanceHost'      : masterHost,
+                'dsInstanceAdminPort' : master.getAdminPort(),
+                'localOnly'           : False,
+                'replicationDnList'   : [synchroSuffix],
+                'adminUID'            : adminUID,
+                'adminPswd'           : adminPswd
+              }
+            </call>
+
+            <!-- Stop "master" Directory Server -->
+            <call function="'StopDsWithScript'">
+              { 'location'    : masterHost,
+                'dsPath'      : masterPath,
+                'dsHost'      : masterHost,
+                'dsAdminPort' : master.getAdminPort(),
+                'dsBindDN'    : master.getRootDn(),
+                'dsBindPwd'   : master.getRootPwd()
+              }
+            </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>
+      
+            <!-- Perform the total update, resets generation id from (-1) -->
+            <call function="'initializeReplication'">
+              { 'location'                : clientHost,
+                'dsPath'                  : clientPath,
+                'sourceInstanceHost'      : masterHost,
+                'sourceInstanceAdminPort' : master.getAdminPort(),
+                'replicationDnList'       : [synchroSuffix]
+              }
+            </call>
+
+            <!-- Set replication purge delay in cdthe various replication servers -->
+            <paralleliterate var="server" in="_topologyServerList">
+              <sequence>
+                <script>
+                  replServer = server
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+            
+                <message>
+                  'Set purge delay to %s seconds on server %s:%s' \
+                  % (ecl_purge_delay, replServer.getHostname(), replServer.getPort())
+                </message>
+                
+                <!-- Set purge delay to 120s on "master" server -->   
+                <call function="'dsconfigSet'">
+                  { 'location'            : replServer.getHostname(),
+                    'dsPath'              : replServerPath,
+                    'dsInstanceHost'      : replServer.getHostname(),
+                    'dsInstanceAdminPort' : replServer.getAdminPort(),
+                    'dsInstanceDn'        : replServer.getRootDn(),
+                    'dsInstancePswd'      : replServer.getRootPwd(),
+                    'objectName'          : 'replication-server' ,
+                    'propertyType'        : 'provider',
+                    'propertyName'        : 'Multimaster Synchronization',
+                    'attributeName'       : 'replication-purge-delay' ,
+                    'attributeValue'      : '%s s' % ecl_purge_delay
+                  }
+                </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>
+          <finally>
+            <call function="'testCase_Postamble'"/>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+            
+  <!--- Test Case information
+  #@TestMarker          Replication
+  #@TestName            Replication : ECL: Add Cookies
+  #@TestID              ecl_add_cookies_001
+  #@TestPurpose         Verify that the 2 servers have consistent COOKIE on add.
+  #@TestPreamble
+  #@TestSteps           Step 1: Add entries in the various replication servers
+  #@TestSteps           Step 2: Check that the changeLogCookie and lastExternalChangelogCookie match
+  #@TestSteps           Step 3: Verify the synchronization of the trees among the servers in the topology
+  #@TestPostamble
+  #@TestResult          Test is successful if the result code is 0
+  -->
+  <function name="ecl_add_cookies_001" scope="local">
+    <testcase name="getTestCaseName('ecl_add_cookies_001')">                     
+      <sequence> 
+        <try>
+          <sequence>                
+            <call function="'testCase_Preamble'"/>
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+     
+            <!-- Step 1: Add entries in the various replication servers -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Add entries in the various replication servers.' }
+            </call>
+
+            <script>
+              entrynum = 1
+            </script>
+            
+            <iterate var="server" in="_topologyServerList" indexvar="'entrynum'">
+              <sequence>
+                <!-- Add entry to both" servers -->
+                <script>
+                  replServer = server
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
+
+                  myEntry = person_entry('cn=Change%s' % entrynum, synchroSuffix)
+                  myEntry.addAttr('sn', 'Change%s' % entrynum)
+                  myEntry.addAttr('description', 'this is change %s' % entrynum)
+                  myEntry.addAttr('uid', 'Change%s'.lower() % entrynum)
+                  
+                  entrynum += 1
+                </script>
+
+                <message>
+                  'Add Entry (%s) on server %s:%s' \
+                  % (myEntry.getDn(), replServer.getHostname(), replServer.getPort())
+                </message>
+
+                <!-- Add an Entry under suffix -->          
+                <call function="'addAnEntry'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'DNToAdd'        : myEntry.getDn(),
+                    'listAttributes' : myEntry.getAttrList()
+                  }
+                </call>
+                
+              </sequence>
+            </iterate>
+
+            <!-- Step 2: Check that the changeLogCookie and lastExternalChangelogCookie match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that the changeLogCookie and lastExternalChangelogCookie match.' }
+            </call>
+
+            <script>
+              entrynum = 1
+              cookiesList = []
+            </script>
+            <iterate var="server" in="_topologyServerList" indexvar="'entrynum'">
+              <sequence>
+                <!-- Add entry to both" servers -->
+                <script>
+                  replServer = server
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
+
+                </script>
+
+                <!-- Search for changeLogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'changeLogCookie' ,
+                    'dsControl'      : '1.3.6.1.4.1.26027.1.5.4:false:;',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
+                  cookiesList.append(clc)
+                  global_cookiesList.set(clc)
+                </script>
+
+                <!-- Search for lastExternalChangelogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsScope'        : 'base',
+                    'dsAttributes'   : 'lastExternalChangelogCookie',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  lecc = get_last_attr_from_entry(STAXResult,'lastExternalChangelogCookie')
+                  cookiesList.append(lecc)
+                </script>
+                       
+              </sequence>
+            </iterate>
+
+            <!-- Compare changeLogCookie and lastExternalChangelogCookie -->
+            <call function="'compareItems'">
+              { 'items' : cookiesList ,
+                'label' : 'changeLogCookies'
+              }
+            </call>
+
+            <!-- Step 3: Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Verify the synchronization of the trees among the servers in the topology.' }
+            </call>    
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+
+          </sequence>
+          <finally>
+            <call function="'testCase_Postamble'"/>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>        
+
+  <!--- Test Case information
+  #@TestMarker          Replication
+  #@TestName            Replication : ECL: ChangeNumbers
+  #@TestID              ecl_changenumbers_001
+  #@TestPurpose         Verify that the 2 servers have consistent change numbers after add
+  #@TestPreamble
+  #@TestSteps           Step1: Check that the changeNumber and lastChangeNumber match
+  #@TestSteps           Step2: Check that firstChangeNumbers match
+  #@TestSteps           Step3: Count changelog entries in draft mode
+  #@TestPostamble
+  #@TestResult          Test is successful if the result code is 0
+  -->
+  <function name="ecl_changenumbers_001" scope="local">
+    <testcase name="getTestCaseName('ecl_changenumbers_001')">                     
+      <sequence> 
+        <try>
+          <sequence>                
+            <call function="'testCase_Preamble'"/>
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <!-- Reset List  -->
+            <script>
+              cnsList = []
+            </script>
+
+            <!-- Step1: Check that the changeNumber and lastChangeNumber match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that the changeNumber and lastChangeNumber match.' }
+            </call>
+
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for changeNumber -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'changeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  cn = get_last_attr_from_entry(STAXResult,'changeNumber')
+                  cnsList.append(cn)
+                  global_cnsList.set(cn)
+                </script>
+
+                <!-- Search for lastChangeNumber -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsScope'        : 'base',
+                    'dsAttributes'   : 'lastChangeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  lcn = get_last_attr_from_entry(STAXResult,'lastChangeNumber')
+                  cnsList.append(lcn)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare changeNumber and lastChangeNumber -->
+            <call function="'compareItems'">
+              { 'items' : cnsList,
+                'label' : 'changeNumbers'
+              }
+            </call>
+
+            <!-- Step2: Check that firstChangeNumbers match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that firstChangeNumbers match.' }
+            </call>
+
+            <script>
+              fcnsList = []
+            </script>
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for firstChangeNumber -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsScope'        : 'base',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'firstChangeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  fcn = get_last_attr_from_entry(STAXResult,'firstChangeNumber')
+                  fcnsList.append(fcn)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare firstChangeNumbers -->
+            <call function="'compareItems'">
+              { 'items' : fcnsList ,
+                'label' : 'firstChangeNumber'
+              }
+            </call>
+
+            <!-- Step3: Count changelog entries in draft mode -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Count changelog entries in draft mode.' }
+            </call>
+
+            <script>
+              dncList = []
+              #2 changes + top
+              noOfEntries = 3
+            </script>
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Count the number of initial changes -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'dn' ,
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  dncount=int(count_attr(STAXResult))
+                  dncList.append(dncount)
+                </script>
+                
+                <if expr="dncount == noOfEntries">
+                  <message>
+                    'Search returned %s changes, expected %s' % (dncount,noOfEntries)
+                  </message>
+                <else>
+                  <sequence>
+                    <tcstatus result="'fail'"/>
+                    <message level="'error'">
+                      'Search returned %s changes, expected %s' % (dncount,noOfEntries)
+                    </message>
+                  </sequence>
+                </else>
+                </if>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare number of entries -->
+            <call function="'compareItems'">
+              { 'items' : dncList ,
+                'label' : 'numberOfEntries'
+              }
+            </call>
+                  
+          </sequence>
+          <finally>
+            <call function="'testCase_Postamble'"/>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+            
+  <!--- Test Case information
+  #@TestMarker          Replication
+  #@TestName            Replication : ECL: Cookie
+  #@TestID              ecl_mod_cookies_001
+  #@TestPurpose         Verify that the 2 servers have consistent COOKIE on modify
+  #@TestPreamble
+  #@TestSteps           Step 1: Modify Entries various replication servers
+  #@TestSteps           Step 2: Check that the changeLogCookie and lastExternalChangelogCookie match
+  #@TestSteps           Step 3: Verify the synchronization of the trees among the servers in the topology
+  #@TestPostamble
+  #@TestResult          Test is successful if the result code is 0
+  -->
+  <function name="ecl_mod_cookies_001" scope="local">
+    <testcase name="getTestCaseName('ecl_mod_cookies_001')">                     
+      <sequence> 
+        <try>
+          <sequence>                
+            <call function="'testCase_Preamble'"/>
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <!-- Step1: Modify Entries various replication servers -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Modify Entries various replication servers.' }
+            </call>
+
+            <script>
+              entrynum = 1
+              cookiesList = []
+            </script>
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+            
+                <!-- Modify entry to both" servers -->
+                <script>
+                  myEntry = person_entry('cn=Change%s' % entrynum, synchroSuffix)
+                  
+                  entrynum += 1
+                </script>
+
+                <message>
+                  'Modify Entry (%s) on server %s:%s' \
+                  % (myEntry.getDn(), replServer.getHostname(), replServer.getPort())
+                </message> 
+
+                <call function="'modifyAnAttribute'">
+                  { 'dsPath'                 : replServerPath,
+                    'dsInstanceHost'         : replServer.getHostname() ,
+                    'dsInstancePort'         : replServer.getPort() ,
+                    'dsInstanceDn'           : replServer.getRootDn() ,
+                    'dsInstancePswd'         : replServer.getRootPwd() ,
+                    'DNToModify'             : myEntry.getDn() ,
+                    'attributeName'          : 'description' ,
+                    'newAttributeValue'      : 'This is a new change' ,
+                    'changetype'             : 'add'
+                  }
+                </call>
+
+                <!-- Lets Read the Entry back to be sure -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : myEntry.getDn(),
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'description',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+              </sequence>
+            </iterate>
+
+            <!-- Step2: Check that the changeLogCookie and lastExternalChangelogCookie match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that the changeLogCookie and lastExternalChangelogCookie match.' }
+            </call>
+            <script>
+              mycookie = global_cookiesList.get()
+            </script>
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for changeLogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'changeLogCookie' ,
+                    'dsControl'      : '1.3.6.1.4.1.26027.1.5.4:false:%s' % mycookie,
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
+                  cookiesList.append(clc)
+                  global_cookiesList.set(clc)
+                </script>
+
+                <!-- Search for lastExternalChangelogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsScope'        : 'base',
+                    'dsAttributes'   : 'lastExternalChangelogCookie',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  lecc = get_last_attr_from_entry(STAXResult,'lastExternalChangelogCookie')
+                  cookiesList.append(lecc)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare changeLogCookie and lastExternalChangelogCookie -->
+            <call function="'compareItems'">
+              { 'items' : cookiesList ,
+                'label' : 'changeLogCookies'
+              }
+            </call>
+
+            <!-- Step 3: Verify the synchronization of the trees among the servers in
+              the topology -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Verify the synchronization of the trees among the servers in the topology.' }
+            </call>    
+            <call function="'verifyTrees'">
+              [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+            </call>
+                
+          </sequence>
+          <finally>
+            <call function="'testCase_Postamble'"/>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+            
+  <!--- Test Case information
+  #@TestMarker          Replication
+  #@TestName            Replication : ECL: ChangeNumbers
+  #@TestID              ecl_changenumbers_002
+  #@TestPurpose         Verify that the 2 servers have consistent change numbers after modify
+  #@TestPreamble
+  #@TestSteps           Step1: Check that the changeNumber and lastChangeNumber match
+  #@TestSteps           Step2: Check that firstChangeNumbers match
+  #@TestSteps           Step3: Count changelog entries in draft mode
+  #@TestPostamble
+  #@TestResult          Test is successful if the result code is 0
+  -->
+  <function name="ecl_changenumbers_002" scope="local">
+    <testcase name="getTestCaseName('ecl_changenumbers_002')">                     
+      <sequence> 
+        <try>
+          <sequence>                
+            <call function="'testCase_Preamble'"/>
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <!-- Reset List  -->
+            <script>
+              cnsList = []
+            </script>
+
+            <!-- Step1: Check that the changeNumber and lastChangeNumber match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that the changeNumber and lastChangeNumber match.' }
+            </call>
+
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for changeNumber -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'changeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  cn = get_last_attr_from_entry(STAXResult,'changeNumber')
+                  cnsList.append(cn)
+                  global_cnsList.set(cn)
+                </script>
+
+                <!-- Search for lastChangeNumber -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsScope'        : 'base',
+                    'dsAttributes'   : 'lastChangeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  lcn = get_last_attr_from_entry(STAXResult,'lastChangeNumber')
+                  cnsList.append(lcn)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare changeNumber and lastChangeNumber -->
+            <call function="'compareItems'">
+              { 'items' : cnsList,
+                'label' : 'changeNumbers'
+              }
+            </call>
+
+            <!-- Step2: Check that firstChangeNumbers match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that firstChangeNumbers match.' }
+            </call>
+
+            <script>
+              fcnsList = []
+            </script>
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for firstChangeNumber -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsScope'        : 'base',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'firstChangeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  fcn = get_last_attr_from_entry(STAXResult,'firstChangeNumber')
+                  fcnsList.append(fcn)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare firstChangeNumbers -->
+            <call function="'compareItems'">
+              { 'items' : fcnsList ,
+                'label' : 'firstChangeNumber'
+              }
+            </call>
+
+            <!-- Step3: Count changelog entries in draft mode -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Count changelog entries in draft mode.' }
+            </call>
+
+            <script>
+              dncList = []
+              #4 changes + top
+              noOfEntries = 5
+            </script>
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Count the number of initial changes -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'dn' ,
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  dncount=int(count_attr(STAXResult))
+                  dncList.append(dncount)
+                </script>
+                
+                <if expr="dncount == noOfEntries">
+                  <message>
+                    'Search returned %s changes, expected %s' % (dncount,noOfEntries)
+                  </message>
+                <else>
+                  <sequence>
+                    <tcstatus result="'fail'"/>
+                    <message level="'error'">
+                      'Search returned %s changes, expected %s' % (dncount,noOfEntries)
+                    </message>
+                  </sequence>
+                </else>
+                </if>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare number of entries -->
+            <call function="'compareItems'">
+              { 'items' : dncList ,
+                'label' : 'numberOfEntries'
+              }
+            </call>
+                  
+          </sequence>
+          <finally>
+            <call function="'testCase_Postamble'"/>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+  <!--- Test Case information
+  #@TestMarker          Replication
+  #@TestName            Replication : ECL: Draft Cookies
+  #@TestID              ecl_draft_cookies_001
+  #@TestPurpose         Verify in draft mode the 2 servers have consistent changeLogCookie
+  #@TestPreamble
+  #@TestSteps           Step1: Check that the changeLogCookie match
+  #@TestPostamble
+  #@TestResult          Test is successful if the result code is 0
+  -->
+  <function name="ecl_draft_cookies_001" scope="local">
+    <testcase name="getTestCaseName('ecl_draft_cookies_001')">                     
+      <sequence> 
+        <try>
+          <sequence>                
+            <call function="'testCase_Preamble'"/>
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <script>
+              mychangenumber = global_cnsList.get()
+              cookiesList = []
+            </script>
+
+            <!-- Check that the changeLogCookie match -->
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for changeLogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : '(changenumber=%s)' % mychangenumber,
+                    'dsAttributes'   : 'changeLogCookie' ,
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
+                  cookiesList.append(clc)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare changeLogCookie -->
+            <call function="'compareItems'">
+              { 'items' : cookiesList ,
+                'label' : 'changeLogCookies'
+              }
+            </call>
+                  
+          </sequence>
+          <finally>
+            <call function="'testCase_Postamble'"/>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+ 
+  <!--- Test Case information
+  #@TestMarker          Replication
+  #@TestName            Replication : ECL: Cookies
+  #@TestID              ecl_cookies_001
+  #@TestPurpose         Verify that after change to master all servers have consistent COOKIE
+  #@TestPreamble
+  #@TestSteps           Step1: Modify entry on one server
+  #@TestSteps           Step2: Check that the changeLogCookie and lastExternalChangelogCookie match
+  #@TestPostamble
+  #@TestResult          Test is successful if the result code is 0
+  -->
+  <function name="ecl_cookies_001" scope="local">
+    <testcase name="getTestCaseName('ecl_cookies_001')">                     
+      <sequence> 
+        <try>
+          <sequence>                
+            <call function="'testCase_Preamble'"/>
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <!-- Step1: Modify entry on one server -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Modify entry on one server.' }
+            </call>
+
+            <script>
+              cookiesList = []
+              myEntry = person_entry('cn=Change1', synchroSuffix)
+            </script>
+
+            <message>
+              'Modify Entry (%s) on server %s:%s' \
+              % (myEntry.getDn(), masterHost, master.getPort())
+            </message> 
+
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'                 : masterPath,
+                'dsInstanceHost'         : masterHost ,
+                'dsInstancePort'         : master.getPort() ,
+                'dsInstanceDn'           : master.getRootDn() ,
+                'dsInstancePswd'         : master.getRootPwd() ,
+                'DNToModify'             : myEntry.getDn() ,
+                'attributeName'          : 'description' ,
+                'newAttributeValue'      : 'this is a change on server 1',
+                'changetype'             : 'add'
+              }
+            </call>
+
+            <!-- Step2: Check that the changeLogCookie and lastExternalChangelogCookie match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that the changeLogCookie and lastExternalChangelogCookie match.' }
+            </call>
+
+            <script>
+              mycookie = global_cookiesList.get()
+            </script>
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
+                </script>
+
+                <!-- Search for changeLogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'changeLogCookie' ,
+                    'dsControl'      : '1.3.6.1.4.1.26027.1.5.4:false:%s' % mycookie,
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
+                  cookiesList.append(clc)
+                  global_cookiesList.set(clc)
+                </script>
+
+                <!-- Search for lastExternalChangelogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsScope'        : 'base',
+                    'dsAttributes'   : 'lastExternalChangelogCookie',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  lecc = get_last_attr_from_entry(STAXResult,'lastExternalChangelogCookie')
+                  cookiesList.append(lecc)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare changeLogCookie and lastExternalChangelogCookie -->
+            <call function="'compareItems'">
+              { 'items' : cookiesList ,
+                'label' : 'changeLogCookies'
+              }
+            </call>
+                  
+          </sequence>
+          <finally>
+            <call function="'testCase_Postamble'"/>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+  <!--- Test Case information
+  #@TestMarker          Replication
+  #@TestName            Replication : ECL: Draft ChangeNumbers
+  #@TestID              ecl_draft_changenumbers_001
+  #@TestPurpose         Verify in draft mode servers have consistent changeNumber and lastChangeNumber
+  #@TestPreamble
+  #@TestSteps           Step1: Check that the changeNumber and lastChangeNumber match
+
+  #@TestPostamble
+  #@TestResult          Test is successful if the result code is 0
+  -->
+  <function name="ecl_draft_changenumbers_001" scope="local">
+    <testcase name="getTestCaseName('ecl_draft_changenumbers_001')">                     
+      <sequence> 
+        <try>
+          <sequence>                
+            <call function="'testCase_Preamble'"/>
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <!-- Reset List  -->
+            <script>
+              cnsList = []
+            </script>
+
+            <!-- Step1: Check that the changeNumber and lastChangeNumber match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that the changeNumber and lastChangeNumber match.' }
+            </call>
+
+            <script>
+              mychangenumber = global_cnsList.get()
+            </script>
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for changeNumber -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : '(changenumber>=%s)' % mychangenumber,
+                    'dsAttributes'   : 'changeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  cn = get_last_attr_from_entry(STAXResult,'changeNumber')
+                  cnsList.append(cn)
+                  global_cnsList.set(cn)
+                </script>
+
+                <!-- Search for lastChangeNumber -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsScope'        : 'base',
+                    'dsAttributes'   : 'lastChangeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  lcn = get_last_attr_from_entry(STAXResult,'lastChangeNumber')
+                  cnsList.append(lcn)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare changeNumber and lastChangeNumber -->
+            <call function="'compareItems'">
+              { 'items' : cnsList,
+                'label' : 'changeNumbers'
+              }
+            </call>
+                  
+          </sequence>
+          <finally>
+            <call function="'testCase_Postamble'"/>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+       
+  <!--- Test Case information
+  #@TestMarker          Replication
+  #@TestName            Replication : ECL: Cookie
+  #@TestID              ecl_cookies_002
+  #@TestPurpose         Verify that after change to consumer all servers have consistent COOKIE
+  #@TestPreamble
+  #@TestSteps           Step1: Modify entry on one server
+  #@TestSteps           Step2: Check that the changeLogCookie and lastExternalChangelogCookie match
+  #@TestPostamble
+  #@TestResult          Test is successful if the result code is 0
+  -->
+  <function name="ecl_cookies_002" scope="local">
+    <testcase name="getTestCaseName('ecl_cookies_002')">                     
+      <sequence> 
+        <try>
+          <sequence>                
+            <call function="'testCase_Preamble'"/>
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <!-- Modify entry on one server -->
+            <script>
+              cookiesList = []
+              myEntry = person_entry('cn=Change1', synchroSuffix)
+              
+              consumerServer = consumerList[0]
+              consumerServerPath = '%s/%s' % (consumerServer.getDir(), OPENDSNAME)
+            </script>
+
+            <message>
+              'Modify Entry (%s) on server %s:%s' \
+              % (myEntry.getDn(), consumerServer.getHostname(), consumerServer.getPort())
+            </message> 
+
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'                 : consumerServerPath,
+                'dsInstanceHost'         : consumerServer.getHostname() ,
+                'dsInstancePort'         : consumerServer.getPort() ,
+                'dsInstanceDn'           : consumerServer.getRootDn() ,
+                'dsInstancePswd'         : consumerServer.getRootPwd() ,
+                'DNToModify'             : myEntry.getDn() ,
+                'attributeName'          : 'description' ,
+                'newAttributeValue'      : 'this is a change on server 2',
+                'changetype'             : 'add'
+              }
+            </call>
+
+            <!-- Check that the changeLogCookie and lastExternalChangelogCookie match -->
+            <script>
+              mycookie = global_cookiesList.get()
+            </script>
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for changeLogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'changeLogCookie' ,
+                    'dsControl'      : '1.3.6.1.4.1.26027.1.5.4:false:%s' % mycookie,
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
+                  cookiesList.append(clc)
+                  global_cookiesList.set(clc)
+                </script>
+
+                <!-- Search for lastExternalChangelogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsScope'        : 'base',
+                    'dsAttributes'   : 'lastExternalChangelogCookie',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  lecc = get_last_attr_from_entry(STAXResult,'lastExternalChangelogCookie')
+                  cookiesList.append(lecc)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare changeLogCookie and lastExternalChangelogCookie -->
+            <call function="'compareItems'">
+              { 'items' : cookiesList ,
+                'label' : 'changeLogCookies'
+              }
+            </call>
+                  
+          </sequence>
+          <finally>
+            <call function="'testCase_Postamble'"/>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+ 
+  <!--- Test Case information
+  #@TestMarker          Replication
+  #@TestName            Replication : ECL: Draft ChangeNumbers
+  #@TestID              ecl_draft_changenumbers_002
+  #@TestPurpose         Verify that the 2 servers have consistent changeNumber and lastChangeNumber
+  #@TestPreamble
+  #@TestSteps           Step1: Check that the changeNumber and lastChangeNumber match
+
+  #@TestPostamble
+  #@TestResult          Test is successful if the result code is 0
+  -->
+  <function name="ecl_draft_changenumbers_002" scope="local">
+    <testcase name="getTestCaseName('ecl_draft_changenumbers_002')">                     
+      <sequence> 
+        <try>
+          <sequence>                
+            <call function="'testCase_Preamble'"/>
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <!-- Reset List  -->
+            <script>
+              cnsList = []
+              lcnsList = []
+            </script>
+
+            <!-- Step1: Check that the changeNumber and lastChangeNumber match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that the changeNumber and lastChangeNumber match.' }
+            </call>
+
+            <script>
+              mychangenumber = global_cnsList.get()
+            </script>
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for changeNumber -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : '(changenumber>=%s)' % mychangenumber,
+                    'dsAttributes'   : 'changeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  cn = get_last_attr_from_entry(STAXResult,'changeNumber')
+                  cnsList.append(cn)
+                  global_cnsList.set(cn)
+                </script>
+
+                <!-- Search for lastChangeNumber -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsScope'        : 'base',
+                    'dsAttributes'   : 'lastChangeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  lcn = get_last_attr_from_entry(STAXResult,'lastChangeNumber')
+                  lcnsList.append(cn)
+                  global_lcnsList.set(lcn)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare changeNumber and lastChangeNumber -->
+            <call function="'compareItems'">
+              { 'items' : cnsList + lcnsList,
+                'label' : 'changeNumbers'
+              }
+            </call>
+                  
+          </sequence>
+          <finally>
+            <call function="'testCase_Postamble'"/>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+       
+  <!--- Test Case information
+  #@TestMarker          Replication
+  #@TestName            Replication : ECL: Cookie
+  #@TestID              ecl_cookies_003
+  #@TestPurpose         Verify that after multiple changes to master all servers have consistent COOKIE
+  #@TestPreamble
+  #@TestSteps           Step 1: Modify entries on one server
+  #@TestSteps           Step 2: Check that the changeLogCookie and lastExternalChangelogCookie match
+  #@TestPostamble
+  #@TestResult          Test is successful if the result code is 0
+  -->
+  <function name="ecl_cookies_003" scope="local">
+    <testcase name="getTestCaseName('ecl_cookies_003')">                     
+      <sequence> 
+        <try>
+          <sequence>                
+            <call function="'testCase_Preamble'"/>
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <script>
+              cookiesList = []
+              nochanges = 0
+            </script>
+
+            <!-- Step 1: Modify entries on one server -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Modify entries on one server.' }
+            </call>
+
+            <loop from="1" to="2" var="entrynum">
+              <sequence>
+                <script>
+                  myEntry = person_entry('cn=Change%s' % entrynum,synchroSuffix)
+                  ldapObject=[]
+                </script>
+    
+                <message>
+                  'Modify Entry (%s) on server %s:%s' \
+                  % (myEntry.getDn(), masterHost, master.getPort())
+                </message> 
+
+                <loop from="1" to="2">
+                  <sequence>
+                
+                    <script>
+                      nochanges += 1
+                      ldapObject.append('description:change %s on server %s' % (nochanges,entrynum))                       
+                    </script>
+
+                  </sequence>
+                </loop>
+
+                <call function="'modifyAnAttribute'">
+                    { 'location'         : masterHost,
+                      'dsPath'           : masterPath,
+                      'dsInstanceHost'   : masterHost,
+                      'dsInstancePort'   : master.getPort() ,
+                      'dsInstanceDn'     : master.getRootDn() ,
+                      'dsInstancePswd'   : master.getRootPwd() ,
+                      'DNToModify'       : myEntry.getDn() ,
+                      'listAttributes'   : ldapObject ,
+                      'changetype'       : 'replace' }
+                </call>
+
+              </sequence>
+            </loop>
+
+            <!-- Step2: Check that the changeLogCookie and lastExternalChangelogCookie match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that the changeLogCookie and lastExternalChangelogCookie match.' }
+            </call>
+
+            <script>
+              mycookie = global_cookiesList.get()
+            </script>
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for changeLogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'changeLogCookie' ,
+                    'dsControl'      : '1.3.6.1.4.1.26027.1.5.4:false:%s' % mycookie,
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
+                  cookiesList.append(clc)
+                  global_cookiesList.set(clc)
+                </script>
+
+                <!-- Search for lastExternalChangelogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsScope'        : 'base',
+                    'dsAttributes'   : 'lastExternalChangelogCookie',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  lecc = get_last_attr_from_entry(STAXResult,'lastExternalChangelogCookie')
+                  cookiesList.append(lecc)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare changeLogCookie and lastExternalChangelogCookie -->
+            <call function="'compareItems'">
+              { 'items' : cookiesList ,
+                'label' : 'changeLogCookies'
+              }
+            </call>
+                  
+          </sequence>
+          <finally>
+            <call function="'testCase_Postamble'"/>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+    
+  <!--- Test Case information
+  #@TestMarker          Replication
+  #@TestName            Replication : ECL: Draft ChangeNumbers
+  #@TestID              ecl_draft_changenumbers_003
+  #@TestPurpose         Verify that the servers have consistent changeNumbers
+  #@TestPreamble
+  #@TestSteps           Step1: Check that the changeNumbers match
+  #@TestSteps           Step2: Check that the lastChangeNumbers match
+  #@TestSteps           Step3: Check that the firstChangeNumbers match
+
+  #@TestPostamble
+  #@TestResult          Test is successful if the result code is 0
+  -->
+  <function name="ecl_draft_changenumbers_003" scope="local">
+    <testcase name="getTestCaseName('ecl_draft_changenumbers_003')">                     
+      <sequence> 
+        <try>
+          <sequence>                
+            <call function="'testCase_Preamble'"/>
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <!-- Reset List  -->
+            <script>
+              cnsList = []
+            </script>
+
+            <!-- Step1: Check that the changeNumber match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that the changeNumber match.' }
+            </call>
+
+            <script>
+              mychangenumber = global_cnsList.get()
+            </script>
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
+                </script>
+
+                <!-- Search for changeNumber -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : 'changeNumber>=%s' % mychangenumber,
+                    'dsAttributes'   : 'changeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  cn = get_last_attr_from_entry(STAXResult,'changeNumber')
+                  cnsList.append(cn)
+                  global_cnsList.set(cn)
+                </script>
+              </sequence>
+            </iterate>
+
+            <!-- Step2: Check that the lastChangeNumber match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that the lastChangeNumber match.' }
+            </call>
+
+            <script>
+              lcnsList = []
+            </script>
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for lastChangeNumber -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsFilter'       : 'lastChangeNumber>=%s' % mychangenumber,
+                    'dsScope'        : 'base',
+                    'dsAttributes'   : 'lastChangeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  lcn = get_last_attr_from_entry(STAXResult,'lastChangeNumber')
+                  cnsList.append(lcn)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare lastChangeNumber -->
+            <call function="'compareItems'">
+              { 'items' : cnsList + lcnsList,
+                'label' : 'changeNumbers'
+              }
+            </call>
+
+            <!-- Step3: Check that the firstChangeNumbers match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that the firstChangeNumbers match.' }
+            </call>
+
+            <script>
+              fcnsList = []
+            </script>
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for firstChangeNumber -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsScope'        : 'base',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'firstChangeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  fcn = get_last_attr_from_entry(STAXResult,'firstChangeNumber')
+                  fcnsList.append(fcn)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare firstChangeNumbers -->
+            <call function="'compareItems'">
+              { 'items' : fcnsList ,
+                'label' : 'firstChangeNumber'
+              }
+            </call>
+                  
+          </sequence>
+          <finally>
+            <call function="'testCase_Postamble'"/>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+  <!--- Test Case information
+  #@TestMarker          Replication
+  #@TestName            Replication : ECL: Purge Interval
+  #@TestID              ecl_purge_sleep_001
+  #@TestPurpose         Verify that purge interval is passed
+  #@TestPreamble
+  #@TestSteps           Step1: Check that the changeNumbers match
+  #@TestPostamble
+  #@TestResult          Test is successful if the result code is 0
+  -->
+  <function name="ecl_purge_sleep_001" scope="local">
+    <testcase name="getTestCaseName('ecl_purge_sleep_001')">                     
+      <sequence> 
+        <try>
+          <sequence>                
+            <call function="'testCase_Preamble'"/>
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <script>
+              sleepMilliSeconds='%s000' % ecl_purge_delay
+              #TODO: change sleep time
+              #sleepMilliSeconds='1000'
+            </script>
+
+            <message>
+              'Sleeping for %s secs' % ecl_purge_delay
+            </message>
+  
+            <call function="'Sleep'">
+              { 'sleepForMilliSeconds' : sleepMilliSeconds }
+            </call>            
+
+            <tcstatus result="'pass'"/>
+
+          </sequence>
+          <finally>
+            <call function="'testCase_Postamble'"/>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+  <!--- Test Case information
+  #@TestMarker          Replication
+  #@TestName            Replication : ECL: Post Purge
+  #@TestID              ecl_purge_001
+  #@TestPurpose         Verify that the 2 servers have consistent cookies and changenumber after purge
+  #@TestPreamble
+  #@TestSteps           Step1: Check that lastExternalChangelogCookie match
+  #@TestSteps           Step2: Search on servers with last cookie
+  #@TestSteps           Step3: Search on servers with changenumber (draft mode)
+  #@TestSteps           Step4: Check that the lastChangeNumber match
+  #@TestSteps           Step5: Check that the firstChangeNumbers match
+  #@TestPostamble
+  #@TestResult          Test is successful if the result code is 0
+  -->
+  <function name="ecl_purge_001" scope="local">
+    <testcase name="getTestCaseName('ecl_purge_001')">                     
+      <sequence> 
+        <try>
+          <sequence>                
+            <call function="'testCase_Preamble'"/>
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <!-- Modify Entries various replication servers -->
+            <script>
+              lastCookiesList = []
+            </script>
+
+            <!-- Step 1: Check that lastExternalChangelogCookie match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that lastExternalChangelogCookie match.' }
+            </call>
+
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for lastExternalChangelogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsScope'        : 'base',
+                    'dsAttributes'   : 'lastExternalChangelogCookie',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  lecc = get_last_attr_from_entry(STAXResult,'lastExternalChangelogCookie')
+                  lastCookiesList.append(lecc)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare lastExternalChangelogCookie -->
+            <call function="'compareItems'">
+              { 'items' : lastCookiesList ,
+                'label' : 'lastExternalChangelogCookie'
+              }
+            </call>
+
+            <!-- Step 2: Search on servers with last cookie -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Search on servers with last cookie.' }
+            </call>
+
+            <script>
+              cookiesList = []
+              i = 0
+            </script>
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for changeLogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'changeLogCookie' ,
+                    'dsControl'      : '1.3.6.1.4.1.26027.1.5.4:false:%s' % lastCookiesList[i],
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
+                  cookiesList.append(clc)
+                  i += 1
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare changeLogCookies -->
+            <call function="'compareItems'">
+              { 'items' : cookiesList ,
+                'label' : 'changeLogCookie'
+              }
+            </call>
+
+            <!-- Step 3: Search on servers with changenumber (draft mode) -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Search on servers with changenumber (draft mode).' }
+            </call>
+
+            <message>'Now checking draft mode.'</message>
+            <script>
+              mychangenumber = global_cnsList.get()
+              cookiesList = []
+              cnsList = []
+            </script>
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME)
+                </script>
+
+                <!-- Search for changeNumber -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : 'changeNumber>=%s' % mychangenumber,
+                    'dsAttributes'   : 'changeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  cn = get_last_attr_from_entry(STAXResult,'changeNumber')
+                  cnsList.append(cn)
+                </script>
+
+                <!-- Search for changeLogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : 'changeNumber>=%s' % mychangenumber,
+                    'dsAttributes'   : 'changeLogCookie',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  cn = get_last_attr_from_entry(STAXResult,'changeLogCookie')
+                  cookiesList.append(cn)
+                </script>
+
+              </sequence>
+            </iterate>
+
+            <!-- Compare changeNumbers -->
+            <call function="'compareItems'">
+              { 'items' : cnsList ,
+                'label' : 'draftModeChangeNumber'
+              }
+            </call>
+
+            <!-- Compare changeLogCookies -->
+            <call function="'compareItems'">
+              { 'items' : cookiesList ,
+                'label' : 'draftModeChangeLogCookie'
+              }
+            </call>
+
+            <!-- Step4: Check that the lastChangeNumber match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that the lastChangeNumber match.' }
+            </call>
+
+            <script>
+              lcnsList = []
+              i = 0
+            </script>
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for lastChangeNumber -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsScope'        : 'base',
+                    'dsAttributes'   : 'lastChangeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  lcn = get_last_attr_from_entry(STAXResult,'lastChangeNumber')
+                  lcnsList.append(lcn)
+                  i += 1
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare lastChangeNumber -->
+            <call function="'compareItems'">
+              { 'items' : lcnsList,
+                'label' : 'lastChangeNumber'
+              }
+            </call>
+
+            <!-- Step5: Check that the firstChangeNumbers match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that the firstChangeNumbers match.' }
+            </call>
+
+            <script>
+              fcnsList = []
+            </script>
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for firstChangeNumber -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsScope'        : 'base',
+                    'dsAttributes'   : 'firstChangeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  fcn = get_last_attr_from_entry(STAXResult,'firstChangeNumber')
+                  fcnsList.append(fcn)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare firstChangeNumbers -->
+            <call function="'compareItems'">
+              { 'items' : fcnsList ,
+                'label' : 'firstChangeNumber'
+              }
+            </call>
+                              
+          </sequence>
+          <finally>
+            <call function="'testCase_Postamble'"/>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+  <!--- Test Case information
+  #@TestMarker          Replication
+  #@TestName            Replication : ECL: Purge Masters Cookie
+  #@TestID              ecl_purge_002
+  #@TestPurpose         Verify that after purge change to master COOKIEs are consistent
+  #@TestPreamble
+  #@TestSteps           Step1: Modify entry on one server
+  #@TestSteps           Step2: Check that the changeLogCookie and lastExternalChangelogCookie match
+  #@TestPostamble
+  #@TestResult          Test is successful if the result code is 0
+  -->
+  <function name="ecl_purge_002" scope="local">
+    <testcase name="getTestCaseName('ecl_purge_002')">                     
+      <sequence> 
+        <try>
+          <sequence>                
+            <call function="'testCase_Preamble'"/>
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <!-- Step1: Modify entry on one server -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Modify entry on one server.' }
+            </call>
+
+            <script>
+              cookiesList = []
+              myEntry = person_entry('cn=Change1', synchroSuffix)
+            </script>
+
+            <message>
+              'Modify Entry (%s) on server %s:%s' \
+              % (myEntry.getDn(), masterHost, master.getPort())
+            </message> 
+
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'                 : masterPath,
+                'dsInstanceHost'         : masterHost ,
+                'dsInstancePort'         : master.getPort() ,
+                'dsInstanceDn'           : master.getRootDn() ,
+                'dsInstancePswd'         : master.getRootPwd() ,
+                'DNToModify'             : myEntry.getDn() ,
+                'attributeName'          : 'description' ,
+                'newAttributeValue'      : 'this is a change on server 1',
+                'changetype'             : 'add'
+              }
+            </call>
+
+            <!-- Step2: Check that the changeLogCookie and lastExternalChangelogCookie match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that the changeLogCookie and lastExternalChangelogCookie match.' }
+            </call>
+
+            <script>
+              mycookie = global_cookiesList.get()
+            </script>
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for changeLogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'changeLogCookie' ,
+                    'dsControl'      : '1.3.6.1.4.1.26027.1.5.4:false:%s' % mycookie,
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
+                  cookiesList.append(clc)
+                  global_cookiesList.set(clc)
+                </script>
+
+                <!-- Search for lastExternalChangelogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsScope'        : 'base',
+                    'dsAttributes'   : 'lastExternalChangelogCookie',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  lecc = get_last_attr_from_entry(STAXResult,'lastExternalChangelogCookie')
+                  cookiesList.append(lecc)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare changeLogCookie and lastExternalChangelogCookie -->
+            <call function="'compareItems'">
+              { 'items' : cookiesList ,
+                'label' : 'changeLogCookies'
+              }
+            </call>
+                  
+          </sequence>
+          <finally>
+            <call function="'testCase_Postamble'"/>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+  <!--- Test Case information
+  #@TestMarker          Replication
+  #@TestName            Replication : ECL: Purge Consumers Cookie
+  #@TestID              ecl_purge_003
+  #@TestPurpose         Verify that after purge change to consumer COOKIEs are consistent
+  #@TestPreamble
+  #@TestSteps           Step1: Modify entry on one server
+  #@TestSteps           Step2: Check that the changeLogCookie and lastExternalChangelogCookie match
+  #@TestPostamble
+  #@TestResult          Test is successful if the result code is 0
+  -->
+  <function name="ecl_purge_003" scope="local">
+    <testcase name="getTestCaseName('ecl_purge_003')">                     
+      <sequence> 
+        <try>
+          <sequence>                
+            <call function="'testCase_Preamble'"/>
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <!-- Modify entry on one server -->
+            <script>
+              cookiesList = []
+              myEntry = person_entry('cn=Change1', synchroSuffix)
+              
+              consumerServer = consumerList[0]
+              consumerServerPath = '%s/%s' % (consumerServer.getDir(), OPENDSNAME)
+            </script>
+
+            <message>
+              'Modify Entry (%s) on server %s:%s' \
+              % (myEntry.getDn(), consumerServer.getHostname(), consumerServer.getPort())
+            </message> 
+
+            <call function="'modifyAnAttribute'">
+              { 'dsPath'                 : consumerServerPath,
+                'dsInstanceHost'         : consumerServer.getHostname() ,
+                'dsInstancePort'         : consumerServer.getPort() ,
+                'dsInstanceDn'           : consumerServer.getRootDn() ,
+                'dsInstancePswd'         : consumerServer.getRootPwd() ,
+                'DNToModify'             : myEntry.getDn() ,
+                'attributeName'          : 'description' ,
+                'newAttributeValue'      : 'this is a change on server 2',
+                'changetype'             : 'add'
+              }
+            </call>
+
+            <!-- Check that the changeLogCookie and lastExternalChangelogCookie match -->
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for changeLogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'changeLogCookie' ,
+                    'dsControl'      : '1.3.6.1.4.1.26027.1.5.4:false:;',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
+                  cookiesList.append(clc)
+                </script>
+
+                <!-- Search for lastExternalChangelogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsScope'        : 'base',
+                    'dsAttributes'   : 'lastExternalChangelogCookie',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  lecc = get_last_attr_from_entry(STAXResult,'lastExternalChangelogCookie')
+                  cookiesList.append(lecc)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare changeLogCookie and lastExternalChangelogCookie -->
+            <call function="'compareItems'">
+              { 'items' : cookiesList ,
+                'label' : 'changeLogCookies'
+              }
+            </call>
+                  
+          </sequence>
+          <finally>
+            <call function="'testCase_Postamble'"/>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+  <!--- Test Case information
+  #@TestMarker          Replication
+  #@TestName            Replication : ECL: Purge ChangeNumbers
+  #@TestID              ecl_purge_004
+  #@TestPurpose         Verify that after purge the servers have consistent changeNumbers
+  #@TestPreamble
+  #@TestSteps           Step1: Check that the changeNumbers match
+  #@TestSteps           Step2: Check that the lastChangeNumbers match
+  #@TestSteps           Step3: Check that the firstChangeNumbers match
+
+  #@TestPostamble
+  #@TestResult          Test is successful if the result code is 0
+  -->
+  <function name="ecl_purge_004" scope="local">
+    <testcase name="getTestCaseName('ecl_purge_004')">                     
+      <sequence> 
+        <try>
+          <sequence>                
+            <call function="'testCase_Preamble'"/>
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <!-- Reset List  -->
+            <script>
+              mychangenumber = global_cnsList.get()
+              cnsList = []
+            </script>
+
+            <!-- Step1: Check that the changeNumber match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that the changeNumber match.' }
+            </call>
+
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for changeNumber -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : 'changeNumber>=%s' % mychangenumber,
+                    'dsAttributes'   : 'changeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  cn = get_last_attr_from_entry(STAXResult,'changeNumber')
+                  cnsList.append(cn)
+                  global_cnsList.set(cn)
+                </script>
+              </sequence>
+            </iterate>
+
+            <!-- Step2: Check that the lastChangeNumber match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that the lastChangeNumber match.' }
+            </call>
+
+            <script>
+              lcnsList = []
+              mylastcn = global_lcnsList.get()
+            </script>
+            <iterate var="server" in="_topologyServerList" indexvar="i">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for lastChangeNumber -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsFilter'       : 'lastChangeNumber>=%s' % mylastcn,
+                    'dsScope'        : 'base',
+                    'dsAttributes'   : 'lastChangeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  lcn = get_last_attr_from_entry(STAXResult,'lastChangeNumber')
+                  cnsList.append(lcn)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare lastChangeNumber -->
+            <call function="'compareItems'">
+              { 'items' : cnsList + lcnsList,
+                'label' : 'changeNumbers'
+              }
+            </call>
+
+            <!-- Step3: Check that the firstChangeNumbers match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that the firstChangeNumbers match.' }
+            </call>
+
+            <script>
+              fcnsList = []
+            </script>
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for firstChangeNumber -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : '',
+                    'dsScope'        : 'base',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'firstChangeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  fcn = get_last_attr_from_entry(STAXResult,'firstChangeNumber')
+                  fcnsList.append(fcn)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare firstChangeNumbers -->
+            <call function="'compareItems'">
+              { 'items' : fcnsList ,
+                'label' : 'firstChangeNumber'
+              }
+            </call>
+                  
+          </sequence>
+          <finally>
+            <call function="'testCase_Postamble'"/>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+
+  <!--- Test Case information
+  #@TestMarker          Replication
+  #@TestName            Replication : ECL: Purge No Cookie or CN
+  #@TestID              ecl_purge_005
+  #@TestPurpose         Verify that change can be found with no cookie nor cn
+  #@TestPreamble
+  #@TestSteps           Step 1: Search for changeLogCookie with no cookie in control
+  #@TestPostamble
+  #@TestResult          Test is successful if the result code is 0
+  -->
+  <function name="ecl_purge_005" scope="local">
+    <testcase name="getTestCaseName('ecl_purge_005')">                     
+      <sequence> 
+        <try>
+          <sequence>                
+            <call function="'testCase_Preamble'"/>
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <script>
+              cookiesList = []
+              cnsList = []
+            </script>
+
+            <!-- Step2: Check that the changeLogCookie and lastExternalChangelogCookie match -->
+            <call function="'testStep'">
+              { 'stepMessage' : 'Check that the changeLogCookie and lastExternalChangelogCookie match.' }
+            </call>
+
+            <iterate var="server" in="_topologyServerList">
+              <sequence>
+
+                <script>
+                  replServer = server            
+                  replServerPath = '%s/%s' % (replServer.getDir(), OPENDSNAME) 
+                </script>
+
+                <!-- Search for changeLogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'changeLogCookie' ,
+                    'dsControl'      : '1.3.6.1.4.1.26027.1.5.4:false:;',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  clc = get_last_attr_from_entry(STAXResult,'changeLogCookie')
+                  cookiesList.append(clc)
+                </script>
+
+                <!-- Search for lastExternalChangelogCookie -->
+                <call function="'ldapSearchWithScript'">
+                  { 'location'       : replServer.getHostname(),
+                    'dsPath'         : replServerPath,
+                    'dsInstanceHost' : replServer.getHostname(),
+                    'dsInstancePort' : replServer.getPort(),
+                    'dsInstanceDn'   : replServer.getRootDn(),
+                    'dsInstancePswd' : replServer.getRootPwd(),
+                    'dsBaseDN'       : 'cn=changelog',
+                    'dsFilter'       : 'objectclass=*',
+                    'dsAttributes'   : 'changeNumber',
+                    'extraParams'    : '-T'
+                  }
+                </call>
+
+                <script>
+                  cn = get_last_attr_from_entry(STAXResult,'changeNumber')
+                  cnsList.append(cn)
+                  global_cnsList.set(cn)
+                </script>
+                  
+              </sequence>
+            </iterate>
+
+            <!-- Compare changeLogCookies-->
+            <call function="'compareItems'">
+              { 'items' : cookiesList ,
+                'label' : 'changeLogCookies'
+              }
+            </call>
+
+            <!-- Compare changeLogCookies-->
+            <call function="'compareItems'">
+              { 'items' : cnsList ,
+                'label' : 'changeLogCookies'
+              }
+            </call>
+                  
+          </sequence>
+          <finally>
+            <call function="'testCase_Postamble'"/>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+        
+  <!-- Definition of Postamble --> 
+
+  <!--- Test Case : Replication : ECL : ECL CLEANUP -->          
+  <!--- Test Case information
+  #@TestMarker          Replication
+  #@TestName            Replication : ECL
+  #@TestID              ecl_cleanup
+  #@TestPurpose         Cleanup ecl
+  #@TestPreamble
+  #@TestSteps           Step1: TBD
+  #@TestPostamble
+  #@TestResult          Test is successful if the result code is 0
+  -->
+  <function name="ecl_cleanup" scope="local">
+    <testcase name="getTestCaseName('ecl_cleanup')">                     
+      <sequence> 
+        <try>
+          <sequence>                
+            <call function="'testCase_Preamble'"/>
+            <message>
+               'Test Name = %s' % STAXCurrentTestcase
+            </message>
+
+            <message>
+              'Replication: External Changelog: - Clean up. \
+              Clean up environment for External Changelog tests'
+            </message>
+
+            <tcstatus result="'pass'"/>
+
+          </sequence>
+          <finally>
+            <call function="'testCase_Postamble'"/>
+          </finally>
+        </try>
+      </sequence>
+    </testcase>
+  </function>
+ 
+  <!-- Definition of Functions --> 
+  
+  <function name="compareItems" scope="local">
+    <function-prolog>
+      Compares all items in List for equality
+    </function-prolog>
+    <function-map-args>
+
+      <function-required-arg name="items">
+        List of items to be compared for equality
+      </function-required-arg>
+
+      <function-optional-arg name="label" default="''">
+        Friendly label to aid description
+      </function-optional-arg>
+    </function-map-args>
+
+    <sequence>
+      <if expr="len(items) == 0">
+        <message level='warning'>'The list to compare is empty.'</message>
+      </if>
+      <script>
+        try:
+          allItemsMatch = list_matches(items)
+        except Exception,e:
+          print "Exception Thrown: caught (%s)" % e
+          allItemsMatch = 'False'
+      </script>
+      <if expr="allItemsMatch == 'True'">
+          <sequence>
+            <message>'%s Items match successfully (%s)' % (label,items)</message>
+            <tcstatus result="'pass'"/>
+          </sequence>
+        <else>
+          <sequence>
+            <message level="'error'">'%s Items do not match (%s)' % (label,items)</message>
+            <tcstatus result="'fail'"/>
+          </sequence>
+        </else>
+      </if>
+    </sequence>
+  </function>
+</stax>
diff --git a/opends/tests/staf-tests/functional-tests/testcases/security/client_auth/fingerprint_mapper.xml b/opends/tests/staf-tests/functional-tests/testcases/security/client_auth/fingerprint_mapper.xml
index f7522f1..2eccdee 100755
--- a/opends/tests/staf-tests/functional-tests/testcases/security/client_auth/fingerprint_mapper.xml
+++ b/opends/tests/staf-tests/functional-tests/testcases/security/client_auth/fingerprint_mapper.xml
@@ -501,6 +501,7 @@
             string_len=len(certificateResult)
             index_MD5=certificateResult.find("MD5:") 
             index_SHA1=certificateResult.find("SHA1:")
+            index_SHA256=certificateResult.find("SHA256:")
             index_Signature=certificateResult.find("Signature algorithm name:")
             MD5_fingerprint_cert1=certificateResult[index_MD5+5:index_SHA1].strip()
             if index_SHA256 == -1:
@@ -533,6 +534,7 @@
             string_len=len(certificateResult)
             index_MD5=certificateResult.find("MD5:") 
             index_SHA1=certificateResult.find("SHA1:")
+            index_SHA256=certificateResult.find("SHA256:")
             index_Signature=certificateResult.find("Signature algorithm name:")
             MD5_fingerprint_cert2=certificateResult[index_MD5+5:index_SHA1].strip()
             if index_SHA256 == -1:

--
Gitblit v1.10.0