mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

gary_williams
04.22.2008 5fdbb2eda024be9aa5ab40bb23d7cf25c3e8a519
test report group and test suite view
2 files added
2 files modified
1177 ■■■■■ changed files
opends/tests/functional-tests/shared/xsl/gen-groups-report.xsl 529 ●●●●● patch | view | raw | blame | history
opends/tests/functional-tests/shared/xsl/gen-suites-report.xsl 531 ●●●●● patch | view | raw | blame | history
opends/tests/functional-tests/testcases/runTestJob.xml 80 ●●●●● patch | view | raw | blame | history
opends/tests/shared/python/common.py 37 ●●●●● patch | view | raw | blame | history
opends/tests/functional-tests/shared/xsl/gen-groups-report.xsl
New file
@@ -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>
opends/tests/functional-tests/shared/xsl/gen-suites-report.xsl
New file
@@ -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>
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>
@@ -514,6 +522,44 @@
      </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>
            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>
          
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
@@ -102,7 +113,8 @@
    from javax.xml.transform.stream import StreamResult
    self.xslSource = StreamSource(FileInputStream("%s" % stylesheet))
    self.xslTemplate = TransformerFactory.newInstance().newTemplates(self.xslSource)
    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)