From 1006a6e897f2959826e6ab6d24761c99e211fff6 Mon Sep 17 00:00:00 2001
From: gary_williams <gary_williams@localhost>
Date: Mon, 22 Sep 2008 16:18:20 +0000
Subject: [PATCH] Issue 2752: ensure well formed XML in test reports (part 1)

---
 opendj-sdk/opends/tests/staf-tests/functional-tests/shared/xsl/gen-groups-report.xsl |    2 
 opendj-sdk/opends/tests/staf-tests/functional-tests/shared/xsl/gen-suites-report.xsl |    2 
 opendj-sdk/opends/tests/staf-tests/shared/python/common.py                           |   30 ++-
 opendj-sdk/opends/tests/staf-tests/shared/tests/runTestJob.xml                       |  493 ++++++++++++++++++++++++------------------------------
 4 files changed, 242 insertions(+), 285 deletions(-)

diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/shared/xsl/gen-groups-report.xsl b/opendj-sdk/opends/tests/staf-tests/functional-tests/shared/xsl/gen-groups-report.xsl
index 2a268b2..065d258 100644
--- a/opendj-sdk/opends/tests/staf-tests/functional-tests/shared/xsl/gen-groups-report.xsl
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/shared/xsl/gen-groups-report.xsl
@@ -43,7 +43,7 @@
   <xsl:variable name="testware"       select="$id/testware"/>
   <xsl:variable name="mailto"         select="normalize-space($id/mailto)"/>
   <xsl:variable name="tests-dir"      select="normalize-space($id/tests-dir)"/>
-  <xsl:variable name="url"            select="normalize-space($sut/tests-url)"/>
+  <xsl:variable name="url"            select="normalize-space($id/tests-url)"/>
   <xsl:variable name="hostname"       select="normalize-space($sut/hostname)"/>
   <xsl:variable name="version"        select="normalize-space($sut/version)"/>
   <xsl:variable name="buildid"        select="normalize-space($sut/buildid)"/>
diff --git a/opendj-sdk/opends/tests/staf-tests/functional-tests/shared/xsl/gen-suites-report.xsl b/opendj-sdk/opends/tests/staf-tests/functional-tests/shared/xsl/gen-suites-report.xsl
index c2e8c27..42dcef0 100644
--- a/opendj-sdk/opends/tests/staf-tests/functional-tests/shared/xsl/gen-suites-report.xsl
+++ b/opendj-sdk/opends/tests/staf-tests/functional-tests/shared/xsl/gen-suites-report.xsl
@@ -45,7 +45,7 @@
   <xsl:variable name="sut"            select="$id/sut"/>
   <xsl:variable name="mailto"         select="normalize-space($id/mailto)"/>
   <xsl:variable name="tests-dir"      select="normalize-space($id/tests-dir)"/>
-  <xsl:variable name="url"            select="normalize-space($sut/tests-url)"/>
+  <xsl:variable name="url"            select="normalize-space($id/tests-url)"/>
   <xsl:variable name="hostname"       select="normalize-space($sut/hostname)"/>
   <xsl:variable name="version"        select="normalize-space($sut/version)"/>
   <xsl:variable name="buildid"        select="normalize-space($sut/buildid)"/>
diff --git a/opendj-sdk/opends/tests/staf-tests/shared/python/common.py b/opendj-sdk/opends/tests/staf-tests/shared/python/common.py
index 7d7da0b..094d99a 100644
--- a/opendj-sdk/opends/tests/staf-tests/shared/python/common.py
+++ b/opendj-sdk/opends/tests/staf-tests/shared/python/common.py
@@ -266,24 +266,36 @@
     return sfx
 
 class staf_service:  
-
+  'Container to hold staf service instance objects'
   def __init__(self,host,name):
     from com.ibm.staf import STAFHandle
     from com.ibm.staf import STAFResult
     from com.ibm.staf import STAFMarshallingContext
 
