From c65963733affd8d47a8cacdd0e533f728be10f8a Mon Sep 17 00:00:00 2001
From: Gary Williams <gary.williams@forgerock.com>
Date: Fri, 29 Jul 2011 19:40:26 +0000
Subject: [PATCH] ecl functional tests parse correctly cookie with multi-suffixes
---
opends/tests/staf-tests/shared/python/common.py | 14 ++
opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog/externalchangelog_consistency_tests.xml | 242 ++++++++++++++++++++++++++++++++++++++++++++++--
opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog/externalchangelog.xml | 4
opends/tests/staf-tests/functional-tests/testcases/replication/externalchangelog/externalchangelog_common_ecl_tests.xml | 26 +++++
4 files changed, 271 insertions(+), 15 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 ef21544..76fa883 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
@@ -83,6 +83,7 @@
ecl_modes.append('draft')
</script>
+ <!-- Import the files for this test suite -->
<iterate var="ecl_mode" in="ecl_modes">
<sequence>
<import machine="STAF_LOCAL_HOSTNAME"
@@ -119,8 +120,9 @@
testsList=[]
testsList.append('ecl_setup')
testsList.append('ecl_add_cookies_001')
- testsList.append('ecl_mod_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')
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 1033749..f1050eb 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
@@ -70,6 +70,19 @@
<message>
'Common ECL tests: reset data'
</message>
+
+ <!-- Pre-initialise the servers in the topology -->
+ <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'">
@@ -12354,6 +12367,19 @@
'Replication: External Changelog: %s - Clean up. \
Clean up environment for External Changelog tests' % ecl_mode
</message>
+
+ <!-- Clean newReplSuffix changes from changelog -->
+ <call function="'preInitializeReplication'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstanceAdminPort' : master.getAdminPort(),
+ 'localOnly' : False,
+ 'replicationDnList' : [newReplSuffix],
+ 'adminUID' : adminUID,
+ 'adminPswd' : adminPswd
+ }
+ </call>
<!-- Clean new suffixes on servers -->
<iterate var="server"
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 a7cf888..273e31a 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
@@ -58,6 +58,19 @@
'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,
@@ -99,7 +112,7 @@
}
</call>
- <!-- Perform the total update -->
+ <!-- Perform the total update, resets generation id from (-1) -->
<call function="'initializeReplication'">
{ 'location' : clientHost,
'dsPath' : clientPath,
@@ -141,11 +154,10 @@
</paralleliterate>
<!-- Verify the synchronization of the trees among the servers in
- the topology
+ the topology -->
<call function="'verifyTrees'">
[ clientHost, clientPath, master, consumerList, synchroSuffix ]
</call>
--->
</sequence>
<finally>
@@ -302,7 +314,7 @@
<call function="'verifyTrees'">
[ clientHost, clientPath, master, consumerList, synchroSuffix ]
</call>
-
+
</sequence>
<finally>
<call function="'testCase_Postamble'"/>
@@ -311,6 +323,216 @@
</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
@@ -469,7 +691,7 @@
<call function="'verifyTrees'">
[ clientHost, clientPath, master, consumerList, synchroSuffix ]
</call>
-
+
</sequence>
<finally>
<call function="'testCase_Postamble'"/>
@@ -482,8 +704,8 @@
<!--- Test Case information
#@TestMarker Replication
#@TestName Replication : ECL: ChangeNumbers
- #@TestID ecl_changenumbers_001
- #@TestPurpose Verify that the 2 servers have consistent change numbers
+ #@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
@@ -491,8 +713,8 @@
#@TestPostamble
#@TestResult Test is successful if the result code is 0
-->
- <function name="ecl_changenumbers_001" scope="local">
- <testcase name="getTestCaseName('ecl_changenumbers_001')">
+ <function name="ecl_changenumbers_002" scope="local">
+ <testcase name="getTestCaseName('ecl_changenumbers_002')">
<sequence>
<try>
<sequence>
@@ -656,7 +878,7 @@
dncList.append(dncount)
</script>
- <if expr="dncount == 5">
+ <if expr="dncount == noOfEntries">
<message>
'Search returned %s changes, expected %s' % (dncount,noOfEntries)
</message>
diff --git a/opends/tests/staf-tests/shared/python/common.py b/opends/tests/staf-tests/shared/python/common.py
index 5fcdff4..b3b3f41 100644
--- a/opends/tests/staf-tests/shared/python/common.py
+++ b/opends/tests/staf-tests/shared/python/common.py
@@ -753,14 +753,20 @@
changeEntry=result[0][1].split("\n")
- attr=''
+ attrVal=''
for changeAttr in changeEntry:
#print changeAttr
if changeAttr.startswith(attribute):
- print 'get_last_attr_from_entry: %s' % changeAttr
- attr = ' '.join(changeAttr.split(' ')[1:3])
+ #print 'get_last_attr_from_entry: %s' % changeAttr
+ attrVal = changeAttr.replace('%s: ' % attribute,'')
- return attr.replace(';','')
+ if attrVal != '' and attrVal[len(attrVal)-1] == ';' :
+ lastAttr = attrVal[0:len(attrVal)-1]
+ else:
+ lastAttr = attrVal
+
+ print 'get_last_attr_from_entry: %s' % lastAttr
+ return lastAttr
def list_matches(mylist):
--
Gitblit v1.10.0