From 673cf2694fc5463a9f8a3f2df17f207480c288c6 Mon Sep 17 00:00:00 2001
From: gary_williams <gary_williams@localhost>
Date: Tue, 29 Sep 2009 15:53:27 +0000
Subject: [PATCH] clean up of XML reporting in staf tests
---
opends/tests/staf-tests/shared/python/common.py | 60 +++++
opends/tests/staf-tests/shared/functions/utils.xml | 303 +++++------------------------
opends/tests/staf-tests/shared/tests/runTestJob.xml | 5
opends/tests/staf-tests/shared/tests/runTests.xml | 195 +-----------------
4 files changed, 135 insertions(+), 428 deletions(-)
diff --git a/opends/tests/staf-tests/shared/functions/utils.xml b/opends/tests/staf-tests/shared/functions/utils.xml
index 6db0991..ccf0a4f 100755
--- a/opends/tests/staf-tests/shared/functions/utils.xml
+++ b/opends/tests/staf-tests/shared/functions/utils.xml
@@ -841,6 +841,16 @@
numFail=int(STAFResult['numFails'])
else:
numFail=int(0)
+
+ if STAFResult.has_key('startedTimestamp'):
+ startTimestamp=STAFResult['startedTimestamp']
+ else:
+ startTimestamp=int(0)
+
+ if STAFResult.has_key('information'):
+ information=STAFResult['information']
+ else:
+ information=''
if numFail == 0:
if numPass == 0:
@@ -858,6 +868,24 @@
<script>
testcaseEndTime = strftime("%Y%m%d@%H:%M:%S",localtime())
+
+ testcaseStop=int(time.time())
+ testcaseDuration=testcaseStop-testcaseStart
+ shortName=get_test_name(STAXCurrentTestcase)
+
+ xml.testcase = doc.createElement("testcase")
+ xml.createAttr(doc,xml.testcase,"name",STAXCurrentTestcase)
+ xml.createAttr(doc,xml.testcase,"duration",testcaseDuration)
+ xml.createAttr(doc,xml.testcase,"group",ThisGroupName)
+ xml.createAttr(doc,xml.testcase,"result",_status)
+ xml.createAttr(doc,xml.testcase,"shortname",shortName.lower())
+ xml.createAttr(doc,xml.testcase,"start",startTimestamp)
+ xml.createAttr(doc,xml.testcase,"stop",testcaseEndTime)
+ xml.createAttr(doc,xml.testcase,"suite",ThisSuiteName)
+ xml.createAttr(doc,xml.testcase,"info",information)
+ xml.testsuite.appendChild(xml.testcase)
+
+ xml.writeXMLfile(doc,"%s/results2.xml" % logs.reports)
</script>
<call function="'queryLogs'">
@@ -866,203 +894,6 @@
'startfrom' : testcaseStartTime,
'endat' : testcaseEndTime }
</call>
-
- <script>
- class Test:
- def __init__(self, group, suite, fullname, start, stop, failures, successes, issues, duration):
- self.message=[]
- self.log='%s/test.log' % local.temp
- self.errors='%s/error.log' % local.temp
- self.access='%s/access.log' % local.temp
- for f in [self.log,self.errors,self.access]:
- if os.path.exists(local.temp):
- fh=open(f,'w')
- fh.write('')
- fh.close()
- self.group=group
- self.suite=suite
- self.fullname=fullname
- self.start=start
- self.stop=stop
- tmp=fullname.split(":")
- if len(tmp) > 2:
- del tmp[0:2]
- self.name=''.join(tmp)
- else:
- self.name=fullname
- self.duration = duration
- if failures == 0:
- if successes == 0:
- self.result='inconclusive'
- else:
- self.result='pass'
- else:
- if len(issues) == 0:
- self.result='fail'
- else:
- self.result='known'
- self.issues=issues
-
- def toXML(self):
- xml = ' <test>%s' % newLine
- xml += ' <name>%s</name>%s' % (self.name,newLine)
- xml += ' <group>%s</group>%s' % (self.group,newLine)
- xml += ' <suite>%s</suite>%s' % (self.suite,newLine)
- xml += ' <start>%s</start>%s' % (self.start,newLine)
- xml += ' <stop>%s</stop>%s' % (self.stop,newLine)
- xml += ' <result>%s</result>%s' % (self.result,newLine)
- xml += ' <duration>%d</duration>%s' % (self.duration,newLine)
- xml += ' <issues>%s' % newLine
- for issue in self.issues:
- xml += ' <issue>%s</issue>%s' % (issue,newLine)
- xml += ' </issues>%s' % newLine
- xml += ' <log>%s' % newLine
- xml += ' <![CDATA[%s' % newLine
- if self.result!='pass':
- try:
- fh=open(self.log)
- xml += fh.read()
- fh.close()
- except IOError,details:
- self.message.append('IOError: Opening %s for reading %s' % (self.log,details.args))
- xml += ' ]]>%s' % newLine
- xml += ' </log>%s' % newLine
- xml += ' <error>%s' % newLine
- xml += ' <![CDATA[%s' % newLine
- if self.result!='pass':
- try:
- fh=open(self.errors)
- xml += fh.read()
- fh.close()
- except IOError,details:
- self.message.append('IOError: Opening %s for reading %s' % (self.errors,details.args))
- xml += ' ]]>%s' % newLine
- xml += ' </error>%s' % newLine
- xml += ' <access>%s' % newLine
- xml += ' <![CDATA[%s' % newLine
- if self.result!='pass':
- try:
- fh=open(self.access)
- xml += fh.read()
- fh.close()
- except IOError,details:
- self.message.append('IOError: Opening %s for reading %s' % (self.access,details.args))
- xml += ' ]]>%s' % newLine
- xml += ' </access>%s' % newLine
- xml += ' </test>%s' % newLine
- return xml
-
- def appendLog(self, category, log):
- wrappedLog=''
- for _line in log.splitlines():
- _line=_line.strip()
- _leftPadding=''
- while len(_line)>100:
- _logChunk=_line[:100]
- _line=_line[100:]
- wrappedLog+='%s%s%s' % (_leftPadding,_logChunk,newLine)
- _leftPadding='... '
- wrappedLog += '%s%s%s' % (_leftPadding,_line,newLine)
- if category == 'access':
- try:
- fh=open(self.access,'a')
- except IOError,details:
- self.message.append('IOError: Opening %s for appending %s' % (self.access,details.args))
- elif category == 'error':
- try:
- fh=open(self.errors,'a')
- except IOError,details:
- self.message.append('IOError: Opening %s for appending %s' % (self.errors,details.args))
- else:
- try:
- fh=open(self.log,'a')
- except IOError,details:
- self.message.append('IOError: Opening %s for appending %s' % (self.log,details.args))
- fh.seek(0,2)
- fh.write(wrappedLog)
- fh.close()
-
- def getName(self):
- return self.name
-
- def clean(self):
- for _file in [self.log,self.errors,self.access]:
- if os.path.exists(_file):
- os.remove(_file)
-
- testcaseStop=int(time.time())
- testcaseDuration=testcaseStop-testcaseStart
- thisTest = Test(CurrentTestPath['group'],CurrentTestPath['suite'],STAXCurrentTestcase, testcaseStartTime,testcaseEndTime,numFail,numPass,issuesList,testcaseDuration)
-
- doLog = False
-
- # loop through the log lines
- for element in STAFResult:
- level=element['level']
-
- # this test is BEFORE the append so we don't get the
- # end of testcase banner in the XML but only the relevant data
- if level == 'Stop':
- doLog=False
-
- # if the current element is actually this test's output then log it
- if doLog == True:
- thisTest.appendLog('test',element['message'])
-
- # this test is AFTER the append log so we don't get the
- # "starting testcase ..." header in the XML
- if level == 'Start':
- tmp = element['message'].split(':')
- # this is a verification that we start logging for the right
- # test case. this is especially useful for tests that execute
- # within the same second (that is the resolution of the STAF
- # log facility)
- if thisTest.getName().startswith(tmp[3]):
- doLog=True
-
- # parse the server's error log
- # TODO: figure out how to do this for multiple instance for the replication
- # tests for example
- for logType in ['errors','access']:
- if os.path.exists('%s/%s/logs/%s' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME,logType)):
- logfile=open('%s/%s/logs/%s' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME,logType),'a')
- logfile.seek(0,2)
- logfile.write('End testcase %s\n' % STAXCurrentTestcase)
- logfile.close()
- logfile=open('%s/%s/logs/%s' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME,logType), 'r')
- _log=''
- _doLog=False
- while True:
- line = logfile.readline()
- if not line:
- break
- if line.startswith('End testcase %s' % STAXCurrentTestcase):
- _doLog=False
- if _doLog:
- _log+=line
- if line.startswith('Begin testcase %s' % STAXCurrentTestcase):
- _doLog=True
- logfile.close()
- thisTest.appendLog(logType, _log)
-
- # save to test log
- testlog=open('%s/tests-log.xml' % logs.tests,'a')
- testlog.seek(0,2)
- testlog.write(thisTest.toXML())
- testlog.close()
-
- # clean the temporary log files for this test
- # this MUST be done AFTER the call to toXML or the logs will appear empty
- thisTest.clean()
- </script>
-
- <if expr="thisTest.message">
- <iterate in="thisTest.message" var="_message">
- <message>'%s' % _message</message>
- </iterate>
- </if>
-
- <script>thisTest.message=[]</script>
</sequence>
</function>
@@ -1084,6 +915,15 @@
ThisGroupName=CurrentTestPath['group']
ThisSuiteName=CurrentTestPath['suite']
+
+ #Create testsuite element
+ xml.testsuite = doc.createElement("testsuite")
+ xml.createAttr(doc,xml.testsuite,"name",ThisSuiteName)
+ xml.createAttr(doc,xml.testsuite,"shortname",ThisSuiteName)
+ xml.testgroup.appendChild(xml.testsuite)
+
+ xml.writeXMLfile(doc,"%s/results2.xml" % logs.reports)
+
</script>
<!-- Start time of test suite -->
@@ -1163,6 +1003,22 @@
CurrentTestPath['group']='unknown-group'
ThisGroupName=CurrentTestPath['group']
+
+ xml=xmldoc_service()
+
+ doc = xml.parseXMLfile("%s/results2.xml" % logs.reports)
+
+ qa = doc.getDocumentElement()
+ ft = qa.getChildNodes().item(1)
+ results = ft.getChildNodes().item(1)
+
+ #Create testgroup element
+ xml.testgroup = doc.createElement("testgroup")
+ xml.createAttr(doc,xml.testgroup,"name",ThisGroupName)
+ results.appendChild(xml.testgroup)
+
+ xml.writeXMLfile(doc,"%s/results2.xml" % logs.reports)
+
</script>
<message>'##### %s group preamble #####' % ThisGroupName</message>
</sequence>
@@ -1180,7 +1036,7 @@
ThisGroupName=CurrentTestPath['group']
else:
ThisGroupName='unknown-group'
-
+
coverage='N/A'
</script>
@@ -1189,6 +1045,7 @@
<script>
emmaJar='%s/%s/lib/emma.jar' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)
</script>
+
<if expr="os.path.exists(emmaJar)">
<sequence>
<script>
@@ -1218,56 +1075,8 @@
'path' : TMPDIR
}
</call>
- <script>
- from java.io import FileInputStream
- from javax.xml.transform.stream import StreamSource
- from javax.xml.transform.stream import StreamResult
- from javax.xml.parsers import DocumentBuilderFactory
- from org.w3c.dom import *
-
- factory = DocumentBuilderFactory.newInstance()
- builder = factory.newDocumentBuilder()
-
- input = FileInputStream("%s/coverage/%s/coverage.xml" % (TMPDIR,CurrentTestPath['group']))
- document = builder.parse(input)
- dom = document.getDocumentElement()
- coverageNodes = dom.getElementsByTagName("all").item(0).getChildNodes()
- for coverageNodeIndex in range(coverageNodes.getLength()):
- thisNode = coverageNodes.item(coverageNodeIndex)
- if thisNode.getNodeName() == 'coverage':
- thisNodeAttributes = thisNode.getAttributes()
- if thisNodeAttributes.getNamedItem("type").getNodeValue() == 'block, %':
- rawCoverage = thisNodeAttributes.getNamedItem("value").getNodeValue()
- coverage = rawCoverage.split('%')[0]
- testlog=open('%s/tests-log.xml' % logs.tests,'a')
- testlog.seek(0,2)
- testlog.write(" <group>\n")
- testlog.write(" <name>\n")
- testlog.write(" %s\n" % CurrentTestPath['group'])
- testlog.write(" </name>\n")
- testlog.write(" <coverage>\n")
- testlog.write(" %s\n" % coverage)
- testlog.write(" </coverage>\n")
- testlog.write(" </group>\n")
- testlog.close()
- </script>
</sequence>
- <else>
- <script>
- testlog=open('%s/tests-log.xml' % logs.tests,'a')
- testlog.seek(0,2)
- testlog.write(" <group>\n")
- testlog.write(" <name>\n")
- testlog.write(" %s\n" % CurrentTestPath['group'])
- testlog.write(" </name>\n")
- testlog.write(" <coverage>\n")
- testlog.write(" N/A\n")
- testlog.write(" </coverage>\n")
- testlog.write(" </group>\n")
- testlog.close()
- </script>
- </else>
- </if>
+ </if>
<script>
if CurrentTestPath.has_key('group'):
diff --git a/opends/tests/staf-tests/shared/python/common.py b/opends/tests/staf-tests/shared/python/common.py
index 9421c7b..ea14f3c 100644
--- a/opends/tests/staf-tests/shared/python/common.py
+++ b/opends/tests/staf-tests/shared/python/common.py
@@ -46,7 +46,8 @@
"dn2list",
"list2dn",
"dn2rfcmailaddr",
- "java_properties" ]
+ "java_properties",
+ "xmldoc_service" ]
class format_testcase:
'Format the Test name objects'
@@ -622,3 +623,60 @@
print "Exception:", sys.exc_info()[0]
return 1
+
+class xmldoc_service:
+
+ def __init__(self):
+ self.testgroup=''
+ self.testsuite=''
+ self.testcase=''
+
+ def createBlankDocument(self):
+ try:
+ import sys, traceback
+ from javax.xml.parsers import DocumentBuilderFactory
+ builderFactory=DocumentBuilderFactory.newInstance()
+ return builderFactory.newDocumentBuilder()
+ except:
+ print "exception: %s" % traceback.format_exception(*sys.exc_info())
+
+ def writeXMLfile(self,doc,xmlfile):
+ try:
+ import sys, traceback
+ from java.io import File
+ from javax.xml.transform import TransformerFactory
+ from javax.xml.transform import OutputKeys
+ from javax.xml.transform.stream import StreamResult
+ from javax.xml.transform.dom import DOMSource
+ tranFactory = TransformerFactory.newInstance();
+ aTransformer = tranFactory.newTransformer();
+ aTransformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1")
+ aTransformer.setOutputProperty(OutputKeys.INDENT, "yes")
+
+ src = DOMSource(doc);
+ dest = StreamResult(File(xmlfile));
+ aTransformer.transform(src, dest);
+ except:
+ print "exception: %s" % traceback.format_exception(*sys.exc_info())
+
+ def parseXMLfile(self,xmlfile):
+ try:
+ import sys, traceback
+ from java.io import FileInputStream
+ self.builder= self.createBlankDocument()
+ self.input = FileInputStream(xmlfile)
+ self.doc = self.builder.parse(self.input)
+ self.input.close()
+ return self.doc
+ except:
+ print "exception: %s" % traceback.format_exception(*sys.exc_info())
+
+ def createAttr(self,doc,tag,attr,value):
+ try:
+ import sys, traceback
+ newAttribute= doc.createAttribute(attr)
+ newAttribute.setValue('%s' % value)
+ tag.setAttributeNode(newAttribute)
+ except:
+ print "exception: %s" % traceback.format_exception(*sys.exc_info())
+
\ No newline at end of file
diff --git a/opends/tests/staf-tests/shared/tests/runTestJob.xml b/opends/tests/staf-tests/shared/tests/runTestJob.xml
index 0aabc67..f194e16 100644
--- a/opends/tests/staf-tests/shared/tests/runTestJob.xml
+++ b/opends/tests/staf-tests/shared/tests/runTestJob.xml
@@ -735,7 +735,6 @@
_message='Generated groups test report.'
xslfile= '%s/gen-groups-report.xsl' % TESTS_XSL_DIR
htmlfile= '%s/groups.html' % logsReportDir
- testslog= '%s/tests-log.xml' % logsTestsDir
groupsReport=report_generation()
stringParamsDict={}
@@ -812,7 +811,7 @@
htmlfile='%s/%s-report.html' % (groupDir,testSuiteShortName)
- stringParamsDict={ 'group' : testGroupName, 'suite' : testSuiteName, 'tests-log' : testslog }
+ stringParamsDict={ 'group' : testGroupName, 'suite' : testSuiteName }
casesReport=report_generation()
@@ -910,7 +909,7 @@
<location>'%s' % STAF_LOCAL_HOSTNAME </location>
<service>'email'</service>
<request>
- 'send %s contenttype "text/html" file %s subject "%s" noheader' % (MailSendTo,MailSendReport,MailSubject)
+ 'send %s contenttype "text/html" file "%s" subject "%s" noheader' % (MailSendTo,MailSendReport,MailSubject)
</request>
</stafcmd>
diff --git a/opends/tests/staf-tests/shared/tests/runTests.xml b/opends/tests/staf-tests/shared/tests/runTests.xml
index ee9278f..c5d5bb7 100755
--- a/opends/tests/staf-tests/shared/tests/runTests.xml
+++ b/opends/tests/staf-tests/shared/tests/runTests.xml
@@ -39,6 +39,22 @@
<script>
listOfChildren=[]
+ xml=xmldoc_service()
+
+ xml.createBlankDocument()
+
+ builder = xml.createBlankDocument()
+
+ doc = builder.newDocument()
+ root = doc.createElement("qa")
+ doc.appendChild(root)
+ ft = doc.createElement("%s" % TESTS_TYPE)
+ root.appendChild(ft);
+ results = doc.createElement("results")
+ ft.appendChild(results);
+
+ xml.writeXMLfile(doc,"%s/results2.xml" % logs.reports)
+
class groupToRun:
def __init__(self, name):
self.name = name
@@ -46,12 +62,6 @@
def getName(self):
return self.name
- testlog=open('%s/tests-log.xml' % logs.tests,'w')
- testlog.write('<qa>\n')
- testlog.write(' <%s>\n' % TESTS_TYPE)
- testlog.write(' <results>\n')
- testlog.close()
-
groupsToRun = []
for line in TEST_PLAN_CUSTOM.split(","):
groupsToRun.append(groupToRun(line.rstrip()))
@@ -145,182 +155,13 @@
'path' : TMPDIR
}
</call>
- <script>
- from java.io import FileInputStream
- from javax.xml.transform.stream import StreamSource
- from javax.xml.transform.stream import StreamResult
- from javax.xml.parsers import DocumentBuilderFactory
- from org.w3c.dom import *
-
- factory = DocumentBuilderFactory.newInstance()
- builder = factory.newDocumentBuilder()
-
- input = FileInputStream("%s/coverage/coverage.xml" % TMPDIR)
- document = builder.parse(input)
- dom = document.getDocumentElement()
- coverageNodes = dom.getElementsByTagName("all").item(0).getChildNodes()
- for coverageNodeIndex in range(coverageNodes.getLength()):
- thisNode = coverageNodes.item(coverageNodeIndex)
- if thisNode.getNodeName() == 'coverage':
- thisNodeAttributes = thisNode.getAttributes()
- if thisNodeAttributes.getNamedItem("type").getNodeValue() == 'block, %':
- rawCoverage = thisNodeAttributes.getNamedItem("value").getNodeValue()
- coverage = rawCoverage.split('%')[0]
- testlog=open('%s/tests-log.xml' % logs.tests,'a')
- testlog.seek(0,2)
- testlog.write(" <all>\n")
- testlog.write(" <coverage>\n")
- testlog.write(" %s\n" % coverage)
- testlog.write(" </coverage>\n")
- testlog.write(" </all>\n")
- testlog.close()
- </script>
</sequence>
- <else>
- <script>
- testlog=open('%s/tests-log.xml' % logs.tests,'a')
- testlog.seek(0,2)
- testlog.write(" <all>\n")
- testlog.write(" <coverage>\n")
- testlog.write(" N/A\n")
- testlog.write(" </coverage>\n")
- testlog.write(" </all>\n")
- testlog.close()
- </script>
- </else>
</if>
- <!-- here goes the section where we get the product's info -->
- <call function="'GetVar'">
- { 'location' : STAF_REMOTE_HOSTNAME,
- 'type' : 'shared',
- 'variable' : 'Job%s_ServerInfo' % STAXJobID
- }
- </call>
-
- <if expr="RC != 0">
- <script>
- STAFResult='{}'
- </script>
- </if>
-
- <!-- Build the Servers Information Dictionary -->
- <script>
- ServersInfoDict=eval(STAFResult)
-
- ServerVersion='unknown'
- ServerBuildId='unknown'
- ServerJavaVersion='unknown'
- ServerJavaVendor='unknown'
- ServerJVMVersion='unknown'
- ServerJVMVendor='unknown'
- ServerJVMArchitecture='unknown'
- ServerSystemOS='unknown'
- ServerSystemName='unknown'
- ServerSvnRevision='unknown'
-
- if ServersInfoDict.has_key('%s/%s' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)):
- ServerInfoDict=ServersInfoDict['%s/%s' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)]
-
- ServerInfoKey='server version'
- if ServerInfoDict.has_key(ServerInfoKey):
- ServerVersion=ServerInfoDict[ServerInfoKey]
-
- ServerInfoKey='server buildid'
- if ServerInfoDict.has_key(ServerInfoKey):
- ServerBuildId=ServerInfoDict[ServerInfoKey]
-
- ServerInfoKey='java version'
- if ServerInfoDict.has_key(ServerInfoKey):
- ServerJavaVersion=ServerInfoDict[ServerInfoKey]
-
- ServerInfoKey='java vendor'
- if ServerInfoDict.has_key(ServerInfoKey):
- ServerJavaVendor=ServerInfoDict[ServerInfoKey]
-
- ServerInfoKey='jvm version'
- if ServerInfoDict.has_key(ServerInfoKey):
- ServerJVMVersion=ServerInfoDict[ServerInfoKey]
-
- ServerInfoKey='jvm vendor'
- if ServerInfoDict.has_key(ServerInfoKey):
- ServerJVMVendor=ServerInfoDict[ServerInfoKey]
-
- ServerInfoKey='jvm architecture'
- if ServerInfoDict.has_key(ServerInfoKey):
- ServerJVMArchitecture=ServerInfoDict[ServerInfoKey]
-
- ServerInfoKey='system os'
- if ServerInfoDict.has_key(ServerInfoKey):
- ServerSystemOS=ServerInfoDict[ServerInfoKey]
-
- ServerInfoKey='system name'
- if ServerInfoDict.has_key(ServerInfoKey):
- ServerSystemName=ServerInfoDict[ServerInfoKey]
-
- ServerInfoKey='svn revision'
- if ServerInfoDict.has_key(ServerInfoKey):
- ServerSvnRevision=ServerInfoDict[ServerInfoKey]
-
- else:
- ServerInfoDict='No key found (%s/%s)' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)
-
- # Platform and JVM can be overridden from config file
- try:
- if TEST_OS_STRING:
- ServerOsString=TEST_OS_STRING
- else:
- ServerOsString=ServerSystemOS
- except NameError,details:
- ServerOsString=ServerSystemOS
-
- try:
- if TEST_JVM_STRING:
- ServerJVMString=TEST_JVM_STRING
- else:
- ServerJVMString=ServerJVMVersion
- except NameError,details:
- ServerJVMString=ServerJVMVersion
-
- testlog=open('%s/tests-log.xml' % logs.tests,'a')
- testlog.seek(0,2)
- testlog.write(' </results>\n')
- testlog.write(' <identification>\n')
- testlog.write(' <version>\n')
- testlog.write(' %s\n' % ServerVersion)
- testlog.write(' </version>\n')
- testlog.write(' <buildid>\n')
- testlog.write(' %s\n' % ServerBuildId)
- testlog.write(' </buildid>\n')
- testlog.write(' <revision>\n')
- testlog.write(' %s\n' % ServerSvnRevision)
- testlog.write(' </revision>\n')
- testlog.write(' <platform>\n')
- testlog.write(' %s\n' % ServerSystemOS)
- testlog.write(' </platform>\n')
- testlog.write(' <os-label>\n')
- testlog.write(' %s\n' % ServerOsString)
- testlog.write(' </os-label>\n')
- testlog.write(' <jvm-version>\n')
- testlog.write(' %s\n' % ServerJVMVersion)
- testlog.write(' </jvm-version>\n')
- testlog.write(' <jvm-label>\n')
- testlog.write(' %s\n' % ServerJVMString)
- testlog.write(' </jvm-label>\n')
- testlog.write(' <jvm-vendor>\n')
- testlog.write(' %s\n' % ServerJVMVendor)
- testlog.write(' </jvm-vendor>\n')
- testlog.write(' <tests-dir>\n')
- testlog.write(' %s\n' % logs.directory)
- testlog.write(' </tests-dir>\n')
- testlog.write(' </identification>\n')
- testlog.write(' </%s>\n' % TESTS_TYPE)
- testlog.write('</qa>\n')
- testlog.close()
- </script>
-
<return>listOfChildren</return>
</sequence>
+
</function>
+
</stax>
--
Gitblit v1.10.0