-    __handle = STAFHandle("varHandle")
+    self.name=name
+    self.library='Unknown'
+    self.executable='Unknown'
+    self.options='Unknown'
+    self.params='Unknown'
+
+    try:
+      __handle = STAFHandle("varHandle")
+    except STAFException, e:
+      pass
 
     __cmd = 'QUERY SERVICE %s' % name
     __res = __handle.submit2(host, "SERVICE", __cmd)
-    __context = STAFMarshallingContext.unmarshall(__res.result)
-    __entryMap = __context.getRootObject()
 
-    self.name=__entryMap['name']
-    self.library=__entryMap['library']
-    self.executable=__entryMap['executable']
-    self.options=__entryMap['options']
-    self.params=__entryMap['parameters']
+    if (__res.rc == 0):
+   
+      __context = STAFMarshallingContext.unmarshall(__res.result)
+      __entryMap = __context.getRootObject()
+
+      self.name=__entryMap['name']
+      self.library=__entryMap['library']
+      self.executable=__entryMap['executable']
+      self.options=__entryMap['options']
+      self.params=__entryMap['parameters']
 
   def get_library(self):
     return self.library
diff --git a/opendj-sdk/opends/tests/staf-tests/shared/tests/runTestJob.xml b/opendj-sdk/opends/tests/staf-tests/shared/tests/runTestJob.xml
index 01a23e2..74f8996 100644
--- a/opendj-sdk/opends/tests/staf-tests/shared/tests/runTestJob.xml
+++ b/opendj-sdk/opends/tests/staf-tests/shared/tests/runTestJob.xml
@@ -143,7 +143,8 @@
 
         ServersInfoDict=eval(STAFResult)
 
-        ServerName='unknown'
+        ServerPath='%s/%s' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)
+        ServerName='unknown'        
         ServerVersion='unknown'
         ServerBuildId='unknown'
         ServerJavaVersion='unknown'
@@ -154,12 +155,12 @@
         ServerJVMLabel='unknown'
         ServerSystemOS='unknown'
         ServerSystemName='unknown'
-        ServerSvnRevision='unknown'
+        ServerRevision='unknown'
         ServerPackage='%s/%s' % (ZIPPATH,ZIPNAME)
         ServerSNMPJarFile='%s' % SNMP_OPENDMK_JARFILE
-
-        if ServersInfoDict.has_key('%s/%s' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)):
-          ServerInfoDict=ServersInfoDict['%s/%s' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)]
+        
+        if ServersInfoDict.has_key(ServerPath):
+          ServerInfoDict=ServersInfoDict[ServerPath]
 
           ServerName=OPENDSNAME
 
@@ -204,7 +205,7 @@
             ServerSvnRevision=ServerInfoDict[ServerInfoKey]
 
         else:
-          ServerInfoDict='No key found (%s/%s)' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)
+          ServerInfoDict='No key found (%s)' % ServerPath
 
         if ServerOsString == 'Unknown Operating System':
           ServerOsString=ServerSystemOS
@@ -263,54 +264,64 @@
         txtfh=open(textfile,'w')
       </script>
 
-      <iterate var="thisChild" in="listOfChildren">
+      <!-- Defend against not having any test groups run -->
+      <if expr="not listOfChildren">
         <sequence>
-          <stafcmd name="'STAF Command: Log Query All'">
-            <location>'%s' % STAF_LOCAL_HOSTNAME </location>
-            <service>'log'</service>
-            <request>
-              'QUERY ALL MACHINE %s LOGNAME STAX_Job_%s' % (STAXServiceMachine,thisChild)
-            </request>
-          </stafcmd>
-
-          <if expr="RC == 0">
-            <sequence>
-              <script>
-                resultQuery=STAFResult
-              </script>
-              <message>
-                'Log Query on STAX_Job_%s Completed. RC=%s' % (thisChild,RC)
-              </message>
-              <iterate var="line" in="resultQuery">
-
-                <script>
-                 txtfh.write('%s\n' % line)
-                </script>
-
-              </iterate>
-            </sequence>
-            <else>
-              <sequence>
-                <message log="1" level="'Error'">
-                  'Unable to perform log query on STAX_Job_%s. RC: %s Result: %s' % (thisChild,RC,STAFResult)
-                </message>
-                <return>1</return>
-              </sequence>
-            </else>
-          </if>
-
+          <message log="1" level="'Warning'">
+            'No test groups have been run.'
+          </message>
         </sequence>
