From bd68ac7da6e7489ca02eb2efd8083c78a0d02692 Mon Sep 17 00:00:00 2001
From: gary_williams <gary_williams@localhost>
Date: Fri, 04 Jan 2008 11:22:05 +0000
Subject: [PATCH] test report group and test suite view

---
 opendj-sdk/opends/tests/functional-tests/testcases/runTestJob.xml         |   86 +++
 opendj-sdk/opends/tests/functional-tests/shared/xsl/gen-groups-report.xsl |  529 ++++++++++++++++++++++++++
 opendj-sdk/opends/tests/shared/python/common.py                           |   39 +
 opendj-sdk/opends/tests/functional-tests/shared/xsl/gen-suites-report.xsl |  531 ++++++++++++++++++++++++++
 4 files changed, 1,174 insertions(+), 11 deletions(-)

diff --git a/opendj-sdk/opends/tests/functional-tests/shared/xsl/gen-groups-report.xsl b/opendj-sdk/opends/tests/functional-tests/shared/xsl/gen-groups-report.xsl
new file mode 100644
index 0000000..5291c4f
--- /dev/null
+++ b/opendj-sdk/opends/tests/functional-tests/shared/xsl/gen-groups-report.xsl
@@ -0,0 +1,529 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<xsl:stylesheet version="1.0" 
+xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+<xsl:output method="html" version="4.0" encoding="iso-8859-1" indent="yes"/>
+
+<xsl:template match="/">
+
+  <!--- Test Report Header Variables -->
+  <xsl:variable name="ft"             select="qa/functional-tests"/>
+  <xsl:variable name="identification" select="$ft/identification"/>
+  <xsl:variable name="url"            select="normalize-space($identification/tests-url)"/>
+  <xsl:variable name="hostname"       select="normalize-space($identification/hostname)"/>
+  <xsl:variable name="version"        select="normalize-space($identification/version)"/>
+  <xsl:variable name="buildid"        select="normalize-space($identification/buildid)"/>
+  <xsl:variable name="revision"       select="normalize-space($identification/revision)"/>
+  <xsl:variable name="os"             select="normalize-space($identification/os-label)"/>
+  <xsl:variable name="jvm"            select="normalize-space($identification/jvm-label)"/>
+  <xsl:variable name="testgroup"      select="$ft/results/testgroup"/>
+  <xsl:variable name="testsuite"      select="$testgroup/testsuite"/>
+  <xsl:variable name="testcase"       select="$testsuite/testcase"/>
+  <xsl:variable name="total-tests"    select="count($testcase)"/>
+  <xsl:variable name="pass-tests"     select="count($testcase[@result='pass'])"/>
+  <xsl:variable name="fail-tests"     select="count($testcase[@result='fail'])"/>
+  <xsl:variable name="inconc-tests"   select="count($testcase[@result='unknown'])"/>
+  <xsl:variable name="tests-dir"      select="normalize-space($identification/tests-dir)"/>
+  
+  <xsl:element name="html">
+  
+  <xsl:element name="head">
+
+  <link rel="SHORTCUT ICON" href="https://opends.dev.java.net/public/images/opends_favicon.gif" />
+  <style type="text/css">
+/* <![CDATA[ */
+ @import "/branding/css/tigris.css";
+ @import "/branding/css/inst.css";
+ /* ]]> */
+  </style>
+  <link rel="stylesheet" type="text/css" href="/branding/css/print.css" media="print" />
+  <link rel="stylesheet" href="https://opends.dev.java.net/public/css/opends.css" type="text/css" />
+
+    <xsl:element name="title">
+      <xsl:value-of select="concat('Test Report for OpenDS ',$version)"/>
+    </xsl:element>
+  
+  </xsl:element>
+  
+  <table class="tertmasttable" width="100%" cellspacing="0">
+    <tbody>
+      <tr>
+        <td><div class="collectionheader"><xsl:value-of select="concat('Test Report for OpenDS ',$version)"/></div></td>
+        <td width="10%"><a href="https://opends.dev.java.net/"><img src="https://opends.dev.java.net/public/images/opends_logo_sm.png" alt="OpenDS Logo" width="104" height="33" border="0" align="middle" /></a> </td>
+      </tr>
+    </tbody>
+  </table>
+  
+  <!-- Overall Test Percentage -->
+  <xsl:variable name="percent-tests">
+    <xsl:choose>
+      <xsl:when test="$total-tests &gt; 0">
+        <xsl:value-of select="round((($pass-tests div $total-tests) * 100) - 0.5)"/>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="0"/>
+      </xsl:otherwise>     
+    </xsl:choose>
+  </xsl:variable>
+
+  <!-- Shaded Line -->
+  <xsl:element name="hr">
+    <xsl:attribute name="noshade">
+      <xsl:value-of select="'noshade'"/>
+    </xsl:attribute>
+    <xsl:attribute name="size">
+      <xsl:value-of select="1"/>
+    </xsl:attribute>
+  </xsl:element>
+
+  <!-- Percentage Result -->
+  <xsl:element name="table">
+    <xsl:attribute name="width">
+      <xsl:value-of select="'100%'"/>
+    </xsl:attribute>
+    <xsl:call-template name="setColour">
+      <xsl:with-param name="percent" select="$percent-tests"/>
+    </xsl:call-template>
+    <xsl:element name="tr">
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="font">
+          <xsl:attribute name="size">
+            <xsl:value-of select="'+2'"/>
+          </xsl:attribute>
+          <xsl:value-of select="concat($percent-tests,'%')"/>
+        </xsl:element>
+      </xsl:element>
+    </xsl:element>
+  </xsl:element>
+
+  <!-- Shaded Line -->
+  <xsl:element name="hr">
+    <xsl:attribute name="noshade">
+      <xsl:value-of select="'noshade'"/>
+    </xsl:attribute>
+    <xsl:attribute name="size">
+      <xsl:value-of select="1"/>
+    </xsl:attribute>
+  </xsl:element>
+
+  <!-- Identification -->
+  <xsl:element name="table">
+    <xsl:attribute name="width">
+      <xsl:value-of select="'100%'"/>
+    </xsl:attribute>
+    <xsl:element name="tr">
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="'Build'"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="'Revision'"/>
+        </xsl:element>
+      </xsl:element>          
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="'Host'"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="'Platform'"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="'JVM'"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="'Total'"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="'Pass'"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="'Fail'"/>
+        </xsl:element>
+      </xsl:element>
+            <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="'Inconclusive'"/>
+        </xsl:element>
+      </xsl:element>
+    </xsl:element>
+    <xsl:element name="tr">
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$buildid"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$revision"/>
+        </xsl:element>
+      </xsl:element>          
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$hostname"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$os"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$jvm"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$total-tests"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$pass-tests"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$fail-tests"/>
+        </xsl:element>
+      </xsl:element>
+            <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$inconc-tests"/>
+        </xsl:element>
+      </xsl:element>
+    </xsl:element>
+  </xsl:element>
+  
+  <!-- Shaded Line -->
+  <xsl:element name="hr">
+    <xsl:attribute name="noshade">
+      <xsl:value-of select="'noshade'"/>
+    </xsl:attribute>
+    <xsl:attribute name="size">
+      <xsl:value-of select="1"/>
+    </xsl:attribute>
+  </xsl:element>
+
+  <xsl:element name="body">
+
+    <!-- Test Results Table -->
+    <xsl:element name="table">
+      <xsl:attribute name="width">
+        <xsl:value-of select="'100%'"/>
+      </xsl:attribute>
+      <xsl:attribute name="border">
+        <xsl:value-of select="1"/>
+      </xsl:attribute>
+      <xsl:attribute name="cellpadding">
+        <xsl:value-of select="2"/>
+      </xsl:attribute>
+      
+      <xsl:element name="tr">
+        <xsl:attribute name="bgcolor">
+          <xsl:value-of select="'lightblue'"/>
+        </xsl:attribute>
+  
+        <xsl:element name="th">
+          <xsl:value-of select="'Test Group'"/>
+        </xsl:element>
+        <xsl:element name="th">
+          <xsl:value-of select="'Start Time'"/>
+        </xsl:element>
+        <xsl:element name="th">
+          <xsl:value-of select="'End Time'"/>
+        </xsl:element>
+        <xsl:element name="th">
+          <xsl:value-of select="'Duration'"/>
+        </xsl:element>
+        <xsl:element name="th">
+          <xsl:value-of select="'Total'"/>
+        </xsl:element>
+        <xsl:element name="th">
+          <xsl:value-of select="'Pass'"/>
+        </xsl:element>
+        <xsl:element name="th">
+          <xsl:value-of select="'Fail'"/>
+        </xsl:element>
+        <xsl:element name="th">
+          <xsl:value-of select="'Inconc'"/>
+        </xsl:element>
+        <xsl:element name="th">
+          <xsl:value-of select="'Percent'"/>
+        </xsl:element>
+
+      </xsl:element>
+
+      <xsl:for-each select="$testgroup">
+        <xsl:sort select="group" order="ascending"/>
+        <xsl:variable name="group" select="@name"/>
+        <xsl:if test="generate-id(.)=generate-id($testgroup[@name = $group])">
+
+          <xsl:variable name="all-tests" select="$testcase[@group = $group]"/>
+          <xsl:variable name="test-num" select="count($all-tests)"/>
+          <xsl:variable name="test-pass" select="count($all-tests[@result = 'pass'])"/>
+          <xsl:variable name="test-fail" select="count($all-tests[@result = 'fail'])"/>
+          <xsl:variable name="test-inc" select="count($all-tests[@result = 'unknown'])"/>
+          <xsl:variable name="test-percent" select="round((($test-pass div $test-num) * 100) - 0.5)"/>
+
+          <xsl:variable name="end-time">
+            <xsl:for-each select="$all-tests/@stop">
+
+             <xsl:if test="position() = last()">
+               <xsl:value-of select="."/>
+             </xsl:if>
+
+            </xsl:for-each>
+          </xsl:variable>
+
+          <xsl:variable name="groupdir" select="translate(@name, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"/>
+          
+          <xsl:variable name="duration">
+            <xsl:call-template name="countDuration">
+              <xsl:with-param name="testList" select="$all-tests"/>
+            </xsl:call-template>
+          </xsl:variable>
+
+          <xsl:element name="tr">
+            <xsl:call-template name="setColour">
+              <xsl:with-param name="percent" select="$test-percent"/>
+            </xsl:call-template>
+  
+            <!-- Group Name -->
+            <xsl:element name="td">
+              <xsl:attribute name="align">
+                <xsl:value-of select="'left'"/>
+              </xsl:attribute>
+              <xsl:element name="a">
+                <xsl:attribute name="href">
+                  <xsl:value-of select="concat($url,$tests-dir,'/testlogs/',$groupdir,'/',@name,'.html')"/>
+                </xsl:attribute>
+                <xsl:value-of select="@name"/>
+              </xsl:element>
+            </xsl:element>
+          
+            <!-- Start Time -->
+            <xsl:element name="td">
+              <xsl:attribute name="align">
+                <xsl:value-of select="'center'"/>
+              </xsl:attribute>
+              <xsl:value-of select="testsuite/testcase/@start[1]"/>
+            </xsl:element>
+        
+            <!-- End Time -->
+            <xsl:element name="td">
+              <xsl:attribute name="align">
+                <xsl:value-of select="'center'"/>
+              </xsl:attribute>
+              <xsl:value-of select="$end-time"/>
+            </xsl:element>
+        
+            <!-- Duration -->
+            <xsl:element name="td">
+              <xsl:attribute name="align">
+                <xsl:value-of select="'center'"/>
+              </xsl:attribute>
+              <xsl:value-of select="concat($duration,'s')"/>
+            </xsl:element>
+        
+            <!-- Total-->
+            <xsl:element name="td">
+              <xsl:attribute name="align">
+                <xsl:value-of select="'center'"/>
+              </xsl:attribute>
+              <xsl:value-of select="$test-num"/>
+            </xsl:element>
+        
+            <!-- Pass -->
+            <xsl:element name="td">
+              <xsl:attribute name="align">
+                <xsl:value-of select="'center'"/>
+              </xsl:attribute>
+              <xsl:value-of select="$test-pass"/>
+            </xsl:element>
+        
+            <!-- Fail -->
+            <xsl:element name="td">
+              <xsl:attribute name="align">
+                <xsl:value-of select="'center'"/>
+              </xsl:attribute>
+              <xsl:value-of select="$test-fail"/>
+            </xsl:element>
+        
+            <!-- Inconclusive -->
+            <xsl:element name="td">
+              <xsl:attribute name="align">
+                <xsl:value-of select="'center'"/>
+              </xsl:attribute>
+              <xsl:value-of select="$test-inc"/>
+            </xsl:element>
+        
+            <!-- Percent -->
+            <xsl:element name="td">
+              <xsl:attribute name="align">
+                <xsl:value-of select="'center'"/>
+              </xsl:attribute>
+              <xsl:value-of select="concat($test-percent,'%')"/>
+            </xsl:element>
+        
+          </xsl:element>
+      
+        </xsl:if> 
+
+      </xsl:for-each>
+
+    </xsl:element>
+
+  <!-- Shaded Line -->
+  <xsl:element name="hr">
+    <xsl:attribute name="noshade">
+      <xsl:value-of select="'noshade'"/>
+    </xsl:attribute>
+    <xsl:attribute name="size">
+      <xsl:value-of select="1"/>
+    </xsl:attribute>
+  </xsl:element>
+
+  <!-- Additional Information -->
+  <xsl:element name="h2">
+    <xsl:value-of select="'Additional Information'"/>
+  </xsl:element>
+
+  <xsl:element name="table">
+    <xsl:element name="tr">
+      <xsl:element name="td">
+        <xsl:element name="b">
+          <xsl:value-of select="'Test Archive: '"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$tests-dir"/>
+        </xsl:element>
+      </xsl:element>          
+    </xsl:element>
+  </xsl:element>
+  
+  <!-- Shaded Line -->
+  <xsl:element name="hr">
+    <xsl:attribute name="noshade">
+      <xsl:value-of select="'noshade'"/>
+    </xsl:attribute>
+    <xsl:attribute name="size">
+      <xsl:value-of select="1"/>
+    </xsl:attribute>
+  </xsl:element>
+  
+  </xsl:element>
+      
+  </xsl:element>
+
+</xsl:template>
+
+<xsl:template name="countDuration">
+  <xsl:param name="testList"/>
+    <xsl:choose>
+      <xsl:when test="$testList">
+        <xsl:variable name="recursive_result">
+          <xsl:call-template name="countDuration">
+            <xsl:with-param name="testList"
+              select="$testList[position() > 1]"/>
+          </xsl:call-template>
+        </xsl:variable>
+        <xsl:value-of
+          select="number($testList[1]/@duration) + $recursive_result"/>
+      </xsl:when>
+      <xsl:otherwise><xsl:value-of select="0"/></xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<xsl:template name="setColour">
+  <xsl:param name="percent"/>
+  <xsl:attribute name="bgcolor">
+    <xsl:choose>
+      <xsl:when test="$percent &lt; 70">
+        <xsl:value-of select="'red'" />
+      </xsl:when>
+      <xsl:when test="$percent &lt; 95">
+        <xsl:value-of select="'yellow'" />
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="'lightgreen'" />
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:attribute>
+</xsl:template>
+    
+</xsl:stylesheet>
diff --git a/opendj-sdk/opends/tests/functional-tests/shared/xsl/gen-suites-report.xsl b/opendj-sdk/opends/tests/functional-tests/shared/xsl/gen-suites-report.xsl
new file mode 100644
index 0000000..681656a
--- /dev/null
+++ b/opendj-sdk/opends/tests/functional-tests/shared/xsl/gen-suites-report.xsl
@@ -0,0 +1,531 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<xsl:stylesheet version="1.0" 
+xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+<xsl:output method="html" version="4.0" encoding="iso-8859-1" indent="yes"/>
+
+<xsl:param name="group">''</xsl:param>
+<xsl:variable name="groupdir" select="translate($group, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"/>
+
+<xsl:template match="/">
+
+  <!--- Test Report Header Variables -->
+  <xsl:variable name="ft"             select="qa/functional-tests"/>
+  <xsl:variable name="identification" select="$ft/identification"/>
+  <xsl:variable name="url"            select="normalize-space($identification/tests-url)"/>
+  <xsl:variable name="hostname"       select="normalize-space($identification/hostname)"/>
+  <xsl:variable name="version"        select="normalize-space($identification/version)"/>
+  <xsl:variable name="buildid"        select="normalize-space($identification/buildid)"/>
+  <xsl:variable name="revision"       select="normalize-space($identification/revision)"/>
+  <xsl:variable name="os"             select="normalize-space($identification/os-label)"/>
+  <xsl:variable name="jvm"            select="normalize-space($identification/jvm-label)"/>
+  <xsl:variable name="testgroup"      select="$ft/results/testgroup[translate(@name, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = $groupdir]"/>
+  <xsl:variable name="testsuite"      select="$testgroup/testsuite"/>
+  <xsl:variable name="testcase"       select="$testsuite/testcase"/>
+  <xsl:variable name="total-tests"    select="count($testcase)"/>
+  <xsl:variable name="pass-tests"     select="count($testcase[@result='pass'])"/>
+  <xsl:variable name="fail-tests"     select="count($testcase[@result='fail'])"/>
+  <xsl:variable name="inconc-tests"   select="count($testcase[@result='unknown'])"/>
+  <xsl:variable name="tests-dir"      select="normalize-space($identification/tests-dir)"/>
+  
+  <xsl:element name="html">
+  
+  <xsl:element name="head">
+
+  <link rel="SHORTCUT ICON" href="https://opends.dev.java.net/public/images/opends_favicon.gif" />
+  <style type="text/css">
+/* <![CDATA[ */
+ @import "/branding/css/tigris.css";
+ @import "/branding/css/inst.css";
+ /* ]]> */
+  </style>
+  <link rel="stylesheet" type="text/css" href="/branding/css/print.css" media="print" />
+  <link rel="stylesheet" href="https://opends.dev.java.net/public/css/opends.css" type="text/css" />
+
+    <xsl:element name="title">
+      <xsl:value-of select="concat('Test Report for OpenDS ',$version)"/>
+    </xsl:element>
+  
+  </xsl:element>
+  
+  <table class="tertmasttable" width="100%" cellspacing="0">
+    <tbody>
+      <tr>
+        <td><div class="collectionheader"><xsl:value-of select="concat('Test Report for OpenDS ',$version)"/></div></td>
+        <td width="10%"><a href="https://opends.dev.java.net/"><img src="https://opends.dev.java.net/public/images/opends_logo_sm.png" alt="OpenDS Logo" width="104" height="33" border="0" align="middle" /></a> </td>
+      </tr>
+    </tbody>
+  </table>
+  
+  <!-- Overall Test Percentage -->
+  <xsl:variable name="percent-tests">
+    <xsl:choose>
+      <xsl:when test="$total-tests &gt; 0">
+        <xsl:value-of select="round((($pass-tests div $total-tests) * 100) - 0.5)"/>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="0"/>
+      </xsl:otherwise>     
+    </xsl:choose>
+  </xsl:variable>
+
+  <!-- Shaded Line -->
+  <xsl:element name="hr">
+    <xsl:attribute name="noshade">
+      <xsl:value-of select="'noshade'"/>
+    </xsl:attribute>
+    <xsl:attribute name="size">
+      <xsl:value-of select="1"/>
+    </xsl:attribute>
+  </xsl:element>
+
+  <!-- Percentage Result -->
+  <xsl:element name="table">
+    <xsl:attribute name="width">
+      <xsl:value-of select="'100%'"/>
+    </xsl:attribute>
+    <xsl:call-template name="setColour">
+      <xsl:with-param name="percent" select="$percent-tests"/>
+    </xsl:call-template>
+    <xsl:element name="tr">
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="font">
+          <xsl:attribute name="size">
+            <xsl:value-of select="'+2'"/>
+          </xsl:attribute>
+          <xsl:value-of select="concat($percent-tests,'%')"/>
+        </xsl:element>
+      </xsl:element>
+    </xsl:element>
+  </xsl:element>
+
+  <!-- Shaded Line -->
+  <xsl:element name="hr">
+    <xsl:attribute name="noshade">
+      <xsl:value-of select="'noshade'"/>
+    </xsl:attribute>
+    <xsl:attribute name="size">
+      <xsl:value-of select="1"/>
+    </xsl:attribute>
+  </xsl:element>
+
+  <!-- Identification -->
+  <xsl:element name="table">
+    <xsl:attribute name="width">
+      <xsl:value-of select="'100%'"/>
+    </xsl:attribute>
+    <xsl:element name="tr">
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="'Build'"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="'Revision'"/>
+        </xsl:element>
+      </xsl:element>          
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="'Host'"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="'Platform'"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="'JVM'"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="'Total'"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="'Pass'"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="'Fail'"/>
+        </xsl:element>
+      </xsl:element>
+            <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="'Inconclusive'"/>
+        </xsl:element>
+      </xsl:element>
+    </xsl:element>
+    <xsl:element name="tr">
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$buildid"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$revision"/>
+        </xsl:element>
+      </xsl:element>          
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$hostname"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$os"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$jvm"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$total-tests"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$pass-tests"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$fail-tests"/>
+        </xsl:element>
+      </xsl:element>
+            <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$inconc-tests"/>
+        </xsl:element>
+      </xsl:element>
+    </xsl:element>
+  </xsl:element>
+  
+  <!-- Shaded Line -->
+  <xsl:element name="hr">
+    <xsl:attribute name="noshade">
+      <xsl:value-of select="'noshade'"/>
+    </xsl:attribute>
+    <xsl:attribute name="size">
+      <xsl:value-of select="1"/>
+    </xsl:attribute>
+  </xsl:element>
+
+  <xsl:element name="body">
+
+    <!-- Test Results Table -->
+    <xsl:element name="table">
+      <xsl:attribute name="width">
+        <xsl:value-of select="'100%'"/>
+      </xsl:attribute>
+      <xsl:attribute name="border">
+        <xsl:value-of select="1"/>
+      </xsl:attribute>
+      <xsl:attribute name="cellpadding">
+        <xsl:value-of select="2"/>
+      </xsl:attribute>
+      
+      <xsl:element name="tr">
+        <xsl:attribute name="bgcolor">
+          <xsl:value-of select="'lightblue'"/>
+        </xsl:attribute>
+  
+        <xsl:element name="th">
+          <xsl:value-of select="'Test Suite'"/>
+        </xsl:element>
+        <xsl:element name="th">
+          <xsl:value-of select="'Start Time'"/>
+        </xsl:element>
+        <xsl:element name="th">
+          <xsl:value-of select="'End Time'"/>
+        </xsl:element>
+        <xsl:element name="th">
+          <xsl:value-of select="'Duration'"/>
+        </xsl:element>
+        <xsl:element name="th">
+          <xsl:value-of select="'Total'"/>
+        </xsl:element>
+        <xsl:element name="th">
+          <xsl:value-of select="'Pass'"/>
+        </xsl:element>
+        <xsl:element name="th">
+          <xsl:value-of select="'Fail'"/>
+        </xsl:element>
+        <xsl:element name="th">
+          <xsl:value-of select="'Inconc'"/>
+        </xsl:element>
+        <xsl:element name="th">
+          <xsl:value-of select="'Percent'"/>
+        </xsl:element>
+
+      </xsl:element>
+
+      <xsl:for-each select="$testsuite">
+        <xsl:sort select="suite" order="ascending"/>
+        <xsl:variable name="suite" select="@name"/>
+        <xsl:if test="generate-id(.)=generate-id($testsuite[@name = $suite])">
+
+          <xsl:variable name="all-tests" select="$testcase[@suite = $suite]"/>
+          <xsl:variable name="test-num"  select="count($all-tests)"/>
+          <xsl:variable name="test-pass" select="count($all-tests[@result = 'pass'])"/>
+          <xsl:variable name="test-fail" select="count($all-tests[@result = 'fail'])"/>
+          <xsl:variable name="test-inc"  select="count($all-tests[@result = 'unknown'])"/>
+          <xsl:variable name="test-percent" select="round((($test-pass div $test-num) * 100) - 0.5)"/>
+          <xsl:variable name="suitename" select="translate(@name, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"/>
+          
+          <xsl:variable name="end-time">
+            <xsl:for-each select="$all-tests/@stop">
+
+             <xsl:if test="position() = last()">
+               <xsl:value-of select="."/>
+             </xsl:if>
+
+            </xsl:for-each>
+          </xsl:variable>
+
+          <xsl:variable name="duration">
+            <xsl:call-template name="countDuration">
+              <xsl:with-param name="testList" select="$all-tests"/>
+            </xsl:call-template>
+          </xsl:variable>
+
+          <xsl:element name="tr">
+          <xsl:call-template name="setColour">
+            <xsl:with-param name="percent" select="$test-percent"/>
+          </xsl:call-template>
+  
+            <!-- Group Name -->
+            <xsl:element name="td">
+              <xsl:attribute name="align">
+                <xsl:value-of select="'left'"/>
+              </xsl:attribute>
+              <xsl:element name="a">
+                <xsl:attribute name="href">
+                  <xsl:value-of select="concat($url,$tests-dir,'/testlogs/',$groupdir,'/',$suitename)"/>
+                </xsl:attribute>
+                <xsl:value-of select="@name"/>
+              </xsl:element>
+            </xsl:element>
+          
+            <!-- Start Time -->
+            <xsl:element name="td">
+              <xsl:attribute name="align">
+                <xsl:value-of select="'center'"/>
+              </xsl:attribute>
+              <xsl:value-of select="testcase/@start[1]"/>
+            </xsl:element>
+        
+            <!-- End Time -->
+            <xsl:element name="td">
+              <xsl:attribute name="align">
+                <xsl:value-of select="'center'"/>
+              </xsl:attribute>
+              <xsl:value-of select="$end-time"/>
+            </xsl:element>
+        
+            <!-- Duration -->
+            <xsl:element name="td">
+              <xsl:attribute name="align">
+                <xsl:value-of select="'center'"/>
+              </xsl:attribute>
+              <xsl:value-of select="concat($duration,'s')"/>
+            </xsl:element>
+        
+            <!-- Total-->
+            <xsl:element name="td">
+              <xsl:attribute name="align">
+                <xsl:value-of select="'center'"/>
+              </xsl:attribute>
+              <xsl:value-of select="$test-num"/>
+            </xsl:element>
+        
+            <!-- Pass -->
+            <xsl:element name="td">
+              <xsl:attribute name="align">
+                <xsl:value-of select="'center'"/>
+              </xsl:attribute>
+              <xsl:value-of select="$test-pass"/>
+            </xsl:element>
+        
+            <!-- Fail -->
+            <xsl:element name="td">
+              <xsl:attribute name="align">
+                <xsl:value-of select="'center'"/>
+              </xsl:attribute>
+              <xsl:value-of select="$test-fail"/>
+            </xsl:element>
+        
+            <!-- Inconclusive -->
+            <xsl:element name="td">
+              <xsl:attribute name="align">
+                <xsl:value-of select="'center'"/>
+              </xsl:attribute>
+              <xsl:value-of select="$test-inc"/>
+            </xsl:element>
+        
+            <!-- Percent -->
+            <xsl:element name="td">
+              <xsl:attribute name="align">
+                <xsl:value-of select="'center'"/>
+              </xsl:attribute>
+              <xsl:value-of select="concat($test-percent,'%')"/>
+            </xsl:element>
+        
+          </xsl:element>
+      
+        </xsl:if> 
+
+      </xsl:for-each>
+
+    </xsl:element>
+
+  <!-- Shaded Line -->
+  <xsl:element name="hr">
+    <xsl:attribute name="noshade">
+      <xsl:value-of select="'noshade'"/>
+    </xsl:attribute>
+    <xsl:attribute name="size">
+      <xsl:value-of select="1"/>
+    </xsl:attribute>
+  </xsl:element>
+
+  <!-- Additional Information -->
+  <xsl:element name="h2">
+    <xsl:value-of select="'Additional Information'"/>
+  </xsl:element>
+
+  <xsl:element name="table">
+    <xsl:element name="tr">
+      <xsl:element name="td">
+        <xsl:element name="b">
+          <xsl:value-of select="'Test Archive: '"/>
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="td">
+        <xsl:attribute name="align">
+          <xsl:value-of select="'center'"/>
+        </xsl:attribute>
+        <xsl:element name="b">
+          <xsl:value-of select="$tests-dir"/>
+        </xsl:element>
+      </xsl:element>          
+    </xsl:element>
+  </xsl:element>
+  
+  <!-- Shaded Line -->
+  <xsl:element name="hr">
+    <xsl:attribute name="noshade">
+      <xsl:value-of select="'noshade'"/>
+    </xsl:attribute>
+    <xsl:attribute name="size">
+      <xsl:value-of select="1"/>
+    </xsl:attribute>
+  </xsl:element>
+  
+  </xsl:element>
+      
+  </xsl:element>
+
+</xsl:template>
+
+<xsl:template name="countDuration">
+  <xsl:param name="testList"/>
+    <xsl:choose>
+      <xsl:when test="$testList">
+        <xsl:variable name="recursive_result">
+          <xsl:call-template name="countDuration">
+            <xsl:with-param name="testList"
+              select="$testList[position() > 1]"/>
+          </xsl:call-template>
+        </xsl:variable>
+        <xsl:value-of
+          select="number($testList[1]/@duration) + $recursive_result"/>
+      </xsl:when>
+      <xsl:otherwise><xsl:value-of select="0"/></xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<xsl:template name="setColour">
+  <xsl:param name="percent"/>
+  <xsl:attribute name="bgcolor">
+    <xsl:choose>
+      <xsl:when test="$percent &lt; 70">
+        <xsl:value-of select="'red'" />
+      </xsl:when>
+      <xsl:when test="$percent &lt; 95">
+        <xsl:value-of select="'yellow'" />
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="'lightgreen'" />
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:attribute>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/opendj-sdk/opends/tests/functional-tests/testcases/runTestJob.xml b/opendj-sdk/opends/tests/functional-tests/testcases/runTestJob.xml
index 63666e1..0260a54 100644
--- a/opendj-sdk/opends/tests/functional-tests/testcases/runTestJob.xml
+++ b/opendj-sdk/opends/tests/functional-tests/testcases/runTestJob.xml
@@ -36,10 +36,6 @@
         STAXLogMessage = 1
       </script>
 
