<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<!DOCTYPE stax SYSTEM "../stax.dtd">
|
<!--
|
! CDDL HEADER START
|
!
|
! The contents of this file are subject to the terms of the
|
! Common Development and Distribution License, Version 1.0 only
|
! (the "License"). You may not use this file except in compliance
|
! with the License.
|
!
|
! You can obtain a copy of the license at
|
! trunk/opends/resource/legal-notices/OpenDS.LICENSE
|
! or https://OpenDS.dev.java.net/OpenDS.LICENSE.
|
! See the License for the specific language governing permissions
|
! and limitations under the License.
|
!
|
! When distributing Covered Code, include this CDDL HEADER in each
|
! file and include the License file at
|
! trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
|
! add the following below this CDDL HEADER, with the fields enclosed
|
! by brackets "[]" replaced with your own identifying information:
|
! Portions Copyright [yyyy] [name of copyright owner]
|
!
|
! CDDL HEADER END
|
!
|
! Copyright 2007-2010 Sun Microsystems, Inc.
|
! Portions Copyright 2011-2013 ForgeRock AS.
|
! -->
|
<stax>
|
<function name="createTopology">
|
<function-prolog>
|
This function creates the topology required by the Test Group/Suite.
|
</function-prolog>
|
<function-map-args>
|
<function-arg-def name="topologyDescFile"
|
type="optional"
|
default="None">
|
<function-arg-description>
|
Topology Description file
|
</function-arg-description>
|
<function-arg-property name="type" value="filePath"/>
|
</function-arg-def>
|
<function-arg-def name="initialiseInstance"
|
type="optional"
|
default="False">
|
<function-arg-description>
|
Specifies whether the instance should be initialised with
|
some default data.
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean"/>
|
</function-arg-def>
|
<function-arg-def name="sharedDataFolder"
|
type="optional"
|
default="''">
|
<function-arg-description>
|
Specifies a relative folder that holds the shared data for the tests
|
</function-arg-description>
|
<function-arg-property name="type" value="string"/>
|
</function-arg-def>
|
<function-arg-def name="fileExtensions"
|
type="optional"
|
default="[]">
|
<function-arg-description>
|
Specifies a list of file extension to add to testdata.zip
|
</function-arg-description>
|
<function-arg-property name="type" value="string"/>
|
</function-arg-def>
|
|
<function-arg-def name="splitReplicationServers"
|
type="optional"
|
default="False">
|
<function-arg-description>
|
Specifies whether the replication servers should be split from the
|
ldap servers and be configured on separate instances.
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean"/>
|
</function-arg-def>
|
</function-map-args>
|
|
<sequence>
|
<script>
|
if not sharedDataFolder and CurrentTestPath.has_key('group'):
|
sharedDataFolder=CurrentTestPath['group']
|
|
_topologyServerList = []
|
_topologyReplServerList = []
|
_splitServerList = []
|
</script>
|
|
<call function="'prepareInstanceCreation'">
|
{ 'groupDataDir' : sharedDataFolder,
|
'fileExtensions' : fileExtensions
|
}
|
</call>
|
|
<if expr="topologyDescFile == None">
|
<!-- SINGLE instance deployment: read parameters from config.py (done
|
by default) -->
|
<sequence>
|
<message>
|
'SINGLE instance deployment: read parameters from config.py'
|
</message>
|
<call function="'createInstance'" />
|
<if expr="RC == 0 and initialiseInstance == True">
|
<sequence>
|
<!-- Load the server with default data -->
|
<import machine="STAF_LOCAL_HOSTNAME"
|
file="'%s/testcases/quickstart/quickstart.xml' % (TESTS_DIR)" />
|
<call function="'main_quickstart'"/>
|
</sequence>
|
</if>
|
</sequence>
|
<else>
|
<!-- MULTIPLE instance deployment: read parameters from
|
topologyDescFile -->
|
<sequence>
|
<message>
|
'MULTIPLE instance deployment: read parameters from %s' \
|
% topologyDescFile
|
</message>
|
|
<!-- Parse the topology description file and set
|
_topologyServerList -->
|
<call function="'readTopology'">
|
{ 'file' : topologyDescFile }
|
</call>
|
|
<if expr="splitReplicationServers">
|
<sequence>
|
<message>
|
'Replication servers will be split from ldap servers.'
|
</message>
|
<iterate var="server" in="_topologyServerList" indexvar="i">
|
<sequence>
|
<script>
|
_topologyReplServerList.append(server.splitReplServer())
|
_splitServerList.append(server)
|
_splitServerList.append(_topologyReplServerList[i])
|
</script>
|
</sequence>
|
</iterate>
|
</sequence>
|
<else>
|
<script>
|
_splitServerList = _topologyServerList
|
</script>
|
</else>
|
</if>
|
|
<message>
|
'Number of server instances required by the deployment: %s' \
|
% len(_splitServerList)
|
</message>
|
|
<iterate var="server" in="_splitServerList">
|
<sequence>
|
<!-- Create the instance-->
|
<call function="'createInstance'">
|
{ 'dsHost' : server.getHostname(),
|
'dsDir' : server.getDir(),
|
'dsPort' : server.getPort(),
|
'dsAdminPort' : server.getAdminPort(),
|
'dsSslPort' : server.getSslPort(),
|
'dsJmxPort' : server.getJmxPort(),
|
'dsBindDN' : server.getRootDn(),
|
'dsBindPwd' : server.getRootPwd(),
|
'dsBaseDN' : server.getBaseDn()
|
}
|
</call>
|
|
</sequence>
|
</iterate>
|
</sequence>
|
</else>
|
</if>
|
</sequence>
|
</function>
|
|
|
|
<function name="prepareInstanceCreation">
|
<function-prolog>
|
This function prepares locally the necessary
|
files to create an instance: data zip file and OpenDS zip file.
|
</function-prolog>
|
<function-map-args>
|
<function-arg-def name="groupDataDir"
|
type="optional"
|
default="''">
|
<function-arg-description>
|
Specifies a relative folder that holds the shared data for the test
|
group
|
</function-arg-description>
|
<function-arg-property name="type" value="string"/>
|
</function-arg-def>
|
<function-arg-def name="fileExtensions"
|
type="optional"
|
default="[]">
|
<function-arg-description>
|
Specifies a list of file extension to add to testdata.zip
|
</function-arg-description>
|
<function-arg-property name="type" value="list"/>
|
</function-arg-def>
|
<function-arg-def name="javaProjects"
|
type="optional"
|
default="[]">
|
<function-arg-description>
|
Specifies a list of java projects to add to testdata.zip
|
</function-arg-description>
|
<function-arg-property name="type" value="list"/>
|
</function-arg-def>
|
</function-map-args>
|
<sequence>
|
<!-- ON LOCAL HOST: get data ready to copy to remote host -->
|
<script>
|
# Original source location of the data files
|
sourceTestsGroupDir='%s/%s' % (source.data,groupDataDir)
|
|
# Location of data files are staged locally before transit to SUT
|
localTestsGroupDir ='%s/%s' % (local.data, groupDataDir)
|
|
# Location of data files are copied to on the remote SUT
|
remoteTestsGroupDir='%s/%s' % (remote.data,groupDataDir)
|
</script>
|
|
<!-- Stage static data-->
|
<call function="'stageStaticDataFiles'">
|
{ 'customFileExtensions' : fileExtensions,
|
'testGroupDirName' : groupDataDir }
|
</call>
|
|
<!-- Stage (*/.java) files -->
|
<call function="'stageJavaFiles'">
|
{ 'customJavaProjects' : javaProjects }
|
</call>
|
|
<!-- Stage (SNMP/.java) files -->
|
<call function="'stageSNMPFiles'"/>
|
|
<!-- Delete the any existing testdata archive -->
|
<message>
|
'Delete %s/testdata.zip' % local.temp
|
</message>
|
<call function="'deleteFile'">
|
{ 'location' : STAXServiceMachine,
|
'filename' : '%s/testdata.zip' % local.temp
|
}
|
</call>
|
|
<!-- Zip up local testdata files for transit to SUT -->
|
<message>
|
'Zip up local testdata files to %s/testdata.zip' % local.temp
|
</message>
|
<call function="'zipUpFile'">
|
{ 'location' : STAXServiceMachine,
|
'zipfile' : '%s/testdata.zip' % local.temp,
|
'folder' : local.testdata,
|
'relativeto' : local.directory
|
}
|
</call>
|
|
</sequence>
|
</function>
|
|
|
|
<function name="createInstance">
|
<function-prolog>
|
This function creates an instance on a given host.
|
It copies both data and OpenDS zip files onto the host,
|
unzips them, and configures OpenDS.
|
</function-prolog>
|
|
<function-map-args>
|
<function-arg-def name="dsHost"
|
type="optional"
|
default="DIRECTORY_INSTANCE_HOST">
|
<function-arg-description>
|
Hostname where the instance is to be created
|
</function-arg-description>
|
<function-arg-property name="type" value="hostname"/>
|
</function-arg-def>
|
<function-arg-def name="dsDir"
|
type="optional"
|
default="DIRECTORY_INSTANCE_DIR">
|
<function-arg-description>
|
Directory where OpenDS will be installed
|
</function-arg-description>
|
<function-arg-property name="type" value="filepath"/>
|
</function-arg-def>
|
<function-arg-def name="dsPort"
|
type="optional"
|
default="DIRECTORY_INSTANCE_PORT">
|
<function-arg-description>
|
Directory Server port number
|
</function-arg-description>
|
<function-arg-property name="type" value="Port number"/>
|
</function-arg-def>
|
<function-arg-def name="dsAdminPort"
|
type="optional"
|
default="DIRECTORY_INSTANCE_ADMIN_PORT">
|
<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="dsSslPort"
|
type="optional"
|
default="None">
|
<function-arg-description>
|
Directory Server SSL port number
|
</function-arg-description>
|
<function-arg-property name="type" value="Port number"/>
|
</function-arg-def>
|
<function-arg-def name="dsJmxPort"
|
type="optional"
|
default="None">
|
<function-arg-description>
|
Directory Server JMX port number
|
</function-arg-description>
|
<function-arg-property name="type" value="Port number"/>
|
</function-arg-def>
|
<function-arg-def name="dsBindDN"
|
type="optional"
|
default="DIRECTORY_INSTANCE_DN">
|
<function-arg-description>
|
Directory Manager DN
|
</function-arg-description>
|
<function-arg-property name="type" value="DN"/>
|
</function-arg-def>
|
<function-arg-def name="dsBindPwd"
|
type="optional"
|
default="DIRECTORY_INSTANCE_PSWD">
|
<function-arg-description>
|
Directory Server SSL port number
|
</function-arg-description>
|
<function-arg-property name="type" value="string"/>
|
</function-arg-def>
|
<function-arg-def name="dsBaseDN"
|
type="optional"
|
default="DIRECTORY_INSTANCE_SFX">
|
<function-arg-description>
|
Directory Server base suffix dn
|
</function-arg-description>
|
<function-arg-property name="type" value="DN"/>
|
</function-arg-def>
|
</function-map-args>
|
|
<sequence>
|
<message>
|
'Create an instance on remote host %s' % dsHost
|
</message>
|
|
<!-- ON REMOTE HOST: copy files, unzip, configure instance -->
|
<!--- Delete folder if it exists on remote host-->
|
<message>
|
'Delete existing instance folder %s on remote host %s' % (dsDir,dsHost)
|
</message>
|
<call function="'deleteFolder'">
|
{ 'location' : dsHost,
|
'foldername' : '%s' % (dsDir)
|
}
|
</call>
|
|
<!--- Create folder on remote host -->
|
<message>
|
'Create new instance folder %s on remote host %s' % (dsDir,dsHost)
|
</message>
|
<call function="'createFolder'">
|
{ 'location' : dsHost,
|
'foldername' : '%s' % dsDir
|
}
|
</call>
|
|
<!--- Create folder on remote host -->
|
<message>
|
'Create new instance temp folder %s/temp on remote host %s' % (dsDir,dsHost)
|
</message>
|
<call function="'createFolder'">
|
{ 'location' : dsHost,
|
'foldername' : '%s/temp' % dsDir
|
}
|
</call>
|
|
<!--- Copy staging data to remote host -->
|
<message>
|
'Copy %s/testdata.zip to %s on %s on remote host' \
|
% (local.testdata,dsDir,dsHost)
|
</message>
|
<call function="'copyFile'">
|
{ 'srcfile' : '%s/testdata.zip' % local.temp,
|
'destfile' : '%s/testdata.zip' % dsDir,
|
'remotehost' : dsHost
|
}
|
</call>
|
|
<!--- Unzip contents of staging data on remote host -->
|
<message>
|
'Extract contents of test data %s on %s on remote host' \
|
% (dsDir,dsHost)
|
</message>
|
<call function="'unZipFile'">
|
{ 'location' : dsHost,
|
'zipfile' : '%s/testdata.zip' % dsDir,
|
'unzipdir' : dsDir
|
}
|
</call>
|
|
<!-- Check if DS Copy zip exists -->
|
<call function="'GetEntry'">
|
{
|
'location' : dsHost,
|
'entry' : '%s/%s' % (dsDir,ZIPNAME),
|
'attribute' : 'TYPE'
|
}
|
</call>
|
<if expr="RC == 48">
|
<sequence>
|
<!--- Copy DS Copy zip file -->
|
<message>
|
'Copy DS zip archive %s/%s to %s' % (ZIPPATH,ZIPNAME,dsHost)
|
</message>
|
<call function="'copyFile'">
|
{ 'srcfile' : '%s/%s' % (ZIPPATH,ZIPNAME),
|
'destfile' : '%s/%s' % (dsDir,ZIPNAME),
|
'remotehost' : dsHost
|
}
|
</call>
|
</sequence>
|
<else>
|
<message>
|
'DS zip archive %s/%s already exists, nothing to do' % (dsDir,ZIPNAME)
|
</message>
|
</else>
|
</if>
|
|
<!--- Install DS Extract zip file -->
|
<message>
|
'Extract DS zip archive to %s on %s' % (dsDir,dsHost)
|
</message>
|
<call function="'unZipFile'">
|
{ 'location' : dsHost,
|
'zipfile' : '%s/%s' % (dsDir,ZIPNAME),
|
'unzipdir' : dsDir
|
}
|
</call>
|
|
<!-- fixMe: Windows Services are not enabled -->
|
<if expr="is_windows_platform(dsHost)">
|
<script>
|
enableWindowsService=''
|
</script>
|
<else>
|
<script>
|
enableWindowsService=''
|
</script>
|
</else>
|
</if>
|
|
<!--- Set up DS -->
|
|
<!--- In IPS mode, at this point we need to overwrite dsDir -->
|
<if expr="IPS_PKG == True">
|
<script>
|
dsDir = DIRECTORY_INSTANCE_BIN
|
</script>
|
</if>
|
|
<message>
|
'Set up DS on %s : %s/%s' % (dsHost,dsDir,OPENDSNAME)
|
</message>
|
|
<call function="'SetUpDsWithScript'">
|
{ 'location' : dsHost,
|
'dsPath' : '%s/%s' % (dsDir, OPENDSNAME),
|
'dsPort' : dsPort,
|
'dsAdminPort' : dsAdminPort,
|
'dsSslPort' : dsSslPort,
|
'dsJmxPort' : dsJmxPort,
|
'dsBindDN' : dsBindDN,
|
'dsBindPwd' : dsBindPwd,
|
'dsBaseDN' : dsBaseDN,
|
'dsEnableWindowsService' : enableWindowsService,
|
'dsDoNotStart' : 'true'
|
}
|
</call>
|
|
<call function="'checkRC'">
|
{ 'returncode' : RC ,
|
'result' : STAXResult
|
}
|
</call>
|
|
<if expr="returncode == 0">
|
<message>
|
'Instance created.'
|
</message>
|
<else>
|
<message>
|
'Failed to create instance.'
|
</message>
|
</else>
|
</if>
|
</sequence>
|
</function>
|
|
|
|
<function name="DEPRECATEDconfigureReplication">
|
<function-prolog>
|
This function configures replication in a given server.
|
</function-prolog>
|
|
<function-list-args>
|
<function-arg-def name="syncserverMap" type="required">
|
<function-arg-description>
|
Map containing a Server class instance representing the server to
|
configure.
|
</function-arg-description>
|
<function-arg-property name="type" value="map"/>
|
</function-arg-def>
|
</function-list-args>
|
|
<sequence>
|
<script>
|
syncserver = syncserverMap['instance']
|
|
filename = 'replication_conf.ldif'
|
filePath = '%s/%s' % (local.testdata,filename)
|
dataDir = '%s/%s' % (syncserver.getDir(),remote.reldatadir)
|
|
write_replication_conf_ldif_file(filePath, syncserver)
|
</script>
|
|
<message>
|
'Configure replication on server on host %s at directory %s' \
|
% (syncserver.getHostname(),syncserver.getDir())
|
</message>
|
|
<!-- Copy the replication_conf ldif to remote host -->
|
<message>
|
'Copy %s file from %s to %s' % (filename,local.testdata,dataDir)
|
</message>
|
<call function="'copyFile'">
|
{ 'srcfile' : filePath,
|
'destfile' : '%s/%s' % (dataDir,filename),
|
'remotehost' : syncserver.getHostname()
|
}
|
</call>
|
|
<!--- Add replication configuration entries to config.ldif in server -->
|
<script>
|
remoteFilePath = '%s/%s' % (dataDir, filename)
|
syncserverPath = '%s/%s' % (syncserver.getDir(),OPENDSNAME)
|
</script>
|
|
<!--- Start DS -->
|
<call function="'StartDsWithScript'">
|
{ 'location' : syncserver.getHostname(),
|
'dsPath' : syncserverPath
|
}
|
</call>
|
|
<call function="'checkRC'">
|
{ 'returncode' : RC ,
|
'result' : STAXResult
|
}
|
</call>
|
|
<message>
|
'Add replication configuration entries in %s' % remoteFilePath
|
</message>
|
|
<call function="'addEntry'">
|
{ 'location' : syncserver.getHostname(),
|
'dsPath' : syncserverPath,
|
'dsInstanceHost' : syncserver.getHostname(),
|
'dsInstancePort' : syncserver.getPort(),
|
'dsInstanceDn' : syncserver.getRootDn(),
|
'dsInstancePswd' : syncserver.getRootPwd(),
|
'entryToBeAdded' : remoteFilePath
|
}
|
</call>
|
|
<call function="'checkRC'">
|
{ 'returncode' : RC,
|
'result' : STAXResult
|
}
|
</call>
|
|
<!--- Stop DS -->
|
<call function="'StopDsWithScript'">
|
{ 'location' : syncserver.getHostname(),
|
'dsHost' : syncserver.getHostname(),
|
'dsPath' : syncserverPath,
|
'dsAdminPort' : syncserver.getAdminPort(),
|
'dsBindDN' : syncserver.getRootDn(),
|
'dsBindPwd' : syncserver.getRootPwd()
|
}
|
</call>
|
|
<call function="'checkRC'">
|
{ 'returncode' : RC ,
|
'result' : STAXResult
|
}
|
</call>
|
</sequence>
|
</function>
|
|
|
<function name="configureReplication">
|
<function-prolog>
|
This function configures replication in a given server.
|
</function-prolog>
|
|
<function-list-args>
|
<function-arg-def name="syncserver" type="required">
|
<function-arg-description>
|
Server class instance representing the server to configure.
|
</function-arg-description>
|
<function-arg-property name="type" value="Server"/>
|
</function-arg-def>
|
</function-list-args>
|
|
<sequence>
|
<!--- Configure replication using dsconfig -->
|
<message>
|
'Configure replication on server on host %s at directory %s' \
|
% (syncserver.getHostname(),syncserver.getDir())
|
</message>
|
|
<script>
|
syncserverPath = '%s/%s' % (syncserver.getDir(),OPENDSNAME)
|
</script>
|
|
<!--- Start DS -->
|
<call function="'StartDsWithScript'">
|
{ 'location' : syncserver.getHostname(),
|
'dsPath' : syncserverPath
|
}
|
</call>
|
|
<message>
|
'List synchronization providers'
|
</message>
|
|
<call function="'listSyncProviders'">
|
{ 'location' : syncserver.getHostname(),
|
'dsPath' : syncserverPath,
|
'dsInstanceHost' : syncserver.getHostname(),
|
'dsInstanceAdminPort' : syncserver.getAdminPort(),
|
'dsInstanceDn' : syncserver.getRootDn(),
|
'dsInstancePswd' : syncserver.getRootPwd()
|
}
|
</call>
|
|
<script>
|
replicationServer = syncserver.getChangelogServer()
|
replicatedSuffixList = syncserver.getSynchronizedSuffixList()
|
</script>
|
|
<if expr="replicationServer">
|
<sequence>
|
<message>
|
'Create replication server listening on port: %s' \
|
% replicationServer.getPort()
|
</message>
|
<call function="'createReplicationServer'">
|
{ 'location' : syncserver.getHostname(),
|
'dsPath' : syncserverPath,
|
'dsInstanceHost' : syncserver.getHostname(),
|
'dsInstanceAdminPort' : syncserver.getAdminPort(),
|
'dsInstanceDn' : syncserver.getRootDn(),
|
'dsInstancePswd' : syncserver.getRootPwd(),
|
'replicationPort' : replicationServer.getPort(),
|
'replicationServerId' : replicationServer.getId(),
|
'replicationServerList' : replicationServer.getChangelogServerList()
|
}
|
</call>
|
</sequence>
|
</if>
|
|
<iterate var="suffix" in="replicatedSuffixList" indexvar="i">
|
<sequence>
|
<message>
|
'Create domain name for suffix: %s' % suffix.getSuffixDn()
|
</message>
|
<call function="'createMultimasterDomain'">
|
{ 'location' : syncserver.getHostname(),
|
'dsPath' : syncserverPath,
|
'dsInstanceHost' : syncserver.getHostname(),
|
'dsInstanceAdminPort' : syncserver.getAdminPort(),
|
'dsInstanceDn' : syncserver.getRootDn(),
|
'dsInstancePswd' : syncserver.getRootPwd(),
|
'domainName' : 'SUFFIX-%s' % i,
|
'replicationDn' : suffix.getSuffixDn(),
|
'serverId' : suffix.getId(),
|
'replicationServerList' : suffix.getChangelogServerList()
|
}
|
</call>
|
</sequence>
|
</iterate>
|
|
<!--- Stop DS -->
|
<call function="'StopDsWithScript'">
|
{ 'location' : syncserver.getHostname(),
|
'dsHost' : syncserver.getHostname(),
|
'dsPath' : syncserverPath,
|
'dsAdminPort' : syncserver.getAdminPort(),
|
'dsBindDN' : syncserver.getRootDn(),
|
'dsBindPwd' : syncserver.getRootPwd()
|
}
|
</call>
|
</sequence>
|
</function>
|
|
|
|
|
<!-- Enable replication between servers using dsreplication -->
|
<function name="enableReplication">
|
<function-prolog>
|
This function enables replication between servers 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="STAF_REMOTE_HOSTNAME">
|
<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="required">
|
<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="dsInstanceDn" type="required">
|
<function-arg-description>
|
Bind DN
|
</function-arg-description>
|
<function-arg-property name="type" value="DN" />
|
</function-arg-def>
|
|
<function-arg-def name="dsInstancePswd" type="required">
|
<function-arg-description>
|
Bind password
|
</function-arg-description>
|
<function-arg-property name="type" value="string" />
|
</function-arg-def>
|
|
<function-arg-def name="dsReplicationPort"
|
type="optional"
|
default="None">
|
<function-arg-description>
|
Replication port number
|
</function-arg-description>
|
<function-arg-property name="type" value="Port number" />
|
</function-arg-def>
|
|
<function-arg-def name="dsSecureReplication"
|
type="optional"
|
default="None">
|
<function-arg-description>
|
Encrypt communications over dsReplicationPort (secure replication)
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean" />
|
</function-arg-def>
|
|
<function-arg-def name="dsOnlyLdapServer"
|
type="optional"
|
default="None">
|
<function-arg-description>
|
Server only to contain replicated data (no Repl server/changelog)
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean" />
|
</function-arg-def>
|
|
<function-arg-def name="dsOnlyReplServer"
|
type="optional"
|
default="None">
|
<function-arg-description>
|
Server only to contain Repl server/changelog (no replicated data)
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean" />
|
</function-arg-def>
|
|
<function-arg-def name="refInstanceHost"
|
type="optional"
|
default="STAF_REMOTE_HOSTNAME">
|
<function-arg-description>
|
Reference Directory server hostname or IP address
|
</function-arg-description>
|
<function-arg-property name="type" value="hostname" />
|
</function-arg-def>
|
|
<function-arg-def name="refInstanceAdminPort" type="required">
|
<function-arg-description>
|
Reference Directory server admin port number
|
</function-arg-description>
|
<function-arg-property name="type" value="Port number" />
|
</function-arg-def>
|
|
<function-arg-def name="refInstanceDn" type="required">
|
<function-arg-description>
|
Reference server Bind DN
|
</function-arg-description>
|
<function-arg-property name="type" value="DN" />
|
</function-arg-def>
|
|
<function-arg-def name="refInstancePswd" type="required">
|
<function-arg-description>
|
Reference server Bind password
|
</function-arg-description>
|
<function-arg-property name="type" value="string" />
|
</function-arg-def>
|
|
<function-arg-def name="refReplicationPort"
|
type="optional"
|
default="None">
|
<function-arg-description>
|
Reference server Replication port number
|
</function-arg-description>
|
<function-arg-property name="type" value="Port number" />
|
</function-arg-def>
|
|
<function-arg-def name="refSecureReplication"
|
type="optional"
|
default="None">
|
<function-arg-description>
|
Encrypt communications over refReplicationPort (secure replication)
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean" />
|
</function-arg-def>
|
|
<function-arg-def name="refOnlyLdapServer"
|
type="optional"
|
default="None">
|
<function-arg-description>
|
Server only to contain replicated data (no Repl server/changelog)
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean" />
|
</function-arg-def>
|
|
<function-arg-def name="refOnlyReplServer"
|
type="optional"
|
default="None">
|
<function-arg-description>
|
Server only to contain Repl server/changelog (no replicated data)
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean" />
|
</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="noSchemaReplication"
|
type="optional"
|
default="None">
|
<function-arg-description>
|
Do not enable schema replication
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean" />
|
</function-arg-def>
|
|
<function-arg-def name="useSecondServerAsSchemaSource"
|
type="optional"
|
default="None">
|
<function-arg-description>
|
Take the refInstanceHost as the source for the schema initialisation
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean" />
|
</function-arg-def>
|
|
<function-arg-def name="expectedRC" type="optional" default="0">
|
<function-arg-description>
|
Expected return code value. Default value is 0.
|
Wildcard 'noCheck' to not check the RC
|
</function-arg-description>
|
<function-arg-property name="type" value="string" />
|
</function-arg-def>
|
</function-map-args>
|
<sequence>
|
<!-- Local variables -->
|
<script>
|
STAFCmdParams=''
|
STAFCmd=''
|
|
if dsPath:
|
dsBinPath='%s/%s' % (dsPath,fileFolder)
|
STAFCmd='%s/%s%s' % (dsBinPath,DSREPLICATION,fileExt)
|
|
STAFCmdParamsList=[]
|
STAFCmdParamsList.append('enable')
|
STAFCmdParamsList.append('-n')
|
STAFCmdParamsList.append('-Q')
|
STAFCmdParamsList.append('-X')
|
|
if refInstanceHost:
|
STAFCmdParamsList.append('--host1 %s' % refInstanceHost)
|
|
if refInstanceAdminPort:
|
STAFCmdParamsList.append('--port1 %s' % refInstanceAdminPort)
|
|
if refInstanceDn:
|
STAFCmdParamsList.append('--bindDN1 "%s"' % refInstanceDn)
|
|
if refInstancePswd:
|
STAFCmdParamsList.append('--bindPassword1 "%s"' % refInstancePswd)
|
|
if refReplicationPort:
|
STAFCmdParamsList.append('--replicationPort1 %s' % refReplicationPort)
|
|
if refSecureReplication:
|
STAFCmdParamsList.append('--secureReplication1')
|
|
if refOnlyLdapServer:
|
STAFCmdParamsList.append('--noReplicationServer1')
|
|
if refOnlyReplServer:
|
STAFCmdParamsList.append('--onlyReplicationServer1')
|
|
if dsInstanceHost:
|
STAFCmdParamsList.append('--host2 %s' % dsInstanceHost)
|
|
if dsInstanceAdminPort:
|
STAFCmdParamsList.append('--port2 %s' % dsInstanceAdminPort)
|
|
if dsInstanceDn:
|
STAFCmdParamsList.append('--bindDN2 "%s"' % dsInstanceDn)
|
|
if dsInstancePswd:
|
STAFCmdParamsList.append('--bindPassword2 "%s"' % dsInstancePswd)
|
|
if dsReplicationPort:
|
STAFCmdParamsList.append('--replicationPort2 %s' % dsReplicationPort)
|
|
if dsSecureReplication:
|
STAFCmdParamsList.append('--secureReplication2')
|
|
if dsOnlyLdapServer:
|
STAFCmdParamsList.append('--noReplicationServer2')
|
|
if dsOnlyReplServer:
|
STAFCmdParamsList.append('--onlyReplicationServer2')
|
|
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)
|
|
if noSchemaReplication:
|
STAFCmdParamsList.append('--noSchemaReplication')
|
|
if useSecondServerAsSchemaSource:
|
STAFCmdParamsList.append('--useSecondServerAsSchemaSource')
|
|
STAFCmdParams=' '.join(STAFCmdParamsList)
|
</script>
|
<call function="'runCommand'">
|
{ 'name' : 'Enable Replication',
|
'location' : location,
|
'command' : STAFCmd,
|
'arguments' : STAFCmdParams,
|
'expectedRC': expectedRC
|
}
|
</call>
|
<return>
|
STAXResult
|
</return>
|
</sequence>
|
</function>
|
|
|
|
<!-- Initialize replicated suffix with the contents of a source server using
|
dsreplication -->
|
<function name="initializeReplication">
|
<function-prolog>
|
This function initializes replicated suffixes with the contents
|
of a source server 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="sourceInstanceHost"
|
type="optional"
|
default="STAF_REMOTE_HOSTNAME">
|
<function-arg-description>
|
Source Directory server hostname or IP address
|
</function-arg-description>
|
<function-arg-property name="type" value="hostname" />
|
</function-arg-def>
|
|
<function-arg-def name="sourceInstanceAdminPort" type="required">
|
<function-arg-description>
|
Source 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.
|
Wildcard 'noCheck' to not check the RC
|
</function-arg-description>
|
<function-arg-property name="type" value="string" />
|
</function-arg-def>
|
</function-map-args>
|
<sequence>
|
<!-- Local variables -->
|
<script>
|
STAFCmdParams=''
|
STAFCmd=''
|
|
if dsPath:
|
dsBinPath='%s/%s' % (dsPath,fileFolder)
|
STAFCmd='%s/%s%s' % (dsBinPath,DSREPLICATION,fileExt)
|
|
STAFCmdParamsList=[]
|
|
if dsInstanceHost:
|
STAFCmdParamsList.append('initialize')
|
else:
|
STAFCmdParamsList.append('initialize-all')
|
STAFCmdParamsList.append('-n')
|
STAFCmdParamsList.append('-Q')
|
STAFCmdParamsList.append('-X')
|
|
if dsInstanceHost:
|
STAFCmdParamsList.append('-O %s' % dsInstanceHost)
|
|
if dsInstanceAdminPort:
|
STAFCmdParamsList.append('--portDestination %s' % dsInstanceAdminPort)
|
|
if sourceInstanceHost:
|
STAFCmdParamsList.append('-h %s' % sourceInstanceHost)
|
|
if sourceInstanceAdminPort:
|
STAFCmdParamsList.append('-p %s' % sourceInstanceAdminPort)
|
|
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' : 'Initialize Replication',
|
'location' : location,
|
'command' : STAFCmd,
|
'arguments' : STAFCmdParams,
|
'expectedRC' : expectedRC
|
}
|
</call>
|
<return>
|
STAXResult
|
</return>
|
</sequence>
|
</function>
|
|
|
|
<!-- Disable replication for given baseDN on server using dsreplication -->
|
<function name="disableReplication">
|
<function-prolog>
|
This function disables replication for a given baseDN on a server 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="STAF_REMOTE_HOSTNAME">
|
<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="required">
|
<function-arg-description>
|
Directory server port number
|
</function-arg-description>
|
<function-arg-property name="type" value="Port number" />
|
</function-arg-def>
|
|
<function-arg-def name="replicationDnList"
|
type="optional"
|
default="None">
|
<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="disableReplServer"
|
type="optional"
|
default="None">
|
<function-arg-description>
|
Disable replication server (remove configuration, changelot and port)
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean" />
|
</function-arg-def>
|
|
<function-arg-def name="disableAll"
|
type="optional"
|
default="None">
|
<function-arg-description>
|
Disable replication completely (domain, repl-server, changelog and
|
admin data).
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean" />
|
</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.
|
Wildcard 'noCheck' to not check the RC
|
</function-arg-description>
|
<function-arg-property name="type" value="string" />
|
</function-arg-def>
|
</function-map-args>
|
<sequence>
|
<!-- Local variables -->
|
<script>
|
STAFCmdParams=''
|
STAFCmd=''
|
|
if dsPath:
|
dsBinPath='%s/%s' % (dsPath,fileFolder)
|
STAFCmd='%s/%s%s' % (dsBinPath,DSREPLICATION,fileExt)
|
|
STAFCmdParamsList=[]
|
STAFCmdParamsList.append('disable')
|
STAFCmdParamsList.append('-n')
|
STAFCmdParamsList.append('-Q')
|
STAFCmdParamsList.append('-X')
|
|
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 disableReplServer:
|
STAFCmdParamsList.append('--disableReplicationServer')
|
|
if disableAll:
|
STAFCmdParamsList.append('--disableAll')
|
|
if adminUID:
|
STAFCmdParamsList.append('-I "%s"' % adminUID)
|
|
if adminPswd:
|
STAFCmdParamsList.append('-w "%s"' % adminPswd)
|
|
STAFCmdParams=' '.join(STAFCmdParamsList)
|
</script>
|
<call function="'runCommand'">
|
{ 'name' : 'Disable Replication',
|
'location' : location,
|
'command' : STAFCmd,
|
'arguments' : STAFCmdParams,
|
'expectedRC': expectedRC
|
}
|
</call>
|
<return>
|
STAXResult
|
</return>
|
</sequence>
|
</function>
|
|
|
|
|
<function name="readTopology">
|
<function-prolog>
|
This function reads the topology from a given file.
|
It parses the topology description file and sets _topologyServerList, a
|
list of the servers that form the topology.
|
</function-prolog>
|
|
<function-map-args>
|
<function-arg-def name="file" type="required">
|
<function-arg-description>
|
File containing the topology description.
|
</function-arg-description>
|
<function-arg-property name="type" value="filePath"/>
|
</function-arg-def>
|
</function-map-args>
|
|
<sequence>
|
<message>
|
'Parse file %s for topology parameters' % file
|
</message>
|
|
<script>
|
_topologyServerList = []
|
|
f = open(file, 'r')
|
|
hostname = None
|
dir = None
|
port = None
|
adminport = None
|
sslport = None
|
jmxport = None
|
rootDn = None
|
rootPwd = None
|
baseDn = None
|
changelogport = None
|
suffixList = []
|
changelogList = []
|
serverId = 1
|
|
fileLines = f.readlines()
|
for line in fileLines:
|
|
if line.startswith('#'):
|
continue
|
elif line.find('Hostname') != -1:
|
hostname = line[line.find('Hostname') + 9:].strip()
|
elif line.find('Directory') !=-1:
|
dir = line[line.find('Directory') + 10:].strip()
|
elif line.find('Port') != -1:
|
port = line[line.find('Port') + 5:].strip()
|
elif line.find('Adminport') != -1:
|
adminport = line[line.find('Adminport') + 10:].strip()
|
elif line.find('Sslport') != -1:
|
sslport = line[line.find('Sslport') + 8:].strip()
|
elif line.find('Jmxport') != -1:
|
jmxport = line[line.find('Jmxport') + 8:].strip()
|
elif line.find('RootDn') != -1:
|
rootDn = line[line.find('RootDn') + 7:].strip()
|
elif line.find('RootPwd') != -1:
|
rootPwd = line[line.find('RootPwd') + 8:].strip()
|
elif line.find('BaseDn') != -1:
|
baseDn = line[line.find('BaseDn') + 7:].strip()
|
elif line.find('Changelogport') != -1:
|
changelogport = line[line.find('Changelogport') + 14:].strip()
|
elif line.find('SynchronizedSuffix') != -1:
|
suffixList.append( line[line.find('SynchronizedSuffix') + 19:].strip() )
|
elif line.find('ChangelogServer') != -1:
|
changelogList.append( line[line.find('ChangelogServer') + 16:].strip() )
|
elif (line.isspace()) or (len(line) == 0):
|
server = Server(hostname, dir, port, adminport, sslport, jmxport,
|
rootDn, rootPwd, baseDn, remote.data)
|
|
if changelogport != None:
|
changelogServer = ChangelogServer(changelogport, serverId)
|
for item in changelogList:
|
srv = item[:item.find(':')]
|
prt = item[item.find(':') + 1:]
|
changelogServer.addChangelogServer(srv, prt)
|
server.addChangelogServer(changelogServer)
|
|
for suffix in suffixList:
|
synchroSuffix = SynchronizedSuffix(suffix, serverId)
|
for item in changelogList:
|
srv = item[:item.find(':')]
|
prt = item[item.find(':') + 1:]
|
synchroSuffix.addChangelogServer(srv, prt)
|
server.addSynchronizedSuffix(synchroSuffix)
|
|
_topologyServerList.append(server)
|
|
hostname = None
|
dir = None
|
port = None
|
adminport = None
|
sslport = None
|
jmxport = None
|
rootDn = None
|
rootPwd = None
|
baseDn = None
|
changelogport = None
|
suffixList = []
|
changelogList = []
|
serverId += 1
|
|
if hostname != None:
|
server = Server(hostname, dir, port, adminport, sslport, jmxport,
|
rootDn, rootPwd, baseDn, remote.data)
|
|
if changelogport != None:
|
changelogServer = ChangelogServer(changelogport, serverId)
|
for item in changelogList:
|
srv = item[:item.find(':')]
|
prt = item[item.find(':') + 1:]
|
changelogServer.addChangelogServer(srv, prt)
|
server.addChangelogServer(changelogServer)
|
|
for suffix in suffixList:
|
synchroSuffix = SynchronizedSuffix(suffix, serverId)
|
for item in changelogList:
|
srv = item[:item.find(':')]
|
prt = item[item.find(':') + 1:]
|
synchroSuffix.addChangelogServer(srv, prt)
|
server.addSynchronizedSuffix(synchroSuffix)
|
|
_topologyServerList.append(server)
|
|
f.close()
|
</script>
|
</sequence>
|
</function>
|
|
|
|
<function name="removeInstance">
|
<function-prolog>
|
This function removes an instance on a given host.
|
</function-prolog>
|
|
<function-map-args>
|
<function-arg-def name="dsHost"
|
type="optional"
|
default="DIRECTORY_INSTANCE_HOST">
|
<function-arg-description>
|
Hostname where the instance is to be created
|
</function-arg-description>
|
<function-arg-property name="type" value="hostname"/>
|
</function-arg-def>
|
<function-arg-def name="dsDir"
|
type="optional"
|
default="DIRECTORY_INSTANCE_DIR">
|
<function-arg-description>
|
Directory where OpenDS will be installed
|
</function-arg-description>
|
<function-arg-property name="type" value="filepath"/>
|
</function-arg-def>
|
</function-map-args>
|
|
<sequence>
|
<message>
|
'Removing instance %s/%s on host %s' % (dsDir,OPENDSNAME,dsHost)
|
</message>
|
|
<!-- ON REMOTE HOST: remove files and folders -->
|
<!--- Delete staging data file on remote host-->
|
<message>
|
'Delete staging data file %s/testdata.zip' % dsDir
|
</message>
|
<call function="'deleteFile'">
|
{ 'location' : dsHost,
|
'filename' : '%s/testdata.zip' % dsDir
|
}
|
</call>
|
</sequence>
|
</function>
|
|
|
|
<function name="removeTopology">
|
<function-prolog>
|
This function removes the topology created for the Test Group/Suite.
|
</function-prolog>
|
<function-map-args>
|
<function-arg-def name="multipleInstanceTopology"
|
type="optional"
|
default="False">
|
<function-arg-description>
|
Tells whether it is a single (i.e. parameters read from config.py) or
|
a multiple-instance topology (i.e. parameters read from topology desc
|
file).
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean"/>
|
</function-arg-def>
|
</function-map-args>
|
<sequence>
|
<if expr="multipleInstanceTopology == False">
|
<!-- SINGLE instance deployment: parameters read from config.py (done by
|
default) -->
|
<call function="'removeInstance'" />
|
<else>
|
<!-- MULTIPLE instance deployment: parameters read from
|
topologyDescFile -->
|
<iterate var="server" in="_splitServerList">
|
<call function="'removeInstance'">
|
{ 'dsHost' : server.getHostname(),
|
'dsDir' : server.getDir()
|
}
|
</call>
|
</iterate>
|
</else>
|
</if>
|
</sequence>
|
</function>
|
|
|
|
<!-- Prepare instance(s) for external re-initialisation of replicated suffix
|
using dsreplication -->
|
<function name="preInitializeReplication">
|
<function-prolog>
|
This function prepares one or all instances in a topology for the external
|
re-initialisation of replicated suffixes 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="localOnly"
|
type="optional"
|
default="None">
|
<function-arg-description>
|
Only the contents of the specified server will be initialised.
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean" />
|
</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>
|
'Preparing instance %s:%s for external initialization' \
|
% (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('pre-external-initialization')
|
STAFCmdParamsList.append('-n')
|
STAFCmdParamsList.append('-Q')
|
STAFCmdParamsList.append('-X')
|
|
if dsInstanceHost:
|
STAFCmdParamsList.append('-h %s' % dsInstanceHost)
|
|
if dsInstanceAdminPort:
|
STAFCmdParamsList.append('-p %s' % dsInstanceAdminPort)
|
|
if localOnly:
|
STAFCmdParamsList.append('-l')
|
|
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' : 'Pre-Initialize Replication',
|
'location' : location,
|
'command' : STAFCmd,
|
'arguments' : STAFCmdParams
|
}
|
</call>
|
<script>
|
STAXCode=RC
|
STAXReason=STAXResult
|
</script>
|
<call function="'checktestRC'">
|
{ 'returncode' : STAXCode,
|
'result' : STAXReason,
|
'expected' : expectedRC
|
}
|
</call>
|
<return>
|
STAXReason
|
</return>
|
</sequence>
|
</function>
|
|
|
|
|
<!-- End process of instance(s) external re-initialisation of replicated
|
suffix using dsreplication -->
|
<function name="postInitializeReplication">
|
<function-prolog>
|
This function ends the process of the external re-initialisation of
|
replicated suffixes in one or all instances in 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>
|
'Post-processing external initialization of instance %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('post-external-initialization')
|
STAFCmdParamsList.append('-n')
|
STAFCmdParamsList.append('-Q')
|
STAFCmdParamsList.append('-X')
|
|
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' : 'Post-Initialize Replication',
|
'location' : location,
|
'command' : STAFCmd,
|
'arguments' : STAFCmdParams
|
}
|
</call>
|
<script>
|
STAXCode=RC
|
STAXReason=STAXResult
|
</script>
|
<call function="'checktestRC'">
|
{ 'returncode' : STAXCode,
|
'result' : STAXReason,
|
'expected' : expectedRC
|
}
|
</call>
|
<return>
|
STAXReason
|
</return>
|
</sequence>
|
</function>
|
|
|
|
<!-- Reset replicated suffix with the backup of a source server using
|
dsreplication -->
|
<function name="resetReplicationData">
|
<function-prolog>
|
This function resets the data in a replicated suffix with the backup
|
of a source server and re-initialises the 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="sourceInstanceHost"
|
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="sourceInstancePort"
|
type="optional"
|
default="None">
|
<function-arg-description>
|
Directory server port number
|
</function-arg-description>
|
<function-arg-property name="type" value="Port number" />
|
</function-arg-def>
|
|
<function-arg-def name="sourceInstanceAdminPort"
|
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="sourceInstanceDn" type="required">
|
<function-arg-description>
|
Bind DN
|
</function-arg-description>
|
<function-arg-property name="type" value="DN" />
|
</function-arg-def>
|
|
<function-arg-def name="sourceInstancePswd" type="required">
|
<function-arg-description>
|
Bind password
|
</function-arg-description>
|
<function-arg-property name="type" value="string" />
|
</function-arg-def>
|
|
<function-arg-def name="backupDir" type="required">
|
<function-arg-description>
|
The name of the backup directory
|
</function-arg-description>
|
<function-arg-property name="type" value="pathname"/>
|
</function-arg-def>
|
|
<function-arg-def name="suffixDn" type="required">
|
<function-arg-description>
|
DN of the replicated suffix
|
</function-arg-description>
|
<function-arg-property name="type" value="DN" />
|
</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>
|
'Resetting %s data in replication topology using backup %s on instance \
|
%s:%s' % (suffixDn,backupDir,sourceInstanceHost,sourceInstanceAdminPort)
|
</message>
|
|
|
<!-- Pre-initialise the servers in the topology -->
|
<call function="'preInitializeReplication'">
|
{ 'location' : location,
|
'dsPath' : dsPath,
|
'dsInstanceHost' : sourceInstanceHost,
|
'dsInstanceAdminPort' : sourceInstanceAdminPort,
|
'localOnly' : False,
|
'replicationDnList' : [suffixDn],
|
'adminUID' : adminUID,
|
'adminPswd' : adminPswd
|
}
|
</call>
|
|
<script>
|
import random
|
import java.util.Date
|
random.seed(java.util.Date().getTime())
|
resetCounter = '%s#%d' \
|
% (strftime('%Y-%m-%d %H:%M:%S',localtime()),random.randint(0,999))
|
</script>
|
<!-- Restore the data in the server -->
|
<call function="'restoreTask'">
|
{ 'location' : location,
|
'dsPath' : dsPath,
|
'dsInstanceHost' : sourceInstanceHost,
|
'dsInstancePort' : sourceInstancePort,
|
'dsInstanceDn' : sourceInstanceDn,
|
'dsInstancePswd' : sourceInstancePswd,
|
'taskID' : 'restore task - %s' % resetCounter,
|
'backupDir' : backupDir
|
}
|
</call>
|
|
<!-- Post-initialise the servers in the topology -->
|
<call function="'postInitializeReplication'">
|
{ 'location' : location,
|
'dsPath' : dsPath,
|
'dsInstanceHost' : sourceInstanceHost,
|
'dsInstanceAdminPort' : sourceInstanceAdminPort,
|
'replicationDnList' : [suffixDn],
|
'adminUID' : adminUID,
|
'adminPswd' : adminPswd
|
}
|
</call>
|
|
|
<!-- Initialise the servers in the topology -->
|
<call function="'initializeReplication'">
|
{ 'location' : location,
|
'dsPath' : dsPath,
|
'sourceInstanceHost' : sourceInstanceHost,
|
'sourceInstanceAdminPort' : sourceInstanceAdminPort,
|
'replicationDnList' : [suffixDn],
|
'adminUID' : adminUID,
|
'adminPswd' : adminPswd
|
}
|
</call>
|
|
<script>
|
STAXCode=RC
|
STAXReason=STAXResult
|
</script>
|
<call function="'checktestRC'">
|
{ 'returncode' : STAXCode,
|
'result' : STAXReason,
|
'expected' : expectedRC
|
}
|
</call>
|
<return>
|
STAXReason
|
</return>
|
</sequence>
|
</function>
|
|
<function name="common_setup" scope="local">
|
<function-prolog>
|
This function helps to perform a common setup and data load of directory server.
|
</function-prolog>
|
<function-map-args>
|
<function-arg-def name="directoryServer" type="optional" default="server">
|
<function-arg-description>
|
The directory server object instance
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean"/>
|
</function-arg-def>
|
<function-arg-def name="quickStart" type="optional" default="True">
|
<function-arg-description>
|
Perform a quick start of the server with preloaded data
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean"/>
|
</function-arg-def>
|
<function-arg-def name="loadData" type="optional" default="True">
|
<function-arg-description>
|
Load data into the server
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean"/>
|
</function-arg-def>
|
<function-arg-def name="startServer" type="optional" default="True">
|
<function-arg-description>
|
Start the server
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean"/>
|
</function-arg-def>
|
<function-arg-def name="stopServer" type="optional" default="True">
|
<function-arg-description>
|
Stop the server
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean"/>
|
</function-arg-def>
|
<function-arg-def name="ldifFile" type="optional" default="''">
|
<function-arg-description>
|
Path and name of the ldif file to be used to add entries
|
</function-arg-description>
|
<function-arg-property name="type" value="structure"/>
|
</function-arg-def>
|
<function-arg-def name="allowPreEncodePassword" type="optional" default="False">
|
<function-arg-description>
|
Allow pre-encoded passwords to be added
|
</function-arg-description>
|
<function-arg-property name="boolean" value="True|False"/>
|
</function-arg-def>
|
<function-arg-def name="generateLDIF" type="optional" default="False">
|
<function-arg-description>
|
Generate with makeldif the ldif file to be imported
|
</function-arg-description>
|
<function-arg-property name="boolean" value="True|False"/>
|
</function-arg-def>
|
<function-arg-def name="ldifTemplate" type="optional" default="''">
|
<function-arg-description>
|
Path and name of the ldif template to be used to generate entries
|
</function-arg-description>
|
<function-arg-property name="type" value="structure"/>
|
</function-arg-def>
|
<function-arg-def name="friendlyName" type="optional" default="'Common'">
|
<function-arg-description>
|
Friendly name for the common setup launcher
|
</function-arg-description>
|
<function-arg-property name="type" value="structure"/>
|
</function-arg-def>
|
</function-map-args>
|
|
<sequence>
|
|
<block name="'common-setup'">
|
|
<testcase name="getTestCaseName('%s Setup' % friendlyName)">
|
|
<try>
|
|
<sequence>
|
|
<call function="'testCase_Preamble'"/>
|
|
<!-- Create the topology necessary to the test group/suite -->
|
<call function="'runFunction'">
|
{ 'functionName' : 'createTopology' ,
|
'functionMessage' : 'Create DS topology' ,
|
'functionException' : 'Server.CreateTopologyException' ,
|
'functionArguments' : { 'initialiseInstance' : quickStart }
|
}
|
</call>
|
|
<if expr="startServer == True">
|
<sequence>
|
<!-- Start the OpenDS Server -->
|
<call function="'runFunction'">
|
{ 'functionName' : 'StartDsWithScript' ,
|
'functionMessage' : 'Start the Directory Server.' ,
|
'functionException' : 'Server.StartException' ,
|
'functionArguments' : { 'location' : directoryServer.location }
|
}
|
</call>
|
|
<!--- Check that DS started -->
|
<call function="'runFunction'">
|
{ 'functionName' : 'isAlive' ,
|
'functionMessage' : 'Start the Directory Server.' ,
|
'functionException' : 'Server.StartException' ,
|
'functionArguments' : { 'noOfLoops' : 100 ,
|
'noOfMilliSeconds' : 3000 }
|
}
|
</call>
|
</sequence>
|
</if>
|
|
<!-- TODO: generate ldif file -->
|
<if expr="generateLDIF == True and ldifTemplate and ldifFile">
|
<sequence>
|
<message>
|
'Generating ldif file (%s) from template (%s)' % (ldifFile,ldifTemplate)
|
</message>
|
</sequence>
|
</if>
|
|
<if expr="loadData == True and ldifFile and startServer == True">
|
<sequence>
|
|
<message>
|
'On-line import.'
|
</message>
|
|
<if expr="allowPreEncodePassword == True">
|
<call function="'dsconfigSet'">
|
{
|
'dsInstanceHost' : directoryServer.host,
|
'dsInstanceAdminPort' : directoryServer.adminport,
|
'dsInstanceDn' : directoryServer.dn,
|
'dsInstancePswd' : directoryServer.password,
|
'objectName' : 'password-policy',
|
'propertyType' : 'policy',
|
'propertyName' : 'Default Password Policy',
|
'attributeName' : 'allow-pre-encoded-passwords',
|
'attributeValue' : 'true'
|
}
|
</call>
|
</if>
|
|
<!-- Load the data needed by the test suite -->
|
<call function="'runFunction'">
|
{ 'functionName' : 'ldapModifyWithScript' ,
|
'functionMessage' : 'Adding Initial Entries' ,
|
'functionException' : 'LDAP.ModifyException' ,
|
'functionArguments' : { 'dsAdd' : 'TRUE' ,
|
'dsInstanceHost' : directoryServer.host ,
|
'dsInstancePort' : directoryServer.port ,
|
'dsInstanceDn' : directoryServer.dn ,
|
'dsInstancePswd' : directoryServer.password ,
|
'dsFilename' : ldifFile }
|
}
|
</call>
|
</sequence>
|
</if>
|
|
<if expr="loadData == True and ldifFile and startServer == False">
|
<sequence>
|
<message>
|
'Off-line import.'
|
</message>
|
|
<call function="'runFunction'">
|
{ 'functionName' : 'ImportLdifWithScript' ,
|
'functionMessage' : 'Off-line Import LDIF.' ,
|
'functionException' : 'Server.ImportException' ,
|
'functionArguments' : { 'location' : directoryServer.location ,
|
'ldifFile' : ldifFile ,
|
'backEnd' : directoryServer.backend }
|
}
|
</call>
|
|
<call function="'runFunction'">
|
{ 'functionName' : 'StartDsWithScript' ,
|
'functionMessage' : 'Start the Directory Server.' ,
|
'functionException' : 'Server.ImportException' ,
|
'functionArguments' : { 'location' : directoryServer.location }
|
}
|
</call>
|
|
<call function="'runFunction'">
|
{ 'functionName' : 'isAlive' ,
|
'functionMessage' : 'Check the Directory Server has started.' ,
|
'functionException' : 'Server.ImportException' ,
|
'functionArguments' : { 'location' : directoryServer.location ,
|
'noOfLoops' : 10 ,
|
'noOfMilliSeconds' : 2000 }
|
}
|
</call>
|
|
</sequence>
|
</if>
|
|
<if expr="stopServer == True">
|
<sequence>
|
<!-- Stop the OpenDS Server -->
|
<call function="'runFunction'">
|
{ 'functionName' : 'StartDsWithScript' ,
|
'functionMessage' : 'Stop the Directory Server.' ,
|
'functionException' : 'Server.StopException' ,
|
'functionArguments' : { 'location' : directoryServer.location }
|
}
|
</call>
|
</sequence>
|
</if>
|
|
</sequence>
|
|
<catch exception="'STAXException.Server.CreateTopologyException'" typevar="eType" var="eInfo">
|
<sequence>
|
<message log="1" level="'fatal'">
|
'%s: Create topology failed. eInfo(%s)' % (eType,eInfo)
|
</message>
|
<throw exception="'STAFException.TestSuite.SetupException'" />
|
</sequence>
|
</catch>
|
|
<catch exception="'STAXException.Server.StartException'" typevar="eType" var="eInfo">
|
<sequence>
|
<message log="1" level="'fatal'">
|
'%s: Failed to start Directory Server. eInfo(%s)' % (eType,eInfo)
|
</message>
|
<throw exception="'STAFException.TestSuite.SetupException'" />
|
</sequence>
|
</catch>
|
|
<catch exception="'STAXException.Server.ImportException'" typevar="eType" var="eInfo">
|
<sequence>
|
<message log="1" level="'fatal'">
|
'%s: Failed to import ldif file. eInfo(%s)' % (eType,eInfo)
|
</message>
|
<throw exception="'STAFException.TestSuite.SetupException'" />
|
</sequence>
|
</catch>
|
|
<catch exception="'STAXException.Server.StopException'" typevar="eType" var="eInfo">
|
<sequence>
|
<message log="1" level="'fatal'">
|
'%s: Failed to stop Directory Server. eInfo(%s)' % (eType,eInfo)
|
</message>
|
<throw exception="'STAFException.TestSuite.SetupException'" />
|
</sequence>
|
</catch>
|
|
<catch exception="'STAXException.LDAP.ModifyException'" typevar="eType" var="eInfo">
|
<sequence>
|
<message log="1" level="'fatal'">
|
'%s: LDAPModify failed. eInfo(%s)' % (eType,eInfo)
|
</message>
|
<throw exception="'STAFException.TestSuite.SetupException'" />
|
</sequence>
|
</catch>
|
|
<finally>
|
<!-- Test Group postamble -->
|
<sequence>
|
<call function="'testCase_Postamble'"/>
|
</sequence>
|
</finally>
|
|
</try>
|
|
</testcase>
|
|
</block>
|
|
</sequence>
|
|
</function>
|
|
<function name="common_cleanup" scope="local">
|
<function-prolog>
|
This function helps to perform a common cleanup of directory server and its data.
|
</function-prolog>
|
<function-map-args>
|
<function-arg-def name="directoryServer" type="optional" default="server">
|
<function-arg-description>
|
The directory server object instance
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean"/>
|
</function-arg-def>
|
<function-arg-def name="deleteSuffix" type="optional" default="True">
|
<function-arg-description>
|
Delete the suffix that holds the directory data
|
</function-arg-description>
|
<function-arg-property name="type" value="boolean"/>
|
</function-arg-def>
|
<function-arg-def name="friendlyName" type="optional" default="'Common'">
|
<function-arg-description>
|
Friendly name for the common cleanup launcher
|
</function-arg-description>
|
<function-arg-property name="type" value="structure"/>
|
</function-arg-def>
|
</function-map-args>
|
<sequence>
|
|
<block name="'common-cleanup'">
|
|
<testcase name="getTestCaseName('%s Cleanup' % friendlyName)">
|
|
<try>
|
|
<sequence>
|
<call function="'testCase_Preamble'"/>
|
|
<call function="'runFunction'">
|
{ 'functionName' : 'ldapSearchWithScript' ,
|
'functionMessage' : 'Check Server is Alive.' ,
|
'functionArguments' : { 'dsInstanceHost' : directoryServer.host ,
|
'dsInstancePort' : directoryServer.port ,
|
'dsBaseDN' : 'cn=config' ,
|
'dsInstanceDn' : directoryServer.dn ,
|
'dsInstancePswd' : directoryServer.password ,
|
'dsFilter' : 'objectclass=*' ,
|
'dsScope' : 'base' ,
|
'expectedRC' : 'noCheck'
|
}
|
}
|
</call>
|
|
<script>
|
_returncode=int(STAXResult[0])
|
</script>
|
|
<if expr="deleteSuffix == True">
|
<sequence>
|
<!-- If directoryServer is not running we have to restart it -->
|
<if expr="_returncode == 91">
|
|
<call function="'runFunction'">
|
{ 'functionName' : 'StartDsWithScript' ,
|
'functionMessage' : 'Start the Directory Server.' ,
|
'functionArguments' : { 'expectedRC' : 'noCheck' }
|
}
|
</call>
|
</if>
|
|
<call function="'runFunction'">
|
{ 'functionName' : 'ldapDeleteWithScript' ,
|
'functionMessage' : 'Recursive delete of suffix.' ,
|
'functionArguments' : { 'dsDeleteSubtree' : 'TRUE' ,
|
'dsInstanceHost' : directoryServer.host ,
|
'dsInstancePort' : directoryServer.port ,
|
'dsInstanceDn' : directoryServer.dn ,
|
'dsInstancePswd' : directoryServer.password ,
|
'dsDn' : ['%s' % server.suffix] ,
|
'expectedRC' : 'noCheck' }
|
}
|
</call>
|
</sequence>
|
</if>
|
|
<call function="'runFunction'">
|
{ 'functionName' : 'StopDsWithScript' ,
|
'functionMessage' : 'Stop the Directory Server.' ,
|
'functionArguments' : { 'dsHost' : directoryServer.host ,
|
'dsAdminPort' : directoryServer.adminport ,
|
'dsBindDN' : directoryServer.dn ,
|
'dsBindPwd' : directoryServer.password ,
|
'expectedRC' : 'noCheck' }
|
}
|
</call>
|
|
<call function="'runFunction'">
|
{ 'functionName' : 'removeTopology' ,
|
'functionMessage' : 'Remove DS topology.' ,
|
}
|
</call>
|
|
<tcstatus result="'pass'"></tcstatus>
|
|
</sequence>
|
|
<catch exception="'STAXException.LDAP.DeleteException'" typevar="eType" var="eInfo">
|
<sequence>
|
<message log="1" level="'fatal'">
|
'%s: LDAPDelete failed. eInfo(%s)' % (eType,eInfo)
|
</message>
|
<throw exception="'STAFException.TestSuite.CleanupException'" />
|
</sequence>
|
</catch>
|
|
<catch exception="'STAXException'" typevar="eType" var="eInfo">
|
<sequence>
|
<message log="1" level="'fatal'">
|
'%s: Failed to cleanup. eInfo(%s)' % (eType,eInfo)
|
</message>
|
<throw exception="'STAFException.TestSuite.CleanupException'" />
|
</sequence>
|
</catch>
|
<finally>
|
<!-- Test Group postamble -->
|
<call function="'testCase_Postamble'"/>
|
</finally>
|
|
</try>
|
|
</testcase>
|
|
</block>
|
|
</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="noOfLoops"
|
type="optional"
|
default="1">
|
<function-arg-description>
|
Number of iterations
|
</function-arg-description>
|
<function-arg-property name="type" value="integer"/>
|
</function-arg-def>
|
|
<function-arg-def name="noOfMilliSeconds"
|
type="optional"
|
default="0">
|
<function-arg-description>
|
Number of milliseconds to wait between iterations
|
</function-arg-description>
|
<function-arg-property name="type" value="seconds"/>
|
</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>
|
|
<script>
|
servernameList = []
|
entriesList = []
|
missingChangesList = []
|
ageList = []
|
replStatusRC = 0
|
resultLength = 0
|
refNbOfEntries = 'Unknown'
|
refServername = 'Unknown'
|
|
myLoop = 0
|
missingRC = True
|
</script>
|
<loop from="1" to="noOfLoops" while="missingRC == True">
|
<sequence>
|
<script>
|
myLoop = myLoop + 1
|
missingRC = False
|
</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>
|
<if expr="commandRC != expectedRC">
|
<return> commandResult </return>
|
</if>
|
|
<script>
|
replStatusRC = commandResult[0][0]
|
replStatusResult = commandResult[0][1]
|
resultLength = len(replStatusResult) > 0
|
</script>
|
|
<if expr="(replStatusRC == 0) and (resultLength != 0)">
|
<sequence>
|
<script>
|
servernameList = []
|
entriesList = []
|
missingChangesList = []
|
ageList = []
|
|
for line in replStatusResult.splitlines():
|
if line.startswith('Server:'):
|
server = line[line.find('Server:') + 7:].strip()
|
servernameList.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)
|
</script>
|
|
<iterate var="missing" in="missingChangesList">
|
<if expr="(missing != '0') and (missing != '--')">
|
<sequence>
|
<script>
|
missingRC = True
|
</script>
|
<break/>
|
</sequence>
|
</if>
|
</iterate>
|
|
<message>
|
'getReplicationStatus LOOP %s => missingChanges? \
|
(True=1/False=0) : %s' % (myLoop, missingRC)
|
</message>
|
|
<if expr="missingRC == True">
|
<!-- If there are still missing changes, wait for some more time and
|
! give the servers a chance to synchronise -->
|
<call function="'Sleep'">
|
{ 'sleepForMilliSeconds' : noOfMilliSeconds }
|
</call>
|
</if>
|
</sequence>
|
</if>
|
|
</sequence>
|
</loop>
|
|
|
<if expr="(replStatusRC == 0) and (resultLength != 0)">
|
<sequence>
|
<message>
|
'getReplicationStatus: Replication status retrieved from server \
|
%s:%s : \n%s ' % \
|
(dsInstanceHost, dsInstanceAdminPort, replStatusResult)
|
</message>
|
|
<iterate var="entries" in="entriesList" indexvar="i">
|
<if expr="entries.startswith('Server') == False">
|
<sequence>
|
<script>
|
refNbOfEntries = entries
|
refServername = servernameList[i]
|
</script>
|
<break/>
|
</sequence>
|
</if>
|
</iterate>
|
|
<iterate var="server" in="servernameList" indexvar="i">
|
<sequence>
|
<script>
|
entries = entriesList[i]
|
missingChanges = missingChangesList[i]
|
age = ageList[i]
|
|
anyMissChg = (missingChanges != '0' and missingChanges != '--')
|
anyOldAge = (age != 'N/A' and age != '--')
|
anyEntries = (entries.startswith('Server') == False)
|
entriesDiff = (entries != refNbOfEntries)
|
</script>
|
<if expr="anyMissChg or anyOldAge">
|
<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="anyEntries and entriesDiff">
|
<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, refServername, refNbOfEntries)
|
</message>
|
<tcstatus result="'fail'"/>
|
</sequence>
|
</if>
|
</sequence>
|
</iterate>
|
|
</sequence>
|
</if>
|
|
<return>
|
commandResult
|
</return>
|
</sequence>
|
</function>
|
|
<function name="stageStaticDataFiles">
|
<function-prolog>
|
This function stages locally the static data files
|
</function-prolog>
|
<function-map-args>
|
<function-arg-def name="customFileExtensions"
|
type="optional"
|
default="''">
|
<function-arg-description>
|
Non default file extensions for specific tests
|
</function-arg-description>
|
<function-arg-property name="type" value="string"/>
|
</function-arg-def>
|
<function-arg-def name="testGroupDirName"
|
type="optional"
|
default="''">
|
<function-arg-description>
|
Name of the test group directory that holds the
|
static data files
|
</function-arg-description>
|
<function-arg-property name="type" value="string"/>
|
</function-arg-def>
|
|
</function-map-args>
|
<sequence>
|
|
<!-- If remote host is local loopback then no need to stage static data files -->
|
<script>
|
from socket import gethostbyname
|
</script>
|
|
<if expr="host_is_localhost(STAF_REMOTE_HOSTNAME)">
|
<sequence>
|
<message>
|
'Not staging static data files as remote host %s (%s) is local.' % (STAF_REMOTE_HOSTNAME,gethostbyname(STAF_REMOTE_HOSTNAME))
|
</message>
|
<message>'Will creating stub folder in testdata.'</message>
|
<call function="'createStubFolders'"/>
|
<return>0</return>
|
</sequence>
|
<else>
|
<message>
|
'Remote host %s (%s) is not local.' % (STAF_REMOTE_HOSTNAME,gethostbyname(STAF_REMOTE_HOSTNAME))
|
</message>
|
</else>
|
</if>
|
|
<!-- Check to see if local tests static data directory is already created-->
|
<call function="'GetEntry'">
|
{ 'location' : STAXServiceMachine,
|
'entry' : localTestsGroupDir,
|
'attribute' : 'TYPE'
|
}
|
</call>
|
|
<!-- If the static test data is already created then don't redo it -->
|
<if expr="RC != 48">
|
<sequence>
|
<message>'Not staging static data files as they already exist.'</message>
|
<return>0</return>
|
</sequence>
|
</if>
|
|
<!-- Locally copy static data files to temporary staging area -->
|
<message>
|
'Staging static data files on local machine.'
|
</message>
|
|
<!-- All LDIF (.ldif) files for quickinstall are needed for each suite -->
|
<script>
|
quickStartGroupDir='%s/quickstart' % (source.data)
|
quickStartLocalTestsGroupDir='%s/quickstart' % local.data
|
</script>
|
<message>
|
'Copy quickstart ldif data files locally from %s to %s.' % \
|
(quickStartGroupDir,quickStartLocalTestsGroupDir)
|
</message>
|
<call function="'CopyFolderByExtension'">
|
{ 'location' : STAXServiceMachine,
|
'srcfolder' : quickStartGroupDir,
|
'destfolder' : quickStartLocalTestsGroupDir,
|
'extension' : 'ldif'
|
}
|
</call>
|
|
<!-- Default static data files -->
|
<script>
|
defaultFileExtensions=["ldif","pwd","gz","ref","security"]
|
</script>
|
|
<iterate var="fExt" in="defaultFileExtensions + customFileExtensions">
|
<sequence>
|
<message>
|
'Copy %s data files locally from %s to %s.' % \
|
(fExt,sourceTestsGroupDir,localTestsGroupDir)
|
</message>
|
<call function="'CopyFolderByExtension'">
|
{ 'location' : STAXServiceMachine,
|
'srcfolder' : sourceTestsGroupDir,
|
'destfolder' : localTestsGroupDir,
|
'extension' : '%s' % fExt
|
}
|
</call>
|
</sequence>
|
</iterate>
|
|
</sequence>
|
</function>
|
|
<function name="stageJavaFiles">
|
<function-prolog>
|
This function stages locally and builds the java class files
|
</function-prolog>
|
<function-map-args>
|
<function-arg-def name="customJavaProjects"
|
type="optional"
|
default="''">
|
<function-arg-description>
|
Name of the custom java based project (should be folder name)
|
</function-arg-description>
|
<function-arg-property name="type" value="string"/>
|
</function-arg-def>
|
|
</function-map-args>
|
<sequence>
|
|
<script>
|
defaultJavaProjects=["ldapjndi","ldapjdk"]
|
</script>
|
|
<!-- Archive (*/.java) files -->
|
<iterate var="javaProject" in="defaultJavaProjects + customJavaProjects">
|
<sequence>
|
<script>
|
javaSharedDir='%s/%s' % (source.java,javaProject)
|
javaLocalDir ='%s/%s' % (local.java,javaProject)
|
</script>
|
<!-- Check to see if local java data directory is already created-->
|
<call function="'GetEntry'">
|
{ 'location' : STAXServiceMachine,
|
'entry' : javaLocalDir,
|
'attribute' : 'TYPE'
|
}
|
</call>
|
<if expr="RC == 48">
|
<sequence>
|
|
<message>
|
'Staging %s java files on local machine.' % javaProject
|
</message>
|
|
<message>
|
'Copy %s java files locally from %s to %s.' % \
|
(javaProject,javaSharedDir,javaLocalDir)
|
</message>
|
<call function="'CopyFolderByExtension'">
|
{
|
'location' : STAXServiceMachine,
|
'srcfolder' : javaSharedDir,
|
'destfolder' : javaLocalDir,
|
'extension' : 'java'
|
}
|
</call>
|
|
<message>
|
'Copy any jar files locally from %s to %s.' % \
|
(javaSharedDir,javaLocalDir)
|
</message>
|
<call function="'CopyFolderByExtension'">
|
{
|
'location' : STAXServiceMachine,
|
'srcfolder' : javaSharedDir,
|
'destfolder' : javaLocalDir,
|
'extension' : 'jar'
|
}
|
</call>
|
|
<!--- Check if these java files are already compiled -->
|
<call function="'listFolderByExtension'" >
|
{
|
'location' : STAXServiceMachine,
|
'foldername' : javaLocalDir,
|
'extension' : 'class'
|
}
|
</call>
|
<if expr="len(STAXResult) == 0">
|
<sequence>
|
<!-- Build Java CLASSPATH if needed-->
|
<script>
|
java_classpath = '.'
|
</script>
|
<!-- Build CLASSPATH for ldapjdk-->
|
<if expr="javaProject == 'ldapjdk'">
|
<script>
|
if is_windows_platform(STAXServiceMachine):
|
separator=';'
|
jstaf_jarfile='%s\\bin\\JSTAF.jar' % LOCAL_STAF_ROOT
|
else:
|
separator=':'
|
jstaf_jarfile='%s/lib/JSTAF.jar' % LOCAL_STAF_ROOT
|
|
ldapjdk_jarfile='%s/ldapjdk.jar' % javaLocalDir
|
|
java_classpath ='%s%s%s' \
|
% (ldapjdk_jarfile,separator,jstaf_jarfile)
|
</script>
|
</if>
|
<!-- Compile these java files on controler host -->
|
<message>
|
'Compile Java files under %s on %s' \
|
% (javaLocalDir, STAXServiceMachine)
|
</message>
|
<call function="'compileJava'" >
|
{
|
'location' : STAXServiceMachine,
|
'foldername' : '%s' % javaLocalDir,
|
'classpath' : java_classpath
|
}
|
</call>
|
</sequence>
|
</if>
|
</sequence>
|
<else>
|
<message>
|
'Not Staging %s java files as they already exist.' % javaProject
|
</message>
|
</else>
|
</if>
|
</sequence>
|
</iterate>
|
</sequence>
|
</function>
|
|
<function name="stageSNMPFiles">
|
<function-prolog>
|
This function stages locally and builds the java class files
|
</function-prolog>
|
<function-map-args>
|
<function-arg-def name="customSNMPProjects"
|
type="optional"
|
default="''">
|
<function-arg-description>
|
Name of the custom SNMP based project (should be folder name)
|
</function-arg-description>
|
<function-arg-property name="type" value="string"/>
|
</function-arg-def>
|
|
</function-map-args>
|
<sequence>
|
|
<!-- Archive (snmp/.java) files -->
|
<script>
|
javaSharedDir = '%s/snmp' % source.java
|
javaLocalDir = '%s/snmp' % local.java
|
</script>
|
|
<!-- Check to see if local java data directory is already created-->
|
<call function="'GetEntry'">
|
{ 'location' : STAXServiceMachine,
|
'entry' : javaLocalDir,
|
'attribute' : 'TYPE'
|
}
|
</call>
|
|
<if expr="RC != 48">
|
<sequence>
|
<message>'Not Staging SNMP files as they already exist.'</message>
|
<return>0</return>
|
</sequence>
|
</if>
|
|
<message>
|
'Staging SNMP files on local machine.'
|
</message>
|
|
<message>
|
'Copy java files locally from %s to %s.' % \
|
(javaSharedDir,javaLocalDir)
|
</message>
|
<call function="'CopyFolderByExtension'">
|
{
|
'location' : STAXServiceMachine,
|
'srcfolder' : javaSharedDir,
|
'destfolder' : javaLocalDir,
|
'extension' : 'java'
|
}
|
</call>
|
|
<!-- Check if 'SNMP_OPENDMK_JARFILE' exists -->
|
<call function="'GetEntry'">
|
{
|
'location' : STAXServiceMachine,
|
'entry' : SNMP_OPENDMK_JARFILE,
|
'attribute' : 'TYPE'
|
}
|
</call>
|
|
<if expr="RC == 48">
|
<message>
|
'OpenDMK jar %s not found.' % SNMP_OPENDMK_JARFILE
|
</message>
|
</if>
|
|
<!-- 'SNMP_OPENDMK_JARFILE' exists so we can continue with SNMP -->
|
<if expr="RC != 48 or not PRODUCTNAME.startswith('OpenDJ')">
|
<sequence>
|
<!--- Check if snmp java files are already compiled -->
|
<call function="'listFolderByExtension'" >
|
{
|
'location' : STAXServiceMachine,
|
'foldername' : javaLocalDir,
|
'extension' : 'class'
|
}
|
</call>
|
<if expr="len(STAXResult) == 0">
|
<sequence>
|
<!--- Install DS Copy zip file -->
|
<message>
|
'Copy DS zip archive locally from %s to %s.' % \
|
(ZIPPATH,local.temp)
|
</message>
|
<call function="'copyFile'">
|
{
|
'srcfile' : '%s/%s' % (ZIPPATH, ZIPNAME),
|
'destfile' : '%s/%s' % (local.temp, ZIPNAME),
|
'remotehost' : STAXServiceMachine
|
}
|
</call>
|
|
<!--- Install DS Extract zip file -->
|
<message>
|
'Extract locally DS zip archive to %s' % local.temp
|
</message>
|
<call function="'unZipFile'">
|
{
|
'location' : STAXServiceMachine,
|
'zipfile' : '%s/%s' % (local.temp, ZIPNAME),
|
'unzipdir' : local.temp
|
}
|
</call>
|
|
<!-- The jdmkrt.jar can be included in the OpenDS archive -->
|
<script>
|
if not PRODUCTNAME.startswith('OpenDJ'):
|
SNMP_OPENDMK_JARFILE='%s/%s/addons/jdmkrt.jar' % (local.temp,OPENDSNAME)
|
</script>
|
|
<script>
|
if is_windows_platform(STAXServiceMachine):
|
jstaf_jarfile='%s\\bin\\JSTAF.jar' % LOCAL_STAF_ROOT
|
else:
|
jstaf_jarfile='%s/lib/JSTAF.jar' % LOCAL_STAF_ROOT
|
</script>
|
|
<!--- In IPS mode, get snmp-mib2605.jar from remote machine-->
|
<if expr="IPS_PKG == True">
|
<call function="'copyFile'">
|
{
|
'location' : STAF_REMOTE_HOSTNAME,
|
'srcfile' : '%s/%s' % (DIRECTORY_INSTANCE_BIN,SNMP_OPENDS_JARFILE),
|
'destfile' : '%s/%s' % (local.temp,SNMP_OPENDS_JARFILE),
|
'remotehost' : STAXServiceMachine
|
}
|
</call>
|
</if>
|
|
<!--- Compile snmp java files on controler host -->
|
<message>
|
'Compile Java files under %s on %s' \
|
% (javaLocalDir, STAXServiceMachine)
|
</message>
|
<script>
|
opends_jarfile='%s/%s' % (local.temp,SNMP_OPENDS_JARFILE)
|
|
if is_windows_platform(STAXServiceMachine):
|
separator=';'
|
else:
|
separator=':'
|
</script>
|
<call function="'compileJava'" >
|
{
|
'location' : STAXServiceMachine,
|
'foldername' : javaLocalDir,
|
'classpath' : '%s%s%s%s%s' \
|
% (opends_jarfile,separator,SNMP_OPENDMK_JARFILE,separator,jstaf_jarfile)
|
}
|
</call>
|
|
<!-- Archive SNMP_OPENDMK_JARFILE file -->
|
<message>
|
'Copy OpenDMK jar file %s locally to %s.' \
|
% (SNMP_OPENDMK_JARFILE,javaLocalDir)
|
</message>
|
<call function="'copyFile'">
|
{
|
'remotehost' : STAXServiceMachine,
|
'srcfile' : SNMP_OPENDMK_JARFILE,
|
'destfile' : '%s/jdmkrt.jar' % javaLocalDir,
|
'remotehost' : STAXServiceMachine
|
}
|
</call>
|
|
<!-- Delete the DS zip archive -->
|
<message>
|
'Delete %s/%s' % (local.temp, ZIPNAME)
|
</message>
|
<call function="'deleteFile'">
|
{
|
'location' : STAXServiceMachine,
|
'filename' : '%s/%s' % (local.temp, ZIPNAME)
|
}
|
</call>
|
|
<!-- Delete the DS install dir -->
|
<message>
|
'Delete %s/%s' % (local.temp, OPENDSNAME)
|
</message>
|
<call function="'deleteFolder'">
|
{
|
'location' : STAXServiceMachine,
|
'foldername' : '%s/%s' % (local.temp, OPENDSNAME)
|
}
|
</call>
|
</sequence>
|
</if>
|
</sequence>
|
</if>
|
</sequence>
|
</function>
|
|
<function name="createStubFolders">
|
<function-prolog>
|
This function creates some stub folders in testdata
|
</function-prolog>
|
<function-no-args/>
|
<sequence>
|
|
<message>
|
'Create folder %s/data on host %s' % (local.directory,STAF_LOCAL_HOSTNAME)
|
</message>
|
<call function="'createFolder'">
|
{ 'location' : STAF_LOCAL_HOSTNAME,
|
'foldername' : '%s/data' % local.directory
|
}
|
</call>
|
</sequence>
|
</function>
|
|
</stax>
|