-      </iterate>
+      <else>    
+        <sequence>
+          <iterate var="thisChild" in="listOfChildren">
+            <sequence>                              
+              <stafcmd name="'STAF Command: Log Query All'">
+                <location>'%s' % STAF_LOCAL_HOSTNAME </location>
+                <service>'log'</service>
+                <request>
+                  'QUERY ALL MACHINE %s LOGNAME STAX_Job_%s' % (STAXServiceMachine,thisChild)
+                </request>
+              </stafcmd>
+    
+              <if expr="RC == 0">
+                <sequence>
+                  <script>
+                    resultQuery=STAFResult
+                  </script>
+                  <message>
+                    'Log Query on STAX_Job_%s Completed. RC=%s' % (thisChild,RC)
+                  </message>
+                  <iterate var="line" in="resultQuery">
+            
+                    <script>
+                     txtfh.write('%s\n' % line)
+                    </script>
+          
+                  </iterate> 
+                </sequence>
+                <else>
+                  <sequence>
+                    <message log="1" level="'Error'">
+                      'Unable to perform log query on STAX_Job_%s. RC: %s Result: %s' % (thisChild,RC,STAFResult)
+                    </message>
+                    <return>1</return>
+                  </sequence>
+                </else>
+              </if>
+    
+            </sequence>
+          </iterate>
+        </sequence>
+      </else>
+      </if>
 
       <script>
         txtfh.close()
       </script>
 
-      <!-- Write XML File for results -->
+      <!-- Write error File for results -->
       <script>
         import re
-        xmlfile= '%s/results.xml' % logsReportDir
-        xmlfh=open(xmlfile,'w')
         errorfile= '%s/results.errors' % logsReportDir
         errorfh=open(errorfile,'w')
       </script>
@@ -411,10 +422,8 @@
 
         except IOError:
           errorfh.write('Error: Unable to open %s. Reason IOError.' % textfile )
-      </script>
 
-      <!-- XML Report Pre -->
-      <script>
+        # Create the objects
         localstaf =test_env.staf(STAF_LOCAL_HOSTNAME)
         remotestaf=test_env.staf(STAF_REMOTE_HOSTNAME)
 
@@ -425,219 +434,145 @@
         http = test_env.http(STAF_LOCAL_HOSTNAME)
         dsml = test_env.dsml(STAF_LOCAL_HOSTNAME)
 