-      <script>
-        import os
-      </script>
-
       <if expr="not STAXJobScriptFiles">
         <sequence>
           <message>'No script file (config.py) is specified. Unable to run the tests.'</message>
@@ -49,7 +45,7 @@
 
       <!-- Load in the local shared python objects -->
       <script>
-        import sys
+        import sys,os
         sys.path.append("%s/shared/python" % TESTS_ROOT )
         from common import *
       </script>
@@ -73,6 +69,15 @@
             ServerJVMString='Unknown JVM'
         except NameError,details:
             ServerJVMString='Unknown JVM'
+
+        try:
+          if LOGS_URI:
+            logsURI=LOGS_URI
+          else:
+            logsURI=''
+        except NameError,details:
+            logsURI=''
+            
       </script>
       
       <job name="'Job: %s %s' % (STAF_REMOTE_HOSTNAME,ServerOsString) " monitor="1" clearlogs="'Enabled'" logtcstartstop="'Enabled'">
@@ -419,6 +424,9 @@
         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;/identification&gt;\n')
         xmlfh.write('    &lt;results&gt;\n')
       </script>
@@ -513,7 +521,45 @@
           _message='Unable to generate standard test report %s.' % details
       </script>
       <message>_message</message>
-                    
+
+      <!-- Generate the test report by test groups-->      
+      <script>
+        _message='Generated groups test report.'
+        xslfile= '%s/xsl/gen-groups-report.xsl' % TESTS_SHARED_DIR
+        htmlfile= '%s/groups.html' % logsReportDir
+        groupsReport=report_generation()      
+
+        try:
+          groupsReport.transformReport(xslfile,xmlfile,htmlfile)
+        except IOError,details:
+          _message='Unable to generate groups test report %s.' % details
+      </script>
+      <message>_message</message>
+
+      <!-- Generate the test report by test suites -->      
+      <script>
+        _message='Generated suites test reports.'
+        testGroupDirsList=os.listdir(logsTestsDir)
+        for testGroupName in testGroupDirsList:
+        
+          groupDir='%s/%s' % (logsTestsDir,testGroupName)
+        
+          if os.path.isdir(groupDir):
+        
+            xmlfile='%s/results.xml' % logsReportDir
+            htmlfile='%s/%s.html' % (groupDir,testGroupName)
+            xslfile= '%s/xsl/gen-suites-report.xsl' % TESTS_SHARED_DIR
+        
+            suitesReport=report_generation()
+            stringParamsDict={ 'group' : testGroupName }
+        
+            try:
+              suitesReport.transformSuitesReport(xslfile,xmlfile,htmlfile,stringParamsDict)
+            except IOError,details:
+              _message='Unable to generate suites test report %s.' % details
+      </script>
+      <message>_message</message>
+                                
       <!-- Generate the drill down test report -->
       <script>          
         _message='Generated the drill down test report.'
