From 81f1d65e0ca7e4542a597db4f28e65f84dbbcd47 Mon Sep 17 00:00:00 2001
From: Christophe Sovant <christophe.sovant@forgerock.com>
Date: Mon, 03 Aug 2009 09:29:27 +0000
Subject: [PATCH] Front port of 2.0 tests to the trunk
---
opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_modify_multiple.xml | 437 +++
opends/tests/staf-tests/stress-tests/testcases/replication/replication_modify.xml | 450 +++
opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_bin_attr_1m.xml | 57
opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_compare.xml | 44
opends/tests/staf-tests/functional-tests/testcases/indexes/before-add.filters | 24
opends/tests/staf-tests/shared/xsl/gen-suites-report.xsl | 1
opends/tests/staf-tests/stress-tests/testcases/replication/replication_modify_modifyrdn_multiple.xml | 519 +++
opends/tests/staf-tests/functional-tests/testcases/indexes/before-modify.filters | 10
opends/tests/staf-tests/functional-tests/testcases/indexes/search.filters | 366 +-
opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_del_add_del_multiple.xml | 528 +++
opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_delete.xml | 411 ++
opends/tests/staf-tests/stress-tests/testcases/replication/replication_search.xml | 450 +++
opends/tests/staf-tests/stress-tests/testcases/replication/replication.xml | 107
opends/tests/staf-tests/functional-tests/testcases/replication/conflict/conflict.xml | 234
opends/tests/staf-tests/functional-tests/testcases/replication/replication_cleanup.xml | 66
opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_mod_delete_search.xml | 507 +++
opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_search_multiple.xml | 436 +++
opends/tests/staf-tests/functional-tests/testcases/replication/resynchronization/resynchronization.xml | 450 ++
opends/tests/staf-tests/shared/functions/topology.xml | 217 +
opends/tests/staf-tests/shared/functions/environment.xml | 5
opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_mod_delete.xml | 460 +++
opends/tests/staf-tests/shared/ant/build.properties | 2
opends/tests/staf-tests/shared/functions/dsadm.xml | 2
opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_delete_multiple.xml | 436 +++
opends/tests/staf-tests/functional-tests/testcases/indexes/before-remove.filters | 24
opends/tests/staf-tests/functional-tests/testcases/indexes/after-remove.filters | 24
opends/tests/staf-tests/shared/topology/basic_topology.txt | 6
opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_bin_attr.xml | 77
opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldap_operation_cleanup.xml | 46
opends/tests/staf-tests/functional-tests/testcases/indexes/indexes.xml | 21
opends/tests/staf-tests/shared/functions/tools.xml | 326 ++
opends/tests/staf-tests/functional-tests/testcases/indexes/after-modify.filters | 10
opends/tests/staf-tests/shared/functions/utils.xml | 34
opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_modify.xml | 29
opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_bin_attr_3m.xml | 63
opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_add_delete.xml | 40
opends/tests/staf-tests/functional-tests/testcases/tasks/backup_db.xml | 2
opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_search.xml | 27
opends/tests/staf-tests/stress-tests/testcases/replication/replication_modifyrdn.xml | 450 +++
opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif.xml | 2
opends/tests/staf-tests/stress-tests/testcases/replication/replication_modify_multiple.xml | 519 +++
opends/tests/staf-tests/shared/topology/3server_topology.txt | 8
opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_modifyrdn.xml | 27
opends/tests/staf-tests/shared/functions/stafcmd.xml | 6
opends/tests/staf-tests/functional-tests/testcases/indexes/after-add.filters | 24
opends/tests/staf-tests/stress-tests/testcases/replication/replication_modifyrdn_multiple.xml | 519 +++
opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_cleanup.xml | 44
47 files changed, 7,927 insertions(+), 620 deletions(-)
diff --git a/opends/tests/staf-tests/functional-tests/testcases/indexes/after-add.filters b/opends/tests/staf-tests/functional-tests/testcases/indexes/after-add.filters
index 89e83e2..c30325c 100644
--- a/opends/tests/staf-tests/functional-tests/testcases/indexes/after-add.filters
+++ b/opends/tests/staf-tests/functional-tests/testcases/indexes/after-add.filters
@@ -21,16 +21,16 @@
# CDDL HEADER END
#
#
-# Copyright 2007-2009 Sun Microsystems, Inc.
+# Copyright 2007-2008 Sun Microsystems, Inc.
#
-uid subString uid=j* 0 2 INDEXED
-uid subString (uid=j*) 0 2 INDEXED
-l presence l=* 0 10 INDEXED
-l presence (l=*) 0 10 INDEXED
-l equality l=Cupertino 0 3 INDEXED
-l equality (l=Cupertino) 0 3 INDEXED
-l approximate (l~=ertino) 0 11 NOT-INDEXED
-l substring (l=Cup*) 0 3 INDEXED
-l substring l=Cup* 0 3 INDEXED
-l substring l=*tino 0 11 NOT-INDEXED
-l substring (l=*tino) 0 11 NOT-INDEXED
+uid subString uid=j* 0 INDEXED
+uid subString (uid=j*) 0 INDEXED
+l presence l=* 0 INDEXED
+l presence (l=*) 0 INDEXED
+l equality l=Cupertino 0 INDEXED
+l equality (l=Cupertino) 0 INDEXED
+l approximate (l~=ertino) 0 NOT-INDEXED
+l substring (l=Cup*) 0 INDEXED
+l substring l=Cup* 0 INDEXED
+l substring l=*tino 0 NOT-INDEXED
+l substring (l=*tino) 0 NOT-INDEXED
diff --git a/opends/tests/staf-tests/functional-tests/testcases/indexes/after-modify.filters b/opends/tests/staf-tests/functional-tests/testcases/indexes/after-modify.filters
index 45b0970..0ad42f8 100644
--- a/opends/tests/staf-tests/functional-tests/testcases/indexes/after-modify.filters
+++ b/opends/tests/staf-tests/functional-tests/testcases/indexes/after-modify.filters
@@ -21,9 +21,9 @@
# CDDL HEADER END
#
#
-# Copyright 2007-2009 Sun Microsystems, Inc.
+# Copyright 2007-2008 Sun Microsystems, Inc.
#
-uid subString uid=j* 0 2 INDEXED
-uid subString (uid=j*) 0 2 INDEXED
-uid subString uid=*allace 0 1 INDEXED
-uid subString (uid=*allace) 0 1 INDEXED
+uid subString uid=j* 0 INDEXED
+uid subString (uid=j*) 0 INDEXED
+uid subString uid=*allace 0 INDEXED
+uid subString (uid=*allace) 0 INDEXED
diff --git a/opends/tests/staf-tests/functional-tests/testcases/indexes/after-remove.filters b/opends/tests/staf-tests/functional-tests/testcases/indexes/after-remove.filters
index 6bc519d..d701d87 100644
--- a/opends/tests/staf-tests/functional-tests/testcases/indexes/after-remove.filters
+++ b/opends/tests/staf-tests/functional-tests/testcases/indexes/after-remove.filters
@@ -21,16 +21,16 @@
# CDDL HEADER END
#
#
-# Copyright 2007-2009 Sun Microsystems, Inc.
+# Copyright 2007-2008 Sun Microsystems, Inc.
#
-uid subString uid=j* 0 2 INDEXED
-uid subString (uid=j*) 0 2 INDEXED
-l presence l=* 0 11 NOT-INDEXED
-l presence (l=*) 0 11 NOT-INDEXED
-l equality l=Cupertino 0 11 NOT-INDEXED
-l equality (l=Cupertino) 0 11 NOT-INDEXED
-l approximate (l~=ertino) 0 11 NOT-INDEXED
-l substring (l=Cup*) 0 11 NOT-INDEXED
-l substring l=Cup* 0 11 NOT-INDEXED
-l substring l=*tino 0 11 NOT-INDEXED
-l substring (l=*tino) 0 11 NOT-INDEXED
+uid subString uid=j* 0 INDEXED
+uid subString (uid=j*) 0 INDEXED
+l presence l=* 0 NOT-INDEXED
+l presence (l=*) 0 NOT-INDEXED
+l equality l=Cupertino 0 NOT-INDEXED
+l equality (l=Cupertino) 0 NOT-INDEXED
+l approximate (l~=ertino) 0 NOT-INDEXED
+l substring (l=Cup*) 0 NOT-INDEXED
+l substring l=Cup* 0 NOT-INDEXED
+l substring l=*tino 0 NOT-INDEXED
+l substring (l=*tino) 0 NOT-INDEXED
diff --git a/opends/tests/staf-tests/functional-tests/testcases/indexes/before-add.filters b/opends/tests/staf-tests/functional-tests/testcases/indexes/before-add.filters
index 6bc519d..d701d87 100644
--- a/opends/tests/staf-tests/functional-tests/testcases/indexes/before-add.filters
+++ b/opends/tests/staf-tests/functional-tests/testcases/indexes/before-add.filters
@@ -21,16 +21,16 @@
# CDDL HEADER END
#
#
-# Copyright 2007-2009 Sun Microsystems, Inc.
+# Copyright 2007-2008 Sun Microsystems, Inc.
#
-uid subString uid=j* 0 2 INDEXED
-uid subString (uid=j*) 0 2 INDEXED
-l presence l=* 0 11 NOT-INDEXED
-l presence (l=*) 0 11 NOT-INDEXED
-l equality l=Cupertino 0 11 NOT-INDEXED
-l equality (l=Cupertino) 0 11 NOT-INDEXED
-l approximate (l~=ertino) 0 11 NOT-INDEXED
-l substring (l=Cup*) 0 11 NOT-INDEXED
-l substring l=Cup* 0 11 NOT-INDEXED
-l substring l=*tino 0 11 NOT-INDEXED
-l substring (l=*tino) 0 11 NOT-INDEXED
+uid subString uid=j* 0 INDEXED
+uid subString (uid=j*) 0 INDEXED
+l presence l=* 0 NOT-INDEXED
+l presence (l=*) 0 NOT-INDEXED
+l equality l=Cupertino 0 NOT-INDEXED
+l equality (l=Cupertino) 0 NOT-INDEXED
+l approximate (l~=ertino) 0 NOT-INDEXED
+l substring (l=Cup*) 0 NOT-INDEXED
+l substring l=Cup* 0 NOT-INDEXED
+l substring l=*tino 0 NOT-INDEXED
+l substring (l=*tino) 0 NOT-INDEXED
diff --git a/opends/tests/staf-tests/functional-tests/testcases/indexes/before-modify.filters b/opends/tests/staf-tests/functional-tests/testcases/indexes/before-modify.filters
index 93dd00c..ee2695b 100644
--- a/opends/tests/staf-tests/functional-tests/testcases/indexes/before-modify.filters
+++ b/opends/tests/staf-tests/functional-tests/testcases/indexes/before-modify.filters
@@ -21,9 +21,9 @@
# CDDL HEADER END
#
#
-# Copyright 2007-2009 Sun Microsystems, Inc.
+# Copyright 2007-2008 Sun Microsystems, Inc.
#
-uid subString uid=j* 0 2 INDEXED
-uid subString (uid=j*) 0 2 INDEXED
-uid subString uid=*allace 0 11 NOT-INDEXED
-uid subString (uid=*allace) 0 11 NOT-INDEXED
+uid subString uid=j* 0 INDEXED
+uid subString (uid=j*) 0 INDEXED
+uid subString uid=*allace 0 NOT-INDEXED
+uid subString (uid=*allace) 0 NOT-INDEXED
diff --git a/opends/tests/staf-tests/functional-tests/testcases/indexes/before-remove.filters b/opends/tests/staf-tests/functional-tests/testcases/indexes/before-remove.filters
index 89e83e2..c30325c 100644
--- a/opends/tests/staf-tests/functional-tests/testcases/indexes/before-remove.filters
+++ b/opends/tests/staf-tests/functional-tests/testcases/indexes/before-remove.filters
@@ -21,16 +21,16 @@
# CDDL HEADER END
#
#
-# Copyright 2007-2009 Sun Microsystems, Inc.
+# Copyright 2007-2008 Sun Microsystems, Inc.
#
-uid subString uid=j* 0 2 INDEXED
-uid subString (uid=j*) 0 2 INDEXED
-l presence l=* 0 10 INDEXED
-l presence (l=*) 0 10 INDEXED
-l equality l=Cupertino 0 3 INDEXED
-l equality (l=Cupertino) 0 3 INDEXED
-l approximate (l~=ertino) 0 11 NOT-INDEXED
-l substring (l=Cup*) 0 3 INDEXED
-l substring l=Cup* 0 3 INDEXED
-l substring l=*tino 0 11 NOT-INDEXED
-l substring (l=*tino) 0 11 NOT-INDEXED
+uid subString uid=j* 0 INDEXED
+uid subString (uid=j*) 0 INDEXED
+l presence l=* 0 INDEXED
+l presence (l=*) 0 INDEXED
+l equality l=Cupertino 0 INDEXED
+l equality (l=Cupertino) 0 INDEXED
+l approximate (l~=ertino) 0 NOT-INDEXED
+l substring (l=Cup*) 0 INDEXED
+l substring l=Cup* 0 INDEXED
+l substring l=*tino 0 NOT-INDEXED
+l substring (l=*tino) 0 NOT-INDEXED
diff --git a/opends/tests/staf-tests/functional-tests/testcases/indexes/indexes.xml b/opends/tests/staf-tests/functional-tests/testcases/indexes/indexes.xml
index 38a462f..646990c 100644
--- a/opends/tests/staf-tests/functional-tests/testcases/indexes/indexes.xml
+++ b/opends/tests/staf-tests/functional-tests/testcases/indexes/indexes.xml
@@ -23,7 +23,7 @@
!
! CDDL HEADER END
!
- ! Copyright 2007-2009 Sun Microsystems, Inc.
+ ! Copyright 2007-2008 Sun Microsystems, Inc.
! -->
<stax>
<defaultcall function="main_indexes" />
@@ -643,12 +643,11 @@
class indexTest:
"Describes an index test with indexed attribute, filter to test with \
and expected behaviour"
- def __init__(self, attribute,testName,filter,expectedValue,countEntries,isIndexed):
+ def __init__(self, attribute,testName,filter,expectedValue,isIndexed):
self.attribute = attribute
self.name = testName
self.filter = filter
self.rc = expectedValue
- self.count = countEntries
self.isIndexed=re.compile(r'[\r\n]').sub('',isIndexed)
self.status='fail'
@@ -663,9 +662,6 @@
def getRC(self):
return self.rc
-
- def getCount(self):
- return self.count
def getSearchString(self):
if self.isIndexed.startswith('NOT'):
@@ -684,7 +680,6 @@
description += 'test:: attribute=[%s]\n' % self.attribute
description += 'test:: filter=[%s]\n' % self.filter
description += 'test:: rc=[%s]\n' % self.rc
- description += 'test:: count=[%s]\n' % self.count
description += 'test:: indexed=[%s]\n' % self.isIndexed
return description
@@ -697,7 +692,7 @@
else:
testLine = line.split(' ')
indexTests.append(indexTest(testLine[0], testLine[1], testLine[2],
- testLine[3], testLine[4], testLine[5]))
+ testLine[3], testLine[4]))
f.close()
indexTestNumber=0
@@ -731,7 +726,6 @@
'dsBaseDN' : 'ou=People,dc=example,%s' \
% DIRECTORY_INSTANCE_SFX ,
'dsFilter' : '%s' % test.getFilter(),
- 'extraParams' : '--countEntries' ,
'attributes' : 'debugsearchindex',
'expectedRC' : 'noCheck'
}
@@ -755,15 +749,6 @@
% (test.desc(), searchReturnCode, searchResultString, srt,
test.getSearchString())
</message>
-
- <call function="'searchString'">
- {
- 'expectedString' : '# Total number of matching entries: %s' % test.getCount() ,
- 'returnString' : searchResultString ,
- 'expectedRC' : 0
- }
- </call>
-
<tcstatus result="test.getStatus()" />
<call function="'testCase_Postamble'" />
<script>
diff --git a/opends/tests/staf-tests/functional-tests/testcases/indexes/search.filters b/opends/tests/staf-tests/functional-tests/testcases/indexes/search.filters
index 16da0f1..5cd4def 100644
--- a/opends/tests/staf-tests/functional-tests/testcases/indexes/search.filters
+++ b/opends/tests/staf-tests/functional-tests/testcases/indexes/search.filters
@@ -21,187 +21,187 @@
# CDDL HEADER END
#
#
-# Copyright 2007-2009 Sun Microsystems, Inc.
+# Copyright 2007-2008 Sun Microsystems, Inc.
#
-uid presence uid=* 0 1 NOT-INDEXED
-uid presence UID=* 0 11 NOT-INDEXED
-uid presence uId=* 0 11 NOT-INDEXED
-uid presence UiD=* 0 11 NOT-INDEXED
-uid equality uid=jwallace 0 1 INDEXED
-uid equality (uid=jwallace) 0 1 INDEXED
-uid equality (&(uid=jwallace)) 0 1 INDEXED
-uid equality (|(uid=jwallace)) 0 1 INDEXED
-uid equality (&(&(uid=jwallace))) 0 1 INDEXED
-uid equality (&(|(uid=jwallace))) 0 1 INDEXED
-uid equality (|(&(uid=jwallace))) 0 1 INDEXED
-uid equality (|(|(uid=jwallace))) 0 1 INDEXED
-uid equality (|(|(uid=jwallace))) 0 1 INDEXED
-uid substring uid=j* 0 2 INDEXED
-uid substring (uid=j*) 0 2 INDEXED
-uid substring uid=*allace 0 11 NOT-INDEXED
-uid substring (uid=*allace) 0 11 NOT-INDEXED
-uid substring (&(uid=*allace)) 0 11 NOT-INDEXED
-uid substring (|(uid=*allace)) 0 11 NOT-INDEXED
-uid substring (&(&(uid=*allace))) 0 11 NOT-INDEXED
-uid substring (&(|(uid=*allace))) 0 11 NOT-INDEXED
-uid substring (|(&(uid=*allace))) 0 11 NOT-INDEXED
-uid substring (|(|(uid=*allace))) 0 11 NOT-INDEXED
-uid substring uid=jw*ce 0 2 INDEXED
-uid substring (uid=jw*ce) 0 2 INDEXED
-uid approximate uid~=wallace 0 11 NOT-INDEXED
-uid approximate uid~=jwalace 0 11 NOT-INDEXED
-uid negate !(uid=jwallace) 0 11 NOT-INDEXED
-uid negate (!(uid=jwallace)) 0 11 NOT-INDEXED
-uid negate (!(&(uid=jwallace))) 0 11 NOT-INDEXED
-uid negate (!(|(uid=jwallace))) 0 11 NOT-INDEXED
-uid complexAnd (uid=j*&l=sunnyvale) 0 2 INDEXED
-uid complexAnd &(uid=j*)(l=sunnyvale) 0 2 NOT-INDEXED
-uid complexAnd (&(uid=j*)(l=~sunyvale)) 0 2 NOT-INDEXED
-uid complexAnd (&(&(uid=j*)(l=~sunyvale))) 0 2 NOT-INDEXED
-uid complexAnd (uid=j*&!l=cupertino) 0 2 INDEXED
-uid complexAnd (uid=j*&l=sun*) 0 2 INDEXED
-uid complexAnd (&(uid=j*)(l=sun*)) 0 2 INDEXED
-uid complexOr (uid=jwallace|uid=jwalker) 0 0 INDEXED
-uid complexOr (uid=jwallace|l=Sun*) 0 0 INDEXED
-uid complexOr (uid=jwallace|l=~unnyvale) 0 0 INDEXED
-uid complexOr (uid=jwallace|!l=Cupertino) 0 0 INDEXED
-uid complexOr (uid=jwallace|!l=Cuper*) 0 0 INDEXED
-uid complexOr (uid=j*|l=sunnyvale) 0 2 INDEXED
-uid complexOr (uid=j*|!l=Cupertino) 0 2 INDEXED
-uid complexOr (uid=j*|!l=Cuper*) 0 2 INDEXED
-uid complexOr (uid=j*|!l~=Cuperino) 0 2 INDEXED
-uid complexOr (uid=j*|l~=sunyvale) 0 2 INDEXED
-uid complexOr (|(uid=j*)(l=sunnyvale)) 0 11 INDEXED
-uid complexOr (|(&(uid=j*)(uid=*lace))) 0 2 INDEXED
-sn presence sn=* 0 11 NOT-INDEXED
-sn presence SN=* 0 11 NOT-INDEXED
-sn presence sN=* 0 11 NOT-INDEXED
-sn presence Sn=* 0 11 NOT-INDEXED
-sn equality sn=Bergin 0 1 INDEXED
-sn equality (sn=Bergin) 0 1 INDEXED
-sn substring sn=Ber* 0 1 INDEXED
-sn substring (sn=Ber*) 0 1 INDEXED
-sn substring sn=*ergin 0 1 INDEXED
-sn substring (sn=*ergin) 0 1 INDEXED
-sn substring sn=*ergi* 0 1 INDEXED
-sn substring (sn=*ergi*) 0 1 INDEXED
-sn approximate sn~=begin 0 11 NOT-INDEXED
-sn approximate (sn~=begin) 0 11 NOT-INDEXED
-mail presence mail=* 0 11 NOT-INDEXED
-mail presence Mail=* 0 11 NOT-INDEXED
-mail presence MAIL=* 0 11 NOT-INDEXED
-mail presence mAiL=* 0 11 NOT-INDEXED
-mail equality mail=kvaughan@example.com 0 1 INDEXED
-mail equality (mail=kvaughan@example.com) 0 1 INDEXED
-mail substring mail=kvaughan* 0 1 INDEXED
-mail substring (mail=kvaughan*) 0 1 INDEXED
-mail substring mail=*aughan@example.com 0 10 INDEXED
-mail substring (mail=*aughan@example.com) 0 10 INDEXED
-mail substring mail=*aughan@example.* 0 10 INDEXED
-mail substring (mail=*aughan@example.*) 0 10 INDEXED
-givenName presence givenName=* 0 11 NOT-INDEXED
-givenName presence (givenName=*) 0 11 NOT-INDEXED
-givenName presence givenname=* 0 11 NOT-INDEXED
-givenName presence (givenname=*) 0 11 NOT-INDEXED
-givenName presence GIVENNAME=* 0 11 NOT-INDEXED
-givenName presence (GIVENNAME=*) 0 11 NOT-INDEXED
-givenName presence GivenName=* 0 11 NOT-INDEXED
-givenName presence (GivenName=*) 0 11 NOT-INDEXED
-givenName presence GiVeNnaMe=* 0 11 NOT-INDEXED
-givenName presence (GiVeNnaMe=*) 0 11 NOT-INDEXED
-givenName presence gIvEnNaMe=* 0 11 NOT-INDEXED
-givenName presence (gIvEnNaMe=*) 0 11 NOT-INDEXED
-givenName equality givenName=kirsten 0 1 INDEXED
-givenName equality (givenName=kirsten) 0 1 INDEXED
-givenName equality givenName=Kirsten 0 1 INDEXED
-givenName equality (givenName=Kirsten) 0 1 INDEXED
-givenName equality givenname=kirsten 0 1 INDEXED
-givenName equality (givenname=kirsten) 0 1 INDEXED
-givenName equality givenname=KIRSTEN 0 1 INDEXED
-givenName equality (givenname=KIRSTEN) 0 1 INDEXED
-givenName equality GIVENNAME=kirsten 0 1 INDEXED
-givenName equality (GIVENNAME=kirsten) 0 1 INDEXED
-givenName equality GIVENNAME=KIRSTEN 0 1 INDEXED
-givenName equality (GIVENNAME=KIRSTEN) 0 1 INDEXED
-givenName equality gIvEnNaMe=kIrStEn 0 1 INDEXED
-givenName equality (gIvEnNaMe=kIrStEn) 0 1 INDEXED
-givenName substring givenName=kirst* 0 1 INDEXED
-givenName substring (givenName=kirst*) 0 1 INDEXED
-givenName substring GivenName=kirst* 0 1 INDEXED
-givenName substring (GivenName=kirst*) 0 1 INDEXED
-givenName substring givenname=kirst* 0 1 INDEXED
-givenName substring (givenname=kirst*) 0 1 INDEXED
-givenName substring GIVENNAME=kirst* 0 1 INDEXED
-givenName substring (GIVENNAME=kirst*) 0 1 INDEXED
-givenName substring givenName=*rsten 0 1 INDEXED
-givenName substring (givenName=*rsten) 0 1 INDEXED
-givenName substring GivenName=*rsten 0 1 INDEXED
-givenName substring (GivenName=*rsten) 0 1 INDEXED
-givenName substring givenname=*rsten 0 1 INDEXED
-givenName substring (givenname=*rsten) 0 1 INDEXED
-givenName substring givenName=*rste* 0 1 INDEXED
-givenName substring (givenName=*rste*) 0 1 INDEXED
-givenName substring GivenName=*rste* 0 1 INDEXED
-givenName substring (GivenName=*rste*) 0 1 INDEXED
-givenName substring GIVENNAME=*rste* 0 1 INDEXED
-givenName substring (GIVENNAME=*rste*) 0 1 INDEXED
-cn presence cn=* 0 11 NOT-INDEXED
-cn presence (cn=*) 0 11 NOT-INDEXED
-cn presence CN=* 0 11 NOT-INDEXED
-cn presence (CN=*) 0 11 NOT-INDEXED
-cn presence Cn=* 0 11 NOT-INDEXED
-cn presence (Cn=*) 0 11 NOT-INDEXED
-cn substring cn=Andy* 0 1 INDEXED
-cn substring (cn=Andy*) 0 1 INDEXED
-cn substring cn=andy* 0 1 INDEXED
-cn substring (cn=andy*) 0 1 INDEXED
-cn substring CN=aNDY* 0 1 INDEXED
-cn substring (CN=aNDY*) 0 1 INDEXED
-cn substring cN=andy* 0 1 INDEXED
-cn substring (cN=andy*) 0 1 INDEXED
-cn substring cn=andy* 0 1 INDEXED
-cn substring cn=*ergin 0 1 INDEXED
-cn substring (cn=*ergin) 0 1 INDEXED
-cn substring cn=*Bergin 0 1 INDEXED
-cn substring (cn=*Bergin) 0 1 INDEXED
-cn substring cN=*Bergin 0 1 INDEXED
-cn substring (cN=*Bergin) 0 1 INDEXED
-cn substring cn=*bERGIN 0 1 INDEXED
-cn substring (cn=*bERGIN) 0 1 INDEXED
-cn substring CN=*bERGIN 0 1 INDEXED
-cn substring (CN=*bERGIN) 0 1 INDEXED
-cn substring (CN=*bERGIN) 0 1 INDEXED
-cn substring (cn=and*rgin) 0 1 INDEXED
-cn substring (cn=aN*bErGiN) 0 1 INDEXED
-telephoneNumber presence telephoneNumber=* 0 11 NOT-INDEXED
-telephoneNumber presence (telephoneNumber=*) 0 11 NOT-INDEXED
-telephoneNumber presence telephonenumber=* 0 11 NOT-INDEXED
-telephoneNumber presence (telephonenumber=*) 0 11 NOT-INDEXED
-telephoneNumber presence TelephoneNumber=* 0 11 NOT-INDEXED
-telephoneNumber presence (TelephoneNumber=*) 0 11 NOT-INDEXED
-telephoneNumber presence TELEPHONENUMBER=* 0 11 NOT-INDEXED
-telephoneNumber presence (TELEPHONENUMBER=*) 0 11 NOT-INDEXED
-telephoneNumber presence (&(TELEPHONENUMBER=*)) 0 11 NOT-INDEXED
-telephoneNumber presence (|(TELEPHONENUMBER=*)) 0 11 NOT-INDEXED
-telephoneNumber presence (&(&(TELEPHONENUMBER=*))) 0 11 NOT-INDEXED
-telephoneNumber presence (|(|(TELEPHONENUMBER=*))) 0 11 NOT-INDEXED
-telephoneNumber presence (&(|(TELEPHONENUMBER=*))) 0 11 NOT-INDEXED
-telephoneNumber presence (|(&(TELEPHONENUMBER=*))) 0 11 NOT-INDEXED
-telephoneNumber substring telephoneNumber=*8585 0 1 INDEXED
-telephoneNumber substring (telephoneNumber=*8585) 0 1 INDEXED
-telephoneNumber substring telephoneNumber=+1* 0 10 INDEXED
-telephoneNumber substring (telephoneNumber=+1*) 0 10 INDEXED
-telephoneNumber substring telephoneNumber=*408* 0 10 INDEXED
-telephoneNumber substring (telephoneNumber=*408*) 0 10 INDEXED
-telephoneNumber substring telephoneNumber=+1*8585 0 10 INDEXED
-telephoneNumber substring (telephoneNumber=+1*8585) 0 10 INDEXED
-telephoneNumber substring telephoneNumber=+1*08*8585 0 10 INDEXED
-telephoneNumber substring (telephoneNumber=+1*08*8585) 0 10 INDEXED
-telephoneNumber substring (&(telephoneNumber=+1*08*8585)) 0 10 INDEXED
-telephoneNumber substring (|(telephoneNumber=+1*08*8585)) 0 10 INDEXED
-telephoneNumber substring (&(&(telephoneNumber=+1*08*8585))) 0 10 INDEXED
-telephoneNumber substring (&(|(telephoneNumber=+1*08*8585))) 0 10 INDEXED
-telephoneNumber substring (|(&(telephoneNumber=+1*08*8585))) 0 10 INDEXED
-telephoneNumber substring (|(|(|(|(|(|(|(telephoneNumber=+1*08*8585)))))))) 0 10 INDEXED
-telephoneNumber substring (&(&(&(&(&(&(&(&(&(&(&(&(&(&(&(telephoneNumber=+1*08*8585)))))))))))))))) 0 10 INDEXED
-telephoneNumber substring (&(|(&(|(&(|(&(|(&(|(&(|(&(|(&(|(telephoneNumber=+1*08*8585))))))))))))))))) 0 10 INDEXED
+uid presence uid=* 0 NOT-INDEXED
+uid presence UID=* 0 NOT-INDEXED
+uid presence uId=* 0 NOT-INDEXED
+uid presence UiD=* 0 NOT-INDEXED
+uid equality uid=jwallace 0 INDEXED
+uid equality (uid=jwallace) 0 INDEXED
+uid equality (&(uid=jwallace)) 0 INDEXED
+uid equality (|(uid=jwallace)) 0 INDEXED
+uid equality (&(&(uid=jwallace))) 0 INDEXED
+uid equality (&(|(uid=jwallace))) 0 INDEXED
+uid equality (|(&(uid=jwallace))) 0 INDEXED
+uid equality (|(|(uid=jwallace))) 0 INDEXED
+uid equality (|(|(uid=jwallace))) 0 INDEXED
+uid substring uid=j* 0 INDEXED
+uid substring (uid=j*) 0 INDEXED
+uid substring uid=*allace 0 NOT-INDEXED
+uid substring (uid=*allace) 0 NOT-INDEXED
+uid substring (&(uid=*allace)) 0 NOT-INDEXED
+uid substring (|(uid=*allace)) 0 NOT-INDEXED
+uid substring (&(&(uid=*allace))) 0 NOT-INDEXED
+uid substring (&(|(uid=*allace))) 0 NOT-INDEXED
+uid substring (|(&(uid=*allace))) 0 NOT-INDEXED
+uid substring (|(|(uid=*allace))) 0 NOT-INDEXED
+uid substring uid=jw*ce 0 INDEXED
+uid substring (uid=jw*ce) 0 INDEXED
+uid approximate uid~=wallace 0 NOT-INDEXED
+uid approximate uid~=jwalace 0 NOT-INDEXED
+uid negate !(uid=jwallace) 0 NOT-INDEXED
+uid negate (!(uid=jwallace)) 0 NOT-INDEXED
+uid negate (!(&(uid=jwallace))) 0 NOT-INDEXED
+uid negate (!(|(uid=jwallace))) 0 NOT-INDEXED
+uid complexAnd (uid=j*&l=sunnyvale) 0 INDEXED
+uid complexAnd &(uid=j*)(l=sunnyvale) 0 NOT-INDEXED
+uid complexAnd (&(uid=j*)(l=~sunyvale)) 0 NOT-INDEXED
+uid complexAnd (&(&(uid=j*)(l=~sunyvale))) 0 NOT-INDEXED
+uid complexAnd (uid=j*&!l=cupertino) 0 INDEXED
+uid complexAnd (uid=j*&l=sun*) 0 INDEXED
+uid complexAnd (&(uid=j*)(l=sun*)) 0 INDEXED
+uid complexOr (uid=jwallace|uid=jwalker) 0 INDEXED
+uid complexOr (uid=jwallace|l=Sun*) 0 INDEXED
+uid complexOr (uid=jwallace|l=~unnyvale) 0 INDEXED
+uid complexOr (uid=jwallace|!l=Cupertino) 0 INDEXED
+uid complexOr (uid=jwallace|!l=Cuper*) 0 INDEXED
+uid complexOr (uid=j*|l=sunnyvale) 0 INDEXED
+uid complexOr (uid=j*|!l=Cupertino) 0 INDEXED
+uid complexOr (uid=j*|!l=Cuper*) 0 INDEXED
+uid complexOr (uid=j*|!l~=Cuperino) 0 INDEXED
+uid complexOr (uid=j*|l~=sunyvale) 0 INDEXED
+uid complexOr (|(uid=j*)(l=sunnyvale)) 0 INDEXED
+uid complexOr (|(&(uid=j*)(uid=*lace))) 0 INDEXED
+sn presence sn=* 0 NOT-INDEXED
+sn presence SN=* 0 NOT-INDEXED
+sn presence sN=* 0 NOT-INDEXED
+sn presence Sn=* 0 NOT-INDEXED
+sn equality sn=Bergin 0 INDEXED
+sn equality (sn=Bergin) 0 INDEXED
+sn substring sn=Ber* 0 INDEXED
+sn substring (sn=Ber*) 0 INDEXED
+sn substring sn=*ergin 0 INDEXED
+sn substring (sn=*ergin) 0 INDEXED
+sn substring sn=*ergi* 0 INDEXED
+sn substring (sn=*ergi*) 0 INDEXED
+sn approximate sn~=begin 0 NOT-INDEXED
+sn approximate (sn~=begin) 0 NOT-INDEXED
+mail presence mail=* 0 NOT-INDEXED
+mail presence Mail=* 0 NOT-INDEXED
+mail presence MAIL=* 0 NOT-INDEXED
+mail presence mAiL=* 0 NOT-INDEXED
+mail equality mail=kvaughan@example.com 0 INDEXED
+mail equality (mail=kvaughan@example.com) 0 INDEXED
+mail substring mail=kvaughan* 0 INDEXED
+mail substring (mail=kvaughan*) 0 INDEXED
+mail substring mail=*aughan@example.com 0 INDEXED
+mail substring (mail=*aughan@example.com) 0 INDEXED
+mail substring mail=*aughan@example.* 0 INDEXED
+mail substring (mail=*aughan@example.*) 0 INDEXED
+givenName presence givenName=* 0 NOT-INDEXED
+givenName presence (givenName=*) 0 NOT-INDEXED
+givenName presence givenname=* 0 NOT-INDEXED
+givenName presence (givenname=*) 0 NOT-INDEXED
+givenName presence GIVENNAME=* 0 NOT-INDEXED
+givenName presence (GIVENNAME=*) 0 NOT-INDEXED
+givenName presence GivenName=* 0 NOT-INDEXED
+givenName presence (GivenName=*) 0 NOT-INDEXED
+givenName presence GiVeNnaMe=* 0 NOT-INDEXED
+givenName presence (GiVeNnaMe=*) 0 NOT-INDEXED
+givenName presence gIvEnNaMe=* 0 NOT-INDEXED
+givenName presence (gIvEnNaMe=*) 0 NOT-INDEXED
+givenName equality givenName=kirsten 0 INDEXED
+givenName equality (givenName=kirsten) 0 INDEXED
+givenName equality givenName=Kirsten 0 INDEXED
+givenName equality (givenName=Kirsten) 0 INDEXED
+givenName equality givenname=kirsten 0 INDEXED
+givenName equality (givenname=kirsten) 0 INDEXED
+givenName equality givenname=KIRSTEN 0 INDEXED
+givenName equality (givenname=KIRSTEN) 0 INDEXED
+givenName equality GIVENNAME=kirsten 0 INDEXED
+givenName equality (GIVENNAME=kirsten) 0 INDEXED
+givenName equality GIVENNAME=KIRSTEN 0 INDEXED
+givenName equality (GIVENNAME=KIRSTEN) 0 INDEXED
+givenName equality gIvEnNaMe=kIrStEn 0 INDEXED
+givenName equality (gIvEnNaMe=kIrStEn) 0 INDEXED
+givenName substring givenName=kirst* 0 INDEXED
+givenName substring (givenName=kirst*) 0 INDEXED
+givenName substring GivenName=kirst* 0 INDEXED
+givenName substring (GivenName=kirst*) 0 INDEXED
+givenName substring givenname=kirst* 0 INDEXED
+givenName substring (givenname=kirst*) 0 INDEXED
+givenName substring GIVENNAME=kirst* 0 INDEXED
+givenName substring (GIVENNAME=kirst*) 0 INDEXED
+givenName substring givenName=*rsten 0 INDEXED
+givenName substring (givenName=*rsten) 0 INDEXED
+givenName substring GivenName=*rsten 0 INDEXED
+givenName substring (GivenName=*rsten) 0 INDEXED
+givenName substring givenname=*rsten 0 INDEXED
+givenName substring (givenname=*rsten) 0 INDEXED
+givenName substring givenName=*rste* 0 INDEXED
+givenName substring (givenName=*rste*) 0 INDEXED
+givenName substring GivenName=*rste* 0 INDEXED
+givenName substring (GivenName=*rste*) 0 INDEXED
+givenName substring GIVENNAME=*rste* 0 INDEXED
+givenName substring (GIVENNAME=*rste*) 0 INDEXED
+cn presence cn=* 0 NOT-INDEXED
+cn presence (cn=*) 0 NOT-INDEXED
+cn presence CN=* 0 NOT-INDEXED
+cn presence (CN=*) 0 NOT-INDEXED
+cn presence Cn=* 0 NOT-INDEXED
+cn presence (Cn=*) 0 NOT-INDEXED
+cn substring cn=Andy* 0 INDEXED
+cn substring (cn=Andy*) 0 INDEXED
+cn substring cn=andy* 0 INDEXED
+cn substring (cn=andy*) 0 INDEXED
+cn substring CN=aNDY* 0 INDEXED
+cn substring (CN=aNDY*) 0 INDEXED
+cn substring cN=andy* 0 INDEXED
+cn substring (cN=andy*) 0 INDEXED
+cn substring cn=andy* 0 INDEXED
+cn substring cn=*ergin 0 INDEXED
+cn substring (cn=*ergin) 0 INDEXED
+cn substring cn=*Bergin 0 INDEXED
+cn substring (cn=*Bergin) 0 INDEXED
+cn substring cN=*Bergin 0 INDEXED
+cn substring (cN=*Bergin) 0 INDEXED
+cn substring cn=*bERGIN 0 INDEXED
+cn substring (cn=*bERGIN) 0 INDEXED
+cn substring CN=*bERGIN 0 INDEXED
+cn substring (CN=*bERGIN) 0 INDEXED
+cn substring (CN=*bERGIN) 0 INDEXED
+cn substring (cn=and*rgin) 0 INDEXED
+cn substring (cn=aN*bErGiN) 0 INDEXED
+telephoneNumber presence telephoneNumber=* 0 NOT-INDEXED
+telephoneNumber presence (telephoneNumber=*) 0 NOT-INDEXED
+telephoneNumber presence telephonenumber=* 0 NOT-INDEXED
+telephoneNumber presence (telephonenumber=*) 0 NOT-INDEXED
+telephoneNumber presence TelephoneNumber=* 0 NOT-INDEXED
+telephoneNumber presence (TelephoneNumber=*) 0 NOT-INDEXED
+telephoneNumber presence TELEPHONENUMBER=* 0 NOT-INDEXED
+telephoneNumber presence (TELEPHONENUMBER=*) 0 NOT-INDEXED
+telephoneNumber presence (&(TELEPHONENUMBER=*)) 0 NOT-INDEXED
+telephoneNumber presence (|(TELEPHONENUMBER=*)) 0 NOT-INDEXED
+telephoneNumber presence (&(&(TELEPHONENUMBER=*))) 0 NOT-INDEXED
+telephoneNumber presence (|(|(TELEPHONENUMBER=*))) 0 NOT-INDEXED
+telephoneNumber presence (&(|(TELEPHONENUMBER=*))) 0 NOT-INDEXED
+telephoneNumber presence (|(&(TELEPHONENUMBER=*))) 0 NOT-INDEXED
+telephoneNumber substring telephoneNumber=*8585 0 INDEXED
+telephoneNumber substring (telephoneNumber=*8585) 0 INDEXED
+telephoneNumber substring telephoneNumber=+1* 0 INDEXED
+telephoneNumber substring (telephoneNumber=+1*) 0 INDEXED
+telephoneNumber substring telephoneNumber=*408* 0 INDEXED
+telephoneNumber substring (telephoneNumber=*408*) 0 INDEXED
+telephoneNumber substring telephoneNumber=+1*8585 0 INDEXED
+telephoneNumber substring (telephoneNumber=+1*8585) 0 INDEXED
+telephoneNumber substring telephoneNumber=+1*08*8585 0 INDEXED
+telephoneNumber substring (telephoneNumber=+1*08*8585) 0 INDEXED
+telephoneNumber substring (&(telephoneNumber=+1*08*8585)) 0 INDEXED
+telephoneNumber substring (|(telephoneNumber=+1*08*8585)) 0 INDEXED
+telephoneNumber substring (&(&(telephoneNumber=+1*08*8585))) 0 INDEXED
+telephoneNumber substring (&(|(telephoneNumber=+1*08*8585))) 0 INDEXED
+telephoneNumber substring (|(&(telephoneNumber=+1*08*8585))) 0 INDEXED
+telephoneNumber substring (|(|(|(|(|(|(|(telephoneNumber=+1*08*8585)))))))) 0 INDEXED
+telephoneNumber substring (&(&(&(&(&(&(&(&(&(&(&(&(&(&(&(telephoneNumber=+1*08*8585)))))))))))))))) 0 INDEXED
+telephoneNumber substring (&(|(&(|(&(|(&(|(&(|(&(|(&(|(&(|(telephoneNumber=+1*08*8585))))))))))))))))) 0 INDEXED
diff --git a/opends/tests/staf-tests/functional-tests/testcases/replication/conflict/conflict.xml b/opends/tests/staf-tests/functional-tests/testcases/replication/conflict/conflict.xml
index 9109281..46553c3 100644
--- a/opends/tests/staf-tests/functional-tests/testcases/replication/conflict/conflict.xml
+++ b/opends/tests/staf-tests/functional-tests/testcases/replication/conflict/conflict.xml
@@ -142,8 +142,8 @@
<!-- Add entry to server1 -->
<script>
- entry = Entry('uid=tuser-0')
- entry.addAttr('employeeNumber', '0')
+ myEntry = Entry('uid=tuser-0')
+ myEntry.addAttr('employeeNumber', '0')
</script>
<call function="'addAnEntry'">
{ 'location' : server1Host,
@@ -152,8 +152,8 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'DNToAdd' : entry.getDn(),
- 'listAttributes' : entry.getAttrList()
+ 'DNToAdd' : myEntry.getDn(),
+ 'listAttributes' : myEntry.getAttrList()
}
</call>
@@ -173,7 +173,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'DNToModify' : entry.getDn(),
+ 'DNToModify' : myEntry.getDn(),
'attributeName' : 'employeeNumber',
'newAttributeValue' : '%i' % (i + 1),
'changetype' : 'replace'
@@ -191,7 +191,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'employeeNumber',
'logStderr' : False
@@ -228,7 +228,7 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'dsDn' : [entry.getDn()]
+ 'dsDn' : [myEntry.getDn()]
}
</call>
@@ -265,9 +265,9 @@
<!-- Add entry to server1 -->
<script>
- entry = Entry('cn=A1')
- entry.addAttr('description', '1')
- entry.addAttr('description', '2')
+ myEntry = Entry('cn=A1')
+ myEntry.addAttr('description', '1')
+ myEntry.addAttr('description', '2')
server1mods = ['description:3', 'description:4']
server2mods = ['description:5', 'description:6']
mods = [server1mods, server2mods]
@@ -279,8 +279,8 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'DNToAdd' : entry.getDn(),
- 'listAttributes' : entry.getAttrList()
+ 'DNToAdd' : myEntry.getDn(),
+ 'listAttributes' : myEntry.getAttrList()
}
</call>
@@ -301,7 +301,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'DNToModify' : entry.getDn(),
+ 'DNToModify' : myEntry.getDn(),
'listAttributes' : mods[i],
'changetype' : 'replace'
}
@@ -319,7 +319,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description',
'logStderr' : False
@@ -357,7 +357,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description',
'logStderr' : False
@@ -393,7 +393,7 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'dsDn' : [entry.getDn()]
+ 'dsDn' : [myEntry.getDn()]
}
</call>
@@ -428,8 +428,8 @@
<!-- Add entry to server1 -->
<script>
- entry = Entry('cn=A4')
- entry.addAttr('employeeNumber', '0')
+ myEntry = Entry('cn=A4')
+ myEntry.addAttr('employeeNumber', '0')
</script>
<call function="'addAnEntry'">
{ 'location' : server1Host,
@@ -438,8 +438,8 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'DNToAdd' : entry.getDn(),
- 'listAttributes' : entry.getAttrList()
+ 'DNToAdd' : myEntry.getDn(),
+ 'listAttributes' : myEntry.getAttrList()
}
</call>
@@ -460,7 +460,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'DNToModify' : entry.getDn(),
+ 'DNToModify' : myEntry.getDn(),
'attributeName' : 'employeeNumber',
'newAttributeValue' : '%i' % (i + 1),
'changetype' : 'replace'
@@ -479,7 +479,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'employeeNumber',
'logStderr' : False
@@ -517,7 +517,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'employeeNumber',
'logStderr' : False
@@ -553,7 +553,7 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'dsDn' : [entry.getDn()]
+ 'dsDn' : [myEntry.getDn()]
}
</call>
@@ -593,9 +593,9 @@
<!-- Add entry to server1 -->
<script>
- entry = Entry('cn=A2')
+ myEntry = Entry('cn=A2')
for x in range(10):
- entry.addAttr('description', '%i' % (x+1))
+ myEntry.addAttr('description', '%i' % (x+1))
server1del = ['description:1']
server1add = ['description:11']
server2del = ['description:1']
@@ -611,8 +611,8 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'DNToAdd' : entry.getDn(),
- 'listAttributes' : entry.getAttrList()
+ 'DNToAdd' : myEntry.getDn(),
+ 'listAttributes' : myEntry.getAttrList()
}
</call>
@@ -634,7 +634,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'DNToModify' : entry.getDn(),
+ 'DNToModify' : myEntry.getDn(),
'listAttributes' : mods[i][0],
'changetype' : 'delete'
}
@@ -647,7 +647,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'DNToModify' : entry.getDn(),
+ 'DNToModify' : myEntry.getDn(),
'listAttributes' : mods[i][1],
'changetype' : 'add'
}
@@ -666,7 +666,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description',
'logStderr' : False
@@ -704,7 +704,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description',
'logStderr' : False
@@ -740,7 +740,7 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'dsDn' : [entry.getDn()]
+ 'dsDn' : [myEntry.getDn()]
}
</call>
@@ -780,9 +780,9 @@
<!-- Add entry to server1 -->
<script>
- entry = Entry('cn=A3')
+ myEntry = Entry('cn=A3')
for x in range(10):
- entry.addAttr('description', '%i' % (x+1))
+ myEntry.addAttr('description', '%i' % (x+1))
server1del = ['description:1']
server1add = ['description:11']
server2del = ['description:10']
@@ -798,8 +798,8 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'DNToAdd' : entry.getDn(),
- 'listAttributes' : entry.getAttrList()
+ 'DNToAdd' : myEntry.getDn(),
+ 'listAttributes' : myEntry.getAttrList()
}
</call>
@@ -821,7 +821,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'DNToModify' : entry.getDn(),
+ 'DNToModify' : myEntry.getDn(),
'listAttributes' : mods[i][0],
'changetype' : 'delete'
}
@@ -834,7 +834,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'DNToModify' : entry.getDn(),
+ 'DNToModify' : myEntry.getDn(),
'listAttributes' : mods[i][1],
'changetype' : 'add'
}
@@ -853,7 +853,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description',
'logStderr' : False
@@ -891,7 +891,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description',
'logStderr' : False
@@ -927,7 +927,7 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'dsDn' : [entry.getDn()]
+ 'dsDn' : [myEntry.getDn()]
}
</call>
@@ -963,7 +963,7 @@
<!-- Add entry to server1 -->
<script>
- entry = Entry('cn=B1')
+ myEntry = Entry('cn=B1')
server1add = ['description:1']
server2add = ['description:1', 'description:2']
server1mods = [server1add]
@@ -977,8 +977,8 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'DNToAdd' : entry.getDn(),
- 'listAttributes' : entry.getAttrList()
+ 'DNToAdd' : myEntry.getDn(),
+ 'listAttributes' : myEntry.getAttrList()
}
</call>
@@ -1000,7 +1000,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'DNToModify' : entry.getDn(),
+ 'DNToModify' : myEntry.getDn(),
'listAttributes' : mods[i][0],
'changetype' : 'add'
}
@@ -1019,7 +1019,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description',
'logStderr' : False
@@ -1057,7 +1057,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description',
'logStderr' : False
@@ -1093,7 +1093,7 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'dsDn' : [entry.getDn()]
+ 'dsDn' : [myEntry.getDn()]
}
</call>
@@ -1129,7 +1129,7 @@
<!-- Add entry to server1 -->
<script>
- entry = Entry('cn=B2')
+ myEntry = Entry('cn=B2')
server1add = ['employeeNumber:1']
server2add = ['employeeNumber:2']
server1mods = [server1add]
@@ -1143,8 +1143,8 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'DNToAdd' : entry.getDn(),
- 'listAttributes' : entry.getAttrList()
+ 'DNToAdd' : myEntry.getDn(),
+ 'listAttributes' : myEntry.getAttrList()
}
</call>
@@ -1166,7 +1166,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'DNToModify' : entry.getDn(),
+ 'DNToModify' : myEntry.getDn(),
'listAttributes' : mods[i][0],
'changetype' : 'add'
}
@@ -1185,7 +1185,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'employeeNumber',
'logStderr' : False
@@ -1223,7 +1223,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'employeeNumber',
'logStderr' : False
@@ -1259,7 +1259,7 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'dsDn' : [entry.getDn()]
+ 'dsDn' : [myEntry.getDn()]
}
</call>
@@ -1296,9 +1296,9 @@
<!-- Add entry to server1 -->
<script>
- entry = Entry('cn=C1')
+ myEntry = Entry('cn=C1')
for x in range(10):
- entry.addAttr('description', '%i' % (x+1))
+ myEntry.addAttr('description', '%i' % (x+1))
server1del = []
for y in range(1,6):
server1del.append('description:%i' % y)
@@ -1316,8 +1316,8 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'DNToAdd' : entry.getDn(),
- 'listAttributes' : entry.getAttrList()
+ 'DNToAdd' : myEntry.getDn(),
+ 'listAttributes' : myEntry.getAttrList()
}
</call>
@@ -1339,7 +1339,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'DNToModify' : entry.getDn(),
+ 'DNToModify' : myEntry.getDn(),
'listAttributes' : mods[i][0],
'changetype' : 'delete'
}
@@ -1358,7 +1358,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description',
'logStderr' : False
@@ -1396,7 +1396,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description',
'logStderr' : False
@@ -1432,7 +1432,7 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'dsDn' : [entry.getDn()]
+ 'dsDn' : [myEntry.getDn()]
}
</call>
@@ -1469,8 +1469,8 @@
<!-- Add entry to server1 -->
<script>
- entry = Entry('cn=C2')
- entry.addAttr('employeeNumber', '1')
+ myEntry = Entry('cn=C2')
+ myEntry.addAttr('employeeNumber', '1')
server1del = ['employeeNumber:']
server2del = ['employeeNumber:1']
server1mods = [server1del]
@@ -1484,8 +1484,8 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'DNToAdd' : entry.getDn(),
- 'listAttributes' : entry.getAttrList()
+ 'DNToAdd' : myEntry.getDn(),
+ 'listAttributes' : myEntry.getAttrList()
}
</call>
@@ -1507,7 +1507,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'DNToModify' : entry.getDn(),
+ 'DNToModify' : myEntry.getDn(),
'listAttributes' : mods[i][0],
'changetype' : 'delete'
}
@@ -1526,7 +1526,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'employeeNumber',
'logStderr' : False
@@ -1564,7 +1564,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'employeeNumber',
'logStderr' : False
@@ -1600,7 +1600,7 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'dsDn' : [entry.getDn()]
+ 'dsDn' : [myEntry.getDn()]
}
</call>
@@ -1641,9 +1641,9 @@
<!-- Add entry to server1 -->
<script>
- entry = Entry('cn=D1')
- entry.addAttr('description', '1')
- entry.addAttr('telephoneNumber', '1')
+ myEntry = Entry('cn=D1')
+ myEntry.addAttr('description', '1')
+ myEntry.addAttr('telephoneNumber', '1')
server1add = ['description:2']
server1del = ['telephoneNumber:']
server2del = ['description:']
@@ -1662,8 +1662,8 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'DNToAdd' : entry.getDn(),
- 'listAttributes' : entry.getAttrList()
+ 'DNToAdd' : myEntry.getDn(),
+ 'listAttributes' : myEntry.getAttrList()
}
</call>
@@ -1685,7 +1685,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'DNToModify' : entry.getDn(),
+ 'DNToModify' : myEntry.getDn(),
'listAttributes' : mods[i][0],
'changetype' : changetypes[i][0]
}
@@ -1698,7 +1698,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'DNToModify' : entry.getDn(),
+ 'DNToModify' : myEntry.getDn(),
'listAttributes' : mods[i][1],
'changetype' : changetypes[i][1]
}
@@ -1717,7 +1717,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description telephoneNumber',
'logStderr' : False
@@ -1755,7 +1755,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description telephoneNumber',
'logStderr' : False
@@ -1791,7 +1791,7 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'dsDn' : [entry.getDn()]
+ 'dsDn' : [myEntry.getDn()]
}
</call>
@@ -1829,8 +1829,8 @@
<!-- Add entry to server1 -->
<script>
- entry = Entry('cn=E1')
- entry.addAttr('description', '1')
+ myEntry = Entry('cn=E1')
+ myEntry.addAttr('description', '1')
server1add = ['description:2', 'description:3']
server2replace = ['description:4', 'description:5']
server1mods = [server1add]
@@ -1847,8 +1847,8 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'DNToAdd' : entry.getDn(),
- 'listAttributes' : entry.getAttrList()
+ 'DNToAdd' : myEntry.getDn(),
+ 'listAttributes' : myEntry.getAttrList()
}
</call>
@@ -1870,7 +1870,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'DNToModify' : entry.getDn(),
+ 'DNToModify' : myEntry.getDn(),
'listAttributes' : mods[i][0],
'changetype' : changetypes[i][0]
}
@@ -1889,7 +1889,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description',
'logStderr' : False
@@ -1927,7 +1927,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description',
'logStderr' : False
@@ -1963,7 +1963,7 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'dsDn' : [entry.getDn()]
+ 'dsDn' : [myEntry.getDn()]
}
</call>
@@ -2001,8 +2001,8 @@
<!-- Add entry to server1 -->
<script>
- entry = Entry('cn=E2')
- entry.addAttr('description', '1')
+ myEntry = Entry('cn=E2')
+ myEntry.addAttr('description', '1')
server1replace = ['description:2', 'description:3']
server2add = ['description:4', 'description:5']
server1mods = [server1replace]
@@ -2019,8 +2019,8 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'DNToAdd' : entry.getDn(),
- 'listAttributes' : entry.getAttrList()
+ 'DNToAdd' : myEntry.getDn(),
+ 'listAttributes' : myEntry.getAttrList()
}
</call>
@@ -2042,7 +2042,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'DNToModify' : entry.getDn(),
+ 'DNToModify' : myEntry.getDn(),
'listAttributes' : mods[i][0],
'changetype' : changetypes[i][0]
}
@@ -2061,7 +2061,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description',
'logStderr' : False
@@ -2099,7 +2099,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description',
'logStderr' : False
@@ -2135,7 +2135,7 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'dsDn' : [entry.getDn()]
+ 'dsDn' : [myEntry.getDn()]
}
</call>
@@ -2174,9 +2174,9 @@
<!-- Add entry to server1 -->
<script>
- entry = Entry('cn=F1')
+ myEntry = Entry('cn=F1')
for x in range(4):
- entry.addAttr('description', '%i' % (x+1))
+ myEntry.addAttr('description', '%i' % (x+1))
server1del = ['description:2', 'description:3']
server2replace = []
for y in range(6,11):
@@ -2195,8 +2195,8 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'DNToAdd' : entry.getDn(),
- 'listAttributes' : entry.getAttrList()
+ 'DNToAdd' : myEntry.getDn(),
+ 'listAttributes' : myEntry.getAttrList()
}
</call>
@@ -2218,7 +2218,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'DNToModify' : entry.getDn(),
+ 'DNToModify' : myEntry.getDn(),
'listAttributes' : mods[i][0],
'changetype' : changetypes[i][0]
}
@@ -2237,7 +2237,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description',
'logStderr' : False
@@ -2275,7 +2275,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description',
'logStderr' : False
@@ -2311,7 +2311,7 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'dsDn' : [entry.getDn()]
+ 'dsDn' : [myEntry.getDn()]
}
</call>
@@ -2350,9 +2350,9 @@
<!-- Add entry to server1 -->
<script>
- entry = Entry('cn=F2')
+ myEntry = Entry('cn=F2')
for x in range(4):
- entry.addAttr('description', '%i' % (x+1))
+ myEntry.addAttr('description', '%i' % (x+1))
server1replace = ['description:1', 'description:2',
'description:3']
server2del = ['description:3', 'description:4']
@@ -2370,8 +2370,8 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'DNToAdd' : entry.getDn(),
- 'listAttributes' : entry.getAttrList()
+ 'DNToAdd' : myEntry.getDn(),
+ 'listAttributes' : myEntry.getAttrList()
}
</call>
@@ -2393,7 +2393,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'DNToModify' : entry.getDn(),
+ 'DNToModify' : myEntry.getDn(),
'listAttributes' : mods[i][0],
'changetype' : changetypes[i][0]
}
@@ -2412,7 +2412,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description',
'logStderr' : False
@@ -2450,7 +2450,7 @@
'dsInstancePort' : server.getPort(),
'dsInstanceDn' : server.getRootDn(),
'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : entry.getDn(),
+ 'dsBaseDN' : myEntry.getDn(),
'dsFilter' : 'objectclass=*',
'dsAttributes' : 'description',
'logStderr' : False
@@ -2486,7 +2486,7 @@
'dsInstancePort' : server1.getPort(),
'dsInstanceDn' : server1.getRootDn(),
'dsInstancePswd' : server1.getRootPwd(),
- 'dsDn' : [entry.getDn()]
+ 'dsDn' : [myEntry.getDn()]
}
</call>
@@ -2981,8 +2981,11 @@
<!-- Verify the synchronization of the trees among the servers in
the topology -->
+ <!-- If the trees don't match, we may have come across Issue 4071
+ (Replication conflict: delete parent, add child) -->
<call function="'verifyTrees'">
- [ clientHost, clientPath, server1, [server2], synchroSuffix ]
+ [ clientHost, clientPath, server1, [server2], synchroSuffix,
+ '4071' ]
</call>
<!-- Delete added entries -->
@@ -3536,7 +3539,6 @@
</testcase>
-
<import machine="STAF_LOCAL_HOSTNAME"
file="'%s/testcases/replication/replication_cleanup.xml'
% (TESTS_DIR)"/>
diff --git a/opends/tests/staf-tests/functional-tests/testcases/replication/replication_cleanup.xml b/opends/tests/staf-tests/functional-tests/testcases/replication/replication_cleanup.xml
index a96b4fd..7471a20 100644
--- a/opends/tests/staf-tests/functional-tests/testcases/replication/replication_cleanup.xml
+++ b/opends/tests/staf-tests/functional-tests/testcases/replication/replication_cleanup.xml
@@ -30,7 +30,16 @@
<defaultcall function="replication_cleanup"/>
<function name="replication_cleanup">
-
+ <function-map-args>
+ <function-arg-def name="suiteSuffix"
+ type="optional"
+ default="None">
+ <function-arg-description>
+ Test suite suffix used to copy the server logs back to the controller.
+ </function-arg-description>
+ <function-arg-property name="type" value="string"/>
+ </function-arg-def>
+ </function-map-args>
<sequence>
<block name="'replication-cleanup'">
@@ -41,8 +50,59 @@
<call function="'stopServers'">
[_topologyServerList]
</call>
-
- <!-- Remove the topology created for the test suite -->
+
+ <!-- Copy the server logs to the controller machine -->
+ <if expr="suiteSuffix != None">
+ <paralleliterate var="server" in="_topologyServerList" indexvar="i">
+ <sequence>
+ <script>
+ suffix = suiteSuffix + '_%s' % (i + 1)
+ serverHost = server.getHostname()
+ serverName = '%s:%s' % (serverHost, server.getPort())
+ serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+ </script>
+
+ <message>
+ 'Copy %s/logs/errors from %s to %s/errors_%s on %s' % \
+ (serverPath, serverName, logs.sut, suffix, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : serverHost,
+ 'srcfile' : '%s/logs/errors' % serverPath,
+ 'destfile' : '%s/errors_%s' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+ <message>
+ 'Copy %s/logs/access from %s to %s/access_%s on %s' % \
+ (serverPath, serverName,logs.sut, suffix, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : serverHost,
+ 'srcfile' : '%s/logs/access' % serverPath,
+ 'destfile' : '%s/access_%s' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+ <message>
+ 'Copy %s/logs/replication from %s to %s/replication_%s on %s' % \
+ (serverPath, serverName, logs.sut, suffix, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : serverHost,
+ 'srcfile' : '%s/logs/replication' % serverPath,
+ 'destfile' : '%s/replication_%s' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+ </sequence>
+ </paralleliterate>
+ </if>
+
+ <!-- Remove the topology created for the test suite -->
<message>
'Remove DS topology created for the Synchronization Basic Test Suite'
</message>
diff --git a/opends/tests/staf-tests/functional-tests/testcases/replication/resynchronization/resynchronization.xml b/opends/tests/staf-tests/functional-tests/testcases/replication/resynchronization/resynchronization.xml
index 400a3a2..33d2103 100644
--- a/opends/tests/staf-tests/functional-tests/testcases/replication/resynchronization/resynchronization.xml
+++ b/opends/tests/staf-tests/functional-tests/testcases/replication/resynchronization/resynchronization.xml
@@ -53,10 +53,34 @@
file="'%s/testcases/replication/replication_setup.xml'
% (TESTS_DIR)"/>
<call function="'replication_setup'">
- { 'dataFile' : 'Example.ldif' }
+ { 'topologyFile' : '%s/3server_topology.txt' \
+ % REPLICATION_CONFIG_DIR,
+ 'dataFile' : 'Example.ldif'
+ }
</call>
+ <script>
+ server3 = _topologyServerList[2]
+ replicationServer3 = server3.getChangelogServer()
+
+ # Remove 3rd server from replicated servers list until replication
+ # is enabled on the 3rd one
+ _topologyServerList.remove(server3)
+ consumerList.remove(server3)
+ </script>
+
+ <!-- Remove 3rd server from replication topology (i.e. disable
+ replication) -->
+ <call function="'disableReplication'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'dsInstanceHost' : server3.getHostname(),
+ 'dsInstanceAdminPort' : server3.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
<!--- Test Case information
#@TestMarker Replication Re-Synchronization Tests
#@TestName Replication: Re-Synchronization: Off-line
@@ -154,9 +178,9 @@
#@TestSteps Call dsreplication pre-external-initialization
#@TestSteps Import data on server A
#@TestSteps Back-up server A
+ #@TestSteps Call dsreplication post-external-initialization
#@TestSteps Add entry on server A
#@TestSteps Restore back-up on other servers
- #@TestSteps Call dsreplication post-external-initialization
#@TestPostamble
#@TestResult Success if trees synchronized
-->
@@ -197,7 +221,7 @@
'dsInstancePort' : master.getPort(),
'dsInstanceDn' : master.getRootDn(),
'dsInstancePswd' : master.getRootPwd(),
- 'taskID' : 'import task',
+ 'taskID' : 'import task - tc2',
'ldifFile' : '%s/replication/Example.ldif' \
% masterDataDir
}
@@ -231,12 +255,28 @@
'dsInstancePort' : master.getPort(),
'dsInstanceDn' : master.getRootDn(),
'dsInstancePswd' : master.getRootPwd(),
- 'taskID' : 'backup task',
+ 'taskID' : 'backup task - tc2',
'backupDir' : '%s/replication/master_backup_online' \
% masterDataDir
}
</call>
+ <!-- Post-initialise the servers in the topology -->
+ <message>
+ '+++++ resynchronization on-line: end external server \
+ initialization'
+ </message>
+ <call function="'postInitializeReplication'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstanceAdminPort' : master.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix],
+ 'adminUID' : adminUID,
+ 'adminPswd' : adminPswd
+ }
+ </call>
+
<!-- Add entry to "master" server -->
<message>
'+++++ resynchronization on-line: add entry to %s:%s' \
@@ -279,29 +319,13 @@
'dsInstancePort' : consumer.getPort(),
'dsInstanceDn' : consumer.getRootDn(),
'dsInstancePswd' : consumer.getRootPwd(),
- 'taskID' : 'restore task',
+ 'taskID' : 'restore task - tc2',
'backupDir' : '%s/%s/replication/master_backup_online' \
% (consumer.getDir(),remote.reldatadir)
}
</call>
</sequence>
- </paralleliterate>
-
- <!-- Post-initialise the servers in the topology -->
- <message>
- '+++++ resynchronization on-line: end external server \
- initialization'
- </message>
- <call function="'postInitializeReplication'">
- { 'location' : clientHost,
- 'dsPath' : clientPath,
- 'dsInstanceHost' : masterHost,
- 'dsInstanceAdminPort' : master.getAdminPort(),
- 'replicationDnList' : [synchroSuffix],
- 'adminUID' : adminUID,
- 'adminPswd' : adminPswd
- }
- </call>
+ </paralleliterate>
<!-- Verify the synchronization of the trees among the servers in
the topology -->
@@ -312,7 +336,389 @@
<call function="'testCase_Postamble'"/>
</sequence>
</testcase>
+
+ <!--- Test Case information
+ #@TestMarker Replication Re-Synchronization Tests
+ #@TestName Replication: Re-Synchronization: Add new server
+ #@TestID Add new server
+ #@TestPurpose Initialise newly added replicated server
+ using on-line backup/restore
+ #@TestPreamble
+ #@TestSteps Call dsreplication pre-external-initialization
+ #@TestSteps Import data on server A
+ #@TestSteps Back-up server A
+ #@TestSteps Initialise other servers from server A
+ #@TestSteps Add entry on server A
+ #@TestSteps Add server: enable replication
+ #@TestSteps Restore back-up on new server
+ #@TestPostamble
+ #@TestResult Success if trees synchronized
+ -->
+ <testcase name="getTestCaseName('Add new Server')">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ 'Replication: Re-Synchronization: Add new server. \
+ Initialise newly added server using on-line backup/restore'
+ </message>
+
+ <paralleliterate var="server" in="_topologyServerList">
+ <sequence>
+ <!-- Search for entry add -->
+ <call function="'ldapSearchWithScript'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'dsBaseDN' : 'dc=replicationChanges',
+ 'dsFilter' : 'uid=*'
+ }
+ </call>
+ <script>
+ searchRC = STAXResult[0][0]
+ searchResult = STAXResult[0][1]
+ resultLength = len(searchResult) > 0
+ </script>
+ <message>
+ '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
+ (server.getHostname(), server.getPort(), searchResult)
+ </message>
+ </sequence>
+ </paralleliterate>
+
+ <!-- Pre-initialise the servers in the topology -->
+ <message>
+ '+++++ resynchronization add server: prepare servers for \
+ external initialization'
+ </message>
+ <call function="'preInitializeReplication'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstanceAdminPort' : master.getAdminPort(),
+ 'localOnly' : False,
+ 'replicationDnList' : [synchroSuffix],
+ 'adminUID' : adminUID,
+ 'adminPswd' : adminPswd
+ }
+ </call>
+
+ <paralleliterate var="server" in="_topologyServerList">
+ <sequence>
+ <!-- Search for entry add -->
+ <call function="'ldapSearchWithScript'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'dsBaseDN' : 'dc=replicationChanges',
+ 'dsFilter' : 'uid=*'
+ }
+ </call>
+ <script>
+ searchRC = STAXResult[0][0]
+ searchResult = STAXResult[0][1]
+ resultLength = len(searchResult) > 0
+ </script>
+ <message>
+ '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
+ (server.getHostname(), server.getPort(), searchResult)
+ </message>
+ </sequence>
+ </paralleliterate>
+
+ <!-- Import data into "master" server -->
+ <message>
+ '+++++ resynchronization add server: import data on %s:%s' \
+ % (masterHost, master.getPort())
+ </message>
+ <call function="'importLdifTask'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'taskID' : 'import task - tc3',
+ 'ldifFile' : '%s/replication/Example.ldif' \
+ % masterDataDir
+ }
+ </call>
+
+ <!-- Check some data was imported into "master" server -->
+ <call function="'checkImport'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'dsHost' : masterHost,
+ 'dsPort' : master.getPort(),
+ 'dsAdminPort' : master.getAdminPort(),
+ 'dsDn' : master.getRootDn(),
+ 'dsPswd' : master.getRootPwd(),
+ 'expectedEntries' : ['uid=scarter,ou=People,o=example',
+ 'uid=dmiller, ou=People, o=example',
+ 'uid=rhunt, ou=People, o=example'],
+ 'startDS' : 'no'
+ }
+ </call>
+
+ <!-- Backup "master" server -->
+ <message>
+ '+++++ resynchronization add server: back-up server %s:%s' \
+ % (masterHost, master.getPort())
+ </message>
+ <call function="'backupTask'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'taskID' : 'backup task - tc3',
+ 'backupDir' : '%s/replication/master_backup_online' \
+ % masterDataDir
+ }
+ </call>
+
+ <paralleliterate var="server" in="_topologyServerList">
+ <sequence>
+ <!-- Search for entry add -->
+ <call function="'ldapSearchWithScript'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'dsBaseDN' : 'dc=replicationChanges',
+ 'dsFilter' : 'uid=*'
+ }
+ </call>
+ <script>
+ searchRC = STAXResult[0][0]
+ searchResult = STAXResult[0][1]
+ resultLength = len(searchResult) > 0
+ </script>
+ <message>
+ '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
+ (server.getHostname(), server.getPort(), searchResult)
+ </message>
+ </sequence>
+ </paralleliterate>
+
+ <message>
+ '+++++ resynchronization add server: Initialise topology from \
+ %s:%s' % (masterHost, master.getPort())
+ </message>
+ <!-- Initialise the servers in the topology -->
+ <call function="'initializeReplication'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'sourceInstanceHost' : masterHost,
+ 'sourceInstanceAdminPort' : master.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <paralleliterate var="server" in="_topologyServerList">
+ <sequence>
+ <!-- Search for entry add -->
+ <call function="'ldapSearchWithScript'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'dsBaseDN' : 'dc=replicationChanges',
+ 'dsFilter' : 'uid=*'
+ }
+ </call>
+ <script>
+ searchRC = STAXResult[0][0]
+ searchResult = STAXResult[0][1]
+ resultLength = len(searchResult) > 0
+ </script>
+ <message>
+ '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
+ (server.getHostname(), server.getPort(), searchResult)
+ </message>
+ </sequence>
+ </paralleliterate>
+
+ <!-- Add entry to "master" server -->
+ <message>
+ '+++++ resynchronization add server: add entry to %s:%s' \
+ % (masterHost, master.getPort())
+ </message>
+ <call function="'addEntry'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'entryToBeAdded' : '%s/replication/tfitter.ldif' \
+ % clientDataDir
+ }
+ </call>
+
+ <paralleliterate var="server" in="_topologyServerList">
+ <sequence>
+ <!-- Search for entry add -->
+ <call function="'ldapSearchWithScript'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'dsBaseDN' : 'dc=replicationChanges',
+ 'dsFilter' : 'uid=*'
+ }
+ </call>
+ <script>
+ searchRC = STAXResult[0][0]
+ searchResult = STAXResult[0][1]
+ resultLength = len(searchResult) > 0
+ </script>
+ <message>
+ '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
+ (server.getHostname(), server.getPort(), searchResult)
+ </message>
+ </sequence>
+ </paralleliterate>
+
+ <!-- Add new server to topology -->
+ <message>
+ '+++++ resynchronization add server: Enable replication for \
+ server:\nHost: %s\nLdap port: %s\nReplication port: %s\n\
+ Replicated DN list: %s' \
+ % (server3.getHostname(), server3.getPort(),
+ replicationServer3.getPort(), [synchroSuffix])
+ </message>
+ <call function="'enableReplication'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'dsInstanceHost' : server3.getHostname(),
+ 'dsInstanceAdminPort' : server3.getAdminPort(),
+ 'dsInstanceDn' : server3.getRootDn(),
+ 'dsInstancePswd' : server3.getRootPwd(),
+ 'dsReplicationPort' : replicationServer3.getPort(),
+ 'refInstanceHost' : masterHost,
+ 'refInstanceAdminPort' : master.getAdminPort(),
+ 'refInstanceDn' : master.getRootDn(),
+ 'refInstancePswd' : master.getRootPwd(),
+ 'refReplicationPort' : masterReplicationServer.getPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <script>
+ # Add 3rd server to replicated servers list now that replication
+ # has been enabled on the 3rd one
+ _topologyServerList = _topologyServerList + [server3]
+ consumerList = consumerList + [server3]
+ </script>
+
+ <paralleliterate var="server" in="_topologyServerList">
+ <sequence>
+ <!-- Search for entry add -->
+ <call function="'ldapSearchWithScript'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'dsBaseDN' : 'dc=replicationChanges',
+ 'dsFilter' : 'uid=*'
+ }
+ </call>
+ <script>
+ searchRC = STAXResult[0][0]
+ searchResult = STAXResult[0][1]
+ resultLength = len(searchResult) > 0
+ </script>
+ <message>
+ '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
+ (server.getHostname(), server.getPort(), searchResult)
+ </message>
+ </sequence>
+ </paralleliterate>
+
+ <!-- Copy backup to new server and restore it -->
+ <call function="'CopyFolderByExtension'">
+ { 'location' : masterHost,
+ 'remotehost' : server3.getHostname(),
+ 'srcfolder' : '%s/replication/master_backup_online' \
+ % masterDataDir,
+ 'destfolder' : '%s/%s/replication/master_backup_online' \
+ % (server3.getDir(),remote.reldatadir),
+ 'extension' : '*'
+ }
+ </call>
+
+ <message>
+ '+++++ resynchronization add server: restore back-up on %s:%s'\
+ % (server3.getHostname(), server3.getPort())
+ </message>
+ <call function="'restoreTask'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'dsInstanceHost' : server3.getHostname(),
+ 'dsInstancePort' : server3.getPort(),
+ 'dsInstanceDn' : server3.getRootDn(),
+ 'dsInstancePswd' : server3.getRootPwd(),
+ 'taskID' : 'restore task - tc3',
+ 'backupDir' : '%s/%s/replication/master_backup_online' \
+ % (server3.getDir(),remote.reldatadir)
+ }
+ </call>
+
+ <paralleliterate var="server" in="_topologyServerList">
+ <sequence>
+ <!-- Search for entry add -->
+ <call function="'ldapSearchWithScript'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'dsBaseDN' : 'dc=replicationChanges',
+ 'dsFilter' : 'uid=*'
+ }
+ </call>
+ <script>
+ searchRC = STAXResult[0][0]
+ searchResult = STAXResult[0][1]
+ resultLength = len(searchResult) > 0
+ </script>
+ <message>
+ '==> REPLICATION CHANGES %s:%s : \n%s\n' % \
+ (server.getHostname(), server.getPort(), searchResult)
+ </message>
+ </sequence>
+ </paralleliterate>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <!-- If the trees don't match, we may have come across Issue 4052
+ (Ghost adds in Replication Server) -->
+ <call function="'verifyTrees'">
+ [ clientHost, clientPath, master, consumerList, synchroSuffix,
+ '4052' ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
<import machine="STAF_LOCAL_HOSTNAME"
file="'%s/testcases/replication/replication_cleanup.xml'
% (TESTS_DIR)"/>
diff --git a/opends/tests/staf-tests/functional-tests/testcases/tasks/backup_db.xml b/opends/tests/staf-tests/functional-tests/testcases/tasks/backup_db.xml
index 0446d17..06f4d66 100644
--- a/opends/tests/staf-tests/functional-tests/testcases/tasks/backup_db.xml
+++ b/opends/tests/staf-tests/functional-tests/testcases/tasks/backup_db.xml
@@ -510,9 +510,11 @@
}
</call>
+ <!---
<call function="'setKnownIssue'">
{ 'issueId' : '3773' }
</call>
+ -->
<call function="'testCase_Postamble'"/>
</sequence>
diff --git a/opends/tests/staf-tests/shared/ant/build.properties b/opends/tests/staf-tests/shared/ant/build.properties
index 03d9b37..ff7c156 100644
--- a/opends/tests/staf-tests/shared/ant/build.properties
+++ b/opends/tests/staf-tests/shared/ant/build.properties
@@ -62,7 +62,7 @@
eventmanager.archive=EventManagerV${eventmanager.version}.zip
http.version=301
http.archive=HTTPV${http.version}.zip
-tomcat.version=6.0.14
+tomcat.version=6.0.20
tomcat.url=http://archive.apache.org/dist/tomcat/tomcat-6/v${tomcat.version}/bin
tomcat.archive=apache-tomcat-${tomcat.version}.zip
diff --git a/opends/tests/staf-tests/shared/functions/dsadm.xml b/opends/tests/staf-tests/shared/functions/dsadm.xml
index 8944b44..f813b1c 100755
--- a/opends/tests/staf-tests/shared/functions/dsadm.xml
+++ b/opends/tests/staf-tests/shared/functions/dsadm.xml
@@ -556,7 +556,7 @@
}
</call>
<call function="'Sleep'">
- { 'sleepForMilliSeconds' : 3000 }
+ { 'sleepForMilliSeconds' : 10000 }
</call>
</sequence>
</function>
diff --git a/opends/tests/staf-tests/shared/functions/environment.xml b/opends/tests/staf-tests/shared/functions/environment.xml
index b20db81..854807f 100755
--- a/opends/tests/staf-tests/shared/functions/environment.xml
+++ b/opends/tests/staf-tests/shared/functions/environment.xml
@@ -169,7 +169,10 @@
CurrentTestPath={}
DSInfoServersDict={}
True = 1
- False = 0
+ False = 0
+ # threshold set so that functions such as getFile may not cause staf
+ # process to run out of memory (value in bytes)
+ MAX_READABLE_SIZE = 104800
# this function return a well-formatted testcase name
def getTestCaseName(name):
diff --git a/opends/tests/staf-tests/shared/functions/stafcmd.xml b/opends/tests/staf-tests/shared/functions/stafcmd.xml
index c38c782..ad0fae9 100755
--- a/opends/tests/staf-tests/shared/functions/stafcmd.xml
+++ b/opends/tests/staf-tests/shared/functions/stafcmd.xml
@@ -616,7 +616,11 @@
<service>'fs'</service>
<request>'GET ENTRY %s %s' % (entry,attribute)</request>
</stafcmd>
-
+ <script>
+ cmdRC=RC
+ cmdResult=STAFResult
+ </script>
+ <return>[cmdRC,cmdResult]</return>
</sequence>
</function>
diff --git a/opends/tests/staf-tests/shared/functions/tools.xml b/opends/tests/staf-tests/shared/functions/tools.xml
index 3381db4..b29895b 100755
--- a/opends/tests/staf-tests/shared/functions/tools.xml
+++ b/opends/tests/staf-tests/shared/functions/tools.xml
@@ -418,22 +418,78 @@
</envs>
<console use="'same'"/>
<stderr mode="'stdout'"/>
- <returnstdout/>
- <returnfile>outputLdif</returnfile>
+ <returnstdout/>
</process>
<script>
STAXCode=RC
- STAXReason=STAXResult
</script>
- <script>
- diffsInfo = STAXReason[1]
- diffs = diffsInfo[1]
- if (diffsInfo[0] == 0) and (diffs.startswith("# No differences were detected between the source and target LDIF files")) :
- diffRC = 0
- else:
- diffRC = 1
- </script>
+ <if expr="STAXCode == 0">
+ <sequence>
+ <!-- Check the size of the diff file, and avoid reading its
+ content with getFile if the file is too big to prevent
+ the staf process from running out of memory -->
+ <call function="'GetEntry'">
+ {
+ 'location' : location,
+ 'entry' : outputLdif,
+ 'attribute' : 'SIZE'
+ }
+ </call>
+ <script>
+ # GetEntry returns: STAXResult = [cmdRC, cmdResult]
+ if RC == 0:
+ diffsFileSize = int(STAXResult[1]['lowerSize'])
+ msg = 'File: %s Size (bytes): %s' % (outputLdif, diffsFileSize)
+ else:
+ diffsFileSize = MAX_READABLE_SIZE
+ msg = 'Could not retrieve the size of file %s' % outputLdif
+ </script>
+ <message log="1"> 'LdifDiffWithScript: %s' % msg </message>
+ <if expr="diffsFileSize < MAX_READABLE_SIZE">
+ <sequence>
+ <call function="'getFile'">
+ { 'location' : location,
+ 'filename' : outputLdif
+ }
+ </call>
+ <script>
+ # getFile returns: STAXResult = [cmdRC, cmdResult]
+ diffsFileContent = STAXResult[1]
+
+ if diffsFileContent.startswith("# No differences were detected between the source and target LDIF files") :
+ diffRC = 0
+ else:
+ diffRC = 1
+ </script>
+ </sequence>
+ <else>
+ <script>
+ # diffs file to big to be read
+ diffsFileContent = 'File too big to be read.'
+
+ # if the diff file is too big, it means that there ARE
+ # actually some diffs, so we may deduce diffRC = 1
+ diffRC = 1
+ </script>
+ </else>
+ </if>
+ </sequence>
+ </if>
+
+ <if expr="diffRC == 0">
+ <message log="1">
+ 'NO DIFFERENCES were detected between the source and the target \
+ LDIF files.'
+ </message>
+ <else>
+ <message log="1" level="'Error'">
+ 'Source and target LDIF files are DIFFERENT: \n\n%s' % \
+ diffsFileContent
+ </message>
+ </else>
+ </if>
+
<return> diffRC </return>
</sequence>
</function>
@@ -620,19 +676,18 @@
'Verify tree %s taking %s as reference.' \
% (treeSuffix, referenceServerPath)
</message>
- <!-- Retrieve the tree from the reference server -->
- <call function="'ldapSearchWithScript'">
- { 'location' : location,
- 'dsPath' : dsPath,
- 'dsInstanceHost' : referenceServer.getHostname(),
- 'dsInstancePort' : referenceServer.getPort(),
- 'dsInstanceDn' : referenceServer.getRootDn(),
- 'dsInstancePswd' : referenceServer.getRootPwd(),
- 'dsBaseDN' : treeSuffix,
- 'dsFilter' : 'objectclass=*',
- 'outputFile' : referenceTree
+ <!-- Retrieve the tree from the reference server -->
+ <call function="'exportLdif'">
+ { 'location' : location,
+ 'dsPath' : dsPath,
+ 'dsInstanceHost' : referenceServer.getHostname(),
+ 'dsInstanceAdminPort' : referenceServer.getAdminPort(),
+ 'dsInstanceDn' : referenceServer.getRootDn(),
+ 'dsInstancePswd' : referenceServer.getRootPwd(),
+ 'ldifFile' : '%s/../%s' % (dsPath, referenceTree)
}
</call>
+
<if expr="RC != 0">
<!-- If the reference tree could not be retrieved, return an error -->
<return> [1, None] </return>
@@ -640,21 +695,43 @@
<iterate var="server" in="serverList">
<sequence>
<!-- Retrieve the same tree for every other server in the list -->
- <call function="'ldapSearchWithScript'">
- { 'location' : location,
- 'dsPath' : dsPath,
- 'dsInstanceHost' : server.getHostname(),
- 'dsInstancePort' : server.getPort(),
- 'dsInstanceDn' : server.getRootDn(),
- 'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : treeSuffix,
- 'dsFilter' : 'objectclass=*',
- 'outputFile' : sampleTree,
- 'logStderr' : False
+ <if expr="server.getHostname() == location">
+ <script>
+ filePath = dsPath
+ isSameLocation = True
+ </script>
+ <else>
+ <script>
+ filePath = '%s/%s' % (server.getDir(), OPENDSNAME)
+ isSameLocation = False
+ </script>
+ </else>
+ </if>
+ <call function="'exportLdif'">
+ { 'location' : location,
+ 'dsPath' : dsPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstanceAdminPort' : server.getAdminPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'ldifFile' : '%s/../%s' % (filePath, sampleTree)
}
</call>
+
<if expr="RC == 0">
<sequence>
+
+ <if expr="not isSameLocation">
+ <!-- Copy sample tree file to reference server -->
+ <call function="'copyFile'">
+ { 'location' : server.getHostname(),
+ 'remotehost' : location,
+ 'srcfile' : '%s/../%s' % (filePath, sampleTree),
+ 'destfile' : '%s/../%s' % (dsPath, sampleTree)
+ }
+ </call>
+ </if>
+
<!-- Compare this tree to the reference one -->
<call function="'LdifDiffWithScript'">
{ 'location' : location,
@@ -664,11 +741,19 @@
'outputLdif' : '%s/../%s' % (dsPath, treeDiffs)
}
</call>
- <script>
- if STAXResult != 0 :
- failedServers.append('%s:%s' % \
- (server.getHostname(), server.getPort()))
- </script>
+ <if expr="STAXResult != 0">
+ <sequence>
+ <script>
+ failedServers.append('%s:%s' % \
+ (server.getHostname(), server.getPort()))
+ </script>
+ <message log="1" level="'Error'">
+ 'Tree is DIFFERENT for %s:%s compared to %s:%s' % \
+ (server.getHostname(), server.getPort(),
+ referenceServer.getHostname(), referenceServer.getPort())
+ </message>
+ </sequence>
+ </if>
</sequence>
<else>
<script>
@@ -1795,6 +1880,171 @@
</return>
</sequence>
</function>
+
+
+ <function name="verifyReplication">
+ <function-prolog>
+ This function verifies that replication is working, that is, the updates
+ done on any of the servers in the topology are being pushed to the other
+ servers.
+ </function-prolog>
+ <function-list-args>
+ <function-arg-def name="serverList" type="required">
+ <function-arg-description>
+ List of the servers to verify against the referenceServer.
+ </function-arg-description>
+ <function-arg-property name="type" value="Server-list"/>
+ </function-arg-def>
+
+ <function-arg-def name="replicatedSuffix" type="required">
+ <function-arg-description>
+ Suffix of the tree to verify.
+ </function-arg-description>
+ <function-arg-property name="type" value="DN"/>
+ </function-arg-def>
+
+ <function-arg-def name="knownIssue" type="optional" default="None">
+ <function-arg-description>
+ Known issue. Corresponds to an issue number.
+ </function-arg-description>
+ <function-arg-property name="type" value="string" />
+ </function-arg-def>
+
+ </function-list-args>
+ <sequence>
+
+ <message>
+ 'verifyReplication: Verify updates on the suffix %s are being \
+ replicated.' % replicatedSuffix
+ </message>
+
+ <iterate var="server" in="serverList" indexvar="i">
+ <sequence>
+
+ <script>
+ serverHost = server.getHostname()
+ serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+ otherServersList = serverList[:i] + serverList[i+1:]
+ entryDn = 'uid=testentry-%s, %s' % (i, replicatedSuffix)
+
+ myRC = 0
+ myKnownIssue = knownIssue
+ failedServers = STAXGlobal( [] )
+ failingServerList = ''
+ </script>
+
+ <!-- Add entry to one of the other servers -->
+ <script>
+ listAttr = []
+ listAttr.append('objectclass:top')
+ listAttr.append('objectclass:organizationalperson')
+ listAttr.append('objectclass:inetorgperson')
+ listAttr.append('objectclass:person')
+ listAttr.append('givenname:Test-%s' % i)
+ listAttr.append('sn:Entry-%s' % i)
+ listAttr.append('cn:Test Entry - %s' % i)
+ </script>
+
+ <message>
+ 'verifyReplication: Add entry %s to server %s:%s' % \
+ (entryDn, serverHost, server.getPort())
+ </message>
+
+ <call function="'addAnEntry'">
+ { 'location' : serverHost,
+ 'dsPath' : serverPath,
+ 'dsInstanceHost' : serverHost,
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'DNToAdd' : entryDn,
+ 'listAttributes' : listAttr
+ }
+ </call>
+
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : 2000 }
+ </call>
+
+ <!-- Check the update has been propagated -->
+ <paralleliterate var="otherServer" in="otherServersList">
+ <sequence>
+ <call function="'ldapSearchWithScript'">
+ { 'location' : otherServer.getHostname(),
+ 'dsPath' : '%s/%s' \
+ % (otherServer.getDir(), OPENDSNAME),
+ 'dsInstanceHost' : otherServer.getHostname(),
+ 'dsInstancePort' : otherServer.getPort(),
+ 'dsInstanceDn' : otherServer.getRootDn(),
+ 'dsInstancePswd' : otherServer.getRootPwd(),
+ 'dsBaseDN' : entryDn,
+ 'dsFilter' : 'objectclass=*',
+ 'dsAttributes' : 'employeeNumber',
+ 'logStderr' : False
+ }
+ </call>
+ <script>
+ searchRC = STAXResult[0][0]
+ searchResult = STAXResult[0][1]
+ resultLength = len(searchResult) > 0
+ </script>
+ <if expr="resultLength != 0">
+ <sequence>
+ <message>
+ '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
+ % (otherServer.getHostname(), otherServer.getPort(),
+ searchResult)
+ </message>
+ </sequence>
+ <else>
+ <sequence>
+ <message>
+ 'verifyReplication: Entry %s NOT found in server %s:%s' % \
+ (entryDn, otherServer.getHostname(), otherServer.getPort())
+ </message>
+ <script>
+ failedServers.append('%s:%s' % \
+ (otherServer.getHostname(), otherServer.getPort()))
+ </script>
+ </sequence>
+ </else>
+ </if>
+ </sequence>
+ </paralleliterate>
+
+ <if expr="len(failedServers) > 0">
+ <!-- If at least one server failed to receive the update return an
+ ! error, along with the list of the servers that failed to do so
+ -->
+ <script>
+ myRC = 1
+ comma = ','
+ failingServerList = \
+ 'List of non-synchronized servers (replication verify FAILED \
+ for entry %s): %s ' % (entryDn, comma.join(failedServers))
+ </script>
+ <else>
+ <message>
+ 'All servers synchronized (replication verify SUCCEEDED for \
+ entry %s)' % entryDn
+ </message>
+ </else>
+ </if>
+ <call function="'checktestRC'">
+ { 'returncode' : myRC,
+ 'result' : failingServerList,
+ 'expected' : 0,
+ 'issue' : myKnownIssue
+ }
+ </call>
+
+ </sequence>
+ </iterate>
+
+ </sequence>
+ </function>
+
+
</stax>
diff --git a/opends/tests/staf-tests/shared/functions/topology.xml b/opends/tests/staf-tests/shared/functions/topology.xml
index 8d77d94..857c187 100755
--- a/opends/tests/staf-tests/shared/functions/topology.xml
+++ b/opends/tests/staf-tests/shared/functions/topology.xml
@@ -2545,5 +2545,220 @@
</sequence>
</function>
-
+
+
+ <!-- Get replication status using dsreplication, and check for missing changes
+ or inconsistencies in the number of entries across the topology -->
+ <function name="getReplicationStatus">
+ <function-prolog>
+ This function gets the replication status of a topology using
+ dsreplication.
+ </function-prolog>
+ <function-map-args>
+ <function-arg-def name="location"
+ type="optional"
+ default="STAF_REMOTE_HOSTNAME">
+ <function-arg-description>
+ Location of target host
+ </function-arg-description>
+ <function-arg-property name="type" value="hostname" />
+ </function-arg-def>
+
+ <function-arg-def name="dsPath"
+ type="optional"
+ default="'%s/%s' % (DIRECTORY_INSTANCE_BIN,OPENDSNAME)">
+ <function-arg-description>
+ Pathname to installation root
+ </function-arg-description>
+ <function-arg-property name="type" value="filepath" />
+ </function-arg-def>
+
+ <function-arg-def name="dsInstanceHost"
+ type="optional"
+ default="None">
+ <function-arg-description>
+ Directory server hostname or IP address
+ </function-arg-description>
+ <function-arg-property name="type" value="hostname" />
+ </function-arg-def>
+
+ <function-arg-def name="dsInstanceAdminPort"
+ type="optional"
+ default="None">
+ <function-arg-description>
+ Directory server admin port number
+ </function-arg-description>
+ <function-arg-property name="type" value="Port number" />
+ </function-arg-def>
+
+
+
+ <function-arg-def name="replicationDnList" type="required">
+ <function-arg-description>
+ DN of the replicated suffix
+ </function-arg-description>
+ <function-arg-property name="type" value="DN list" />
+ </function-arg-def>
+
+ <function-arg-def name="adminUID"
+ type="optional"
+ default="AdminUID">
+ <function-arg-description>
+ Global Administrator UID
+ </function-arg-description>
+ <function-arg-property name="type" value="UID" />
+ </function-arg-def>
+
+ <function-arg-def name="adminPswd"
+ type="optional"
+ default="AdminPswd">
+ <function-arg-description>
+ Global Administrator password
+ </function-arg-description>
+ <function-arg-property name="type" value="string" />
+ </function-arg-def>
+
+ <function-arg-def name="expectedRC" type="optional" default="0">
+ <function-arg-description>
+ Expected return code value. Default value is 0
+ </function-arg-description>
+ <function-arg-property name="type" value="string" />
+ </function-arg-def>
+ </function-map-args>
+ <sequence>
+ <message>
+ 'Getting replication status from server %s:%s' \
+ % (dsInstanceHost,dsInstanceAdminPort)
+ </message>
+
+ <!-- Local variables -->
+ <script>
+ STAFCmdParams=''
+ STAFCmd=''
+
+ if dsPath:
+ dsBinPath='%s/%s' % (dsPath,fileFolder)
+ STAFCmd='%s/%s%s' % (dsBinPath,DSREPLICATION,fileExt)
+
+ STAFCmdParamsList=[]
+
+ STAFCmdParamsList.append('status')
+ STAFCmdParamsList.append('-n')
+ STAFCmdParamsList.append('-X')
+ # option for getting status in script-friendly format
+ STAFCmdParamsList.append('-s')
+
+ if dsInstanceHost:
+ STAFCmdParamsList.append('-h %s' % dsInstanceHost)
+
+ if dsInstanceAdminPort:
+ STAFCmdParamsList.append('-p %s' % dsInstanceAdminPort)
+
+ if replicationDnList:
+ for dn in replicationDnList:
+ STAFCmdParamsList.append('-b "%s"' % dn)
+
+ if adminUID:
+ STAFCmdParamsList.append('-I "%s"' % adminUID)
+
+ if adminPswd:
+ STAFCmdParamsList.append('-w "%s"' % adminPswd)
+
+ STAFCmdParams=' '.join(STAFCmdParamsList)
+ </script>
+ <call function="'runCommand'">
+ { 'name' : 'Get Replication Status',
+ 'location' : location,
+ 'command' : STAFCmd,
+ 'arguments' : STAFCmdParams
+ }
+ </call>
+
+ <script>
+ commandRC = RC
+ commandResult = STAXResult
+ </script>
+ <call function="'checktestRC'">
+ { 'returncode' : commandRC,
+ 'result' : commandResult,
+ 'expected' : expectedRC
+ }
+ </call>
+
+ <script>
+ replStatusRC = commandResult[0][0]
+ replStatusResult = commandResult[0][1]
+ resultLength = len(replStatusResult) > 0
+ </script>
+
+ <if expr="(replStatusRC == 0) and (resultLength != 0)">
+ <sequence>
+ <message>
+ 'getReplicationStatus: Replication status retrieved from server \
+ %s:%s : \n%s ' % \
+ (dsInstanceHost, dsInstanceAdminPort, replStatusResult)
+ </message>
+ <script>
+ serverList = []
+ entriesList = []
+ missingChangesList = []
+ ageList = []
+
+ for line in replStatusResult.splitlines():
+ if line.startswith('Server:'):
+ server = line[line.find('Server:') + 7:].strip()
+ serverList.append(server)
+ elif line.startswith('Entries:'):
+ entries = line[line.find('Entries:') + 8:].strip()
+ entriesList.append(entries)
+ elif line.startswith('Missing Changes:'):
+ missingChanges = line[line.find('Missing') + 16:].strip()
+ missingChangesList.append(missingChanges)
+ elif line.startswith('Age of oldest missing change:'):
+ age = line[line.find('Age of') + 29:].strip()
+ ageList.append(age)
+
+ refNbOfEntries = entriesList[0]
+ </script>
+
+ <iterate var="server" in="serverList" indexvar="i">
+ <sequence>
+ <script>
+ entries = entriesList[i]
+ missingChanges = missingChangesList[i]
+ age = ageList[i]
+ </script>
+ <if expr="(missingChanges != '0') or (age != 'N/A')">
+ <sequence>
+ <message log="1" level="'Error'">
+ 'getReplicationStatus: Server %s is missing %s changes. \
+ Entries: %s - Age of the oldest missing change: %s ' % \
+ (server, missingChanges, entries, age)
+ </message>
+ <tcstatus result="'fail'"/>
+ </sequence>
+ </if>
+ <if expr="entries != refNbOfEntries">
+ <sequence>
+ <message log="1" level="'Error'">
+ 'getReplicationStatus: Different number of entries.\n\
+ Server %s : %s entries\n\
+ Reference server %s : %s entries\n' % \
+ (server, entries, serverList[0], refNbOfEntries)
+ </message>
+ <tcstatus result="'fail'"/>
+ </sequence>
+ </if>
+ </sequence>
+ </iterate>
+
+ </sequence>
+ </if>
+
+ <return>
+ commandResult
+ </return>
+ </sequence>
+ </function>
+
</stax>
diff --git a/opends/tests/staf-tests/shared/functions/utils.xml b/opends/tests/staf-tests/shared/functions/utils.xml
index 3e214fa..7064349 100755
--- a/opends/tests/staf-tests/shared/functions/utils.xml
+++ b/opends/tests/staf-tests/shared/functions/utils.xml
@@ -284,7 +284,7 @@
<if expr='re.search(searchre, returnString) != None'>
<sequence>
<message log="1">
- 'SUCCESS : Found substring, %s, in the return string' \
+ 'Found substring, %s, in the return string' \
% (expectedString)
</message>
<script>
@@ -294,8 +294,8 @@
</sequence>
<else>
<sequence>
- <message log="1" level="'Error'">
- 'ERROR : Did not find substring, %s, in the return string, %s' \
+ <message log="1">
+ 'Did not find substring, %s, in the return string, %s' \
% (expectedString, returnString)
</message>
<script>
@@ -309,16 +309,26 @@
<!-- Manage expectedRC and knownIssue -->
<if expr="expectedRC != 'noCheck'">
<if expr="myRC == expectedRC">
- <tcstatus result="'pass'"/>
+ <sequence>
+ <message log="1">
+ 'SUCCESS: searchString successful'
+ </message>
+ <tcstatus result="'pass'"/>
+ </sequence>
<else>
- <if expr="knownIssue == None">
- <tcstatus result="'fail'"/>
- <else>
- <call function="'setKnownIssue'">
- { 'issueId' : knownIssue }
- </call>
- </else>
- </if>
+ <sequence>
+ <message log="1" level="'Error'">
+ 'ERROR: searchString fail'
+ </message>
+ <if expr="knownIssue == None">
+ <tcstatus result="'fail'"/>
+ <else>
+ <call function="'setKnownIssue'">
+ { 'issueId' : knownIssue }
+ </call>
+ </else>
+ </if>
+ </sequence>
</else>
</if>
</if>
diff --git a/opends/tests/staf-tests/shared/topology/3server_topology.txt b/opends/tests/staf-tests/shared/topology/3server_topology.txt
index bf31334..2226df4 100644
--- a/opends/tests/staf-tests/shared/topology/3server_topology.txt
+++ b/opends/tests/staf-tests/shared/topology/3server_topology.txt
@@ -32,9 +32,9 @@
RootDn: cn=directory manager
RootPwd: secret12
BaseDn: o=example
-Changelogport: 11111
+Changelogport: 11112
SynchronizedSuffix: o=example
-ChangelogServer: ${remote.hostname}:11111
+ChangelogServer: ${remote.hostname}:11112
ChangelogServer: ${remote.hostname}:22222
ChangelogServer: ${remote.hostname}:33333
@@ -49,7 +49,7 @@
BaseDn: o=example
Changelogport: 22222
SynchronizedSuffix: o=example
-ChangelogServer: ${remote.hostname}:11111
+ChangelogServer: ${remote.hostname}:11112
ChangelogServer: ${remote.hostname}:22222
ChangelogServer: ${remote.hostname}:33333
@@ -64,6 +64,6 @@
BaseDn: o=example
Changelogport: 33333
SynchronizedSuffix: o=example
-ChangelogServer: ${remote.hostname}:11111
+ChangelogServer: ${remote.hostname}:11112
ChangelogServer: ${remote.hostname}:22222
ChangelogServer: ${remote.hostname}:33333
diff --git a/opends/tests/staf-tests/shared/topology/basic_topology.txt b/opends/tests/staf-tests/shared/topology/basic_topology.txt
index 5618650..a50ffdc 100644
--- a/opends/tests/staf-tests/shared/topology/basic_topology.txt
+++ b/opends/tests/staf-tests/shared/topology/basic_topology.txt
@@ -32,9 +32,9 @@
RootDn: cn=directory manager
RootPwd: secret12
BaseDn: o=example
-Changelogport: 11111
+Changelogport: 11112
SynchronizedSuffix: o=example
-ChangelogServer: ${remote.hostname}:11111
+ChangelogServer: ${remote.hostname}:11112
ChangelogServer: ${remote.hostname}:22222
Hostname: ${remote.hostname}
@@ -48,5 +48,5 @@
BaseDn: o=example
Changelogport: 22222
SynchronizedSuffix: o=example
-ChangelogServer: ${remote.hostname}:11111
+ChangelogServer: ${remote.hostname}:11112
ChangelogServer: ${remote.hostname}:22222
diff --git a/opends/tests/staf-tests/shared/xsl/gen-suites-report.xsl b/opends/tests/staf-tests/shared/xsl/gen-suites-report.xsl
index c88601c..6862d93 100644
--- a/opends/tests/staf-tests/shared/xsl/gen-suites-report.xsl
+++ b/opends/tests/staf-tests/shared/xsl/gen-suites-report.xsl
@@ -58,7 +58,6 @@
<xsl:param name="tests-type"/>
<!--- Test Suites Report Header Variables -->
- <xsl:variable name="ft" select="qa/$tests-type"/>
<xsl:variable name="id" select="identification"/>
<xsl:variable name="sut" select="$id/sut"/>
<xsl:variable name="mailto" select="normalize-space($id/mailto)"/>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif.xml b/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif.xml
index 91c2cae..a8dd19d 100755
--- a/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif.xml
+++ b/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif.xml
@@ -58,7 +58,7 @@
testList = []
testList.append('import_ldif_bin_attr')
testList.append('import_ldif_bin_attr_1m')
- testList.append('import_ldif_bin_attr_5m')
+ #testList.append('import_ldif_bin_attr_3m')
#testList.append('import_ldif_large_import_buffer')
#testList.append('import_ldif_many_thrds')
#testList.append('import_ldif_low_index_entry_limit')
diff --git a/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_bin_attr.xml b/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_bin_attr.xml
index 6446899..131f1aa 100755
--- a/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_bin_attr.xml
+++ b/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_bin_attr.xml
@@ -187,7 +187,7 @@
'noOfMilliSeconds' : 5000
}
</call>
-
+
<call function="'testCase_Postamble'"/>
</sequence>
@@ -203,17 +203,17 @@
<call function="'checkImport'">
{
- 'expectedEntries' : ['uid=user.100000,ou=People,dc=com' ,
- 'uid=user.110000,ou=People,dc=com' ,
- 'uid=user.120000,ou=People,dc=com' ,
- 'uid=user.130000,ou=People,dc=com' ,
- 'uid=user.140000,ou=People,dc=com' ,
- 'uid=user.150000,ou=People,dc=com' ,
- 'uid=user.160000,ou=People,dc=com' ,
- 'uid=user.170000,ou=People,dc=com' ,
- 'uid=user.180000,ou=People,dc=com' ,
- 'uid=user.190000,ou=People,dc=com' ,
- 'uid=user.199999,ou=People,dc=com'] ,
+ 'expectedEntries' : ['uid=user.1,ou=People,dc=com' ,
+ 'uid=user.10000,ou=People,dc=com' ,
+ 'uid=user.20000,ou=People,dc=com' ,
+ 'uid=user.30000,ou=People,dc=com' ,
+ 'uid=user.40000,ou=People,dc=com' ,
+ 'uid=user.50000,ou=People,dc=com' ,
+ 'uid=user.60000,ou=People,dc=com' ,
+ 'uid=user.70000,ou=People,dc=com' ,
+ 'uid=user.80000,ou=People,dc=com' ,
+ 'uid=user.90000,ou=People,dc=com' ,
+ 'uid=user.99999,ou=People,dc=com'] ,
'startDS' : 'no'
}
</call>
@@ -221,45 +221,36 @@
<!--<call function="'setKnownIssue'">
{ 'issueId' : '2535' }
</call>-->
-
+
+ <message>
+ 'ldclt_compare: Delete ldif and template files'
+ </message>
+
+ <call function="'deleteFile'">
+ {
+ 'location' : STAF_REMOTE_HOSTNAME,
+ 'filename' : ldifFile
+ }
+ </call>
+
+ <call function="'deleteFile'">
+ {
+ 'location' : STAF_REMOTE_HOSTNAME,
+ 'filename' : ldifTemplate
+ }
+ </call>
+
<call function="'testCase_Postamble'"/>
</sequence>
</testcase>
- <testcase name="getTestCaseName('Postamble')">
-
- <sequence>
-
- <call function="'testCase_Preamble'"/>
-
- <message>
- 'ldclt_compare: Delete ldif and template files'
- </message>
-
- <call function="'deleteFile'">
- {
- 'location' : STAF_REMOTE_HOSTNAME,
- 'filename' : ldifFile
- }
- </call>
-
- <call function="'deleteFile'">
- {
- 'location' : STAF_REMOTE_HOSTNAME,
- 'filename' : ldifTemplate
- }
- </call>
-
- <call function="'testCase_Postamble'"/>
-
- </sequence>
-
- </testcase>
<import machine="STAF_LOCAL_HOSTNAME"
file="'%s/testcases/import_ldif/import_ldif_cleanup.xml' % (TESTS_DIR)"/>
- <call function="'import_ldif_cleanup'" />
+ <call function="'import_ldif_cleanup'">
+ { 'suiteSuffix' : 'import' }
+ </call>
<call function="'testSuite_Postamble'"/>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_bin_attr_1m.xml b/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_bin_attr_1m.xml
index d1a5b08..d2e04a5 100644
--- a/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_bin_attr_1m.xml
+++ b/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_bin_attr_1m.xml
@@ -219,7 +219,7 @@
'noOfMilliSeconds' : 5000
}
</call>
-
+
<call function="'testCase_Postamble'"/>
</sequence>
@@ -253,46 +253,37 @@
<!--<call function="'setKnownIssue'">
{ 'issueId' : '2535' }
</call>-->
-
+
+ <message>
+ 'ldclt_compare: Delete ldif and template files'
+ </message>
+
+ <call function="'deleteFile'">
+ {
+ 'location' : STAF_REMOTE_HOSTNAME,
+ 'filename' : ldifFile
+ }
+ </call>
+
+ <call function="'deleteFile'">
+ {
+ 'location' : STAF_REMOTE_HOSTNAME,
+ 'filename' : ldifTemplate
+ }
+ </call>
+
<call function="'testCase_Postamble'"/>
</sequence>
</testcase>
- <testcase name="getTestCaseName('Postamble')">
-
- <sequence>
-
- <call function="'testCase_Preamble'"/>
-
- <message>
- 'ldclt_compare: Delete ldif and template files'
- </message>
-
- <call function="'deleteFile'">
- {
- 'location' : STAF_REMOTE_HOSTNAME,
- 'filename' : ldifFile
- }
- </call>
-
- <call function="'deleteFile'">
- {
- 'location' : STAF_REMOTE_HOSTNAME,
- 'filename' : ldifTemplate
- }
- </call>
-
- <call function="'testCase_Postamble'"/>
-
- </sequence>
-
- </testcase>
<import machine="STAF_LOCAL_HOSTNAME"
file="'%s/testcases/import_ldif/import_ldif_cleanup.xml' % (TESTS_DIR)"/>
- <call function="'import_ldif_cleanup'" />
-
+ <call function="'import_ldif_cleanup'">
+ { 'suiteSuffix' : 'import_1m' }
+ </call>
+
<call function="'testSuite_Postamble'"/>
</sequence>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_bin_attr_3m.xml b/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_bin_attr_3m.xml
index bf08f73..f22051b 100644
--- a/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_bin_attr_3m.xml
+++ b/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_bin_attr_3m.xml
@@ -27,13 +27,13 @@
! -->
<stax>
- <defaultcall function="import_ldif_bin_attr_5m"/>
+ <defaultcall function="import_ldif_bin_attr_3m"/>
- <function name="import_ldif_bin_attr_5m">
+ <function name="import_ldif_bin_attr_3m">
<sequence>
- <block name="'bin-attr_5m'">
+ <block name="'bin-attr_3m'">
<sequence>
@@ -219,7 +219,7 @@
'noOfMilliSeconds' : 5000
}
</call>
-
+
<call function="'testCase_Postamble'"/>
</sequence>
@@ -253,46 +253,37 @@
<!--<call function="'setKnownIssue'">
{ 'issueId' : '2535' }
</call>-->
-
+
+ <message>
+ 'ldclt_compare: Delete ldif and template files'
+ </message>
+
+ <call function="'deleteFile'">
+ {
+ 'location' : STAF_REMOTE_HOSTNAME,
+ 'filename' : ldifFile
+ }
+ </call>
+
+ <call function="'deleteFile'">
+ {
+ 'location' : STAF_REMOTE_HOSTNAME,
+ 'filename' : ldifTemplate
+ }
+ </call>
+
<call function="'testCase_Postamble'"/>
</sequence>
</testcase>
- <testcase name="getTestCaseName('Postamble')">
-
- <sequence>
-
- <call function="'testCase_Preamble'"/>
-
- <message>
- 'ldclt_compare: Delete ldif and template files'
- </message>
-
- <call function="'deleteFile'">
- {
- 'location' : STAF_REMOTE_HOSTNAME,
- 'filename' : ldifFile
- }
- </call>
-
- <call function="'deleteFile'">
- {
- 'location' : STAF_REMOTE_HOSTNAME,
- 'filename' : ldifTemplate
- }
- </call>
-
- <call function="'testCase_Postamble'"/>
-
- </sequence>
-
- </testcase>
<import machine="STAF_LOCAL_HOSTNAME"
file="'%s/testcases/import_ldif/import_ldif_cleanup.xml' % (TESTS_DIR)"/>
- <call function="'import_ldif_cleanup'" />
-
+ <call function="'import_ldif_cleanup'">
+ { 'suiteSuffix' : 'import_3m' }
+ </call>
+
<call function="'testSuite_Postamble'"/>
</sequence>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_cleanup.xml b/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_cleanup.xml
index 0d4317b..7358766 100755
--- a/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_cleanup.xml
+++ b/opends/tests/staf-tests/stress-tests/testcases/import_ldif/import_ldif_cleanup.xml
@@ -30,6 +30,14 @@
<defaultcall function="import_ldif_cleanup"/>
<function name="import_ldif_cleanup">
+ <function-map-args>
+ <function-arg-def name="suiteSuffix" type="required">
+ <function-arg-description>
+ Suite suffix
+ </function-arg-description>
+ <function-arg-property name="type" value="boolean"/>
+ </function-arg-def>
+ </function-map-args>
<sequence>
@@ -57,7 +65,41 @@
</sequence>
</block>
-
+
+ <!--- Save access and errors logs -->
+ <block name="'Save Logs'">
+
+ <sequence>
+
+ <message>
+ 'Copy %s/%s/logs/errors from %s to %s/errors_%s on %s' \
+ % (DIRECTORY_INSTANCE_DIR,OPENDSNAME,STAF_REMOTE_HOSTNAME,logs.sut,suiteSuffix,STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_REMOTE_HOSTNAME ,
+ 'srcfile' : '%s/%s/logs/errors' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME) ,
+ 'destfile' : '%s/errors_%s' % (logs.sut,suiteSuffix) ,
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+ <message>
+ 'Copy %s/%s/logs/access from %s to %s/access_%s on %s' \
+ % (DIRECTORY_INSTANCE_DIR,OPENDSNAME,STAF_REMOTE_HOSTNAME,logs.sut,suiteSuffix,STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_REMOTE_HOSTNAME ,
+ 'srcfile' : '%s/%s/logs/access' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME) ,
+ 'destfile' : '%s/access_%s' % (logs.sut,suiteSuffix) ,
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ </sequence>
+
+ </block>
+
<!-- Remove the topology created for the test suite -->
<block name="'Block Remove DS Topology'">
diff --git a/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldap_operation_cleanup.xml b/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldap_operation_cleanup.xml
index 379522d..91ae1c0 100755
--- a/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldap_operation_cleanup.xml
+++ b/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldap_operation_cleanup.xml
@@ -30,7 +30,15 @@
<defaultcall function="ldap_operation_cleanup"/>
<function name="ldap_operation_cleanup">
-
+ <function-map-args>
+ <function-arg-def name="suiteSuffix" type="required">
+ <function-arg-description>
+ Suite suffix
+ </function-arg-description>
+ <function-arg-property name="type" value="boolean"/>
+ </function-arg-def>
+ </function-map-args>
+
<sequence>
<block name="'cleanup'">
@@ -57,7 +65,41 @@
</sequence>
</block>
-
+
+ <!--- Save access and errors logs -->
+ <block name="'Save Logs'">
+
+ <sequence>
+
+ <message>
+ 'Copy %s/%s/logs/errors from %s to %s/errors_%s on %s' \
+ % (DIRECTORY_INSTANCE_DIR,OPENDSNAME,STAF_REMOTE_HOSTNAME,logs.sut,suiteSuffix,STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_REMOTE_HOSTNAME ,
+ 'srcfile' : '%s/%s/logs/errors' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME) ,
+ 'destfile' : '%s/errors_%s' % (logs.sut,suiteSuffix) ,
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+ <message>
+ 'Copy %s/%s/logs/access from %s to %s/access_%s on %s' \
+ % (DIRECTORY_INSTANCE_DIR,OPENDSNAME,STAF_REMOTE_HOSTNAME,logs.sut,suiteSuffix,STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_REMOTE_HOSTNAME ,
+ 'srcfile' : '%s/%s/logs/access' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME) ,
+ 'destfile' : '%s/access_%s' % (logs.sut,suiteSuffix) ,
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ </sequence>
+
+ </block>
+
<!-- Remove the topology created for the test suite -->
<block name="'Block Remove DS Topology'">
diff --git a/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_add_delete.xml b/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_add_delete.xml
index d99b0a4..6cb497a 100644
--- a/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_add_delete.xml
+++ b/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_add_delete.xml
@@ -49,7 +49,7 @@
adddeleteLoop = testsDuration / 10
lowRange = 100000
highRange = lowRange + numberOfEntries
- jvmLoop = testsDuration / 1800
+ jvmLoop = testsDuration / 1800 + 1
jvmSleep = 1800000
baseDN = 'ou=People,dc=com'
ldcltDir = '%s/ldclt_dir' % TMPDIR
@@ -210,9 +210,11 @@
}
</call>
- <call function="'Sleep'">
- { 'sleepForMilliSeconds' : jvmSleep }
- </call>
+ <if expr="loop != jvmLoop">
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : jvmSleep }
+ </call>
+ </if>
</sequence>
</loop>
</sequence>
@@ -230,6 +232,32 @@
</sequence>
</if>-->
+ <message>
+ 'Copy %s/ldclt_add.res from %s to %s on %s' \
+ % (ldcltDir,STAF_CLIENT_HOSTNAME,logs.sut,STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'srcfile' : '%s/ldclt_add.res' % ldcltDir ,
+ 'destfile' : '%s/ldclt_add.res' % logs.sut ,
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <message>
+ 'Copy %s/ldclt_delete.res from %s to %s on %s' \
+ % (ldcltDir,STAF_CLIENT_HOSTNAME,logs.sut,STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'srcfile' : '%s/ldclt_delete.res' % ldcltDir ,
+ 'destfile' : '%s/ldclt_delete.res' % logs.sut ,
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
<call function="'testCase_Postamble'"/>
</sequence>
@@ -264,7 +292,9 @@
<import machine="STAF_LOCAL_HOSTNAME"
file="'%s/testcases/ldap_operation/ldap_operation_cleanup.xml' % (TESTS_DIR)"/>
- <call function="'ldap_operation_cleanup'" />
+ <call function="'ldap_operation_cleanup'">
+ { 'suiteSuffix' : 'add_delete' }
+ </call>
<call function="'testSuite_Postamble'"/>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_compare.xml b/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_compare.xml
index bc47daf..843add5 100644
--- a/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_compare.xml
+++ b/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_compare.xml
@@ -49,7 +49,7 @@
compareLoop = testsDuration / 10
lowRange = 100000
highRange = lowRange + numberOfEntries
- jvmLoop = testsDuration / 1800
+ jvmLoop = testsDuration / 1800 + 1
jvmSleep = 1800000
baseDN = 'ou=People,dc=com'
ldcltDir = '%s/ldclt_dir' % TMPDIR
@@ -236,9 +236,11 @@
}
</call>
- <call function="'Sleep'">
- { 'sleepForMilliSeconds' : jvmSleep }
- </call>
+ <if expr="loop != jvmLoop">
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : jvmSleep }
+ </call>
+ </if>
</sequence>
</loop>
</sequence>
@@ -255,7 +257,20 @@
<tcstatus result="'fail'"/>
</sequence>
</if>-->
-
+
+ <message>
+ 'Copy %s/ldclt_compare.res from %s to %s on %s' \
+ % (ldcltDir,STAF_CLIENT_HOSTNAME,logs.sut,STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'srcfile' : '%s/ldclt_compare.res' % ldcltDir ,
+ 'destfile' : '%s/ldclt_compare.res' % logs.sut ,
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
<call function="'testCase_Postamble'"/>
</sequence>
@@ -282,19 +297,6 @@
}
</call>
- <call function="'testCase_Postamble'"/>
-
- </sequence>
-
- </testcase>
-
-
- <testcase name="getTestCaseName('Postamble')">
-
- <sequence>
-
- <call function="'testCase_Preamble'"/>
-
<message>
'ldclt_compare: Delete ldif and template files'
</message>
@@ -318,10 +320,12 @@
</sequence>
</testcase>
-
+
<import machine="STAF_LOCAL_HOSTNAME"
file="'%s/testcases/ldap_operation/ldap_operation_cleanup.xml' % (TESTS_DIR)"/>
- <call function="'ldap_operation_cleanup'" />
+ <call function="'ldap_operation_cleanup'">
+ { 'suiteSuffix' : 'compare' }
+ </call>
<call function="'testSuite_Postamble'"/>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_modify.xml b/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_modify.xml
index 6c5094e..71d45da 100644
--- a/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_modify.xml
+++ b/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_modify.xml
@@ -49,7 +49,7 @@
modifyLoop = testsDuration / 10
lowRange = 100000
highRange = lowRange + numberOfEntries
- jvmLoop = testsDuration / 1800
+ jvmLoop = testsDuration / 1800 + 1
jvmSleep = 1800000
baseDN = 'ou=People,dc=com'
ldcltDir = '%s/ldclt_dir' % TMPDIR
@@ -236,9 +236,11 @@
}
</call>
- <call function="'Sleep'">
- { 'sleepForMilliSeconds' : jvmSleep }
- </call>
+ <if expr="loop != jvmLoop">
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : jvmSleep }
+ </call>
+ </if>
</sequence>
</loop>
</sequence>
@@ -255,7 +257,20 @@
<tcstatus result="'fail'"/>
</sequence>
</if>-->
-
+
+ <message>
+ 'Copy %s/ldclt_modify.res from %s to %s on %s' \
+ % (ldcltDir,STAF_CLIENT_HOSTNAME,logs.sut,STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'srcfile' : '%s/ldclt_modify.res' % ldcltDir ,
+ 'destfile' : '%s/ldclt_modify.res' % logs.sut ,
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
<call function="'testCase_Postamble'"/>
</sequence>
@@ -290,7 +305,9 @@
<import machine="STAF_LOCAL_HOSTNAME"
file="'%s/testcases/ldap_operation/ldap_operation_cleanup.xml' % (TESTS_DIR)"/>
- <call function="'ldap_operation_cleanup'" />
+ <call function="'ldap_operation_cleanup'">
+ { 'suiteSuffix' : 'modify' }
+ </call>
<call function="'testSuite_Postamble'"/>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_modifyrdn.xml b/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_modifyrdn.xml
index 3e520e0..de397f3 100644
--- a/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_modifyrdn.xml
+++ b/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_modifyrdn.xml
@@ -49,7 +49,7 @@
modifyrdnLoop = testsDuration / 10
lowRange = 100000
highRange = lowRange + 2 * numberOfEntries
- jvmLoop = testsDuration / 1800
+ jvmLoop = testsDuration / 1800 + 1
jvmSleep = 1800000
baseDN = 'ou=People,dc=com'
ldcltDir = '%s/ldclt_dir' % TMPDIR
@@ -235,9 +235,11 @@
}
</call>
- <call function="'Sleep'">
- { 'sleepForMilliSeconds' : jvmSleep }
- </call>
+ <if expr="loop != jvmLoop">
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : jvmSleep }
+ </call>
+ </if>
</sequence>
</loop>
</sequence>
@@ -255,6 +257,19 @@
</sequence>
</if>-->
+ <message>
+ 'Copy %s/ldclt_modifyrdn.res from %s to %s on %s' \
+ % (ldcltDir,STAF_CLIENT_HOSTNAME,logs.sut,STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'srcfile' : '%s/ldclt_modifyrdn.res' % ldcltDir ,
+ 'destfile' : '%s/ldclt_modifyrdn.res' % logs.sut ,
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
<call function="'testCase_Postamble'"/>
</sequence>
@@ -289,7 +304,9 @@
<import machine="STAF_LOCAL_HOSTNAME"
file="'%s/testcases/import_ldif/import_ldif_cleanup.xml' % (TESTS_DIR)"/>
- <call function="'import_ldif_cleanup'" />
+ <call function="'ldap_operation_cleanup'">
+ { 'suiteSuffix' : 'modifyrdn' }
+ </call>
<call function="'testSuite_Postamble'"/>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_search.xml b/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_search.xml
index a68785b..ee393df 100644
--- a/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_search.xml
+++ b/opends/tests/staf-tests/stress-tests/testcases/ldap_operation/ldclt_search.xml
@@ -49,7 +49,7 @@
searchLoop = testsDuration / 10
lowRange = 100000
highRange = lowRange + numberOfEntries
- jvmLoop = testsDuration / 1800
+ jvmLoop = testsDuration / 1800 + 1
jvmSleep = 1800000
baseDN = 'ou=People,dc=com'
ldcltDir = '%s/ldclt_dir' % TMPDIR
@@ -235,9 +235,11 @@
}
</call>
- <call function="'Sleep'">
- { 'sleepForMilliSeconds' : jvmSleep }
- </call>
+ <if expr="loop != jvmLoop">
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : jvmSleep }
+ </call>
+ </if>
</sequence>
</loop>
</sequence>
@@ -255,6 +257,19 @@
</sequence>
</if>-->
+ <message>
+ 'Copy %s/ldclt_search.res from %s to %s on %s' \
+ % (ldcltDir,STAF_CLIENT_HOSTNAME,logs.sut,STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'srcfile' : '%s/ldclt_search.res' % ldcltDir ,
+ 'destfile' : '%s/ldclt_search.res' % logs.sut ,
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
<call function="'testCase_Postamble'"/>
</sequence>
@@ -289,7 +304,9 @@
<import machine="STAF_LOCAL_HOSTNAME"
file="'%s/testcases/ldap_operation/ldap_operation_cleanup.xml' % (TESTS_DIR)"/>
- <call function="'ldap_operation_cleanup'" />
+ <call function="'ldap_operation_cleanup'">
+ { 'suiteSuffix' : 'search' }
+ </call>
<call function="'testSuite_Postamble'"/>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/replication/replication.xml b/opends/tests/staf-tests/stress-tests/testcases/replication/replication.xml
new file mode 100644
index 0000000..a149237
--- /dev/null
+++ b/opends/tests/staf-tests/stress-tests/testcases/replication/replication.xml
@@ -0,0 +1,107 @@
+<?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 2009 Sun Microsystems, Inc.
+ ! -->
+<stax>
+
+ <defaultcall function="main_replication"/>
+
+ <function name="main_replication">
+
+ <function-list-args>
+ <function-required-arg name="STAXParentID"/>
+ </function-list-args>
+
+ <sequence>
+
+ <block name="'replication'">
+
+ <sequence>
+
+ <!--- Load the job environment for the test group execution -->
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/environment.xml' % TESTS_FUNCTIONS_DIR"/>
+ <call function="'loadJobEnvironment'">
+ { 'parent' : STAXParentID }
+ </call>
+
+ <script>
+ CurrentTestPath['group']='replication'
+
+ timerDuration = '620m'
+
+ # Time in second (minimum duration: 30 min => 1800 s)
+ testsDuration = 1800
+ numberOfEntries = 10000
+ </script>
+
+ <call function="'testGroup_Preamble'"/>
+
+ <script>
+ testList = []
+ testList.append('replication_add_delete')
+ testList.append('replication_search')
+ testList.append('replication_modifyrdn')
+ testList.append('replication_modify')
+ testList.append('replication_add_mod_delete')
+ testList.append('replication_add_mod_delete_search')
+
+ testList.append('replication_add_search_multiple')
+ testList.append('replication_add_delete_multiple')
+ testList.append('replication_add_modify_multiple')
+ testList.append('replication_add_del_add_del_multiple')
+ testList.append('replication_modify_multiple')
+ testList.append('replication_modify_modifyrdn_multiple')
+ testList.append('replication_modifyrdn_multiple')
+
+ #testList.append('replication_modify_restart_multiple')
+
+ globalAssuredReplication = None
+ </script>
+
+ <iterate var="__test" in="testList">
+ <sequence>
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/testcases/replication/%s.xml' %
+ (TESTS_DIR,__test)"/>
+
+ <call function="'%s' % __test" />
+
+ </sequence>
+ </iterate>
+
+ <call function="'testGroup_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_del_add_del_multiple.xml b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_del_add_del_multiple.xml
new file mode 100644
index 0000000..d414f88
--- /dev/null
+++ b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_del_add_del_multiple.xml
@@ -0,0 +1,528 @@
+<?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 2009 Sun Microsystems, Inc.
+ ! -->
+<stax>
+
+ <defaultcall function="replication_add_del_add_del_multiple"/>
+
+ <function name="replication_add_del_add_del_multiple">
+
+ <sequence>
+
+ <block name="'replication-add-del-add-del-multiple'">
+
+ <sequence>
+
+ <script>
+ if not CurrentTestPath.has_key('group'):
+ CurrentTestPath['group']='replication'
+ CurrentTestPath['suite']=STAXCurrentBlock
+ </script>
+
+ <call function="'testSuite_Preamble'"/>
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_setup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_setup'"/>
+
+ <script>
+ ldcltLoop = testsDuration / 10
+ lowRange = 100000
+ highRange = lowRange + numberOfEntries
+ jvmLoop = testsDuration / 1800 + 1
+ jvmSleep = 1800000
+ baseDN = 'ou=People,%s' % synchroSuffix
+ ldcltDir = '%s/ldclt_dir' % TMPDIR
+ ldcltTemplate = '%s/ldclt_add.template' % ldcltDir
+
+ server1Host = server1.getHostname()
+ server1Path = '%s/%s' % (server1.getDir(),OPENDSNAME)
+ server1Dir = server1.getDir()
+ server2Host = server2.getHostname()
+ server2Path = '%s/%s' % (server2.getDir(),OPENDSNAME)
+ server2Dir = server2.getDir()
+
+ suffix = 'add_del_add_del_multiple'
+ </script>
+
+
+ <testcase name="getTestCaseName('Preamble')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+
+ <message>
+ 'replication_add_del_add_del_multiple: Delete %s on %s' \
+ % (ldcltDir, STAF_CLIENT_HOSTNAME)
+ </message>
+
+ <call function="'deleteFolder'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'foldername' : ldcltDir
+ }
+ </call>
+
+ <message>
+ 'replication_add_del_add_del_multiple: Create %s on %s' \
+ % (ldcltDir, STAF_CLIENT_HOSTNAME)
+ </message>
+
+ <call function="'createFolder'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'foldername' : ldcltDir
+ }
+ </call>
+
+ <message>
+ 'replication_add_del_add_del_multiple: Create ldclt template'
+ </message>
+
+ <call function="'MakeALdcltTemplate'">
+ {
+ 'templateFile' : ldcltTemplate ,
+ 'templateLocation' : STAF_CLIENT_HOSTNAME
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <testcase name="getTestCaseName('Run ldclt clients')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_del_add_del_multiple: Run ldclt add'
+ </message>
+
+ <!--<timer duration="timerDuration">
+ <sequence>-->
+ <parallel>
+ <block name="'ldclt-add-threads-server1'">
+ <sequence>
+
+ <message>
+ 'replication_add_del_add_del_multiple: add threads on %s:%s' \
+ % (server1Host, server1.getPort())
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1 -e object=%s' % ldcltTemplate
+ opt2 = '-e "rdn=uid:user.[C=INCRN(%s;%s;6)]"' \
+ % (lowRange, highRange)
+ opt3 = '-e add -N %s -I 68 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : server1Host,
+ 'dsInstancePort' : server1.getPort(),
+ 'dsInstanceDn' : server1.getRootDn(),
+ 'dsInstancePswd' : server1.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_add-%s_1.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-delete-threads-server1'">
+ <sequence>
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : 120000 }
+ </call>
+
+ <message>
+ 'replication_add_del_add_del_multiple: delete threads on %s:%s' \
+ % (server1Host, server1.getPort())
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1'
+ opt2 = '-e delete,rdn=\"uid:user.[RNDN(%s;%s;6)]\"' \
+ % (lowRange, highRange)
+ opt3 = '-N %s -I 32 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : server1Host,
+ 'dsInstancePort' : server1.getPort(),
+ 'dsInstanceDn' : server1.getRootDn(),
+ 'dsInstancePswd' : server1.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_delete-%s_1.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+ </sequence>
+ </block>
+
+ <block name="'ldclt-add-threads-server2'">
+ <sequence>
+
+ <message>
+ 'replication_add_del_add_del_multiple: add threads on %s:%s' \
+ % (server2Host, server2.getPort())
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1 -e object=%s' % ldcltTemplate
+ opt2 = '-e "rdn=uid:user.[C=INCRN(%s;%s;6)]"' \
+ % (lowRange, highRange)
+ opt3 = '-e add -N %s -I 68 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : server2Host,
+ 'dsInstancePort' : server2.getPort(),
+ 'dsInstanceDn' : server2.getRootDn(),
+ 'dsInstancePswd' : server2.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_add-%s_2.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-delete-threads-server2'">
+ <sequence>
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : 120000 }
+ </call>
+
+ <message>
+ 'replication_add_del_add_del_multiple: delete threads on %s:%s' \
+ % (server2Host, server2.getPort())
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1'
+ opt2 = '-e delete,rdn=\"uid:user.[RNDN(%s;%s;6)]\"' \
+ % (lowRange, highRange)
+ opt3 = '-N %s -I 32 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : server2Host,
+ 'dsInstancePort' : server2.getPort(),
+ 'dsInstanceDn' : server2.getRootDn(),
+ 'dsInstancePswd' : server2.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_delete-%s_2.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+ </sequence>
+ </block>
+
+ <block name="'ldclt-jvm'">
+ <sequence>
+ <loop from="1" to="jvmLoop" var="loop">
+ <sequence>
+ <message>
+ 'LOOP %s out of %s' % (loop, jvmLoop)
+ </message>
+
+ <message>
+ 'replication_add_del_add_del_multiple: save jvm information'
+ </message>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : server1Host,
+ 'dsPath' : server1Path,
+ 'dsInstanceHost' : server1Host,
+ 'dsInstancePort' : server1.getPort(),
+ 'dsInstanceDn' : server1.getRootDn(),
+ 'dsInstancePswd' : server1.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' \
+ % (suffix, loop),
+ 'outputPath' : server1Dir
+ }
+ </call>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : server2Host,
+ 'dsPath' : server2Path,
+ 'dsInstanceHost' : server2Host,
+ 'dsInstancePort' : server2.getPort(),
+ 'dsInstanceDn' : server2.getRootDn(),
+ 'dsInstancePswd' : server2.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' \
+ % (suffix, loop),
+ 'outputPath' : server2Dir
+ }
+ </call>
+
+ <if expr="loop != jvmLoop">
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : jvmSleep }
+ </call>
+ </if>
+
+ </sequence>
+ </loop>
+ </sequence>
+ </block>
+ </parallel>
+ <!--</sequence>
+ </timer>
+
+ <script>timerRC = RC</script>
+
+ <if expr="timerRC == 0">
+ <sequence>
+ <message>'Timer exceeds %s' % timerDuration</message>
+ <tcstatus result="'fail'"/>
+ </sequence>
+ </if>-->
+
+ <message>
+ 'Copy %s/ldclt_add-%s_1.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_add-%s_1.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_add-%s_1.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <message>
+ 'Copy %s/ldclt_delete-%s_1.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_delete-%s_1.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_delete-%s_1.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <message>
+ 'Copy %s/ldclt_add-%s_2.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_add-%s_2.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_add-%s_2.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+ <message>
+ 'Copy %s/ldclt_delete-%s_2.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_delete-%s_2.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_delete-%s_2.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check server is still running')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <paralleliterate var="server" in="_topologyServerList" indexvar="i">
+ <sequence>
+ <script>
+ serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+ </script>
+
+ <message>
+ 'replication_add_del_add_del_multiple: Check server is still running on \
+ %s:%s' % (server.getHostname(), server.getPort())
+ </message>
+
+ <!-- Modify entry on one of the servers -->
+ <call function="'isAlive'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : serverPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'noOfLoops' : 10,
+ 'noOfMilliSeconds' : 5000
+ }
+ </call>
+ </sequence>
+ </paralleliterate>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify replication')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_del_add_del_multiple: Verify replication is still working'
+ </message>
+
+ <!-- Verify the replication is still working among the servers in
+ the topology -->
+ <call function="'verifyReplication'">
+ [ _topologyServerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify tree synchronization')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_del_add_del_multiple: Verify the tree synchronization'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'verifyTrees'">
+ [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check replication status')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_del_add_del_multiple: Check replication status'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'getReplicationStatus'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstanceAdminPort' : master.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_cleanup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_cleanup'">
+ { 'suiteSuffix' : suffix }
+ </call>
+
+ <call function="'testSuite_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_delete.xml b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_delete.xml
new file mode 100644
index 0000000..73cecb2
--- /dev/null
+++ b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_delete.xml
@@ -0,0 +1,411 @@
+<?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 2009 Sun Microsystems, Inc.
+ ! -->
+<stax>
+
+ <defaultcall function="replication_add_delete"/>
+
+ <function name="replication_add_delete">
+
+ <sequence>
+
+ <block name="'replication-add-delete'">
+
+ <sequence>
+
+ <script>
+ if not CurrentTestPath.has_key('group'):
+ CurrentTestPath['group']='replication'
+ CurrentTestPath['suite']=STAXCurrentBlock
+ </script>
+
+ <call function="'testSuite_Preamble'"/>
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_setup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_setup'"/>
+
+ <script>
+ ldcltLoop = testsDuration / 10
+ lowRange = 100000
+ highRange = lowRange + numberOfEntries
+ jvmLoop = testsDuration / 1800 + 1
+ jvmSleep = 1800000
+ baseDN = 'ou=People,%s' % synchroSuffix
+ ldcltDir = '%s/ldclt_dir' % TMPDIR
+ ldcltTemplate = '%s/ldclt_add.template' % ldcltDir
+ masterDir = '%s/..' % masterPath
+
+ suffix = 'add_delete'
+ </script>
+
+
+ <testcase name="getTestCaseName('Preamble')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_delete: Delete %s on %s' \
+ % (ldcltDir, STAF_CLIENT_HOSTNAME)
+ </message>
+
+ <call function="'deleteFolder'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'foldername' : ldcltDir
+ }
+ </call>
+
+ <message>
+ 'replication_add_delete: Create %s on %s' \
+ % (ldcltDir, STAF_CLIENT_HOSTNAME)
+ </message>
+
+ <call function="'createFolder'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'foldername' : ldcltDir
+ }
+ </call>
+
+ <message>
+ 'replication_add_delete: Create ldclt template'
+ </message>
+
+ <call function="'MakeALdcltTemplate'">
+ {
+ 'templateFile' : ldcltTemplate ,
+ 'templateLocation' : STAF_CLIENT_HOSTNAME
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <testcase name="getTestCaseName('Run ldclt clients')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_delete: Run ldclt add'
+ </message>
+
+ <!--<timer duration="timerDuration">
+ <sequence>-->
+ <parallel>
+ <block name="'ldclt-add-threads'">
+ <sequence>
+
+ <message>
+ 'replication_add_delete: add threads'
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1 -e object=%s' % ldcltTemplate
+ opt2 = '-e "rdn=uid:user.[C=INCRN(%s;%s;6)]"' \
+ % (lowRange, highRange)
+ opt3 = '-e add -N %s -I 68 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_add-%s.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-delete-threads'">
+ <sequence>
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : 120000 }
+ </call>
+
+ <message>
+ 'replication_add_delete: delete threads'
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1'
+ opt2 = '-e delete,rdn=\"uid:user.[RNDN(%s;%s;6)]\"' \
+ % (lowRange, highRange)
+ opt3 = '-N %s -I 32 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_delete-%s.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+ </sequence>
+ </block>
+
+ <block name="'ldclt-jvm'">
+ <sequence>
+ <loop from="1" to="jvmLoop" var="loop">
+ <sequence>
+ <message>
+ 'LOOP %s out of %s' % (loop, jvmLoop)
+ </message>
+
+ <message>
+ 'replication_add_delete: save jvm information'
+ </message>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' % (suffix, loop),
+ 'outputPath' : masterDir
+ }
+ </call>
+
+ <if expr="loop != jvmLoop">
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : jvmSleep }
+ </call>
+ </if>
+
+ </sequence>
+ </loop>
+ </sequence>
+ </block>
+ </parallel>
+ <!--</sequence>
+ </timer>
+
+ <script>timerRC = RC</script>
+
+ <if expr="timerRC == 0">
+ <sequence>
+ <message>'Timer exceeds %s' % timerDuration</message>
+ <tcstatus result="'fail'"/>
+ </sequence>
+ </if>-->
+
+ <message>
+ 'Copy %s/ldclt_add-%s.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_add-%s.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_add-%s.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <message>
+ 'Copy %s/ldclt_delete-%s.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_delete-%s.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_delete-%s.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check server is still running')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <paralleliterate var="server" in="_topologyServerList" indexvar="i">
+ <sequence>
+ <script>
+ serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+ </script>
+
+ <message>
+ 'replication_add_delete: Check server is still running on \
+ %s:%s' % (server.getHostname(), server.getPort())
+ </message>
+
+ <!-- Modify entry on one of the servers -->
+ <call function="'isAlive'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : serverPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'noOfLoops' : 10,
+ 'noOfMilliSeconds' : 5000
+ }
+ </call>
+ </sequence>
+ </paralleliterate>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify replication')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_delete: Verify replication is still working'
+ </message>
+
+ <!-- Verify the replication is still working among the servers in
+ the topology -->
+ <call function="'verifyReplication'">
+ [ _topologyServerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify tree synchronization')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_delete: Verify the tree synchronization'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'verifyTrees'">
+ [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check replication status')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_delete: Check replication status'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'getReplicationStatus'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstanceAdminPort' : master.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_cleanup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_cleanup'">
+ { 'suiteSuffix' : suffix }
+ </call>
+
+ <call function="'testSuite_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_delete_multiple.xml b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_delete_multiple.xml
new file mode 100644
index 0000000..912b3e5
--- /dev/null
+++ b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_delete_multiple.xml
@@ -0,0 +1,436 @@
+<?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 2009 Sun Microsystems, Inc.
+ ! -->
+<stax>
+
+ <defaultcall function="replication_add_delete_multiple"/>
+
+ <function name="replication_add_delete_multiple">
+
+ <sequence>
+
+ <block name="'replication-add-delete-multiple'">
+
+ <sequence>
+
+ <script>
+ if not CurrentTestPath.has_key('group'):
+ CurrentTestPath['group']='replication'
+ CurrentTestPath['suite']=STAXCurrentBlock
+ </script>
+
+ <call function="'testSuite_Preamble'"/>
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_setup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_setup'"/>
+
+ <script>
+ ldcltLoop = testsDuration / 10
+ lowRange = 100000
+ highRange = lowRange + numberOfEntries
+ jvmLoop = testsDuration / 1800 + 1
+ jvmSleep = 1800000
+ baseDN = 'ou=People,%s' % synchroSuffix
+ ldcltDir = '%s/ldclt_dir' % TMPDIR
+ ldcltTemplate = '%s/ldclt_add.template' % ldcltDir
+
+ server1Host = server1.getHostname()
+ server1Path = '%s/%s' % (server1.getDir(),OPENDSNAME)
+ server1Dir = server1.getDir()
+ server2Host = server2.getHostname()
+ server2Path = '%s/%s' % (server2.getDir(),OPENDSNAME)
+ server2Dir = server2.getDir()
+
+ suffix = 'add_delete_multiple'
+ </script>
+
+
+ <testcase name="getTestCaseName('Preamble')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+
+ <message>
+ 'replication_add_delete_multiple: Delete %s on %s' \
+ % (ldcltDir, STAF_CLIENT_HOSTNAME)
+ </message>
+
+ <call function="'deleteFolder'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'foldername' : ldcltDir
+ }
+ </call>
+
+ <message>
+ 'replication_add_delete_multiple: Create %s on %s' \
+ % (ldcltDir, STAF_CLIENT_HOSTNAME)
+ </message>
+
+ <call function="'createFolder'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'foldername' : ldcltDir
+ }
+ </call>
+
+ <message>
+ 'replication_add_delete_multiple: Create ldclt template'
+ </message>
+
+ <call function="'MakeALdcltTemplate'">
+ {
+ 'templateFile' : ldcltTemplate ,
+ 'templateLocation' : STAF_CLIENT_HOSTNAME
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <testcase name="getTestCaseName('Run ldclt clients')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_delete_multiple: Run ldclt add'
+ </message>
+
+ <!--<timer duration="timerDuration">
+ <sequence>-->
+ <parallel>
+ <block name="'ldclt-add-threads-server1'">
+ <sequence>
+
+ <message>
+ 'replication_add_delete_multiple: add threads on %s:%s' \
+ % (server1Host, server1.getPort())
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1 -e object=%s' % ldcltTemplate
+ opt2 = '-e "rdn=uid:user.[C=INCRN(%s;%s;6)]"' \
+ % (lowRange, highRange)
+ opt3 = '-e add -N %s -I 68 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : server1Host,
+ 'dsInstancePort' : server1.getPort(),
+ 'dsInstanceDn' : server1.getRootDn(),
+ 'dsInstancePswd' : server1.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_add-%s_1.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-delete-threads-server2'">
+ <sequence>
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : 120000 }
+ </call>
+
+ <message>
+ 'replication_add_delete_multiple: delete threads on %s:%s' \
+ % (server2Host, server2.getPort())
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1'
+ opt2 = '-e delete,rdn=\"uid:user.[RNDN(%s;%s;6)]\"' \
+ % (lowRange, highRange)
+ opt3 = '-N %s -I 32 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : server2Host,
+ 'dsInstancePort' : server2.getPort(),
+ 'dsInstanceDn' : server2.getRootDn(),
+ 'dsInstancePswd' : server2.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_delete-%s_2.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+ </sequence>
+ </block>
+
+ <block name="'ldclt-jvm'">
+ <sequence>
+ <loop from="1" to="jvmLoop" var="loop">
+ <sequence>
+ <message>
+ 'LOOP %s out of %s' % (loop, jvmLoop)
+ </message>
+
+ <message>
+ 'replication_add_delete_multiple: save jvm information'
+ </message>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : server1Host,
+ 'dsPath' : server1Path,
+ 'dsInstanceHost' : server1Host,
+ 'dsInstancePort' : server1.getPort(),
+ 'dsInstanceDn' : server1.getRootDn(),
+ 'dsInstancePswd' : server1.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' \
+ % (suffix, loop),
+ 'outputPath' : server1Dir
+ }
+ </call>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : server2Host,
+ 'dsPath' : server2Path,
+ 'dsInstanceHost' : server2Host,
+ 'dsInstancePort' : server2.getPort(),
+ 'dsInstanceDn' : server2.getRootDn(),
+ 'dsInstancePswd' : server2.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' \
+ % (suffix, loop),
+ 'outputPath' : server2Dir
+ }
+ </call>
+
+ <if expr="loop != jvmLoop">
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : jvmSleep }
+ </call>
+ </if>
+
+ </sequence>
+ </loop>
+ </sequence>
+ </block>
+ </parallel>
+ <!--</sequence>
+ </timer>
+
+ <script>timerRC = RC</script>
+
+ <if expr="timerRC == 0">
+ <sequence>
+ <message>'Timer exceeds %s' % timerDuration</message>
+ <tcstatus result="'fail'"/>
+ </sequence>
+ </if>-->
+
+ <message>
+ 'Copy %s/ldclt_add-%s_1.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_add-%s_1.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_add-%s_1.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <message>
+ 'Copy %s/ldclt_delete-%s_2.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_delete-%s_2.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_delete-%s_2.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check server is still running')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <paralleliterate var="server" in="_topologyServerList" indexvar="i">
+ <sequence>
+ <script>
+ serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+ </script>
+
+ <message>
+ 'replication_add_delete_multiple: Check server is still running on \
+ %s:%s' % (server.getHostname(), server.getPort())
+ </message>
+
+ <!-- Modify entry on one of the servers -->
+ <call function="'isAlive'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : serverPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'noOfLoops' : 10,
+ 'noOfMilliSeconds' : 5000
+ }
+ </call>
+ </sequence>
+ </paralleliterate>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify replication')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_delete_multiple: Verify replication is still working'
+ </message>
+
+ <!-- Verify the replication is still working among the servers in
+ the topology -->
+ <call function="'verifyReplication'">
+ [ _topologyServerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify tree synchronization')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_delete_multiple: Verify the tree synchronization'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'verifyTrees'">
+ [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check replication status')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_delete_multiple: Check replication status'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'getReplicationStatus'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstanceAdminPort' : master.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_cleanup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_cleanup'">
+ { 'suiteSuffix' : suffix }
+ </call>
+
+ <call function="'testSuite_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_mod_delete.xml b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_mod_delete.xml
new file mode 100644
index 0000000..bc5205d
--- /dev/null
+++ b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_mod_delete.xml
@@ -0,0 +1,460 @@
+<?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 2009 Sun Microsystems, Inc.
+ ! -->
+<stax>
+
+ <defaultcall function="replication_add_mod_delete"/>
+
+ <function name="replication_add_mod_delete">
+
+ <sequence>
+
+ <block name="'replication-add-mod-delete'">
+
+ <sequence>
+
+ <script>
+ if not CurrentTestPath.has_key('group'):
+ CurrentTestPath['group']='replication'
+ CurrentTestPath['suite']=STAXCurrentBlock
+ </script>
+
+ <call function="'testSuite_Preamble'"/>
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_setup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_setup'"/>
+
+ <script>
+ ldcltLoop = testsDuration / 10
+ lowRange = 100000
+ highRange = lowRange + numberOfEntries
+ jvmLoop = testsDuration / 1800 + 1
+ jvmSleep = 1800000
+ baseDN = 'ou=People,%s' % synchroSuffix
+ ldcltDir = '%s/ldclt_dir' % TMPDIR
+ ldcltTemplate = '%s/ldclt_add.template' % ldcltDir
+ masterDir = '%s/..' % masterPath
+
+ suffix = 'add_mod_delete'
+ </script>
+
+
+ <testcase name="getTestCaseName('Preamble')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+
+ <message>
+ 'replication_add_mod_delete: Delete %s on %s' \
+ % (ldcltDir, STAF_CLIENT_HOSTNAME)
+ </message>
+
+ <call function="'deleteFolder'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'foldername' : ldcltDir
+ }
+ </call>
+
+ <message>
+ 'replication_add_mod_delete: Create %s on %s' \
+ % (ldcltDir, STAF_CLIENT_HOSTNAME)
+ </message>
+
+ <call function="'createFolder'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'foldername' : ldcltDir
+ }
+ </call>
+
+ <message>
+ 'replication_add_mod_delete: Create ldclt template'
+ </message>
+
+ <call function="'MakeALdcltTemplate'">
+ {
+ 'templateFile' : ldcltTemplate ,
+ 'templateLocation' : STAF_CLIENT_HOSTNAME
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <testcase name="getTestCaseName('Run ldclt clients')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_mod_delete: Run ldclt add'
+ </message>
+
+ <!--<timer duration="timerDuration">
+ <sequence>-->
+ <parallel>
+ <block name="'ldclt-add-threads'">
+ <sequence>
+
+ <message>
+ 'replication_add_mod_delete: add threads'
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1 -e object=%s' % ldcltTemplate
+ opt2 = '-e "rdn=uid:user.[C=INCRN(%s;%s;6)]"' \
+ % (lowRange, highRange)
+ opt3 = '-e add -N %s -I 68 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_add-%.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-modify-threads'">
+ <sequence>
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : 120000 }
+ </call>
+
+ <message>
+ 'replication_add_mod_delete: modify threads'
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1'
+ opt2 = '-e rdn=\"uid:user.[RNDN(%s;%s;6)]\"' \
+ % (lowRange, highRange)
+ opt3 = '-e attreplace=\"description: random modify XXXXXX\"'
+ opt4 = '-N %s -I 32 -v -q' % ldcltLoop
+ opts = '%s %s %s %s' % (opt1, opt2, opt3, opt4)
+ </script>
+
+ <call function="'ldclt'">
+ { 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_modify-%s.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-delete-threads'">
+ <sequence>
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : 240000 }
+ </call>
+
+ <message>
+ 'replication_add_mod_delete: delete threads'
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1'
+ opt2 = '-e delete,rdn=\"uid:user.[RNDN(%s;%s;6)]\"' \
+ % (lowRange, highRange)
+ opt3 = '-N %s -I 32 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_delete-%s.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+ </sequence>
+ </block>
+
+ <block name="'ldclt-jvm'">
+ <sequence>
+ <loop from="1" to="jvmLoop" var="loop">
+ <sequence>
+ <message>
+ 'LOOP %s out of %s' % (loop, jvmLoop)
+ </message>
+
+ <message>
+ 'replication_add_mod_delete: save jvm information'
+ </message>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' \
+ % (suffix, loop),
+ 'outputPath' : masterDir
+ }
+ </call>
+
+ <if expr="loop != jvmLoop">
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : jvmSleep }
+ </call>
+ </if>
+
+ </sequence>
+ </loop>
+ </sequence>
+ </block>
+ </parallel>
+ <!--</sequence>
+ </timer>
+
+ <script>timerRC = RC</script>
+
+ <if expr="timerRC == 0">
+ <sequence>
+ <message>'Timer exceeds %s' % timerDuration</message>
+ <tcstatus result="'fail'"/>
+ </sequence>
+ </if>-->
+
+ <message>
+ 'Copy %s/ldclt_add-%s.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_add-%s.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_add-%s.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <message>
+ 'Copy %s/ldclt_modify-%s.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_modify-%s.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_modify-%s.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <message>
+ 'Copy %s/ldclt_delete-%s.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_delete-%s.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_delete-%s.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check server is still running')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <paralleliterate var="server" in="_topologyServerList" indexvar="i">
+ <sequence>
+ <script>
+ serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+ </script>
+
+ <message>
+ 'replication_add_mod_delete: Check server is still running on \
+ %s:%s' % (server.getHostname(), server.getPort())
+ </message>
+
+ <!-- Modify entry on one of the servers -->
+ <call function="'isAlive'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : serverPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'noOfLoops' : 10,
+ 'noOfMilliSeconds' : 5000
+ }
+ </call>
+ </sequence>
+ </paralleliterate>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify replication')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_mod_delete: Verify replication is still working'
+ </message>
+
+ <!-- Verify the replication is still working among the servers in
+ the topology -->
+ <call function="'verifyReplication'">
+ [ _topologyServerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify tree synchronization')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_mod_delete: Verify the tree synchronization'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'verifyTrees'">
+ [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check replication status')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_mod_delete: Check replication status'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'getReplicationStatus'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstanceAdminPort' : master.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_cleanup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_cleanup'">
+ { 'suiteSuffix' : suffix }
+ </call>
+
+ <call function="'testSuite_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_mod_delete_search.xml b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_mod_delete_search.xml
new file mode 100644
index 0000000..09c9451
--- /dev/null
+++ b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_mod_delete_search.xml
@@ -0,0 +1,507 @@
+<?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 2009 Sun Microsystems, Inc.
+ ! -->
+<stax>
+
+ <defaultcall function="replication_add_mod_delete_search"/>
+
+ <function name="replication_add_mod_delete_search">
+
+ <sequence>
+
+ <block name="'replication-add-mod-delete-search'">
+
+ <sequence>
+
+ <script>
+ if not CurrentTestPath.has_key('group'):
+ CurrentTestPath['group']='replication'
+ CurrentTestPath['suite']=STAXCurrentBlock
+ </script>
+
+ <call function="'testSuite_Preamble'"/>
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_setup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_setup'"/>
+
+ <script>
+ ldcltLoop = testsDuration / 10
+ lowRange = 100000
+ highRange = lowRange + numberOfEntries
+ jvmLoop = testsDuration / 1800 + 1
+ jvmSleep = 1800000
+ baseDN = 'ou=People,%s' % synchroSuffix
+ ldcltDir = '%s/ldclt_dir' % TMPDIR
+ ldcltTemplate = '%s/ldclt_add.template' % ldcltDir
+ masterDir = '%s/..' % masterPath
+
+ suffix = 'add_mod_delete_search'
+ </script>
+
+
+ <testcase name="getTestCaseName('Preamble')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+
+ <message>
+ 'replication_add_mod_delete_search: Delete %s on %s' \
+ % (ldcltDir, STAF_CLIENT_HOSTNAME)
+ </message>
+
+ <call function="'deleteFolder'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'foldername' : ldcltDir
+ }
+ </call>
+
+ <message>
+ 'replication_add_mod_delete_search: Create %s on %s' \
+ % (ldcltDir, STAF_CLIENT_HOSTNAME)
+ </message>
+
+ <call function="'createFolder'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'foldername' : ldcltDir
+ }
+ </call>
+
+ <message>
+ 'replication_add_mod_delete_search: Create ldclt template'
+ </message>
+
+ <call function="'MakeALdcltTemplate'">
+ {
+ 'templateFile' : ldcltTemplate ,
+ 'templateLocation' : STAF_CLIENT_HOSTNAME
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <testcase name="getTestCaseName('Run ldclt clients')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_mod_delete_search: Run ldclt add'
+ </message>
+
+ <!--<timer duration="timerDuration">
+ <sequence>-->
+ <parallel>
+ <block name="'ldclt-add-threads'">
+ <sequence>
+
+ <message>
+ 'replication_add_mod_delete_search: add threads'
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1 -e object=%s' % ldcltTemplate
+ opt2 = '-e "rdn=uid:user.[C=INCRN(%s;%s;6)]"' \
+ % (lowRange, highRange)
+ opt3 = '-e add -N %s -I 68 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_add-%s.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-modify-threads'">
+ <sequence>
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : 120000 }
+ </call>
+
+ <message>
+ 'replication_add_mod_delete_search: modify threads'
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1'
+ opt2 = '-e rdn=\"uid:user.[RNDN(%s;%s;6)]\"' \
+ % (lowRange, highRange)
+ opt3 = '-e attreplace=\"description: random modify XXXXXX\"'
+ opt4 = '-N %s -I 32 -v -q' % ldcltLoop
+ opts = '%s %s %s %s' % (opt1, opt2, opt3, opt4)
+ </script>
+
+ <call function="'ldclt'">
+ { 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_modify-%s.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-delete-threads'">
+ <sequence>
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : 240000 }
+ </call>
+
+ <message>
+ 'replication_add_mod_delete_search: delete threads'
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1'
+ opt2 = '-e delete,rdn=\"uid:user.[RNDN(%s;%s;6)]\"' \
+ % (lowRange, highRange)
+ opt3 = '-N %s -I 32 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_delete-%s.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+ </sequence>
+ </block>
+
+ <block name="'ldclt-search-threads'">
+ <sequence>
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : 120000 }
+ </call>
+
+ <message>
+ 'replication_add_mod_delete_search: search threads'
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1 -r %s -R %s' \
+ % (lowRange, highRange)
+ opt2 = '-e esearch,random -f uid=user.XXXXXX'
+ opt3 = '-N %s -I 32 -v -q' % searchLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ { 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_search-%s.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-jvm'">
+ <sequence>
+ <loop from="1" to="jvmLoop" var="loop">
+ <sequence>
+ <message>
+ 'LOOP %s out of %s' % (loop, jvmLoop)
+ </message>
+
+ <message>
+ 'replication_add_mod_delete_search: save jvm information'
+ </message>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' \
+ % (suffix, loop),
+ 'outputPath' : masterDir
+ }
+ </call>
+
+ <if expr="loop != jvmLoop">
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : jvmSleep }
+ </call>
+ </if>
+
+ </sequence>
+ </loop>
+ </sequence>
+ </block>
+ </parallel>
+ <!--</sequence>
+ </timer>
+
+ <script>timerRC = RC</script>
+
+ <if expr="timerRC == 0">
+ <sequence>
+ <message>'Timer exceeds %s' % timerDuration</message>
+ <tcstatus result="'fail'"/>
+ </sequence>
+ </if>-->
+
+ <message>
+ 'Copy %s/ldclt_add-%s.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_add-%s.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_add-%s.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <message>
+ 'Copy %s/ldclt_modify-%s.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_modify-%s.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_modify-%s.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <message>
+ 'Copy %s/ldclt_search-%s.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_search-%s.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_search-%s.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <message>
+ 'Copy %s/ldclt_delete-%s.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_delete-%s.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_delete-%s.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check server is still running')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <paralleliterate var="server" in="_topologyServerList" indexvar="i">
+ <sequence>
+ <script>
+ serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+ </script>
+
+ <message>
+ 'replication_add_mod_delete_search: Check server is still running on \
+ %s:%s' % (server.getHostname(), server.getPort())
+ </message>
+
+ <!-- Modify entry on one of the servers -->
+ <call function="'isAlive'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : serverPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'noOfLoops' : 10,
+ 'noOfMilliSeconds' : 5000
+ }
+ </call>
+ </sequence>
+ </paralleliterate>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify replication')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_mod_delete_search: Verify replication is still working'
+ </message>
+
+ <!-- Verify the replication is still working among the servers in
+ the topology -->
+ <call function="'verifyReplication'">
+ [ _topologyServerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify tree synchronization')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_mod_delete_search: Verify the tree synchronization'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'verifyTrees'">
+ [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check replication status')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_mod_delete_search: Check replication status'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'getReplicationStatus'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstanceAdminPort' : master.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_cleanup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_cleanup'">
+ { 'suiteSuffix' : suffix }
+ </call>
+
+ <call function="'testSuite_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_modify_multiple.xml b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_modify_multiple.xml
new file mode 100644
index 0000000..e655818
--- /dev/null
+++ b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_modify_multiple.xml
@@ -0,0 +1,437 @@
+<?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 2009 Sun Microsystems, Inc.
+ ! -->
+<stax>
+
+ <defaultcall function="replication_add_modify_multiple"/>
+
+ <function name="replication_add_modify_multiple">
+
+ <sequence>
+
+ <block name="'replication-add-modify-multiple'">
+
+ <sequence>
+
+ <script>
+ if not CurrentTestPath.has_key('group'):
+ CurrentTestPath['group']='replication'
+ CurrentTestPath['suite']=STAXCurrentBlock
+ </script>
+
+ <call function="'testSuite_Preamble'"/>
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_setup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_setup'"/>
+
+ <script>
+ ldcltLoop = testsDuration / 10
+ lowRange = 100000
+ highRange = lowRange + numberOfEntries
+ jvmLoop = testsDuration / 1800 + 1
+ jvmSleep = 1800000
+ baseDN = 'ou=People,%s' % synchroSuffix
+ ldcltDir = '%s/ldclt_dir' % TMPDIR
+ ldcltTemplate = '%s/ldclt_add.template' % ldcltDir
+
+ server1Host = server1.getHostname()
+ server1Path = '%s/%s' % (server1.getDir(),OPENDSNAME)
+ server1Dir = server1.getDir()
+ server2Host = server2.getHostname()
+ server2Path = '%s/%s' % (server2.getDir(),OPENDSNAME)
+ server2Dir = server2.getDir()
+
+ suffix = 'add_modify_multiple'
+ </script>
+
+
+ <testcase name="getTestCaseName('Preamble')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+
+ <message>
+ 'replication_add_modify_multiple: Delete %s on %s' \
+ % (ldcltDir, STAF_CLIENT_HOSTNAME)
+ </message>
+
+ <call function="'deleteFolder'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'foldername' : ldcltDir
+ }
+ </call>
+
+ <message>
+ 'replication_add_modify_multiple: Create %s on %s' \
+ % (ldcltDir, STAF_CLIENT_HOSTNAME)
+ </message>
+
+ <call function="'createFolder'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'foldername' : ldcltDir
+ }
+ </call>
+
+ <message>
+ 'replication_add_modify_multiple: Create ldclt template'
+ </message>
+
+ <call function="'MakeALdcltTemplate'">
+ {
+ 'templateFile' : ldcltTemplate ,
+ 'templateLocation' : STAF_CLIENT_HOSTNAME
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <testcase name="getTestCaseName('Run ldclt clients')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_modify_multiple: Run ldclt add'
+ </message>
+
+ <!--<timer duration="timerDuration">
+ <sequence>-->
+ <parallel>
+ <block name="'ldclt-add-threads-server1'">
+ <sequence>
+
+ <message>
+ 'replication_add_modify_multiple: add threads on %s:%s' \
+ % (server1Host, server1.getPort())
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1 -e object=%s' % ldcltTemplate
+ opt2 = '-e "rdn=uid:user.[C=INCRN(%s;%s;6)]"' \
+ % (lowRange, highRange)
+ opt3 = '-e add -N %s -I 68 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : server1Host,
+ 'dsInstancePort' : server1.getPort(),
+ 'dsInstanceDn' : server1.getRootDn(),
+ 'dsInstancePswd' : server1.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_add-%s_1.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-modify-threads-server2'">
+ <sequence>
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : 120000 }
+ </call>
+
+ <message>
+ 'replication_add_modify_multiple: modify threads on %s:%s' \
+ % (server2Host, server2.getPort())
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1'
+ opt2 = '-e rdn=\"uid:user.[RNDN(%s;%s;6)]\"' \
+ % (lowRange, highRange)
+ opt3 = '-e attreplace=\"description: random modify XXXXXX\"'
+ opt4 = '-N %s -I 32 -v -q' % ldcltLoop
+ opts = '%s %s %s %s' % (opt1, opt2, opt3, opt4)
+ </script>
+
+ <call function="'ldclt'">
+ { 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : server2Host,
+ 'dsInstancePort' : server2.getPort(),
+ 'dsInstanceDn' : server2.getRootDn(),
+ 'dsInstancePswd' : server2.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_modify-%s_2.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-jvm'">
+ <sequence>
+ <loop from="1" to="jvmLoop" var="loop">
+ <sequence>
+ <message>
+ 'LOOP %s out of %s' % (loop, jvmLoop)
+ </message>
+
+ <message>
+ 'replication_add_modify_multiple: save jvm information'
+ </message>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : server1Host,
+ 'dsPath' : server1Path,
+ 'dsInstanceHost' : server1Host,
+ 'dsInstancePort' : server1.getPort(),
+ 'dsInstanceDn' : server1.getRootDn(),
+ 'dsInstancePswd' : server1.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' \
+ % (suffix, loop),
+ 'outputPath' : server1Dir
+ }
+ </call>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : server2Host,
+ 'dsPath' : server2Path,
+ 'dsInstanceHost' : server2Host,
+ 'dsInstancePort' : server2.getPort(),
+ 'dsInstanceDn' : server2.getRootDn(),
+ 'dsInstancePswd' : server2.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' \
+ % (suffix, loop),
+ 'outputPath' : server2Dir
+ }
+ </call>
+
+ <if expr="loop != jvmLoop">
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : jvmSleep }
+ </call>
+ </if>
+
+ </sequence>
+ </loop>
+ </sequence>
+ </block>
+ </parallel>
+ <!--</sequence>
+ </timer>
+
+ <script>timerRC = RC</script>
+
+ <if expr="timerRC == 0">
+ <sequence>
+ <message>'Timer exceeds %s' % timerDuration</message>
+ <tcstatus result="'fail'"/>
+ </sequence>
+ </if>-->
+
+ <message>
+ 'Copy %s/ldclt_add-%s_1.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_add-%s_1.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_add-%s_1.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <message>
+ 'Copy %s/ldclt_modify-%s_2.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_modify-%s_2.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_modify-%s_2.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check server is still running')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <paralleliterate var="server" in="_topologyServerList" indexvar="i">
+ <sequence>
+ <script>
+ serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+ </script>
+
+ <message>
+ 'replication_add_modify_multiple: Check server is still running on \
+ %s:%s' % (server.getHostname(), server.getPort())
+ </message>
+
+ <!-- Modify entry on one of the servers -->
+ <call function="'isAlive'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : serverPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'noOfLoops' : 10,
+ 'noOfMilliSeconds' : 5000
+ }
+ </call>
+ </sequence>
+ </paralleliterate>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify replication')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_modify_multiple: Verify replication is still working'
+ </message>
+
+ <!-- Verify the replication is still working among the servers in
+ the topology -->
+ <call function="'verifyReplication'">
+ [ _topologyServerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify tree synchronization')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_modify_multiple: Verify the tree synchronization'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'verifyTrees'">
+ [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check replication status')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_modify_multiple: Check replication status'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'getReplicationStatus'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstanceAdminPort' : master.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_cleanup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_cleanup'">
+ { 'suiteSuffix' : suffix }
+ </call>
+
+ <call function="'testSuite_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_search_multiple.xml b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_search_multiple.xml
new file mode 100644
index 0000000..2afb51e
--- /dev/null
+++ b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_add_search_multiple.xml
@@ -0,0 +1,436 @@
+<?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 2009 Sun Microsystems, Inc.
+ ! -->
+<stax>
+
+ <defaultcall function="replication_add_search_multiple"/>
+
+ <function name="replication_add_search_multiple">
+
+ <sequence>
+
+ <block name="'replication-add-search-multiple'">
+
+ <sequence>
+
+ <script>
+ if not CurrentTestPath.has_key('group'):
+ CurrentTestPath['group']='replication'
+ CurrentTestPath['suite']=STAXCurrentBlock
+ </script>
+
+ <call function="'testSuite_Preamble'"/>
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_setup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_setup'"/>
+
+ <script>
+ ldcltLoop = testsDuration / 10
+ lowRange = 100000
+ highRange = lowRange + numberOfEntries
+ jvmLoop = testsDuration / 1800 + 1
+ jvmSleep = 1800000
+ baseDN = 'ou=People,%s' % synchroSuffix
+ ldcltDir = '%s/ldclt_dir' % TMPDIR
+ ldcltTemplate = '%s/ldclt_add.template' % ldcltDir
+
+ server1Host = server1.getHostname()
+ server1Path = '%s/%s' % (server1.getDir(),OPENDSNAME)
+ server1Dir = server1.getDir()
+ server2Host = server2.getHostname()
+ server2Path = '%s/%s' % (server2.getDir(),OPENDSNAME)
+ server2Dir = server2.getDir()
+
+ suffix = 'add_search_multiple'
+ </script>
+
+
+ <testcase name="getTestCaseName('Preamble')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+
+ <message>
+ 'replication_add_search_multiple: Delete %s on %s' \
+ % (ldcltDir, STAF_CLIENT_HOSTNAME)
+ </message>
+
+ <call function="'deleteFolder'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'foldername' : ldcltDir
+ }
+ </call>
+
+ <message>
+ 'replication_add_search_multiple: Create %s on %s' \
+ % (ldcltDir, STAF_CLIENT_HOSTNAME)
+ </message>
+
+ <call function="'createFolder'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME ,
+ 'foldername' : ldcltDir
+ }
+ </call>
+
+ <message>
+ 'replication_add_search_multiple: Create ldclt template'
+ </message>
+
+ <call function="'MakeALdcltTemplate'">
+ {
+ 'templateFile' : ldcltTemplate ,
+ 'templateLocation' : STAF_CLIENT_HOSTNAME
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <testcase name="getTestCaseName('Run ldclt clients')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_search_multiple: Run ldclt add'
+ </message>
+
+ <!--<timer duration="timerDuration">
+ <sequence>-->
+ <parallel>
+ <block name="'ldclt-add-threads-server1'">
+ <sequence>
+
+ <message>
+ 'replication_add_search_multiple: add threads on %s:%s' \
+ % (server1Host, server1.getPort())
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1 -e object=%s' % ldcltTemplate
+ opt2 = '-e "rdn=uid:user.[C=INCRN(%s;%s;6)]"' \
+ % (lowRange, highRange)
+ opt3 = '-e add -N %s -I 68 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : server1Host,
+ 'dsInstancePort' : server1.getPort(),
+ 'dsInstanceDn' : server1.getRootDn(),
+ 'dsInstancePswd' : server1.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_add-%s_1.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-search-threads-server2'">
+ <sequence>
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : 120000 }
+ </call>
+
+ <message>
+ 'replication_add_search_multiple: search threads on %s:%s' \
+ % (server2Host, server2.getPort())
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1 -r %s -R %s' \
+ % (lowRange, highRange)
+ opt2 = '-e esearch,random -f uid=user.XXXXXX'
+ opt3 = '-N %s -I 32 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ { 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : server2Host,
+ 'dsInstancePort' : server2.getPort(),
+ 'dsInstanceDn' : server2.getRootDn(),
+ 'dsInstancePswd' : server2.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_search-%s_2.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-jvm'">
+ <sequence>
+ <loop from="1" to="jvmLoop" var="loop">
+ <sequence>
+ <message>
+ 'LOOP %s out of %s' % (loop, jvmLoop)
+ </message>
+
+ <message>
+ 'replication_add_search_multiple: save jvm information'
+ </message>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : server1Host,
+ 'dsPath' : server1Path,
+ 'dsInstanceHost' : server1Host,
+ 'dsInstancePort' : server1.getPort(),
+ 'dsInstanceDn' : server1.getRootDn(),
+ 'dsInstancePswd' : server1.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' \
+ % (suffix, loop),
+ 'outputPath' : server1Dir
+ }
+ </call>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : server2Host,
+ 'dsPath' : server2Path,
+ 'dsInstanceHost' : server2Host,
+ 'dsInstancePort' : server2.getPort(),
+ 'dsInstanceDn' : server2.getRootDn(),
+ 'dsInstancePswd' : server2.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' \
+ % (suffix, loop),
+ 'outputPath' : server2Dir
+ }
+ </call>
+
+ <if expr="loop != jvmLoop">
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : jvmSleep }
+ </call>
+ </if>
+
+ </sequence>
+ </loop>
+ </sequence>
+ </block>
+ </parallel>
+ <!--</sequence>
+ </timer>
+
+ <script>timerRC = RC</script>
+
+ <if expr="timerRC == 0">
+ <sequence>
+ <message>'Timer exceeds %s' % timerDuration</message>
+ <tcstatus result="'fail'"/>
+ </sequence>
+ </if>-->
+
+ <message>
+ 'Copy %s/ldclt_add-%s_1.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_add-%s_1.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_add-%s_1.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <message>
+ 'Copy %s/ldclt_search-%s_2.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_search-%s_2.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_search-%s_2.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check server is still running')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <paralleliterate var="server" in="_topologyServerList" indexvar="i">
+ <sequence>
+ <script>
+ serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+ </script>
+
+ <message>
+ 'replication_add_search_multiple: Check server is still running on \
+ %s:%s' % (server.getHostname(), server.getPort())
+ </message>
+
+ <!-- Modify entry on one of the servers -->
+ <call function="'isAlive'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : serverPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'noOfLoops' : 10,
+ 'noOfMilliSeconds' : 5000
+ }
+ </call>
+ </sequence>
+ </paralleliterate>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify replication')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_search_multiple: Verify replication is still working'
+ </message>
+
+ <!-- Verify the replication is still working among the servers in
+ the topology -->
+ <call function="'verifyReplication'">
+ [ _topologyServerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify tree synchronization')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_search_multiple: Verify the tree synchronization'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'verifyTrees'">
+ [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check replication status')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_add_search_multiple: Check replication status'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'getReplicationStatus'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstanceAdminPort' : master.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_cleanup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_cleanup'">
+ { 'suiteSuffix' : suffix }
+ </call>
+
+ <call function="'testSuite_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/replication/replication_modify.xml b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_modify.xml
new file mode 100644
index 0000000..1e54943
--- /dev/null
+++ b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_modify.xml
@@ -0,0 +1,450 @@
+<?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 2009 Sun Microsystems, Inc.
+ ! -->
+<stax>
+
+ <defaultcall function="replication_modify"/>
+
+ <function name="replication_modify">
+
+ <sequence>
+
+ <block name="'replication-modify'">
+
+ <sequence>
+
+ <script>
+ if not CurrentTestPath.has_key('group'):
+ CurrentTestPath['group']='replication'
+ CurrentTestPath['suite']=STAXCurrentBlock
+ </script>
+
+ <call function="'testSuite_Preamble'"/>
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_setup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_setup'"/>
+
+ <script>
+ ldcltLoop = testsDuration / 10
+ lowRange = 100000
+ highRange = lowRange + numberOfEntries
+ jvmLoop = testsDuration / 1800 + 1
+ jvmSleep = 1800000
+ baseDN = 'ou=People,%s' % synchroSuffix
+ ldcltDir = '%s/ldclt_dir' % TMPDIR
+ masterDir = '%s/..' % masterPath
+ ldifTemplate = '%s/%s_entries.template' \
+ % (masterDir, numberOfEntries)
+ ldifFile = '%s/%s_entries.ldif' \
+ % (masterDir, numberOfEntries)
+ totalEntries = numberOfEntries + 2
+
+ suffix = 'modify'
+ </script>
+
+
+ <testcase name="getTestCaseName('Preamble')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <!-- Check if 'ldifFile' exists -->
+ <call function="'GetEntry'">
+ {
+ 'location' : masterHost ,
+ 'entry' : ldifFile ,
+ 'attribute' : 'TYPE'
+ }
+ </call>
+ <if expr="RC == 48">
+ <sequence>
+ <message>
+ 'replication_modify: File %s does not exist, create it' \
+ % ldifFile
+ </message>
+
+ <message>
+ 'replication_modify: Make a make-ldif template file'
+ </message>
+
+ <call function="'MakeAMakeLdifTemplate'">
+ {
+ 'numEntries' : numberOfEntries,
+ 'suffix' : synchroSuffix,
+ 'startFrom' : lowRange,
+ 'additionalAttributes' : True,
+ 'templateFile' : ldifTemplate,
+ 'templateLocation' : masterHost
+ }
+ </call>
+
+ <message>
+ 'replication_modify: Make the ldif file'
+ </message>
+
+ <call function="'MakeLdifWithScript'">
+ {
+ 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'templateFile' : ldifTemplate,
+ 'ldifFile' : ldifFile
+ }
+ </call>
+ </sequence>
+ <else>
+ <message>
+ 'replication_modify: File %s exists, do nothing' % ldifFile
+ </message>
+ </else>
+ </if>
+
+ <message>
+ 'replication_modify: Import large ldif file'
+ </message>
+
+ <!-- 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,
+ 'dsBackEnd' : DIRECTORY_INSTANCE_BE,
+ 'dsLdifFile' : ldifFile
+ }
+ </call>
+
+ <script>
+ returnString = STAXResult[0][1]
+ </script>
+
+ <call function="'checktestString'">
+ { 'returnString' : returnString,
+ 'expectedString' : 'Processed %s entries' % totalEntries
+ }
+ </call>
+
+ <message>
+ 'replication_modify: Start DS running on %s:%s' % \
+ (masterHost, master.getPort())
+ </message>
+
+ <!-- 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' : 5000
+ }
+ </call>
+
+ <!-- Perform the total update -->
+ <call function="'initializeReplication'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'sourceInstanceHost' : masterHost,
+ 'sourceInstanceAdminPort' : master.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <testcase name="getTestCaseName('Run ldclt clients')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modify: Run ldclt modify'
+ </message>
+
+ <!--<timer duration="timerDuration">
+ <sequence>-->
+ <parallel>
+ <block name="'ldclt-modify-threads'">
+ <sequence>
+
+ <message>
+ 'replication_modify: modify threads'
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1'
+ opt2 = '-e rdn=\"uid:user.[RNDN(%s;%s;6)]\"' \
+ % (lowRange, highRange)
+ opt3 = '-e attreplace=\"description: random modify XXXXXX\"'
+ opt4 = '-N %s -I 32 -v -q' % ldcltLoop
+ opts = '%s %s %s %s' % (opt1, opt2, opt3, opt4)
+ </script>
+
+ <call function="'ldclt'">
+ { 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_modify-%s.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-jvm'">
+ <sequence>
+ <loop from="1" to="jvmLoop" var="loop">
+ <sequence>
+ <message>
+ 'LOOP %s out of %s' % (loop, jvmLoop)
+ </message>
+
+ <message>
+ 'replication_modify: save jvm information'
+ </message>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' % (suffix, loop),
+ 'outputPath' : masterDir
+ }
+ </call>
+
+ <if expr="loop != jvmLoop">
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : jvmSleep }
+ </call>
+ </if>
+
+ </sequence>
+ </loop>
+ </sequence>
+ </block>
+ </parallel>
+ <!--</sequence>
+ </timer>
+
+ <script>timerRC = RC</script>
+
+ <if expr="timerRC == 0">
+ <sequence>
+ <message>'Timer exceeds %s' % timerDuration</message>
+ <tcstatus result="'fail'"/>
+ </sequence>
+ </if>-->
+
+ <message>
+ 'Copy %s/ldclt_modify-%s.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_modify-%s.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_modify-%s.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check server is still running')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <paralleliterate var="server" in="_topologyServerList" indexvar="i">
+ <sequence>
+ <script>
+ serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+ </script>
+
+ <message>
+ 'replication_modify: Check server is still running on \
+ %s:%s' % (server.getHostname(), server.getPort())
+ </message>
+
+ <!-- Modify entry on one of the servers -->
+ <call function="'isAlive'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : serverPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'noOfLoops' : 10 ,
+ 'noOfMilliSeconds' : 5000
+ }
+ </call>
+ </sequence>
+ </paralleliterate>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <testcase name="getTestCaseName('Verify replication')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modify: Verify replication is still working'
+ </message>
+
+ <!-- Verify the replication is still working among the servers in
+ the topology -->
+ <call function="'verifyReplication'">
+ [ _topologyServerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify tree synchronization')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modify: Verify the tree synchronization'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'verifyTrees'">
+ [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check replication status')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modify: Check replication status'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'getReplicationStatus'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstanceAdminPort' : master.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_cleanup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_cleanup'">
+ { 'suiteSuffix' : suffix }
+ </call>
+
+ <call function="'testSuite_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/replication/replication_modify_modifyrdn_multiple.xml b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_modify_modifyrdn_multiple.xml
new file mode 100644
index 0000000..f9062a3
--- /dev/null
+++ b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_modify_modifyrdn_multiple.xml
@@ -0,0 +1,519 @@
+<?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 2009 Sun Microsystems, Inc.
+ ! -->
+<stax>
+
+ <defaultcall function="replication_modify_modifyrdn_multiple"/>
+
+ <function name="replication_modify_modifyrdn_multiple">
+
+ <sequence>
+
+ <block name="'replication-modify-modifyrdn-multiple'">
+
+ <sequence>
+
+ <script>
+ if not CurrentTestPath.has_key('group'):
+ CurrentTestPath['group']='replication'
+ CurrentTestPath['suite']=STAXCurrentBlock
+ </script>
+
+ <call function="'testSuite_Preamble'"/>
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_setup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_setup'"/>
+
+ <script>
+ ldcltLoop = testsDuration / 10
+ lowRange = 100000
+ highRange = lowRange + numberOfEntries
+ jvmLoop = testsDuration / 1800 + 1
+ jvmSleep = 1800000
+ baseDN = 'ou=People,%s' % synchroSuffix
+
+ server1Host = server1.getHostname()
+ server1Path = '%s/%s' % (server1.getDir(),OPENDSNAME)
+ server1Dir = server1.getDir()
+ server2Host = server2.getHostname()
+ server2Path = '%s/%s' % (server2.getDir(),OPENDSNAME)
+ server2Dir = server2.getDir()
+
+ ldifTemplate = '%s/%s_entries.template' \
+ % (server1Dir, numberOfEntries)
+ ldifFile = '%s/%s_entries.ldif' \
+ % (server1Dir, numberOfEntries)
+ totalEntries = numberOfEntries + 2
+
+ suffix = 'modify_modifyrdn_multiple'
+ </script>
+
+
+ <testcase name="getTestCaseName('Preamble')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <!-- Check if 'ldifFile' exists -->
+ <call function="'GetEntry'">
+ {
+ 'location' : server1Host ,
+ 'entry' : ldifFile ,
+ 'attribute' : 'TYPE'
+ }
+ </call>
+ <if expr="RC == 48">
+ <sequence>
+ <message>
+ 'replication_modify_modifyrdn_multiple: File %s does not exist, create it' \
+ % ldifFile
+ </message>
+
+ <message>
+ 'replication_modify_modifyrdn_multiple: Make a make-ldif template file'
+ </message>
+
+ <call function="'MakeAMakeLdifTemplate'">
+ {
+ 'numEntries' : numberOfEntries,
+ 'suffix' : synchroSuffix,
+ 'startFrom' : lowRange,
+ 'additionalAttributes' : True,
+ 'templateFile' : ldifTemplate,
+ 'templateLocation' : server1Host
+ }
+ </call>
+
+ <message>
+ 'replication_modify_modifyrdn_multiple: Make the ldif file'
+ </message>
+
+ <call function="'MakeLdifWithScript'">
+ {
+ 'location' : server1Host,
+ 'dsPath' : server1Path,
+ 'templateFile' : ldifTemplate,
+ 'ldifFile' : ldifFile
+ }
+ </call>
+ </sequence>
+ <else>
+ <message>
+ 'replication_modify_modifyrdn_multiple: File %s exists, do nothing' % ldifFile
+ </message>
+ </else>
+ </if>
+
+ <message>
+ 'replication_modify_modifyrdn_multiple: Import large ldif file'
+ </message>
+
+ <!-- Stop "server1" Directory Server -->
+ <call function="'StopDsWithScript'">
+ { 'location' : server1Host,
+ 'dsPath' : server1Path,
+ 'dsHost' : server1Host,
+ 'dsAdminPort' : server1.getAdminPort(),
+ 'dsBindDN' : server1.getRootDn(),
+ 'dsBindPwd' : server1.getRootPwd()
+ }
+ </call>
+
+ <!-- Import data into "server1" Directory Server -->
+ <call function="'ImportLdifWithScript'">
+ { 'location' : server1Host,
+ 'dsPath' : server1Path,
+ 'dsBackEnd' : DIRECTORY_INSTANCE_BE,
+ 'dsLdifFile' : ldifFile
+ }
+ </call>
+
+ <script>
+ returnString = STAXResult[0][1]
+ </script>
+
+ <call function="'checktestString'">
+ { 'returnString' : returnString,
+ 'expectedString' : 'Processed %s entries' % totalEntries
+ }
+ </call>
+
+ <message>
+ 'replication_modify_modifyrdn_multiple: Start DS running on %s:%s' % \
+ (server1Host, server1.getPort())
+ </message>
+
+ <!-- Start the Directory Server -->
+ <call function="'StartDsWithScript'">
+ { 'location' : server1Host,
+ 'dsPath' : server1Path
+ }
+ </call>
+
+ <!-- Wait for DS to start -->
+ <call function="'isAlive'">
+ { 'location' : server1Host,
+ 'dsPath' : server1Path,
+ 'dsInstanceHost' : server1Host,
+ 'dsInstancePort' : server1.getPort(),
+ 'dsInstanceDn' : server1.getRootDn(),
+ 'dsInstancePswd' : server1.getRootPwd(),
+ 'noOfLoops' : 10,
+ 'noOfMilliSeconds' : 5000
+ }
+ </call>
+
+ <!-- Perform the total update -->
+ <call function="'initializeReplication'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'sourceInstanceHost' : server1Host,
+ 'sourceInstanceAdminPort' : server1.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <testcase name="getTestCaseName('Run ldclt clients')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modify_modifyrdn_multiple: Run ldclt add'
+ </message>
+
+ <!--<timer duration="timerDuration">
+ <sequence>-->
+ <parallel>
+ <block name="'ldclt-modify-threads-server1'">
+ <sequence>
+ <message>
+ 'replication_modify_modifyrdn_multiple: modify threads on %s:%s' \
+ % (server1Host, server1.getPort())
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1'
+ opt2 = '-e rdn=\"uid:user.[RNDN(%s;%s;6)]\"' \
+ % (lowRange, highRange)
+ opt3 = '-e attreplace=\"description: random modify XXXXXX\"'
+ opt4 = '-N %s -I 32 -v -q' % ldcltLoop
+ opts = '%s %s %s %s' % (opt1, opt2, opt3, opt4)
+ </script>
+
+ <call function="'ldclt'">
+ { 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : server1Host,
+ 'dsInstancePort' : server1.getPort(),
+ 'dsInstanceDn' : server1.getRootDn(),
+ 'dsInstancePswd' : server1.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_modify-%s_1.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-modifyrdn-threads-server2'">
+ <sequence>
+
+ <message>
+ 'replication_modifyrdn: modifyrdn threads on %s:%s' \
+ % (server2Host, server2.getPort())
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1'
+ opt2 = '-e rename,rdn=\"uid:user.[RNDN(%s;%s;6)]\"' \
+ % (lowRange, highRange)
+ opt3 = '-N %s -I 68 -I 32 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ { 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : server2Host,
+ 'dsInstancePort' : server2.getPort(),
+ 'dsInstanceDn' : server2.getRootDn(),
+ 'dsInstancePswd' : server2.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_modifyrdn-%s_2.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-jvm'">
+ <sequence>
+ <loop from="1" to="jvmLoop" var="loop">
+ <sequence>
+ <message>
+ 'LOOP %s out of %s' % (loop, jvmLoop)
+ </message>
+
+ <message>
+ 'replication_modify_modifyrdn_multiple: save jvm information'
+ </message>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : server1Host,
+ 'dsPath' : server1Path,
+ 'dsInstanceHost' : server1Host,
+ 'dsInstancePort' : server1.getPort(),
+ 'dsInstanceDn' : server1.getRootDn(),
+ 'dsInstancePswd' : server1.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' \
+ % (suffix, loop),
+ 'outputPath' : server1Dir
+ }
+ </call>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : server2Host,
+ 'dsPath' : server2Path,
+ 'dsInstanceHost' : server2Host,
+ 'dsInstancePort' : server2.getPort(),
+ 'dsInstanceDn' : server2.getRootDn(),
+ 'dsInstancePswd' : server2.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' \
+ % (suffix, loop),
+ 'outputPath' : server2Dir
+ }
+ </call>
+
+ <if expr="loop != jvmLoop">
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : jvmSleep }
+ </call>
+ </if>
+
+ </sequence>
+ </loop>
+ </sequence>
+ </block>
+ </parallel>
+ <!--</sequence>
+ </timer>
+
+ <script>timerRC = RC</script>
+
+ <if expr="timerRC == 0">
+ <sequence>
+ <message>'Timer exceeds %s' % timerDuration</message>
+ <tcstatus result="'fail'"/>
+ </sequence>
+ </if>-->
+
+ <message>
+ 'Copy %s/ldclt_modify-%s_1.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_modify-%s_1.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_modify-%s_1.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <message>
+ 'Copy %s/ldclt_modifyrdn-%s_2.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_modifyrdn-%s_2.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_modifyrdn-%s_2.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check server is still running')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <paralleliterate var="server" in="_topologyServerList" indexvar="i">
+ <sequence>
+ <script>
+ serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+ </script>
+
+ <message>
+ 'replication_modify_modifyrdn_multiple: Check server is still running on \
+ %s:%s' % (server.getHostname(), server.getPort())
+ </message>
+
+ <!-- Modify entry on one of the servers -->
+ <call function="'isAlive'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : serverPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'noOfLoops' : 10,
+ 'noOfMilliSeconds' : 5000
+ }
+ </call>
+ </sequence>
+ </paralleliterate>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify replication')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modify_modifyrdn_multiple: Verify replication is still working'
+ </message>
+
+ <!-- Verify the replication is still working among the servers in
+ the topology -->
+ <call function="'verifyReplication'">
+ [ _topologyServerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify tree synchronization')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modify_modifyrdn_multiple: Verify the tree synchronization'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'verifyTrees'">
+ [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check replication status')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modify_modifyrdn_multiple: Check replication status'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'getReplicationStatus'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstanceAdminPort' : master.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_cleanup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_cleanup'">
+ { 'suiteSuffix' : suffix }
+ </call>
+
+ <call function="'testSuite_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/replication/replication_modify_multiple.xml b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_modify_multiple.xml
new file mode 100644
index 0000000..aa8f959
--- /dev/null
+++ b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_modify_multiple.xml
@@ -0,0 +1,519 @@
+<?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 2009 Sun Microsystems, Inc.
+ ! -->
+<stax>
+
+ <defaultcall function="replication_modify_multiple"/>
+
+ <function name="replication_modify_multiple">
+
+ <sequence>
+
+ <block name="'replication-modify-multiple'">
+
+ <sequence>
+
+ <script>
+ if not CurrentTestPath.has_key('group'):
+ CurrentTestPath['group']='replication'
+ CurrentTestPath['suite']=STAXCurrentBlock
+ </script>
+
+ <call function="'testSuite_Preamble'"/>
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_setup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_setup'"/>
+
+ <script>
+ ldcltLoop = testsDuration / 10
+ lowRange = 100000
+ highRange = lowRange + numberOfEntries
+ jvmLoop = testsDuration / 1800 + 1
+ jvmSleep = 1800000
+ baseDN = 'ou=People,%s' % synchroSuffix
+
+ server1Host = server1.getHostname()
+ server1Path = '%s/%s' % (server1.getDir(),OPENDSNAME)
+ server1Dir = server1.getDir()
+ server2Host = server2.getHostname()
+ server2Path = '%s/%s' % (server2.getDir(),OPENDSNAME)
+ server2Dir = server2.getDir()
+
+ ldifTemplate = '%s/%s_entries.template' \
+ % (server1Dir, numberOfEntries)
+ ldifFile = '%s/%s_entries.ldif' \
+ % (server1Dir, numberOfEntries)
+ totalEntries = numberOfEntries + 2
+
+ suffix = 'modify_multiple'
+ </script>
+
+
+ <testcase name="getTestCaseName('Preamble')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <!-- Check if 'ldifFile' exists -->
+ <call function="'GetEntry'">
+ {
+ 'location' : server1Host ,
+ 'entry' : ldifFile ,
+ 'attribute' : 'TYPE'
+ }
+ </call>
+ <if expr="RC == 48">
+ <sequence>
+ <message>
+ 'replication_modify_multiple: File %s does not exist, create it' \
+ % ldifFile
+ </message>
+
+ <message>
+ 'replication_modify_multiple: Make a make-ldif template file'
+ </message>
+
+ <call function="'MakeAMakeLdifTemplate'">
+ {
+ 'numEntries' : numberOfEntries,
+ 'suffix' : synchroSuffix,
+ 'startFrom' : lowRange,
+ 'additionalAttributes' : True,
+ 'templateFile' : ldifTemplate,
+ 'templateLocation' : server1Host
+ }
+ </call>
+
+ <message>
+ 'replication_modify_multiple: Make the ldif file'
+ </message>
+
+ <call function="'MakeLdifWithScript'">
+ {
+ 'location' : server1Host,
+ 'dsPath' : server1Path,
+ 'templateFile' : ldifTemplate,
+ 'ldifFile' : ldifFile
+ }
+ </call>
+ </sequence>
+ <else>
+ <message>
+ 'replication_modify_multiple: File %s exists, do nothing' % ldifFile
+ </message>
+ </else>
+ </if>
+
+ <message>
+ 'replication_modify_multiple: Import large ldif file'
+ </message>
+
+ <!-- Stop "server1" Directory Server -->
+ <call function="'StopDsWithScript'">
+ { 'location' : server1Host,
+ 'dsPath' : server1Path,
+ 'dsHost' : server1Host,
+ 'dsAdminPort' : server1.getAdminPort(),
+ 'dsBindDN' : server1.getRootDn(),
+ 'dsBindPwd' : server1.getRootPwd()
+ }
+ </call>
+
+ <!-- Import data into "server1" Directory Server -->
+ <call function="'ImportLdifWithScript'">
+ { 'location' : server1Host,
+ 'dsPath' : server1Path,
+ 'dsBackEnd' : DIRECTORY_INSTANCE_BE,
+ 'dsLdifFile' : ldifFile
+ }
+ </call>
+
+ <script>
+ returnString = STAXResult[0][1]
+ </script>
+
+ <call function="'checktestString'">
+ { 'returnString' : returnString,
+ 'expectedString' : 'Processed %s entries' % totalEntries
+ }
+ </call>
+
+ <message>
+ 'replication_modify_multiple: Start DS running on %s:%s' % \
+ (server1Host, server1.getPort())
+ </message>
+
+ <!-- Start the Directory Server -->
+ <call function="'StartDsWithScript'">
+ { 'location' : server1Host,
+ 'dsPath' : server1Path
+ }
+ </call>
+
+ <!-- Wait for DS to start -->
+ <call function="'isAlive'">
+ { 'location' : server1Host,
+ 'dsPath' : server1Path,
+ 'dsInstanceHost' : server1Host,
+ 'dsInstancePort' : server1.getPort(),
+ 'dsInstanceDn' : server1.getRootDn(),
+ 'dsInstancePswd' : server1.getRootPwd(),
+ 'noOfLoops' : 10,
+ 'noOfMilliSeconds' : 5000
+ }
+ </call>
+
+ <!-- Perform the total update -->
+ <call function="'initializeReplication'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'sourceInstanceHost' : server1Host,
+ 'sourceInstanceAdminPort' : server1.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <testcase name="getTestCaseName('Run ldclt clients')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modify_multiple: Run ldclt add'
+ </message>
+
+ <!--<timer duration="timerDuration">
+ <sequence>-->
+ <parallel>
+ <block name="'ldclt-modify-threads-server1'">
+ <sequence>
+ <message>
+ 'replication_modify_multiple: modify threads on %s:%s' \
+ % (server1Host, server1.getPort())
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1'
+ opt2 = '-e rdn=\"uid:user.[RNDN(%s;%s;6)]\"' \
+ % (lowRange, highRange)
+ opt3 = '-e attreplace=\"description: random modify XXXXXX\"'
+ opt4 = '-N %s -I 32 -v -q' % ldcltLoop
+ opts = '%s %s %s %s' % (opt1, opt2, opt3, opt4)
+ </script>
+
+ <call function="'ldclt'">
+ { 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : server1Host,
+ 'dsInstancePort' : server1.getPort(),
+ 'dsInstanceDn' : server1.getRootDn(),
+ 'dsInstancePswd' : server1.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_modify-%s_1.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-modify-threads-server2'">
+ <sequence>
+ <message>
+ 'replication_modify_multiple: modify threads on %s:%s' \
+ % (server2Host, server2.getPort())
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1'
+ opt2 = '-e rdn=\"uid:user.[RNDN(%s;%s;6)]\"' \
+ % (lowRange, highRange)
+ opt3 = '-e attreplace=\"description: random modify XXXXXX\"'
+ opt4 = '-N %s -I 32 -v -q' % ldcltLoop
+ opts = '%s %s %s %s' % (opt1, opt2, opt3, opt4)
+ </script>
+
+ <call function="'ldclt'">
+ { 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : server2Host,
+ 'dsInstancePort' : server2.getPort(),
+ 'dsInstanceDn' : server2.getRootDn(),
+ 'dsInstancePswd' : server2.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_modify-%s_2.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-jvm'">
+ <sequence>
+ <loop from="1" to="jvmLoop" var="loop">
+ <sequence>
+ <message>
+ 'LOOP %s out of %s' % (loop, jvmLoop)
+ </message>
+
+ <message>
+ 'replication_modify_multiple: save jvm information'
+ </message>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : server1Host,
+ 'dsPath' : server1Path,
+ 'dsInstanceHost' : server1Host,
+ 'dsInstancePort' : server1.getPort(),
+ 'dsInstanceDn' : server1.getRootDn(),
+ 'dsInstancePswd' : server1.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' \
+ % (suffix, loop),
+ 'outputPath' : server1Dir
+ }
+ </call>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : server2Host,
+ 'dsPath' : server2Path,
+ 'dsInstanceHost' : server2Host,
+ 'dsInstancePort' : server2.getPort(),
+ 'dsInstanceDn' : server2.getRootDn(),
+ 'dsInstancePswd' : server2.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' \
+ % (suffix, loop),
+ 'outputPath' : server2Dir
+ }
+ </call>
+
+ <if expr="loop != jvmLoop">
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : jvmSleep }
+ </call>
+ </if>
+
+ </sequence>
+ </loop>
+ </sequence>
+ </block>
+ </parallel>
+ <!--</sequence>
+ </timer>
+
+ <script>timerRC = RC</script>
+
+ <if expr="timerRC == 0">
+ <sequence>
+ <message>'Timer exceeds %s' % timerDuration</message>
+ <tcstatus result="'fail'"/>
+ </sequence>
+ </if>-->
+
+ <message>
+ 'Copy %s/ldclt_modify-%s_1.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_modify-%s_1.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_modify-%s_1.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <message>
+ 'Copy %s/ldclt_modify-%s_2.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_modify-%s_2.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_modify-%s_2.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check server is still running')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <paralleliterate var="server" in="_topologyServerList" indexvar="i">
+ <sequence>
+ <script>
+ serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+ </script>
+
+ <message>
+ 'replication_modify_multiple: Check server is still running on \
+ %s:%s' % (server.getHostname(), server.getPort())
+ </message>
+
+ <!-- Modify entry on one of the servers -->
+ <call function="'isAlive'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : serverPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'noOfLoops' : 10,
+ 'noOfMilliSeconds' : 5000
+ }
+ </call>
+ </sequence>
+ </paralleliterate>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify replication')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modify_multiple: Verify replication is still working'
+ </message>
+
+ <!-- Verify the replication is still working among the servers in
+ the topology -->
+ <call function="'verifyReplication'">
+ [ _topologyServerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify tree synchronization')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modify_multiple: Verify the tree synchronization'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'verifyTrees'">
+ [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check replication status')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modify_multiple: Check replication status'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'getReplicationStatus'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstanceAdminPort' : master.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_cleanup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_cleanup'">
+ { 'suiteSuffix' : suffix }
+ </call>
+
+ <call function="'testSuite_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/replication/replication_modifyrdn.xml b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_modifyrdn.xml
new file mode 100644
index 0000000..1f5de56
--- /dev/null
+++ b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_modifyrdn.xml
@@ -0,0 +1,450 @@
+<?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 2009 Sun Microsystems, Inc.
+ ! -->
+<stax>
+
+ <defaultcall function="replication_modifyrdn"/>
+
+ <function name="replication_modifyrdn">
+
+ <sequence>
+
+ <block name="'replication-modifyrdn'">
+
+ <sequence>
+
+ <script>
+ if not CurrentTestPath.has_key('group'):
+ CurrentTestPath['group']='replication'
+ CurrentTestPath['suite']=STAXCurrentBlock
+ </script>
+
+ <call function="'testSuite_Preamble'"/>
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_setup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_setup'"/>
+
+ <script>
+ ldcltLoop = testsDuration / 10
+ lowRange = 100000
+ highRange = lowRange + 2 * numberOfEntries
+ jvmLoop = testsDuration / 1800 + 1
+ jvmSleep = 1800000
+ baseDN = 'ou=People,%s' % synchroSuffix
+ ldcltDir = '%s/ldclt_dir' % TMPDIR
+ masterDir = '%s/..' % masterPath
+ ldifTemplate = '%s/%s_entries.template' \
+ % (masterDir, numberOfEntries)
+ ldifFile = '%s/%s_entries.ldif' \
+ % (masterDir, numberOfEntries)
+ totalEntries = numberOfEntries + 2
+
+ suffix = 'modifyrdn'
+ </script>
+
+
+ <testcase name="getTestCaseName('Preamble')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <!-- Check if 'ldifFile' exists -->
+ <call function="'GetEntry'">
+ {
+ 'location' : masterHost ,
+ 'entry' : ldifFile ,
+ 'attribute' : 'TYPE'
+ }
+ </call>
+ <if expr="RC == 48">
+ <sequence>
+ <message>
+ 'replication_modifyrdn: File %s does not exist, create it' \
+ % ldifFile
+ </message>
+
+ <message>
+ 'replication_modifyrdn: Make a make-ldif template file'
+ </message>
+
+ <call function="'MakeAMakeLdifTemplate'">
+ {
+ 'numEntries' : numberOfEntries,
+ 'suffix' : synchroSuffix,
+ 'startFrom' : lowRange,
+ 'additionalAttributes' : True,
+ 'templateFile' : ldifTemplate,
+ 'templateLocation' : masterHost
+ }
+ </call>
+
+ <message>
+ 'replication_modifyrdn: Make the ldif file'
+ </message>
+
+ <call function="'MakeLdifWithScript'">
+ {
+ 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'templateFile' : ldifTemplate,
+ 'ldifFile' : ldifFile
+ }
+ </call>
+ </sequence>
+ <else>
+ <message>
+ 'replication_modifyrdn: File %s exists, do nothing' \
+ % ldifFile
+ </message>
+ </else>
+ </if>
+
+ <message>
+ 'replication_modifyrdn: Import large ldif file'
+ </message>
+
+ <!-- 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,
+ 'dsBackEnd' : DIRECTORY_INSTANCE_BE,
+ 'dsLdifFile' : ldifFile
+ }
+ </call>
+
+ <script>
+ returnString = STAXResult[0][1]
+ </script>
+
+ <call function="'checktestString'">
+ { 'returnString' : returnString,
+ 'expectedString' : 'Processed %s entries' % totalEntries
+ }
+ </call>
+
+ <message>
+ 'replication_modifyrdn: Start DS running on %s:%s' % \
+ (masterHost, master.getPort())
+ </message>
+
+ <!-- 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' : 5000
+ }
+ </call>
+
+ <!-- Perform the total update -->
+ <call function="'initializeReplication'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'sourceInstanceHost' : masterHost,
+ 'sourceInstanceAdminPort' : master.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <testcase name="getTestCaseName('Run ldclt clients')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modifyrdn: Run ldclt modify'
+ </message>
+
+ <!--<timer duration="timerDuration">
+ <sequence>-->
+ <parallel>
+ <block name="'ldclt-modifyrdn-threads'">
+ <sequence>
+
+ <message>
+ 'replication_modifyrdn: modifyrdn threads'
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1'
+ opt2 = '-e rename,rdn=\"uid:user.[RNDN(%s;%s;6)]\"' \
+ % (lowRange, highRange)
+ opt3 = '-N %s -I 68 -I 32 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ { 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_modifyrdn-%s.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-jvm'">
+ <sequence>
+ <loop from="1" to="jvmLoop" var="loop">
+ <sequence>
+ <message>
+ 'LOOP %s out of %s' % (loop, jvmLoop)
+ </message>
+
+ <message>
+ 'replication_modifyrdn: save jvm information'
+ </message>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' % (suffix, loop),
+ 'outputPath' : masterDir
+ }
+ </call>
+
+ <if expr="loop != jvmLoop">
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : jvmSleep }
+ </call>
+ </if>
+
+ </sequence>
+ </loop>
+ </sequence>
+ </block>
+ </parallel>
+ <!--</sequence>
+ </timer>
+
+ <script>timerRC = RC</script>
+
+ <if expr="timerRC == 0">
+ <sequence>
+ <message>'Timer exceeds %s' % timerDuration</message>
+ <tcstatus result="'fail'"/>
+ </sequence>
+ </if>-->
+
+ <message>
+ 'Copy %s/ldclt_modifyrdn-%s.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_modifyrdn-%s.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_modifyrdn-%s.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check server is still running')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <paralleliterate var="server" in="_topologyServerList" indexvar="i">
+ <sequence>
+ <script>
+ serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+ </script>
+
+ <message>
+ 'replication_modifyrdn: Check server is still running on \
+ %s:%s' % (server.getHostname(), server.getPort())
+ </message>
+
+ <!-- Modify entry on one of the servers -->
+ <call function="'isAlive'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : serverPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'noOfLoops' : 10,
+ 'noOfMilliSeconds' : 5000
+ }
+ </call>
+ </sequence>
+ </paralleliterate>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <testcase name="getTestCaseName('Verify replication')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modifyrdn: Verify replication is still working'
+ </message>
+
+ <!-- Verify the replication is still working among the servers in
+ the topology -->
+ <call function="'verifyReplication'">
+ [ _topologyServerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify tree synchronization')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modifyrdn: Verify the tree synchronization'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'verifyTrees'">
+ [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check replication status')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modifyrdn: Check replication status'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'getReplicationStatus'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstanceAdminPort' : master.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_cleanup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_cleanup'">
+ { 'suiteSuffix' : suffix }
+ </call>
+
+ <call function="'testSuite_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/replication/replication_modifyrdn_multiple.xml b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_modifyrdn_multiple.xml
new file mode 100644
index 0000000..ab47515
--- /dev/null
+++ b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_modifyrdn_multiple.xml
@@ -0,0 +1,519 @@
+<?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 2009 Sun Microsystems, Inc.
+ ! -->
+<stax>
+
+ <defaultcall function="replication_modifyrdn_multiple"/>
+
+ <function name="replication_modifyrdn_multiple">
+
+ <sequence>
+
+ <block name="'replication-modifyrdn-multiple'">
+
+ <sequence>
+
+ <script>
+ if not CurrentTestPath.has_key('group'):
+ CurrentTestPath['group']='replication'
+ CurrentTestPath['suite']=STAXCurrentBlock
+ </script>
+
+ <call function="'testSuite_Preamble'"/>
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_setup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_setup'"/>
+
+ <script>
+ ldcltLoop = testsDuration / 10
+ lowRange = 100000
+ highRange = lowRange + numberOfEntries
+ jvmLoop = testsDuration / 1800 + 1
+ jvmSleep = 1800000
+ baseDN = 'ou=People,%s' % synchroSuffix
+
+ server1Host = server1.getHostname()
+ server1Path = '%s/%s' % (server1.getDir(),OPENDSNAME)
+ server1Dir = server1.getDir()
+ server2Host = server2.getHostname()
+ server2Path = '%s/%s' % (server2.getDir(),OPENDSNAME)
+ server2Dir = server2.getDir()
+
+ ldifTemplate = '%s/%s_entries.template' \
+ % (server1Dir, numberOfEntries)
+ ldifFile = '%s/%s_entries.ldif' \
+ % (server1Dir, numberOfEntries)
+ totalEntries = numberOfEntries + 2
+
+ suffix = 'modifyrdn_multiple'
+ </script>
+
+
+ <testcase name="getTestCaseName('Preamble')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <!-- Check if 'ldifFile' exists -->
+ <call function="'GetEntry'">
+ {
+ 'location' : server1Host ,
+ 'entry' : ldifFile ,
+ 'attribute' : 'TYPE'
+ }
+ </call>
+ <if expr="RC == 48">
+ <sequence>
+ <message>
+ 'replication_modifyrdn_multiple: File %s does not exist, create it' \
+ % ldifFile
+ </message>
+
+ <message>
+ 'replication_modifyrdn_multiple: Make a make-ldif template file'
+ </message>
+
+ <call function="'MakeAMakeLdifTemplate'">
+ {
+ 'numEntries' : numberOfEntries,
+ 'suffix' : synchroSuffix,
+ 'startFrom' : lowRange,
+ 'additionalAttributes' : True,
+ 'templateFile' : ldifTemplate,
+ 'templateLocation' : server1Host
+ }
+ </call>
+
+ <message>
+ 'replication_modifyrdn_multiple: Make the ldif file'
+ </message>
+
+ <call function="'MakeLdifWithScript'">
+ {
+ 'location' : server1Host,
+ 'dsPath' : server1Path,
+ 'templateFile' : ldifTemplate,
+ 'ldifFile' : ldifFile
+ }
+ </call>
+ </sequence>
+ <else>
+ <message>
+ 'replication_modifyrdn_multiple: File %s exists, do nothing' % ldifFile
+ </message>
+ </else>
+ </if>
+
+ <message>
+ 'replication_modifyrdn_multiple: Import large ldif file'
+ </message>
+
+ <!-- Stop "server1" Directory Server -->
+ <call function="'StopDsWithScript'">
+ { 'location' : server1Host,
+ 'dsPath' : server1Path,
+ 'dsHost' : server1Host,
+ 'dsAdminPort' : server1.getAdminPort(),
+ 'dsBindDN' : server1.getRootDn(),
+ 'dsBindPwd' : server1.getRootPwd()
+ }
+ </call>
+
+ <!-- Import data into "server1" Directory Server -->
+ <call function="'ImportLdifWithScript'">
+ { 'location' : server1Host,
+ 'dsPath' : server1Path,
+ 'dsBackEnd' : DIRECTORY_INSTANCE_BE,
+ 'dsLdifFile' : ldifFile
+ }
+ </call>
+
+ <script>
+ returnString = STAXResult[0][1]
+ </script>
+
+ <call function="'checktestString'">
+ { 'returnString' : returnString,
+ 'expectedString' : 'Processed %s entries' % totalEntries
+ }
+ </call>
+
+ <message>
+ 'replication_modifyrdn_multiple: Start DS running on %s:%s' % \
+ (server1Host, server1.getPort())
+ </message>
+
+ <!-- Start the Directory Server -->
+ <call function="'StartDsWithScript'">
+ { 'location' : server1Host,
+ 'dsPath' : server1Path
+ }
+ </call>
+
+ <!-- Wait for DS to start -->
+ <call function="'isAlive'">
+ { 'location' : server1Host,
+ 'dsPath' : server1Path,
+ 'dsInstanceHost' : server1Host,
+ 'dsInstancePort' : server1.getPort(),
+ 'dsInstanceDn' : server1.getRootDn(),
+ 'dsInstancePswd' : server1.getRootPwd(),
+ 'noOfLoops' : 10,
+ 'noOfMilliSeconds' : 5000
+ }
+ </call>
+
+ <!-- Perform the total update -->
+ <call function="'initializeReplication'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'sourceInstanceHost' : server1Host,
+ 'sourceInstanceAdminPort' : server1.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <testcase name="getTestCaseName('Run ldclt clients')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modifyrdn_multiple: Run ldclt add'
+ </message>
+
+ <!--<timer duration="timerDuration">
+ <sequence>-->
+ <parallel>
+ <block name="'ldclt-modifyrdn-threads-server1'">
+ <sequence>
+
+ <message>
+ 'replication_modifyrdn: modifyrdn threads on %s:%s' \
+ % (server1Host, server1.getPort())
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1'
+ opt2 = '-e rename,rdn=\"uid:user.[RNDN(%s;%s;6)]\"' \
+ % (lowRange, highRange)
+ opt3 = '-N %s -I 68 -I 32 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ { 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : server1Host,
+ 'dsInstancePort' : server1.getPort(),
+ 'dsInstanceDn' : server1.getRootDn(),
+ 'dsInstancePswd' : server1.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_modifyrdn-%s_1.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-modifyrdn-threads-server2'">
+ <sequence>
+
+ <message>
+ 'replication_modifyrdn: modifyrdn threads on %s:%s' \
+ % (server2Host, server2.getPort())
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1'
+ opt2 = '-e rename,rdn=\"uid:user.[RNDN(%s;%s;6)]\"' \
+ % (lowRange, highRange)
+ opt3 = '-N %s -I 68 -I 32 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ { 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : server2Host,
+ 'dsInstancePort' : server2.getPort(),
+ 'dsInstanceDn' : server2.getRootDn(),
+ 'dsInstancePswd' : server2.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_modifyrdn-%s_2.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-jvm'">
+ <sequence>
+ <loop from="1" to="jvmLoop" var="loop">
+ <sequence>
+ <message>
+ 'LOOP %s out of %s' % (loop, jvmLoop)
+ </message>
+
+ <message>
+ 'replication_modifyrdn_multiple: save jvm information'
+ </message>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : server1Host,
+ 'dsPath' : server1Path,
+ 'dsInstanceHost' : server1Host,
+ 'dsInstancePort' : server1.getPort(),
+ 'dsInstanceDn' : server1.getRootDn(),
+ 'dsInstancePswd' : server1.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' \
+ % (suffix, loop),
+ 'outputPath' : server1Dir
+ }
+ </call>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : server2Host,
+ 'dsPath' : server2Path,
+ 'dsInstanceHost' : server2Host,
+ 'dsInstancePort' : server2.getPort(),
+ 'dsInstanceDn' : server2.getRootDn(),
+ 'dsInstancePswd' : server2.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' \
+ % (suffix, loop),
+ 'outputPath' : server2Dir
+ }
+ </call>
+
+ <if expr="loop != jvmLoop">
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : jvmSleep }
+ </call>
+ </if>
+
+ </sequence>
+ </loop>
+ </sequence>
+ </block>
+ </parallel>
+ <!--</sequence>
+ </timer>
+
+ <script>timerRC = RC</script>
+
+ <if expr="timerRC == 0">
+ <sequence>
+ <message>'Timer exceeds %s' % timerDuration</message>
+ <tcstatus result="'fail'"/>
+ </sequence>
+ </if>-->
+
+ <message>
+ 'Copy %s/ldclt_modifyrdn-%s_1.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_modifyrdn-%s_1.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_modiryrdn-%s_1.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <message>
+ 'Copy %s/ldclt_modifyrdn-%s_2.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_modifyrdn-%s_2.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_modifyrdn-%s_2.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check server is still running')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <paralleliterate var="server" in="_topologyServerList" indexvar="i">
+ <sequence>
+ <script>
+ serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+ </script>
+
+ <message>
+ 'replication_modifyrdn_multiple: Check server is still running on \
+ %s:%s' % (server.getHostname(), server.getPort())
+ </message>
+
+ <!-- Modify entry on one of the servers -->
+ <call function="'isAlive'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : serverPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'noOfLoops' : 10,
+ 'noOfMilliSeconds' : 5000
+ }
+ </call>
+ </sequence>
+ </paralleliterate>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify replication')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modifyrdn_multiple: Verify replication is still working'
+ </message>
+
+ <!-- Verify the replication is still working among the servers in
+ the topology -->
+ <call function="'verifyReplication'">
+ [ _topologyServerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify tree synchronization')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modifyrdn_multiple: Verify the tree synchronization'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'verifyTrees'">
+ [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check replication status')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_modifyrdn_multiple: Check replication status'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'getReplicationStatus'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstanceAdminPort' : master.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_cleanup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_cleanup'">
+ { 'suiteSuffix' : suffix }
+ </call>
+
+ <call function="'testSuite_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
diff --git a/opends/tests/staf-tests/stress-tests/testcases/replication/replication_search.xml b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_search.xml
new file mode 100644
index 0000000..6f00111
--- /dev/null
+++ b/opends/tests/staf-tests/stress-tests/testcases/replication/replication_search.xml
@@ -0,0 +1,450 @@
+<?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 2009 Sun Microsystems, Inc.
+ ! -->
+<stax>
+
+ <defaultcall function="replication_search"/>
+
+ <function name="replication_search">
+
+ <sequence>
+
+ <block name="'replication-search'">
+
+ <sequence>
+
+ <script>
+ if not CurrentTestPath.has_key('group'):
+ CurrentTestPath['group']='replication'
+ CurrentTestPath['suite']=STAXCurrentBlock
+ </script>
+
+ <call function="'testSuite_Preamble'"/>
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_setup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_setup'"/>
+
+ <script>
+ ldcltLoop = testsDuration / 10
+ lowRange = 100000
+ highRange = lowRange + numberOfEntries
+ jvmLoop = testsDuration / 1800 + 1
+ jvmSleep = 1800000
+ baseDN = 'ou=People,%s' % synchroSuffix
+ ldcltDir = '%s/ldclt_dir' % TMPDIR
+ masterDir = '%s/..' % masterPath
+ ldifTemplate = '%s/%s_entries.template' \
+ % (masterDir, numberOfEntries)
+ ldifFile = '%s/%s_entries.ldif' \
+ % (masterDir, numberOfEntries)
+ totalEntries = numberOfEntries + 2
+
+ suffix = 'search'
+ </script>
+
+
+ <testcase name="getTestCaseName('Preamble')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <!-- Check if 'ldifFile' exists -->
+ <call function="'GetEntry'">
+ {
+ 'location' : masterHost ,
+ 'entry' : ldifFile ,
+ 'attribute' : 'TYPE'
+ }
+ </call>
+ <if expr="RC == 48">
+ <sequence>
+ <message>
+ 'replication_search: File %s does not exist, create it' \
+ % ldifFile
+ </message>
+
+ <message>
+ 'replication_search: Make a make-ldif template file'
+ </message>
+
+ <call function="'MakeAMakeLdifTemplate'">
+ {
+ 'numEntries' : numberOfEntries,
+ 'suffix' : synchroSuffix,
+ 'startFrom' : lowRange,
+ 'additionalAttributes' : True,
+ 'templateFile' : ldifTemplate,
+ 'templateLocation' : masterHost
+ }
+ </call>
+
+ <message>
+ 'replication_search: Make the ldif file'
+ </message>
+
+ <call function="'MakeLdifWithScript'">
+ {
+ 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'templateFile' : ldifTemplate,
+ 'ldifFile' : ldifFile
+ }
+ </call>
+ </sequence>
+ <else>
+ <message>
+ 'replication_search: File %s exists, do nothing' \
+ % ldifFile
+ </message>
+ </else>
+ </if>
+
+ <message>
+ 'replication_search: Import large ldif file'
+ </message>
+
+ <!-- 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,
+ 'dsBackEnd' : DIRECTORY_INSTANCE_BE,
+ 'dsLdifFile' : ldifFile
+ }
+ </call>
+
+ <script>
+ returnString = STAXResult[0][1]
+ </script>
+
+ <call function="'checktestString'">
+ { 'returnString' : returnString,
+ 'expectedString' : 'Processed 10002 entries'
+ }
+ </call>
+
+ <message>
+ 'replication_search: Start DS running on %s:%s' % \
+ (masterHost, master.getPort())
+ </message>
+
+ <!-- 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' : 5000
+ }
+ </call>
+
+ <!-- Perform the total update -->
+ <call function="'initializeReplication'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'sourceInstanceHost' : masterHost,
+ 'sourceInstanceAdminPort' : master.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <testcase name="getTestCaseName('Run ldclt clients')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_search: Run ldclt search'
+ </message>
+
+ <!--<timer duration="timerDuration">
+ <sequence>-->
+ <parallel>
+ <block name="'ldclt-search-threads'">
+ <sequence>
+
+ <message>
+ 'replication_search: search threads'
+ </message>
+
+ <script>
+ opt1 = '-e delayedstartup=1 -r %s -R %s' \
+ % (lowRange, highRange)
+ opt2 = '-e esearch,random -f uid=user.XXXXXX'
+ opt3 = '-N %s -I 32 -v -q' % ldcltLoop
+ opts = '%s %s %s' % (opt1, opt2, opt3)
+ </script>
+
+ <call function="'ldclt'">
+ { 'location' : STAF_CLIENT_HOSTNAME,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'dsBaseDn' : baseDN,
+ 'ldcltOptions' : opts,
+ 'outputFile' : 'ldclt_search-%s.res' % suffix,
+ 'outputPath' : ldcltDir
+ }
+ </call>
+
+ </sequence>
+ </block>
+
+ <block name="'ldclt-jvm'">
+ <sequence>
+ <loop from="1" to="jvmLoop" var="loop">
+ <sequence>
+ <message>
+ 'LOOP %s out of %s' % (loop, jvmLoop)
+ </message>
+
+ <message>
+ 'replication_search: save jvm information'
+ </message>
+
+ <call function="'ldapSearchWithScript'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstancePort' : master.getPort(),
+ 'dsInstanceDn' : master.getRootDn(),
+ 'dsInstancePswd' : master.getRootPwd(),
+ 'dsBaseDN' : 'cn=JVM Memory Usage,cn=monitor',
+ 'dsFilter' : 'objectclass=*',
+ 'expectedRC' : 'noCheck',
+ 'outputFile' : 'jvm_%s_%s.out' % (suffix, loop),
+ 'outputPath' : masterDir
+ }
+ </call>
+
+ <if expr="loop != jvmLoop">
+ <call function="'Sleep'">
+ { 'sleepForMilliSeconds' : jvmSleep }
+ </call>
+ </if>
+
+ </sequence>
+ </loop>
+ </sequence>
+ </block>
+ </parallel>
+ <!--</sequence>
+ </timer>
+
+ <script>timerRC = RC</script>
+
+ <if expr="timerRC == 0">
+ <sequence>
+ <message>'Timer exceeds %s' % timerDuration</message>
+ <tcstatus result="'fail'"/>
+ </sequence>
+ </if>-->
+
+ <message>
+ 'Copy %s/ldclt_search-%s.res from %s to %s on %s' % \
+ (ldcltDir, suffix, STAF_CLIENT_HOSTNAME, logs.sut, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : STAF_CLIENT_HOSTNAME,
+ 'srcfile' : '%s/ldclt_search-%s.res' % (ldcltDir, suffix),
+ 'destfile' : '%s/ldclt_search-%s.res' % (logs.sut, suffix),
+ 'remotehost' : STAXServiceMachine
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check server is still running')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <paralleliterate var="server" in="_topologyServerList" indexvar="i">
+ <sequence>
+ <script>
+ serverPath = '%s/%s' % (server.getDir(), OPENDSNAME)
+ </script>
+
+ <message>
+ 'replication_search: Check server is still running on \
+ %s:%s' % (server.getHostname(), server.getPort())
+ </message>
+
+ <!-- Modify entry on one of the servers -->
+ <call function="'isAlive'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : serverPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'noOfLoops' : 10,
+ 'noOfMilliSeconds' : 5000
+ }
+ </call>
+ </sequence>
+ </paralleliterate>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <testcase name="getTestCaseName('Verify replication')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_search: Verify replication is still working'
+ </message>
+
+ <!-- Verify the replication is still working among the servers in
+ the topology -->
+ <call function="'verifyReplication'">
+ [ _topologyServerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Verify tree synchronization')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_search: Verify the tree synchronization'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'verifyTrees'">
+ [ clientHost, clientPath, master, consumerList, synchroSuffix ]
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+
+ <testcase name="getTestCaseName('Check replication status')">
+
+ <sequence>
+
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ 'replication_search: Check replication status'
+ </message>
+
+ <!-- Verify the synchronization of the trees among the servers in
+ the topology -->
+ <call function="'getReplicationStatus'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'dsInstanceHost' : masterHost,
+ 'dsInstanceAdminPort' : master.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+
+ </sequence>
+
+ </testcase>
+
+
+ <import machine="STAF_LOCAL_HOSTNAME"
+ file="'%s/../functional-tests/testcases/replication/replication_cleanup.xml' % (TESTS_DIR)"/>
+ <call function="'replication_cleanup'">
+ { 'suiteSuffix' : suffix }
+ </call>
+
+ <call function="'testSuite_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
--
Gitblit v1.10.0