-        xmlfh.write('&lt;qa&gt;\n')
-        xmlfh.write('  &lt;functional-tests&gt;\n')
-        xmlfh.write('    &lt;identification&gt;\n')
-        xmlfh.write('      &lt;sut product="opends"&gt;\n')
-        xmlfh.write('        &lt;name&gt;\n')
-        xmlfh.write('          %s\n' % ServerName)
-        xmlfh.write('        &lt;/name&gt;\n')
-        xmlfh.write('        &lt;version&gt;\n')
-        xmlfh.write('          %s\n' % ServerVersion)
-        xmlfh.write('        &lt;/version&gt;\n')
-        xmlfh.write('        &lt;buildid&gt;\n')
-        xmlfh.write('          %s\n' % ServerBuildId)
-        xmlfh.write('        &lt;/buildid&gt;\n')
-        xmlfh.write('        &lt;revision&gt;\n')
-        xmlfh.write('          %s\n' % ServerSvnRevision)
-        xmlfh.write('        &lt;/revision&gt;\n')
-        xmlfh.write('        &lt;hostname&gt;\n')
-        xmlfh.write('          %s\n' % STAF_REMOTE_HOSTNAME)
-        xmlfh.write('        &lt;/hostname&gt;\n')
-        xmlfh.write('        &lt;platform&gt;\n')
-        xmlfh.write('          %s\n' % ServerSystemOS)
-        xmlfh.write('        &lt;/platform&gt;\n')
-        xmlfh.write('        &lt;jvm-version&gt;\n')
-        xmlfh.write('          %s\n' % ServerJVMVersion)
-        xmlfh.write('        &lt;/jvm-version&gt;\n')
-        xmlfh.write('        &lt;jvm-label&gt;\n')
-        xmlfh.write('          %s\n' % ServerJVMString)
-        xmlfh.write('        &lt;/jvm-label&gt;\n')
-        xmlfh.write('        &lt;jvm-vendor&gt;\n')
-        xmlfh.write('          %s\n' % ServerJVMVendor)
-        xmlfh.write('        &lt;/jvm-vendor&gt;\n')
-        xmlfh.write('        &lt;jvm-arch&gt;\n')
-        xmlfh.write('          %s\n' % ServerJVMArchitecture)
-        xmlfh.write('        &lt;/jvm-arch&gt;\n')
-        xmlfh.write('        &lt;jvm-args&gt;\n')
-        xmlfh.write('          TBD\n')
-        xmlfh.write('        &lt;/jvm-args&gt;\n')
-        xmlfh.write('        &lt;jvm-home&gt;\n')
-        xmlfh.write('          TBD\n')
-        xmlfh.write('        &lt;/jvm-home&gt;\n')
-        xmlfh.write('        &lt;jvm-bin&gt;\n')
-        xmlfh.write('          TBD\n')
-        xmlfh.write('        &lt;/jvm-bin&gt;\n')
-        xmlfh.write('        &lt;os-label&gt;\n')
-        xmlfh.write('          %s\n' % ServerOsString)
-        xmlfh.write('        &lt;/os-label&gt;\n')
-        xmlfh.write('        &lt;server-package&gt;\n')
-        xmlfh.write('          %s\n' % ServerPackage)
-        xmlfh.write('        &lt;/server-package&gt;\n')
-        xmlfh.write('        &lt;snmp-jarfile&gt;\n')
-        xmlfh.write('          %s\n' % ServerSNMPJarFile)
-        xmlfh.write('        &lt;/snmp-jarfile&gt;\n')
-        xmlfh.write('        &lt;md5-sum&gt;\n')
-        xmlfh.write('          TDB\n')
-        xmlfh.write('        &lt;/md5-sum&gt;\n')
-        xmlfh.write('      &lt;/sut&gt;\n')
-        xmlfh.write('      &lt;sut product="dsml"&gt;\n')
-        xmlfh.write('        &lt;name&gt;\n')
-        xmlfh.write('          %s\n' % DSMLName)
-        xmlfh.write('        &lt;/name&gt;\n')
-        xmlfh.write('        &lt;dsml-container&gt;\n')
-        xmlfh.write('          %s\n' % DSMLContainer)
-        xmlfh.write('        &lt;/dsml-container&gt;\n')
-        xmlfh.write('        &lt;dsml-package&gt;\n')
-        xmlfh.write('          %s\n' % DSMLPackage)
-        xmlfh.write('        &lt;/dsml-package&gt;\n')
-        xmlfh.write('        &lt;md5-sum&gt;\n')
-        xmlfh.write('          TDB\n')
-        xmlfh.write('        &lt;/md5-sum&gt;\n')
-        xmlfh.write('      &lt;/sut&gt;\n')
-        xmlfh.write('      &lt;testware&gt;\n')
-        xmlfh.write('        &lt;staf&gt;\n')
-        xmlfh.write('          &lt;local&gt;\n')
-        xmlfh.write('            &lt;hostname&gt;\n')
-        xmlfh.write('              %s\n' % STAF_LOCAL_HOSTNAME)
-        xmlfh.write('            &lt;/hostname&gt;\n')
-        xmlfh.write('            &lt;version&gt;\n')
-        xmlfh.write('              %s\n' % localstaf.version)
-        xmlfh.write('            &lt;/version&gt;\n')
-        xmlfh.write('            &lt;rootdir&gt;\n')
-        xmlfh.write('              %s\n' % localstaf.root)
-        xmlfh.write('            &lt;/rootdir&gt;\n')
-        xmlfh.write('          &lt;/local&gt;\n')
-        xmlfh.write('          &lt;remote&gt;\n')
-        xmlfh.write('            &lt;hostname&gt;\n')
-        xmlfh.write('              %s\n' % STAF_REMOTE_HOSTNAME)
-        xmlfh.write('            &lt;/hostname&gt;\n')
-        xmlfh.write('            &lt;version&gt;\n')
-        xmlfh.write('              %s\n' % remotestaf.version)
-        xmlfh.write('            &lt;/version&gt;\n')
-        xmlfh.write('            &lt;rootdir&gt;\n')
-        xmlfh.write('              %s\n' % remotestaf.root)
-        xmlfh.write('            &lt;/rootdir&gt;\n')
-        xmlfh.write('          &lt;/remote&gt;\n')
-        xmlfh.write('        &lt;/staf&gt;\n')
-        xmlfh.write('        &lt;service name="%s"&gt;\n' % stax.name)
-        xmlfh.write('          &lt;version&gt;\n')
-        xmlfh.write('            %s\n' % stax.version)
-        xmlfh.write('          &lt;/version&gt;\n')
-        xmlfh.write('          &lt;library&gt;\n')
-        xmlfh.write('            %s\n' % stax.library)
-        xmlfh.write('          &lt;/library&gt;\n')
-        xmlfh.write('          &lt;executable&gt;\n')
-        xmlfh.write('            %s\n' % stax.executable)
-        xmlfh.write('          &lt;/executable&gt;\n')
-        xmlfh.write('          &lt;options&gt;\n')
-        xmlfh.write('            %s\n' % stax.options)
-        xmlfh.write('          &lt;/options&gt;\n')
-        xmlfh.write('          &lt;params&gt;\n')
-        xmlfh.write('            %s\n' % stax.params)
-        xmlfh.write('          &lt;/params&gt;\n')
-        xmlfh.write('        &lt;/service&gt;\n')
-        xmlfh.write('        &lt;service name="%s"&gt;\n' % event.name)
-        xmlfh.write('          &lt;version&gt;\n')
-        xmlfh.write('            %s\n' % event.version)
-        xmlfh.write('          &lt;/version&gt;\n')
-        xmlfh.write('          &lt;library&gt;\n')
-        xmlfh.write('            %s\n' % event.library)
-        xmlfh.write('          &lt;/library&gt;\n')
-        xmlfh.write('          &lt;executable&gt;\n')
-        xmlfh.write('            %s\n' % event.executable)
-        xmlfh.write('          &lt;/executable&gt;\n')
-        xmlfh.write('          &lt;options&gt;\n')
-        xmlfh.write('            %s\n' % event.options)
-        xmlfh.write('          &lt;/options&gt;\n')
-        xmlfh.write('          &lt;params&gt;\n')
-        xmlfh.write('            %s\n' % event.params)
-        xmlfh.write('          &lt;/params&gt;\n')
-        xmlfh.write('        &lt;/service&gt;\n')
-        xmlfh.write('        &lt;service name="%s"&gt;\n' % eventman.name)
-        xmlfh.write('          &lt;version&gt;\n')
-        xmlfh.write('            %s\n' % eventman.version)
-        xmlfh.write('          &lt;/version&gt;\n')
-        xmlfh.write('          &lt;library&gt;\n')
-        xmlfh.write('            %s\n' % eventman.library)
-        xmlfh.write('          &lt;/library&gt;\n')
-        xmlfh.write('          &lt;executable&gt;\n')
-        xmlfh.write('            %s\n' % eventman.executable)
-        xmlfh.write('          &lt;/executable&gt;\n')
-        xmlfh.write('          &lt;options&gt;\n')
-        xmlfh.write('            %s\n' % eventman.options)
-        xmlfh.write('          &lt;/options&gt;\n')
-        xmlfh.write('          &lt;params&gt;\n')
-        xmlfh.write('            %s\n' % eventman.params)
-        xmlfh.write('          &lt;/params&gt;\n')
-        xmlfh.write('        &lt;/service&gt;\n')
-        xmlfh.write('        &lt;service name="%s"&gt;\n' % email.name)
-        xmlfh.write('          &lt;version&gt;\n')
-        xmlfh.write('            %s\n' % email.version)
-        xmlfh.write('          &lt;/version&gt;\n')
-        xmlfh.write('          &lt;library&gt;\n')
-        xmlfh.write('            %s\n' % email.library)
-        xmlfh.write('          &lt;/library&gt;\n')
-        xmlfh.write('          &lt;executable&gt;\n')
-        xmlfh.write('            %s\n' % email.executable)
-        xmlfh.write('          &lt;/executable&gt;\n')
-        xmlfh.write('          &lt;options&gt;\n')
-        xmlfh.write('            %s\n' % email.options)
-        xmlfh.write('          &lt;/options&gt;\n')
-        xmlfh.write('          &lt;params&gt;\n')
-        xmlfh.write('            %s\n' % email.params)
-        xmlfh.write('          &lt;/params&gt;\n')
-        xmlfh.write('        &lt;/service&gt;\n')
-        xmlfh.write('        &lt;service name="%s"&gt;\n' % http.name)
-        xmlfh.write('          &lt;version&gt;\n')
-        xmlfh.write('            %s\n' % http.version)
-        xmlfh.write('          &lt;/version&gt;\n')
-        xmlfh.write('          &lt;library&gt;\n')
-        xmlfh.write('            %s\n' % http.library)
-        xmlfh.write('          &lt;/library&gt;\n')
-        xmlfh.write('          &lt;executable&gt;\n')
-        xmlfh.write('            %s\n' % http.executable)
-        xmlfh.write('          &lt;/executable&gt;\n')
-        xmlfh.write('          &lt;options&gt;\n')
-        xmlfh.write('            %s\n' % http.options)
-        xmlfh.write('          &lt;/options&gt;\n')
-        xmlfh.write('          &lt;params&gt;\n')
-        xmlfh.write('            %s\n' % http.params)
-        xmlfh.write('          &lt;/params&gt;\n')
-        xmlfh.write('        &lt;/service&gt;\n')
-        xmlfh.write('        &lt;service name="%s"&gt;\n' % dsml.name)
-        xmlfh.write('          &lt;version&gt;\n')
-        xmlfh.write('            %s\n' % dsml.version)
-        xmlfh.write('          &lt;/version&gt;\n')
-        xmlfh.write('          &lt;library&gt;\n')
-        xmlfh.write('            %s\n' % dsml.library)
-        xmlfh.write('          &lt;/library&gt;\n')
-        xmlfh.write('          &lt;executable&gt;\n')
-        xmlfh.write('            %s\n' % dsml.executable)
-        xmlfh.write('          &lt;/executable&gt;\n')
-        xmlfh.write('          &lt;options&gt;\n')
-        xmlfh.write('            %s\n' % dsml.options)
-        xmlfh.write('          &lt;/options&gt;\n')
-        xmlfh.write('          &lt;params&gt;\n')
-        xmlfh.write('            %s\n' % dsml.params)
-        xmlfh.write('          &lt;/params&gt;\n')
-        xmlfh.write('        &lt;/service&gt;\n')
-        xmlfh.write('      &lt;/testware&gt;\n')
-        xmlfh.write('      &lt;tests-dir&gt;\n')
-        xmlfh.write('        %s\n' % logsDir)
-        xmlfh.write('      &lt;/tests-dir&gt;\n')
-        xmlfh.write('      &lt;tests-url&gt;\n')
-        xmlfh.write('        %s\n' % logsURI)
-        xmlfh.write('      &lt;/tests-url&gt;\n')
-        xmlfh.write('      &lt;mailto&gt;\n')
-        xmlfh.write('        %s\n' % SEND_MAIL_TO)
-        xmlfh.write('      &lt;/mailto&gt;\n')
-        xmlfh.write('    &lt;/identification&gt;\n')
-        xmlfh.write('    &lt;results&gt;\n')
-      </script>
+        # Build the XML results file
+        from xml.dom.minidom import Document
 