@@ -577,8 +623,30 @@
           </message>
           
           <script>
-            MailToList= SEND_MAIL_TO.split(",")
-            MailSubject= 'OpenDS Test Report for %s' % STAF_REMOTE_HOSTNAME
+            try:
+              if SEND_MAIL_REPORT:
+                MailSendReport=SEND_MAIL_REPORT
+              else:
+                MailSendReport='%s/groups.html' % logsReportDir
+            except NameError,details:
+                MailSendReport='%s/groups.html' % logsReportDir
+
+            try:
+              if SEND_MAIL_TO:
+                MailToList= SEND_MAIL_TO.split(",")
+              else:
+                MailToList=[]
+            except NameError,details:
+                MailToList=[]
+            
+            try:
+              if SEND_MAIL_SUBJECT:
+                MailSubject= SEND_MAIL_SUBJECT
+              else:
+                MailSubject= 'OpenDS Test Report for %s' % STAF_REMOTE_HOSTNAME
+            except NameError,details:
+                MailSubject= 'OpenDS Test Report for %s' % STAF_REMOTE_HOSTNAME
+                            
             MailSendTo= ' '
           </script>
           
@@ -592,7 +660,7 @@
             <location>'%s' % STAF_LOCAL_HOSTNAME </location>
             <service>'email'</service>
             <request>
