<?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 2006-2010 Sun Microsystems, Inc.
|
! Portions Copyright 2011-2013 Forgerock AS
|
! -->
|
<stax>
|
<defaultcall function="main" />
|
<function name="main">
|
<sequence>
|
|
<!--- Load the environment for the test suite execution -->
|
<import machine="STAF_LOCAL_HOSTNAME"
|
file="'%s/environment.xml' % TESTS_FUNCTIONS_DIR" />
|
<call function="'loadGlobalEnvironment'" />
|
|
<!-- Build list of test groups to run -->
|
<script>
|
listOfChildren=[]
|
returnMap = {}
|
|
returnMap['replication.split'] = REPLICATION_SPLIT_SERVERS
|
returnMap['replication.eclmode'] = REPLICATION_ECL_MODE
|
|
my_path='%s/%s' % (DIRECTORY_INSTANCE_BIN,OPENDSNAME)
|
my_report='%s/results2.xml' % logs.reports
|
my_info={}
|
my_info['jvm label']=TEST_JVM_STRING
|
my_info['os label']=TEST_OS_STRING
|
my_info['server package']='%s/%s' % (ZIPPATH,ZIPNAME)
|
# The jdmkrt.jar can be included in the OpenDS archive
|
if not PRODUCTNAME.startswith('OpenDJ'):
|
my_info['snmp jarfile']='addons%s' % SNMP_OPENDMK_JARFILE
|
else:
|
my_info['snmp jarfile']=SNMP_OPENDMK_JARFILE
|
|
#If test logs hosted on web server just use directly the url
|
if LOGS_URI.startswith('http://'):
|
base_uri = '%s/%s' % (LOGS_URI,os.path.split(local.directory)[1])
|
else:
|
base_uri = local.directory
|
|
xml_create_report(PRODUCTNAME,TESTS_TYPE,my_path, \
|
DSInfo.ServerDict,my_info,base_uri,my_report)
|
|
# Copy the content of results2.xml file to results_tmp.xml
|
# And add an xml-stylesheet
|
testlogfh=open(my_report,'r')
|
lines=testlogfh.readlines()
|
file=open('%s/results_tmp.xml' % logs.reports,'w')
|
file.write('%s' % lines[0])
|
file.write('<?xml-stylesheet type="text/xsl" href="gen-groups-report.xsl"?>\n')
|
for l in lines[1:]:
|
file.write('%s' % l)
|
file.close()
|
testlogfh.close()
|
# Delete results2.xml file
|
os.remove(my_report)
|
|
# Create the initial report.cfg file
|
# This file is used by the cgi script
|
import time
|
starttime = time.strftime("%Y/%m/%d %H:%M:%S", time.gmtime(TESTS_TIMESTAMP))
|
reportCfg = open('%s/logs/report.cfg' % LOGS_ROOT, 'w')
|
reportCfg.write('[Main]\n')
|
reportCfg.write('product = Directory\n')
|
if TESTS_TYPE == 'functional-tests':
|
reportCfg.write('category = Functional\n')
|
else:
|
reportCfg.write('category = Stress\n')
|
reportCfg.write('dsconfignumber = -1\n')
|
reportCfg.write('hostname = %s\n' % STAF_REMOTE_HOSTNAME)
|
reportCfg.write('testcasesfail = 0\n')
|
reportCfg.write('testcasesdone = 0\n')
|
reportCfg.write('testcasestotal = 2851\n')
|
reportCfg.write('starttime = %s\n' % starttime)
|
reportCfg.write('duration = 0\n')
|
reportCfg.write('dsconfigduration = 0\n')
|
reportCfg.write('percentage = 0\n')
|
reportCfg.write('allbugs = []\n')
|
reportCfg.write('os = %s\n' % TEST_OS_STRING)
|
reportCfg.write('report = reports/results_tmp.xml\n')
|
reportCfg.write('istemporary = True\n')
|
reportCfg.close()
|
|
groupsToRun = []
|
for line in TEST_PLAN_CUSTOM.split(","):
|
groupsToRun.append(group_to_run(line.strip()))
|
</script>
|
|
<!-- TODO: If no groupsToRun then iterate will throw exception -->
|
<iterate var="group" in="groupsToRun" >
|
|
<sequence>
|
|
<!-- The job that executes the tests -->
|
<script>
|
STAXParentID=STAXJobID
|
</script>
|
|
<job name="'%s: %s, %s, %s' % (STAXParentID,STAF_REMOTE_HOSTNAME,TEST_OS_STRING,group.getName())" monitor="1" clearlogs="'Enabled'" logtcstartstop="'Enabled'">
|
<job-file>
|
'%s/testcases/%s/%s.xml' % (TESTS_DIR,group.getName(),group.getName())
|
</job-file>
|
<job-function>
|
'main_%s' % group.getName()
|
</job-function>
|
<job-function-args eval='1'>
|
STAXParentID
|
</job-function-args>
|
<job-scriptfiles machine="STAF_LOCAL_HOSTNAME">
|
STAXJobScriptFiles
|
</job-scriptfiles>
|
<job-action>
|
<log>
|
'Started test group %s, child ID %s, parent ID %s on %s' % (group.getName(),STAXSubJobID,STAXParentID,STAF_LOCAL_HOSTNAME)
|
</log>
|
</job-action>
|
</job>
|
|
<if expr="RC == 0">
|
<sequence>
|
<message>
|
'Completed test group %s, child ID %s. Result: %s' % (group.getName(),STAXSubJobID, STAXResult)
|
</message>
|
<script>
|
listOfChildren.append(STAXSubJobID)
|
</script>
|
</sequence>
|
<else>
|
<sequence>
|
<message log="1" level="'Error'">
|
'Test group %s, child ID %s could not be started. RC: %s Result: %s' % (group.getName(),STAXSubJobID,RC,STAFResult)
|
</message>
|
</sequence>
|
</else>
|
</if>
|
|
</sequence>
|
|
</iterate>
|
|
<!-- in this section we'll compute the coverage for all the tests
|
if coverage is turned on
|
so far I could only get through this on either machines with a lot
|
of memory or small sets of tests
|
-->
|
<!-- Check if 'remote.temp/coverage' exists -->
|
<call function="'GetEntry'">
|
{
|
'location' : STAF_REMOTE_HOSTNAME ,
|
'entry' : '%s/coverage' % remote.temp ,
|
'attribute' : 'TYPE'
|
}
|
</call>
|
<if expr="RC != 48">
|
<!-- 'remote.temp/coverage' exists -->
|
<sequence>
|
<script>
|
srcPathPrefix = os.path.join(TESTS_ROOT,"..","..","src")
|
srcPaths = [ os.path.join(srcPathPrefix,"server"),
|
os.path.join(srcPathPrefix,"ads"),
|
os.path.join(srcPathPrefix,"server","org"),
|
os.path.join(srcPathPrefix,"admin","defn","org"),
|
os.path.join(srcPathPrefix,"snmp","src","org"),
|
os.path.join(srcPathPrefix,"ads","org"),
|
os.path.join(srcPathPrefix,"dsml","org"),
|
os.path.join(srcPathPrefix,"messages","src","org")
|
]
|
srcArgs = " -sp ".join(srcPaths)
|
|
resultsCoveragePath=os.path.join(LOGS_ROOT,'coverage')
|
remoteCoveragePath=os.path.join(remote.temp,'coverage')
|
</script>
|
|
<call function="'listFolderByExtension'" >
|
{
|
'location' : STAF_REMOTE_HOSTNAME,
|
'foldername' : remoteCoveragePath,
|
'extension' : 'ec'
|
}
|
</call>
|
|
<script>
|
coverageFiles=','.join(STAXResult)
|
emmaJar=os.path.join(TESTS_ROOT,"..","..","ext","emma","lib","emma.jar")
|
</script>
|
|
<call function="'runCommand'">
|
{ 'location' : STAF_REMOTE_HOSTNAME,
|
'name' : 'Generate global coverage xml report',
|
'command' : 'java',
|
'arguments' : '-Xms64M -Xmx2048m -cp %s emma report -r txt,html -in %s/coverage.em,%s -Dreport.txt.out.file=%s/coverage.txt -Dreport.html.out.file=%s/coverage.html -sp %s' % (emmaJar,remoteCoveragePath,coverageFiles,resultsCoveragePath,resultsCoveragePath,srcArgs),
|
'path' : remoteCoveragePath
|
}
|
</call>
|
|
<if expr="RC != 0">
|
<sequence>
|
<message>
|
'Zip up coverage files to %s/coverage.zip' % remote.temp
|
</message>
|
<call function="'zipUpFile'">
|
{ 'location' : STAF_REMOTE_HOSTNAME,
|
'zipfile' : '%s/coverage.zip' % remote.temp,
|
'folder' : '%s/coverage' % remote.temp,
|
'relativeto' : remote.temp
|
}
|
</call>
|
|
<message>
|
'Copy coverage zip archive to %s/coverage.zip' % local.temp
|
</message>
|
<call function="'copyFile'">
|
{ 'location' : STAF_REMOTE_HOSTNAME,
|
'srcfile' : '%s/coverage.zip' % remote.temp,
|
'destfile' : '%s/coverage.zip' % local.temp,
|
'remotehost' : STAXServiceMachine }
|
</call>
|
</sequence>
|
</if>
|
</sequence>
|
</if>
|
|
<!-- Overwrite the TESTS_TIMESTAMP value defined in the config.py file -->
|
<script>
|
oldStatus = 'istemporary = True\n'
|
newStatus = 'istemporary = False\n'
|
|
import re
|
statusRegExp = re.compile(oldStatus)
|
|
reportCfg = '%s/logs/report.cfg' % LOGS_ROOT
|
reportInput = open(reportCfg, 'r')
|
c0 = reportInput.read()
|
c1 = statusRegExp.sub(newStatus, c0)
|
reportInput.close()
|
|
reportOutput = open(reportCfg,'w')
|
reportOutput.write(c1)
|
reportOutput.close()
|
</script>
|
|
<script>
|
returnMap['listOfChildren'] = listOfChildren
|
</script>
|
|
<return>returnMap</return>
|
|
</sequence>
|
|
</function>
|
|
</stax>
|