-      <!-- XML Report Results -->
-      <script>
+        def write_text_elements(parent,elements):
+        
+          for sutElement in elements:
+            label,text = sutElement
+            element = doc.createElement(label)
+            parent.appendChild(element)
+            try:
+              element.appendChild(doc.createTextNode(text))
+            except TypeError,details:
+              element.appendChild(doc.createTextNode('TypeError: %s' % details))
+
+        # Create the test results document
+        doc = Document()
+        
+        # Create the qa base element
+        qa = doc.createElement("qa")
+        doc.appendChild(qa)
+        
+        # Create the functional-tests element
+        ft = doc.createElement("functional-tests")
+        qa.appendChild(ft)
+        
+        # Create the identification element
+        id = doc.createElement("identification")
+        ft.appendChild(id)
+        
+        # Create the sut opends element
+        sut = doc.createElement("sut")
+        sut.setAttribute("product", "opends")
+        id.appendChild(sut)
+                
+        # Create the sut opends elements
+        sutElementList=[]
+        sutElementList.append(['name',ServerName])
+        sutElementList.append(['path',ServerPath])
+        sutElementList.append(['version',ServerVersion])
+        sutElementList.append(['buildid',ServerBuildId])
+        sutElementList.append(['revision',ServerRevision])
+        sutElementList.append(['hostname',STAF_REMOTE_HOSTNAME])
+        sutElementList.append(['platform',ServerSystemOS])
+        sutElementList.append(['jvm-version',ServerJVMVersion])
+        sutElementList.append(['jvm-label',ServerJVMString])
+        sutElementList.append(['jvm-vendor',ServerJVMVendor])
+        sutElementList.append(['jvm-arch',ServerJVMArchitecture])
+        sutElementList.append(['jvm-args','TBD'])
+        sutElementList.append(['jvm-home','TBD'])
+        sutElementList.append(['jvm-bin','TBD'])
+        sutElementList.append(['os-label',ServerOsString])
+        sutElementList.append(['server-package',ServerPackage])
+        sutElementList.append(['snmp-jarfile',ServerSNMPJarFile])
+        sutElementList.append(['md5-sum','TDB'])
+        
+        write_text_elements(sut,sutElementList)
+        
+        # Create the sut dsml element
+        sut = doc.createElement("sut")
+        sut.setAttribute("product", "dsml")
+        id.appendChild(sut)
+        
+        # Create the sut dsml elements
+        sutElementList=[]
+        sutElementList.append(['name',DSMLName])
+        sutElementList.append(['dsml-container',DSMLContainer])
+        sutElementList.append(['dsml-package',DSMLPackage])
+        sutElementList.append(['md5-sum','TDB'])
+        
+        write_text_elements(sut,sutElementList)
+        
+        sutElementList=[]
+        
+        # Create the testware element
+        testware = doc.createElement("testware")
+        id.appendChild(testware)
+        
+        # Create the staf testware element
+        staf = doc.createElement("staf")
+        testware.appendChild(staf)
+        
+        # Create the staf local element
+        local = doc.createElement("local")
+        staf.appendChild(local)
+        
+        # Create the staf local testware elements
+        testwareElementList=[]
+        testwareElementList.append(['hostname',STAF_LOCAL_HOSTNAME])
+        testwareElementList.append(['version',localstaf.version])
+        testwareElementList.append(['rootdir',localstaf.root])
+        
+        write_text_elements(local,testwareElementList)
+        
+        # Create the staf remote testware element
+        remote = doc.createElement("remote")
+        staf.appendChild(remote)
+        
+        # Create the staf remote testware elements
+        testwareElementList=[]
+        testwareElementList.append(['hostname',STAF_REMOTE_HOSTNAME])
+        testwareElementList.append(['version',remotestaf.version])
+        testwareElementList.append(['version',remotestaf.root])
+        
+        write_text_elements(remote,testwareElementList)
+        
+        for serviceType in [stax,event,eventman,email,http,dsml]:
+        
+          # Create the service testware element
+          service = doc.createElement("service")
+          service.setAttribute("name", serviceType.name)
+          testware.appendChild(service)
+        
+          # Create the service testware elements
+          testwareElementList=[]
+          testwareElementList.append(['version',serviceType.version])
+          testwareElementList.append(['library',serviceType.library])
+          testwareElementList.append(['executable',serviceType.executable])
+          testwareElementList.append(['options','%s' % serviceType.options])
+          testwareElementList.append(['params','%s' % serviceType.params])
+        
+          write_text_elements(service,testwareElementList)
+        
+        testwareElementList=[]
+        
+        # Create the id elements
+        idElementList=[]
+        idElementList.append(['tests-dir',logsDir])
+        idElementList.append(['tests-url',logsURI])
+        idElementList.append(['mailto',SEND_MAIL_TO])
+        
+        write_text_elements(id,idElementList)
+        
+        idElementList=[]
+        
+        # Create the results element
+        results = doc.createElement("results")
+        ft.appendChild(results)
+
+        # Create the results elements and attributes
         for tcname in testCaseList:
 
           if testDict.has_key(tcname):