-              'send %s contenttype "text/html" file %s subject "%s" noheader' % (MailSendTo,htmlfile,MailSubject)
+              'send %s contenttype "text/html" file %s subject "%s" noheader' % (MailSendTo,MailSendReport,MailSubject)
             </request>
           </stafcmd>
           
diff --git a/opendj-sdk/opends/tests/shared/python/common.py b/opendj-sdk/opends/tests/shared/python/common.py
index 102bd26..eca6f6b 100644
--- a/opendj-sdk/opends/tests/shared/python/common.py
+++ b/opendj-sdk/opends/tests/shared/python/common.py
@@ -90,8 +90,19 @@
     self.hours,self.minutes,self.seconds=clocktime.split(':')
     return int(self.hours)*7200+int(self.minutes)*60+int(self.seconds)
 
+class basic_utils:
+  'Some simple basic utilities'
+  def printKey(self,keypair):
+    self.key=keypair.keys()[0]
+    return self.key
+  def printKeyValue(self,keypair):
+    self.key=keypair.keys()[0]
+    self.keyvalue=keypair[self.key]
+    return self.keyvalue
+
 class report_generation:
   'Test Report Generation'
+
   def transformReport(self,stylesheet,xml,output):
     from java.io import FileInputStream
     from java.io import FileOutputStream
