From aa6c69c4846d7c74c24dd9239555904ed169f51e Mon Sep 17 00:00:00 2001
From: Gary Williams <gary.williams@forgerock.com>
Date: Thu, 29 Mar 2012 19:41:51 +0000
Subject: [PATCH] Improve setup/cleanup of fractional replication functional tests
---
opends/tests/staf-tests/functional-tests/testcases/fractional-replication/fractional-replication_cleanup.xml | 160 +++++---
opends/tests/staf-tests/functional-tests/testcases/fractional-replication/basic.xml | 2
opends/tests/staf-tests/functional-tests/testcases/fractional-replication/fractional-replication_setup.xml | 906 +++++++++++++++++++++++++------------------------
3 files changed, 558 insertions(+), 510 deletions(-)
diff --git a/opends/tests/staf-tests/functional-tests/testcases/fractional-replication/basic.xml b/opends/tests/staf-tests/functional-tests/testcases/fractional-replication/basic.xml
index 750b5ec..1b75d9a 100644
--- a/opends/tests/staf-tests/functional-tests/testcases/fractional-replication/basic.xml
+++ b/opends/tests/staf-tests/functional-tests/testcases/fractional-replication/basic.xml
@@ -126,7 +126,7 @@
<finally>
<sequence>
<!-- Test Suite Cleanup -->
- <message>'Finally: Global Schema Cleanup.'</message>
+ <message>'Finally: Global Cleanup.'</message>
<try>
<sequence>
<!-- fractional-replication cleanup -->
diff --git a/opends/tests/staf-tests/functional-tests/testcases/fractional-replication/fractional-replication_cleanup.xml b/opends/tests/staf-tests/functional-tests/testcases/fractional-replication/fractional-replication_cleanup.xml
index 0ce37c8..cc57359 100644
--- a/opends/tests/staf-tests/functional-tests/testcases/fractional-replication/fractional-replication_cleanup.xml
+++ b/opends/tests/staf-tests/functional-tests/testcases/fractional-replication/fractional-replication_cleanup.xml
@@ -44,79 +44,103 @@
<block name="'fractional-replication-cleanup'">
- <sequence>
+ <testcase name="getTestCaseName('Fractional Repl Cleanup')">
- <!-- Stop the servers in the topology -->
- <call function="'stopServers'">
- [_splitServerList]
- </call>
+ <try>
+
+ <sequence>
+ <call function="'testCase_Preamble'"/>
- <!-- Copy the server logs to the controller machine -->
- <if expr="suiteSuffix != None">
- <paralleliterate var="server" in="_splitServerList" indexvar="i">
+ <!-- Stop the servers in the topology -->
+ <call function="'stopServers'">
+ [_splitServerList]
+ </call>
+
+ <!-- Copy the server logs to the controller machine -->
+ <if expr="suiteSuffix != None">
+ <paralleliterate var="server" in="_splitServerList" 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/fractional-replication from %s to %s/fractional-replication_%s on %s' % \
+ (serverPath, serverName, logs.sut, suffix, STAXServiceMachine)
+ </message>
+ <call function="'copyFile'">
+ {
+ 'location' : serverHost,
+ 'srcfile' : '%s/logs/fractional-replication' % serverPath,
+ 'destfile' : '%s/fractional-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>
+
+ <call function="'removeTopology'">
+ { 'multipleInstanceTopology' : True }
+ </call>
+
+ <call function="'checkRC'">
+ { 'returncode' : RC ,
+ 'result' : STAXResult }
+ </call>
+
+ <tcstatus result="'pass'"></tcstatus>
+
+ </sequence>
+
+ <catch exception="'STAXException'" typevar="eType" var="eInfo">
<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/fractional-replication from %s to %s/fractional-replication_%s on %s' % \
- (serverPath, serverName, logs.sut, suffix, STAXServiceMachine)
- </message>
- <call function="'copyFile'">
- {
- 'location' : serverHost,
- 'srcfile' : '%s/logs/fractional-replication' % serverPath,
- 'destfile' : '%s/fractional-replication_%s' % (logs.sut, suffix),
- 'remotehost' : STAXServiceMachine
- }
- </call>
+ <message log="1" level="'fatal'">
+ '%s: Failed to cleanup. eInfo(%s)' % (eType,eInfo)
+ </message>
+ <throw exception="'STAFException.TestSuite.CleanupException'" />
</sequence>
- </paralleliterate>
- </if>
+ </catch>
+ <finally>
+ <!-- Test Case postamble -->
+ <call function="'testCase_Postamble'"/>
+ </finally>
+
+ </try>
- <!-- Remove the topology created for the test suite -->
- <message>
- 'Remove DS topology created for the Synchronization Basic Test Suite'
- </message>
-
- <call function="'removeTopology'">
- { 'multipleInstanceTopology' : True }
- </call>
-
- <call function="'checkRC'">
- { 'returncode' : RC ,
- 'result' : STAXResult }
- </call>
-
- </sequence>
+ </testcase>
</block>
diff --git a/opends/tests/staf-tests/functional-tests/testcases/fractional-replication/fractional-replication_setup.xml b/opends/tests/staf-tests/functional-tests/testcases/fractional-replication/fractional-replication_setup.xml
index f5aaae4..b7b078c 100644
--- a/opends/tests/staf-tests/functional-tests/testcases/fractional-replication/fractional-replication_setup.xml
+++ b/opends/tests/staf-tests/functional-tests/testcases/fractional-replication/fractional-replication_setup.xml
@@ -24,7 +24,7 @@
! CDDL HEADER END
!
! Copyright 2009-2010 Sun Microsystems, Inc.
- ! Portions Copyright 2011 ForgeRock AS.
+ ! Portions Copyright 2011-2012 ForgeRock AS.
! -->
<stax>
@@ -81,369 +81,347 @@
<sequence>
- <block name="'replication-setup'">
+ <block name="'fractional-replication-startup'">
- <sequence>
+ <testcase name="getTestCaseName('Fractional Repl Setup')">
- <message>
- 'Create DS topology as described in %s' % topologyFile
- </message>
-
- <call function="'createTopology'">
- { 'topologyDescFile' : topologyFile,
- 'sharedDataFolder' : 'fractional-replication',
- 'splitReplicationServers' : globalSplitServers,
- 'fileExtensions' : ['template'],
- }
- </call>
-
- <call function="'checkRC'">
- { 'returncode' : RC ,
- 'result' : STAXResult
- }
- </call>
-
- <!-- Setup variables -->
- <script>
- client = _topologyServerList[0]
- clientHost = client.getHostname()
- clientPath = '%s/%s' % (client.getDir(),OPENDSNAME)
- clientDataDir = '%s' % client.getDataDir()
-
- server1 = _topologyServerList[0]
- server2 = _topologyServerList[1]
-
- master = _topologyServerList[0]
- masterHost = master.getHostname()
- masterReplicationServer = master.getChangelogServer()
- masterPath = '%s/%s' % (master.getDir(),OPENDSNAME)
- masterDataDir = master.getDataDir()
- masterTempDir = master.getTmpDir()
- synchroSuffix = master.getSynchronizedSuffixList()[0].getSuffixDn()
- masterBackupDir = '%s/fractional-replication/master_backup' % masterTempDir
-
- consumerList = _topologyServerList[1:]
-
- domainMap = STAXGlobal({})
- schemaMap = STAXGlobal({})
- </script>
-
- <if expr="dataFile">
+ <try>
+
<sequence>
- <script>
- importDataFile = '%s/fractional-replication/%s' % (masterDataDir, dataFile)
- </script>
+ <call function="'testCase_Preamble'"/>
<message>
- 'Import data from %s into server %s:%s' \
- % (importDataFile, masterHost, master.getPort())
+ 'Create DS topology as described in %s' % topologyFile
</message>
-
- <!-- Import data into "master" Directory Server -->
- <call function="'ImportLdifWithScript'">
- { 'location' : masterHost,
- 'dsPath' : masterPath,
- 'backEnd' : DIRECTORY_INSTANCE_BE,
- 'ldifFile' : importDataFile
+
+ <call function="'createTopology'">
+ { 'topologyDescFile' : topologyFile,
+ 'sharedDataFolder' : 'fractional-replication',
+ 'splitReplicationServers' : globalSplitServers,
+ 'fileExtensions' : ['template'],
}
</call>
-
- <!-- Backup "master" server -->
- <call function="'backup'">
- { 'location' : masterHost,
- 'dsPath' : masterPath,
- 'backupDir' : masterBackupDir
+
+ <call function="'checkRC'">
+ { 'returncode' : RC ,
+ 'result' : STAXResult
}
</call>
- </sequence>
- </if>
-
-
- <!-- Start the servers in the topology -->
- <call function="'startServers'">
- [_splitServerList]
- </call>
-
- <paralleliterate var="s" in="_splitServerList">
- <sequence>
+
+ <!-- Setup variables -->
<script>
- ls = '%s:%s' % (s.getHostname(), s.getPort())
+ client = _topologyServerList[0]
+ clientHost = client.getHostname()
+ clientPath = '%s/%s' % (client.getDir(),OPENDSNAME)
+ clientDataDir = '%s' % client.getDataDir()
+
+ server1 = _topologyServerList[0]
+ server2 = _topologyServerList[1]
+
+ master = _topologyServerList[0]
+ masterHost = master.getHostname()
+ masterReplicationServer = master.getChangelogServer()
+ masterPath = '%s/%s' % (master.getDir(),OPENDSNAME)
+ masterDataDir = master.getDataDir()
+ masterTempDir = master.getTmpDir()
+ synchroSuffix = master.getSynchronizedSuffixList()[0].getSuffixDn()
+ masterBackupDir = '%s/fractional-replication/master_backup' % masterTempDir
+
+ consumerList = _topologyServerList[1:]
+
+ domainMap = STAXGlobal({})
+ schemaMap = STAXGlobal({})
</script>
-
- <call function="'getSchemaDict'">
- { 'location' : s.getHostname(),
- 'dsPath' : '%s/%s' % (s.getDir(),OPENDSNAME),
- 'server' : s,
- }
- </call>
- <if expr="STAXResult">
- <script>
- schemaMap[ls] = STAXResult
- </script>
- <else>
- <sequence>
- <message>'Failed getting the schema for ' % ls</message>
- <break/>
- </sequence>
- </else>
- </if>
- </sequence>
- </paralleliterate>
-
- <if expr="len(_topologyReplServerList) != 0">
- <paralleliterate var="replServer" in="_topologyReplServerList">
- <!-- Remove userRoot backend from replication servers -->
- <sequence>
- <message>
- 'Remove userRoot backend from replication server %s:%s' % \
- (replServer.getHostname(), replServer.getPort())
- </message>
-
- <call function="'dsconfig'">
- { 'location' : replServer.getHostname(),
- 'dsPath' : '%s/%s' \
- % (replServer.getDir(),OPENDSNAME),
- 'dsInstanceHost' : replServer.getHostname(),
- 'dsInstanceAdminPort' : replServer.getAdminPort(),
- 'dsInstanceDn' : replServer.getRootDn(),
- 'dsInstancePswd' : replServer.getRootPwd(),
- 'subcommand' : 'delete-backend',
- 'objectType' : 'backend-name',
- 'objectName' : 'userRoot'
- }
- </call>
- </sequence>
- </paralleliterate>
- </if>
-
- <iterate var="server" in="_splitServerList[1:]">
- <sequence>
- <!-- Configure replication if required so by the server
- ! (i.e. server is a changelog server and/or has synchronized
- ! suffixes)
- -->
- <if expr="server.requiresSynchronization()">
+
+ <if expr="dataFile">
<sequence>
- <message>
- 'Instance requires REPLICATION configuration.'
- </message>
-
<script>
- if master.isOnlyLdapServer():
- masterReplPort = None
- else:
- masterReplPort = masterReplicationServer.getPort()
-
- if server.isOnlyLdapServer():
- serverReplPort = None
- else:
- replicationServer = server.getChangelogServer()
- serverReplPort = replicationServer.getPort()
-
- if server.isOnlyReplServer():
- suffixServer = master
- else:
- suffixServer = server
-
- replicatedSuffixList = suffixServer.getSynchronizedSuffixList()
- replicatedDnList = []
- for suffix in replicatedSuffixList:
- replicatedDnList.append(suffix.getSuffixDn())
+ importDataFile = '%s/fractional-replication/%s' % (masterDataDir, dataFile)
</script>
-
+
<message>
- 'Enable replication for server:\nHost: %s\nLdap port: %s\n\
- Replication port: %s\nReplicated DN list: %s' \
- % (server.getHostname(), server.getPort(),
- serverReplPort, replicatedDnList)
+ 'Import data from %s into server %s:%s' \
+ % (importDataFile, masterHost, master.getPort())
</message>
-
- <call function="'enableReplication'">
- { 'location' : clientHost,
- 'dsPath' : clientPath,
- 'refInstanceHost' : masterHost,
- 'refInstanceAdminPort' : master.getAdminPort(),
- 'refInstanceDn' : master.getRootDn(),
- 'refInstancePswd' : master.getRootPwd(),
- 'refReplicationPort' : masterReplPort,
- 'refSecureReplication' : secureReplication,
- 'refOnlyLdapServer' : master.isOnlyLdapServer(),
- 'refOnlyReplServer' : master.isOnlyReplServer(),
- 'dsInstanceHost' : server.getHostname(),
- 'dsInstanceAdminPort' : server.getAdminPort(),
- 'dsInstanceDn' : server.getRootDn(),
- 'dsInstancePswd' : server.getRootPwd(),
- 'dsReplicationPort' : serverReplPort,
- 'dsSecureReplication' : secureReplication,
- 'dsOnlyLdapServer' : server.isOnlyLdapServer(),
- 'dsOnlyReplServer' : server.isOnlyReplServer(),
- 'replicationDnList' : replicatedDnList
+
+ <!-- Import data into "master" Directory Server -->
+ <call function="'ImportLdifWithScript'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'backEnd' : DIRECTORY_INSTANCE_BE,
+ 'ldifFile' : importDataFile
+ }
+ </call>
+
+ <!-- Backup "master" server -->
+ <call function="'backup'">
+ { 'location' : masterHost,
+ 'dsPath' : masterPath,
+ 'backupDir' : masterBackupDir
}
</call>
</sequence>
</if>
-
- </sequence>
- </iterate>
-
-
- <if expr="isolateLdapServers">
- <!-- Make each Ldap Server point only to its own Replication
- ! Server.
- ! This is used by the Conflict testsuite, in order to be able
- ! to simulate conflict scenarios -->
- <paralleliterate var="server" in="_topologyServerList" indexvar="i">
- <sequence>
- <script>
- ldapServer = '%s:%s' % (server.getHostname(),
- server.getPort())
- </script>
-
- <!-- Retrieve replication-domain name -->
- <call function="'dsconfig'">
- { 'location' : server.getHostname(),
- 'dsPath' : '%s/%s' \
- % (server.getDir(),OPENDSNAME),
- 'dsInstanceHost' : server.getHostname(),
- 'dsInstanceAdminPort' : server.getAdminPort(),
- 'dsInstanceDn' : server.getRootDn(),
- 'dsInstancePswd' : server.getRootPwd(),
- 'subcommand' : 'list-replication-domains',
- 'objectType' : 'provider-name',
- 'objectName' : 'Multimaster Synchronization',
- 'optionsString' : '--script-friendly'
- }
- </call>
- <if expr='RC == 0'>
+
+
+ <!-- Start the servers in the topology -->
+ <call function="'startServers'">
+ [_splitServerList]
+ </call>
+
+ <paralleliterate var="s" in="_splitServerList">
+ <sequence>
<script>
- replicationDomains = STAXResult[0][1]
- for line in replicationDomains.splitlines():
- if line.find(synchroSuffix) != -1:
- domain = line
- domainMap[ldapServer] = domain
- break
+ ls = '%s:%s' % (s.getHostname(), s.getPort())
</script>
- </if>
-
- <script>
- if globalSplitServers:
- splitServer = _topologyReplServerList[i]
- replicationServer = splitServer.getChangelogServer()
- replServer = '%s:%s' % (splitServer.getHostname(),
- replicationServer.getPort())
- else:
- replicationServer = server.getChangelogServer()
- replServer = '%s:%s' % (server.getHostname(),
- replicationServer.getPort())
-
- options = '--domain-name "%s" --set replication-server:%s' \
- % (domainMap[ldapServer], replServer)
- </script>
- <message>
- 'Removing references to other replication servers \nfor \
- domain: %s \nfrom server: %s \nkeep replication server: %s' \
- % (domain, ldapServer, replServer)
- </message>
- <!-- Remove peer RS from replicated domain -->
- <call function="'dsconfig'">
- { 'location' : server.getHostname(),
- 'dsPath' : '%s/%s' \
- % (server.getDir(),OPENDSNAME),
- 'dsInstanceHost' : server.getHostname(),
- 'dsInstanceAdminPort' : server.getAdminPort(),
- 'dsInstanceDn' : server.getRootDn(),
- 'dsInstancePswd' : server.getRootPwd(),
- 'subcommand' : 'set-replication-domain-prop',
- 'objectType' : 'provider-name',
- 'objectName' : 'Multimaster Synchronization',
- 'optionsString' : options
- }
- </call>
- </sequence>
- </paralleliterate>
- </if>
-
-
- <script>
- assuredReplication = globalAssuredReplication
- </script>
- <if expr="assuredReplication">
- <paralleliterate var="server" in="_topologyServerList">
- <sequence>
- <script>
- ldapServer = '%s:%s' % (server.getHostname(),
- server.getPort())
- </script>
-
- <if expr="isolateLdapServers">
- <!-- this means the domainMap has already been filled up -->
- <script>
- domain = domainMap[ldapServer]
- </script>
- <else>
+
+ <call function="'getSchemaDict'">
+ { 'location' : s.getHostname(),
+ 'dsPath' : '%s/%s' % (s.getDir(),OPENDSNAME),
+ 'server' : s,
+ }
+ </call>
+ <if expr="STAXResult">
+ <script>
+ schemaMap[ls] = STAXResult
+ </script>
+ <else>
+ <sequence>
+ <message>'Failed getting the schema for ' % ls</message>
+ <break/>
+ </sequence>
+ </else>
+ </if>
+ </sequence>
+ </paralleliterate>
+
+ <if expr="len(_topologyReplServerList) != 0">
+ <paralleliterate var="replServer" in="_topologyReplServerList">
+ <!-- Remove userRoot backend from replication servers -->
+ <sequence>
+ <message>
+ 'Remove userRoot backend from replication server %s:%s' % \
+ (replServer.getHostname(), replServer.getPort())
+ </message>
+
+ <call function="'dsconfig'">
+ { 'location' : replServer.getHostname(),
+ 'dsPath' : '%s/%s' \
+ % (replServer.getDir(),OPENDSNAME),
+ 'dsInstanceHost' : replServer.getHostname(),
+ 'dsInstanceAdminPort' : replServer.getAdminPort(),
+ 'dsInstanceDn' : replServer.getRootDn(),
+ 'dsInstancePswd' : replServer.getRootPwd(),
+ 'subcommand' : 'delete-backend',
+ 'objectType' : 'backend-name',
+ 'objectName' : 'userRoot'
+ }
+ </call>
+ </sequence>
+ </paralleliterate>
+ </if>
+
+ <iterate var="server" in="_splitServerList[1:]">
+ <sequence>
+ <!-- Configure replication if required so by the server
+ ! (i.e. server is a changelog server and/or has synchronized
+ ! suffixes)
+ -->
+ <if expr="server.requiresSynchronization()">
<sequence>
- <!-- Retrieve replication-domain name -->
- <call function="'dsconfig'">
- { 'location' : server.getHostname(),
- 'dsPath' : '%s/%s' \
- % (server.getDir(),OPENDSNAME),
- 'dsInstanceHost' : server.getHostname(),
- 'dsInstanceAdminPort' : server.getAdminPort(),
- 'dsInstanceDn' : server.getRootDn(),
- 'dsInstancePswd' : server.getRootPwd(),
- 'subcommand' : 'list-replication-domains',
- 'objectType' : 'provider-name',
- 'objectName' : 'Multimaster Synchronization',
- 'optionsString' : '--script-friendly'
+ <message>
+ 'Instance requires REPLICATION configuration.'
+ </message>
+
+ <script>
+ if master.isOnlyLdapServer():
+ masterReplPort = None
+ else:
+ masterReplPort = masterReplicationServer.getPort()
+
+ if server.isOnlyLdapServer():
+ serverReplPort = None
+ else:
+ replicationServer = server.getChangelogServer()
+ serverReplPort = replicationServer.getPort()
+
+ if server.isOnlyReplServer():
+ suffixServer = master
+ else:
+ suffixServer = server
+
+ replicatedSuffixList = suffixServer.getSynchronizedSuffixList()
+ replicatedDnList = []
+ for suffix in replicatedSuffixList:
+ replicatedDnList.append(suffix.getSuffixDn())
+ </script>
+
+ <message>
+ 'Enable replication for server:\nHost: %s\nLdap port: %s\n\
+ Replication port: %s\nReplicated DN list: %s' \
+ % (server.getHostname(), server.getPort(),
+ serverReplPort, replicatedDnList)
+ </message>
+
+ <call function="'enableReplication'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'refInstanceHost' : masterHost,
+ 'refInstanceAdminPort' : master.getAdminPort(),
+ 'refInstanceDn' : master.getRootDn(),
+ 'refInstancePswd' : master.getRootPwd(),
+ 'refReplicationPort' : masterReplPort,
+ 'refSecureReplication' : secureReplication,
+ 'refOnlyLdapServer' : master.isOnlyLdapServer(),
+ 'refOnlyReplServer' : master.isOnlyReplServer(),
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstanceAdminPort' : server.getAdminPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'dsReplicationPort' : serverReplPort,
+ 'dsSecureReplication' : secureReplication,
+ 'dsOnlyLdapServer' : server.isOnlyLdapServer(),
+ 'dsOnlyReplServer' : server.isOnlyReplServer(),
+ 'replicationDnList' : replicatedDnList
}
</call>
- <if expr='RC == 0'>
- <script>
- replicationDomains = STAXResult[0][1]
- for line in replicationDomains.splitlines():
- if line.find(synchroSuffix) != -1:
- domain = line
- domainMap[ldapServer] = domain
- break
- </script>
- </if>
</sequence>
- </else>
- </if>
- <script>
- options = '--domain-name "%s" --set assured-type:%s' \
- % (domain, assuredReplication)
- </script>
- <message>
- 'Setting replication assured-type to: %s for server: %s \
- domain: %s' % (assuredReplication, ldapServer, domain)
- </message>
- <!-- Set assured -->
- <call function="'dsconfig'">
- { 'location' : server.getHostname(),
- 'dsPath' : '%s/%s' \
- % (server.getDir(),OPENDSNAME),
- 'dsInstanceHost' : server.getHostname(),
- 'dsInstanceAdminPort' : server.getAdminPort(),
- 'dsInstanceDn' : server.getRootDn(),
- 'dsInstancePswd' : server.getRootPwd(),
- 'subcommand' : 'set-replication-domain-prop',
- 'objectType' : 'provider-name',
- 'objectName' : 'Multimaster Synchronization',
- 'optionsString' : options
- }
- </call>
-
- <if expr="assuredReplication == 'safe-data'">
+ </if>
+
+ </sequence>
+ </iterate>
+
+
+ <if expr="isolateLdapServers">
+ <!-- Make each Ldap Server point only to its own Replication
+ ! Server.
+ ! This is used by the Conflict testsuite, in order to be able
+ ! to simulate conflict scenarios -->
+ <paralleliterate var="server" in="_topologyServerList" indexvar="i">
<sequence>
<script>
- assuredDataLevel = len(_topologyServerList)
- options = '--domain-name "%s" --set assured-sd-level:%s' \
- % (domain, assuredDataLevel)
+ ldapServer = '%s:%s' % (server.getHostname(),
+ server.getPort())
+ </script>
+
+ <!-- Retrieve replication-domain name -->
+ <call function="'dsconfig'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : '%s/%s' \
+ % (server.getDir(),OPENDSNAME),
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstanceAdminPort' : server.getAdminPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'subcommand' : 'list-replication-domains',
+ 'objectType' : 'provider-name',
+ 'objectName' : 'Multimaster Synchronization',
+ 'optionsString' : '--script-friendly'
+ }
+ </call>
+ <if expr='RC == 0'>
+ <script>
+ replicationDomains = STAXResult[0][1]
+ for line in replicationDomains.splitlines():
+ if line.find(synchroSuffix) != -1:
+ domain = line
+ domainMap[ldapServer] = domain
+ break
+ </script>
+ </if>
+
+ <script>
+ if globalSplitServers:
+ splitServer = _topologyReplServerList[i]
+ replicationServer = splitServer.getChangelogServer()
+ replServer = '%s:%s' % (splitServer.getHostname(),
+ replicationServer.getPort())
+ else:
+ replicationServer = server.getChangelogServer()
+ replServer = '%s:%s' % (server.getHostname(),
+ replicationServer.getPort())
+
+ options = '--domain-name "%s" --set replication-server:%s' \
+ % (domainMap[ldapServer], replServer)
</script>
<message>
- 'Setting safe-data level to: %s for server: %s \
- domain: %s' % (assuredDataLevel, ldapServer, domain)
+ 'Removing references to other replication servers \nfor \
+ domain: %s \nfrom server: %s \nkeep replication server: %s' \
+ % (domain, ldapServer, replServer)
+ </message>
+ <!-- Remove peer RS from replicated domain -->
+ <call function="'dsconfig'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : '%s/%s' \
+ % (server.getDir(),OPENDSNAME),
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstanceAdminPort' : server.getAdminPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'subcommand' : 'set-replication-domain-prop',
+ 'objectType' : 'provider-name',
+ 'objectName' : 'Multimaster Synchronization',
+ 'optionsString' : options
+ }
+ </call>
+ </sequence>
+ </paralleliterate>
+ </if>
+
+
+ <script>
+ assuredReplication = globalAssuredReplication
+ </script>
+ <if expr="assuredReplication">
+ <paralleliterate var="server" in="_topologyServerList">
+ <sequence>
+ <script>
+ ldapServer = '%s:%s' % (server.getHostname(),
+ server.getPort())
+ </script>
+
+ <if expr="isolateLdapServers">
+ <!-- this means the domainMap has already been filled up -->
+ <script>
+ domain = domainMap[ldapServer]
+ </script>
+ <else>
+ <sequence>
+ <!-- Retrieve replication-domain name -->
+ <call function="'dsconfig'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : '%s/%s' \
+ % (server.getDir(),OPENDSNAME),
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstanceAdminPort' : server.getAdminPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'subcommand' : 'list-replication-domains',
+ 'objectType' : 'provider-name',
+ 'objectName' : 'Multimaster Synchronization',
+ 'optionsString' : '--script-friendly'
+ }
+ </call>
+ <if expr='RC == 0'>
+ <script>
+ replicationDomains = STAXResult[0][1]
+ for line in replicationDomains.splitlines():
+ if line.find(synchroSuffix) != -1:
+ domain = line
+ domainMap[ldapServer] = domain
+ break
+ </script>
+ </if>
+ </sequence>
+ </else>
+ </if>
+ <script>
+ options = '--domain-name "%s" --set assured-type:%s' \
+ % (domain, assuredReplication)
+ </script>
+ <message>
+ 'Setting replication assured-type to: %s for server: %s \
+ domain: %s' % (assuredReplication, ldapServer, domain)
</message>
<!-- Set assured -->
<call function="'dsconfig'">
@@ -460,133 +438,179 @@
'optionsString' : options
}
</call>
+
+ <if expr="assuredReplication == 'safe-data'">
+ <sequence>
+ <script>
+ assuredDataLevel = len(_topologyServerList)
+ options = '--domain-name "%s" --set assured-sd-level:%s' \
+ % (domain, assuredDataLevel)
+ </script>
+ <message>
+ 'Setting safe-data level to: %s for server: %s \
+ domain: %s' % (assuredDataLevel, ldapServer, domain)
+ </message>
+ <!-- Set assured -->
+ <call function="'dsconfig'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : '%s/%s' \
+ % (server.getDir(),OPENDSNAME),
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstanceAdminPort' : server.getAdminPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'subcommand' : 'set-replication-domain-prop',
+ 'objectType' : 'provider-name',
+ 'objectName' : 'Multimaster Synchronization',
+ 'optionsString' : options
+ }
+ </call>
+ </sequence>
+ </if>
</sequence>
- </if>
- </sequence>
- </paralleliterate>
- </if>
-
- <if expr="dataFile">
- <sequence>
- <message>
- '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>
- <if expr="0">
- <iterate var="server" in="consumerList">
+ </paralleliterate>
+ </if>
+
+ <if expr="dataFile">
<sequence>
-<!-- <call function="'initializeReplication'">
+ <message>
+ 'Initialise topology from %s:%s' \
+ % (masterHost, master.getPort())
+ </message>
+
+ <!-- Initialise the servers in the topology -->
+ <call function="'initializeReplication'">
{ 'location' : clientHost,
'dsPath' : clientPath,
- 'dsInstanceHost' : server.getHostname(),
- 'dsInstanceAdminPort' : server.getAdminPort(),
'sourceInstanceHost' : masterHost,
'sourceInstanceAdminPort' : master.getAdminPort(),
'replicationDnList' : [synchroSuffix]
}
- </call> -->
-
- <!-- Search initialisation task to check its status -->
- <call function="'ldapSearchWithScript'">
- {
- 'location' : server.getHostname(),
- 'dsPath' : '%s/%s' \
- % (server.getDir(), OPENDSNAME),
- 'dsInstanceHost' : server.getHostname(),
- 'dsInstancePort' : server.getPort(),
- 'dsInstanceDn' : server.getRootDn(),
- 'dsInstancePswd' : server.getRootPwd(),
- 'dsBaseDN' : 'cn=Tasks',
- 'dsFilter' : 'ds-task-initialize-domain-dn=%s' \
- % synchroSuffix
- }
</call>
- <script>
- searchRC = STAXResult[0][0]
- searchResult = STAXResult[0][1]
- resultLength = len(searchResult) > 0
- </script>
- <if expr="resultLength != 0">
+ <if expr="0">
+ <iterate var="server" in="consumerList">
<sequence>
- <message>
- '++++++++ INITIALISATION TASK for %s:%s ++++++++\n%s' \
- % (server.getHostname(), server.getPort(), searchResult)
- </message>
+ <!-- <call function="'initializeReplication'">
+ { 'location' : clientHost,
+ 'dsPath' : clientPath,
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstanceAdminPort' : server.getAdminPort(),
+ 'sourceInstanceHost' : masterHost,
+ 'sourceInstanceAdminPort' : master.getAdminPort(),
+ 'replicationDnList' : [synchroSuffix]
+ }
+ </call> -->
+
+ <!-- Search initialisation task to check its status -->
+ <call function="'ldapSearchWithScript'">
+ {
+ 'location' : server.getHostname(),
+ 'dsPath' : '%s/%s' \
+ % (server.getDir(), OPENDSNAME),
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstancePort' : server.getPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'dsBaseDN' : 'cn=Tasks',
+ 'dsFilter' : 'ds-task-initialize-domain-dn=%s' \
+ % synchroSuffix
+ }
+ </call>
+ <script>
+ searchRC = STAXResult[0][0]
+ searchResult = STAXResult[0][1]
+ resultLength = len(searchResult) > 0
+ </script>
+ <if expr="resultLength != 0">
+ <sequence>
+ <message>
+ '++++++++ INITIALISATION TASK for %s:%s ++++++++\n%s' \
+ % (server.getHostname(), server.getPort(), searchResult)
+ </message>
+ </sequence>
+ </if>
</sequence>
+ </iterate>
</if>
+
</sequence>
- </iterate>
+ </if>
+
+ <if expr="enableDebugLogs">
+ <paralleliterate var="server" in="_topologyServerList">
+ <sequence>
+ <!-- Set the debug logger to "enabled" -->
+ <call function="'dsconfigSet'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : '%s/%s' \
+ % (server.getDir(),OPENDSNAME),
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstanceAdminPort' : server.getAdminPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'objectName' : 'log-publisher',
+ 'propertyType' : 'publisher',
+ 'propertyName' : 'File-based Debug Logger',
+ 'attributeName' : 'enabled',
+ 'attributeValue' : 'true'
+ }
+ </call>
+ <!-- Set the debug level to "info" -->
+ <call function="'dsconfigSet'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : '%s/%s' \
+ % (server.getDir(),OPENDSNAME),
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstanceAdminPort' : server.getAdminPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'objectName' : 'log-publisher',
+ 'propertyType' : 'publisher',
+ 'propertyName' : 'File-based Debug Logger',
+ 'attributeName' : 'default-debug-level',
+ 'attributeValue' : 'info'
+ }
+ </call>
+ <!-- Set the debug logger log file to "logs/errors" -->
+ <call function="'dsconfigSet'">
+ { 'location' : server.getHostname(),
+ 'dsPath' : '%s/%s' \
+ % (server.getDir(),OPENDSNAME),
+ 'dsInstanceHost' : server.getHostname(),
+ 'dsInstanceAdminPort' : server.getAdminPort(),
+ 'dsInstanceDn' : server.getRootDn(),
+ 'dsInstancePswd' : server.getRootPwd(),
+ 'objectName' : 'log-publisher',
+ 'propertyType' : 'publisher',
+ 'propertyName' : 'File-based Debug Logger',
+ 'attributeName' : 'log-file',
+ 'attributeValue' : 'logs/errors'
+ }
+ </call>
+ </sequence>
+ </paralleliterate>
</if>
- </sequence>
- </if>
+ <tcstatus result="'pass'"></tcstatus>
- <if expr="enableDebugLogs">
- <paralleliterate var="server" in="_topologyServerList">
+ </sequence>
+
+ <catch exception="'STAXException'" typevar="eType" var="eInfo">
<sequence>
- <!-- Set the debug logger to "enabled" -->
- <call function="'dsconfigSet'">
- { 'location' : server.getHostname(),
- 'dsPath' : '%s/%s' \
- % (server.getDir(),OPENDSNAME),
- 'dsInstanceHost' : server.getHostname(),
- 'dsInstanceAdminPort' : server.getAdminPort(),
- 'dsInstanceDn' : server.getRootDn(),
- 'dsInstancePswd' : server.getRootPwd(),
- 'objectName' : 'log-publisher',
- 'propertyType' : 'publisher',
- 'propertyName' : 'File-based Debug Logger',
- 'attributeName' : 'enabled',
- 'attributeValue' : 'true'
- }
- </call>
- <!-- Set the debug level to "info" -->
- <call function="'dsconfigSet'">
- { 'location' : server.getHostname(),
- 'dsPath' : '%s/%s' \
- % (server.getDir(),OPENDSNAME),
- 'dsInstanceHost' : server.getHostname(),
- 'dsInstanceAdminPort' : server.getAdminPort(),
- 'dsInstanceDn' : server.getRootDn(),
- 'dsInstancePswd' : server.getRootPwd(),
- 'objectName' : 'log-publisher',
- 'propertyType' : 'publisher',
- 'propertyName' : 'File-based Debug Logger',
- 'attributeName' : 'default-debug-level',
- 'attributeValue' : 'info'
- }
- </call>
- <!-- Set the debug logger log file to "logs/errors" -->
- <call function="'dsconfigSet'">
- { 'location' : server.getHostname(),
- 'dsPath' : '%s/%s' \
- % (server.getDir(),OPENDSNAME),
- 'dsInstanceHost' : server.getHostname(),
- 'dsInstanceAdminPort' : server.getAdminPort(),
- 'dsInstanceDn' : server.getRootDn(),
- 'dsInstancePswd' : server.getRootPwd(),
- 'objectName' : 'log-publisher',
- 'propertyType' : 'publisher',
- 'propertyName' : 'File-based Debug Logger',
- 'attributeName' : 'log-file',
- 'attributeValue' : 'logs/errors'
- }
- </call>
+ <message log="1" level="'fatal'">
+ '%s: Failed to cleanup. eInfo(%s)' % (eType,eInfo)
+ </message>
+ <throw exception="'STAFException.TestSuite.CleanupException'" />
</sequence>
- </paralleliterate>
- </if>
+ </catch>
+ <finally>
+ <!-- Test Case postamble -->
+ <call function="'testCase_Postamble'"/>
+ </finally>
+
+ </try>
- </sequence>
+ </testcase>
</block>
--
Gitblit v1.10.0