@@ -689,21 +624,31 @@
 
           tcdurationsecs=test_time().timeToSeconds(tcduration)
 
-          xmlfh.write('      &lt;testgroup name="%s"&gt;\n' % tcgroup)
-          xmlfh.write('        &lt;testsuite name="%s"&gt;\n' % tcsuite)
-          xmlfh.write('          &lt;testcase group="%s" suite="%s" name="%s" result="%s" start="%s" stop="%s" duration="%s"/&gt;\n' % (tcgroup,tcsuite,tcname,tcresult,tcstart,tcstop,tcdurationsecs))
-          xmlfh.write('        &lt;/testsuite&gt;\n')
-          xmlfh.write('      &lt;/testgroup&gt;\n')
-      </script>
+          # Create the testgroup element
+          group = doc.createElement("testgroup")
+          group.setAttribute("name", tcgroup)
+          results.appendChild(group)
+          
+          # Create the testsuite element
+          suite = doc.createElement("testsuite")
+          suite.setAttribute("name", tcsuite)
+          group.appendChild(suite)
+          
+          # Create the testcase element
+          case = doc.createElement("testcase")
+          case.setAttribute("group", "%s" %tcgroup)
+          case.setAttribute("suite", "%s" %tcsuite)
+          case.setAttribute("name", "%s" %tcname)
+          case.setAttribute("result", "%s" %tcresult)
+          case.setAttribute("start", "%s" %tcstart)
+          case.setAttribute("stop", "%s" %tcstop)
+          case.setAttribute("duration", "%s" % tcdurationsecs)
+          suite.appendChild(case)
 
-      <!-- XML Report Post -->
-      <script>
-        xmlfh.write('    &lt;/results&gt;\n')
-        xmlfh.write('  &lt;/functional-tests&gt;\n')
-        xmlfh.write('&lt;/qa&gt;\n')
-      </script>
-
-      <script>
+        # Write out the results
+        xmlfile= '%s/results.xml' % logsReportDir
+        xmlfh=open(xmlfile,'w')
+        xmlfh.writelines(doc.toprettyxml(indent="  "))
         xmlfh.close()
         errorfh.close()
       </script>

--
Gitblit v1.10.0