@@ -101,8 +112,9 @@
     from javax.xml.transform.stream import StreamSource
     from javax.xml.transform.stream import StreamResult
 
-    self.xslSource = StreamSource(FileInputStream("%s" % stylesheet))
-    self.xslTemplate = TransformerFactory.newInstance().newTemplates(self.xslSource)
+    self.xslSource   = StreamSource(FileInputStream("%s" % stylesheet))
+    self.tfactory    = TransformerFactory.newInstance()
+    self.xslTemplate = self.tfactory.newTemplates(self.xslSource)
     self.transformer = self.xslTemplate.newTransformer()
 
     self.source = StreamSource(FileInputStream("%s" % xml))
@@ -110,3 +122,26 @@
 
     self.transformer.transform(self.source, self.result)
 
+  def transformSuitesReport(self,stylesheet,xml,output,params):
+    from java.io import FileInputStream
+    from java.io import FileOutputStream
+    from java.io import ByteArrayOutputStream
+
+    from javax.xml.transform import TransformerFactory
+    from javax.xml.transform.stream import StreamSource
+    from javax.xml.transform.stream import StreamResult
+
+    self.xslSource   = StreamSource(FileInputStream("%s" % stylesheet))
+    self.tfactory    = TransformerFactory.newInstance()
+    self.xslTemplate = self.tfactory.newTemplates(self.xslSource)
+    self.transformer = self.xslTemplate.newTransformer()
+
+    self.source = StreamSource(FileInputStream("%s" % xml))
+    self.result = StreamResult(FileOutputStream("%s" % output))
+
+    self.myAttr  = basic_utils().printKey(params)
+    self.myValue = basic_utils().printKeyValue(params)
+
+    self.transformer.setParameter(self.myAttr, self.myValue)
+    self.transformer.transform(self.source, self.result)
+

--
Gitblit v1.10.0