From b902bffbdd9d0c43e89cf7b8b32d1b29a513ae16 Mon Sep 17 00:00:00 2001
From: madiot <madiot@localhost>
Date: Mon, 17 Aug 2009 07:08:38 +0000
Subject: [PATCH] reintroduction of the code coverage leveraging EMMA
---
opends/tests/staf-tests/shared/ant/tests.xml | 69 +++++++----------
opends/tests/staf-tests/shared/ant/usage.xml | 1
opends/tests/staf-tests/shared/functions/topology.xml | 39 +++++----
opends/tests/staf-tests/shared/ant/build.xml | 5 +
opends/tests/staf-tests/build | 2
opends/tests/staf-tests/shared/functions/utils.xml | 54 ++++++-------
opends/tests/staf-tests/shared/tests/runTests.xml | 20 ++++
7 files changed, 99 insertions(+), 91 deletions(-)
diff --git a/opends/tests/staf-tests/build b/opends/tests/staf-tests/build
index 6c6dc2e..2b99c8d 100755
--- a/opends/tests/staf-tests/build
+++ b/opends/tests/staf-tests/build
@@ -48,5 +48,7 @@
ANT_LIB=$OPENDS_LIB/mail.jar:$OPENDS_LIB/activation.jar
ANT_HOME=`cd ../..;pwd`/ext/ant
export ANT_HOME
+ANT_OPTS="-Xmx1g"
+export ANT_OPTS
# Execute the ant script and pass it any additional command-line arguments.
$ANT_HOME/bin/ant -lib ${ANT_LIB} -f shared/ant/build.xml ${*}
diff --git a/opends/tests/staf-tests/shared/ant/build.xml b/opends/tests/staf-tests/shared/ant/build.xml
index 16e36d5..0423b78 100644
--- a/opends/tests/staf-tests/shared/ant/build.xml
+++ b/opends/tests/staf-tests/shared/ant/build.xml
@@ -418,6 +418,11 @@
<ant antfile="${antfile.dir}/tests.xml" target="run"/>
</target>
+ <target name="tests-func-coverage"
+ depends="set-func-type,global-init,opends-build,staf-start">
+ <ant antfile="${antfile.dir}/tests.xml" target="testwithcoverage"/>
+ </target>
+
<!-- Run stress tests -->
<target name="tests-stress-run"
depends="set-stress-type,global-init,opends-build,staf-start">
diff --git a/opends/tests/staf-tests/shared/ant/tests.xml b/opends/tests/staf-tests/shared/ant/tests.xml
index 785b1aa..0ab3201 100644
--- a/opends/tests/staf-tests/shared/ant/tests.xml
+++ b/opends/tests/staf-tests/shared/ant/tests.xml
@@ -49,7 +49,6 @@
<mkdir dir="${tests.run.dir}/${tests.run.time}/config"/>
<!-- these will serve for after-the-fact archiving the logs -->
<mkdir dir="${tests.run.dir}/${tests.run.time}/staf-logs"/>
- <mkdir dir="${tests.run.dir}/${tests.run.time}/coverage"/>
<if>
<equals arg1="${test.plan.custom}" arg2=""/>
@@ -362,67 +361,57 @@
<target name="coverage-instrument" if="coverage.on">
<delete dir="${tests.tmp.dir}/coverage-instr" />
<mkdir dir="${tests.tmp.dir}/coverage-instr" />
+ <mkdir dir="${tests.run.dir}/${tests.run.time}/coverage" />
<!-- unzip the original package in a temporary location to make the
changes necessary so that the coverage tool is called
-->
- <unzip src="${product.package}"
+ <unzip src="${opends.dir}/${opends.name}.zip"
dest="${tests.tmp.dir}/coverage-instr"/>
<!-- Add emma in the package along with the other librairies
this has the advantage of being automatically picked up by the scripts
-->
<copy file="${project.home}/ext/emma/lib/emma.jar"
- tofile="${tests.tmp.dir}/coverage-instr/${product.name}/lib/emma.jar"/>
+ tofile="${tests.tmp.dir}/coverage-instr/${opends.name}/lib/emma.jar"/>
<!-- move the original product package to make room for the coverage
enabled package
-->
- <move file="${product.package}" tofile="${product.package}.nocov"/>
+ <move file="${opends.dir}/${opends.name}.zip" tofile="${opends.dir}/${opends.name}.zip.nocov"/>
<!-- intrument the OpenDS java archive to gather coverage -->
- <java classpath="${tests.tmp.dir}/coverage-instr/${product.name}/lib$/emma.jar"
+ <java classpath="${tests.tmp.dir}/coverage-instr/${opends.name}/lib/emma.jar"
classname="emma" fork="true">
- <jvmarg value="-Demma.metadata.out.file=${tests.tmp.dir}/coverage-instr/${product.name}/coverage.em" />
- <arg value="instr" />
- <arg value="-m" />
- <arg value="overwrite" />
- <arg value="-ip" />
- <arg value="${tests.tmp.dir}/coverage-instr/${product.name}/lib/OpenDS.jar:${tests.tmp.dir}/coverage-instr/${product.name}/lib/extensions/snmp-mib2605.jar" />
+ <jvmarg value="-Demma.metadata.out.file=${tests.tmp.dir}/coverage-instr/${opends.name}/coverage.em" />
+ <arg value="instr" />
+ <arg value="-m" />
+ <arg value="overwrite" />
+ <arg value="-ix" />
+ <arg value="-org.opends.guitools.*" />
+ <arg value="-ix" />
+ <arg value="-org.opends.quicksetup.*" />
+ <arg value="-ix" />
+ <arg value="org.*" />
+ <arg value="-ix" />
+ <arg value="com.*" />
+ <arg value="-ip" />
+ <arg value="${tests.tmp.dir}/coverage-instr/${opends.name}/lib/OpenDS.jar:${tests.tmp.dir}/coverage-instr/${opends.name}/lib/extensions/snmp-mib2605.jar" />
</java>
- <echo>Writing properties file</echo>
- <echo file="${tests.tmp.dir}/coverage-instr/${product.name}/classes/emma.properties">coverage.out.file=${tests.tmp.dir}/emma.coverage
- </echo>
+ <copy file="${tests.tmp.dir}/coverage-instr/${opends.name}/coverage.em"
+ tofile="${tests.run.dir}/${tests.run.time}/coverage/coverage.em"/>
+
<!-- Repackage the product with coverage enabled scripts -->
- <zip basedir="${tests.tmp.dir}/coverage-instr" destfile="${product.package}">
- <zipfileset dir="${tests.tmp.dir}/coverage-instr"
- includes="${product.name}/setup,${product.name}/uninstall,${product.name}/upgrade,${product.name}/bin/*,${product.name}/lib/*.sh"
- filemode="755" dirmode="755" />
+ <zip basedir="${tests.tmp.dir}/coverage-instr" destfile="${opends.dir}/${opends.name}.zip">
+ <zipfileset dir="${tests.tmp.dir}/coverage-instr"
+ includes="${opends.name}/setup,${opends.name}/uninstall,${opends.name}/upgrade,${opends.name}/bin/*,${opends.name}/lib/*.sh"
+ filemode="755" dirmode="755" />
</zip>
<!-- <delete dir="${tests.tmp.dir}/coverage-instr"/> -->
</target>
- <target name="coverage-report" if="coverage.on">
- <delete dir="${tests.tmp.dir}/coverage/all" />
- <mkdir dir="${tests.tmp.dir}/coverage/all" />
- <emma enabled="${coverage.on}" >
- <report >
- <infileset dir="${tests.tmp.dir}" includes="**/*.em,**/*.ec" />
- <sourcepath>
- <dirset dir="${project.home}" >
- <include name="src" />
- </dirset>
- </sourcepath>
- <html outfile="${tests.tmp.dir}/coverage/all/index.html"
- columns="name, method, line"
- sort="+line, +name"
- metrics="line:80"
- />
- </report>
- </emma>
- </target>
<target name="restore-pkg" if="coverage.on">
- <delete file="${product.package}"/>
- <move file="${product.package}.nocov" tofile="${product.package}"/>
+ <delete file="${opends.dir}/${opends.name}.zip"/>
+ <move file="${opends.dir}/${opends.name}.zip.nocov" tofile="${opends.dir}/${opends.name}.zip"/>
</target>
- <target name="testwithcoverage" depends="coverage-on,coverage-instrument,restore-pkg,coverage-report"/>
+ <target name="testwithcoverage" depends="coverage-on,coverage-instrument,run,restore-pkg"/>
</project>
diff --git a/opends/tests/staf-tests/shared/ant/usage.xml b/opends/tests/staf-tests/shared/ant/usage.xml
index 46d52d3..8974cd0 100644
--- a/opends/tests/staf-tests/shared/ant/usage.xml
+++ b/opends/tests/staf-tests/shared/ant/usage.xml
@@ -64,6 +64,7 @@
tests-stress-configure : configure the stress tests
tests-run : run the functional tests
tests-func-run : run the functional tests
+ tests-func-coverage : run the functional tests with code coverage
tests-stress-run : run the stress tests
</echo>
</target>
diff --git a/opends/tests/staf-tests/shared/functions/topology.xml b/opends/tests/staf-tests/shared/functions/topology.xml
index ffb009f..50ee148 100755
--- a/opends/tests/staf-tests/shared/functions/topology.xml
+++ b/opends/tests/staf-tests/shared/functions/topology.xml
@@ -711,26 +711,29 @@
<!-- configure the coverage dump file -->
<script>
- mylog="::coverage - checking for %s/%s/lib/emma.jar\n" % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)
- if os.path.exists('%s/%s/lib/emma.jar' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)):
- mylog+=" ::coverage on\n"
- if not os.path.exists('%s/coverage' % TMPDIR):
- os.mkdir('%s/coverage' % TMPDIR)
- mylog+=" ::mkdir %s/coverage on\n" % TMPDIR
- if not os.path.exists('%s/coverage/%s'
- % (TMPDIR,CurrentTestPath['group'])):
- os.mkdir('%s/coverage/%s' % (TMPDIR,CurrentTestPath['group']))
- mylog+=" ::mkdir %s/coverage/%s on\n" \
- % (TMPDIR,CurrentTestPath['group'])
- mylog+=" ::writing to %s/%s/classes/emma.properties" \
- % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)
- coveragefh = open( '%s/%s/classes/emma.properties' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME), 'w' )
- coveragefh.write( 'coverage.out.file=%s/coverage/%s/coverage.ec\n' \
- % (TMPDIR,CurrentTestPath['group']) )
+ mylog="::coverage - checking for %s/%s/lib/emma.jar\n" % (dsDir,OPENDSNAME)
+ if os.path.exists(os.path.join(dsDir,OPENDSNAME,'lib','emma.jar')):
+ mylog+=" ::coverage on\n"
+ coveragePath = os.path.join(LOGS_ROOT,'coverage')
+ if not os.path.exists(coveragePath):
+ os.mkdir(coveragePath)
+ mylog+=" ::mkdir %s on\n" % coveragePath
+ # copying coverage.em in coveragePath
+ import shutil
+ shutil.copy(os.path.join(dsDir,OPENDSNAME,'coverage.em'),coveragePath)
+ coverageGroupPath=os.path.join(coveragePath,CurrentTestPath['group'])
+ if not os.path.exists(coverageGroupPath):
+ os.mkdir(coverageGroupPath)
+ mylog+=" ::mkdir %s on\n" % (coverageGroupPath)
+ mylog+=" ::writing to %s/%s/classes/emma.properties" % (dsDir,OPENDSNAME)
+ existingECs=[cf for cf in os.listdir(coverageGroupPath) if cf.startswith('coverage') and cf.endswith('.ec')]
+ newCoverageEC=os.path.join(coverageGroupPath,'coverage%s.ec' % len(existingECs))
+ coveragefh = open( '%s/%s/classes/emma.properties' % (dsDir,OPENDSNAME), 'w' )
+ coveragefh.write( 'coverage.out.file=%s\n' % (newCoverageEC) )
+ coveragefh.write( 'verbosity.level=silent\n')
+ coveragefh.write( 'coverage.out.merge=true\n')
coveragefh.close()
-
</script>
-
<message>mylog</message>
<!--- Set up DS -->
<message>
diff --git a/opends/tests/staf-tests/shared/functions/utils.xml b/opends/tests/staf-tests/shared/functions/utils.xml
index ef184a9..86496e9 100755
--- a/opends/tests/staf-tests/shared/functions/utils.xml
+++ b/opends/tests/staf-tests/shared/functions/utils.xml
@@ -1151,28 +1151,7 @@
CurrentTestPath['group']='unknown-group'
ThisGroupName=CurrentTestPath['group']
-
- # NOTE: the same code lives in topology.xml
- # the reason for that is that the topology is created AFTER the
- # first test group has started (as part of the first setup)
- # the following groups are going to use the same topology
- mylog="::coverage - checking for %s/%s/lib/emma.jar\n" % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)
- if os.path.exists('%s/%s/lib/emma.jar' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)):
- mylog+=" ::coverage on\n"
- if not os.path.exists('%s/coverage' % TMPDIR):
- os.mkdir('%s/coverage' % TMPDIR)
- mylog+=" ::mkdir %s/coverage on\n" % TMPDIR
- if not os.path.exists('%s/coverage/%s' % (TMPDIR,CurrentTestPath['group'])):
- os.mkdir('%s/coverage/%s' % (TMPDIR,CurrentTestPath['group']))
- mylog+=" ::mkdir %s/coverage/%s on\n" % (TMPDIR,CurrentTestPath['group'])
- mylog+=" ::writing to %s/%s/classes/emma.properties" % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)
- coveragefh = open( '%s/%s/classes/emma.properties' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME), 'w' )
- coveragefh.write( 'coverage.out.file=%s/coverage/%s/coverage.ec\n' % (TMPDIR,CurrentTestPath['group']) )
- coveragefh.close()
</script>
- <message>
- mylog
- </message>
<message>'##### %s group preamble #####' % ThisGroupName</message>
</sequence>
</function>
@@ -1196,20 +1175,35 @@
<message>'##### %s group postamble #####' % ThisGroupName</message>
<script>
+ coveragePath=os.path.join(LOGS_ROOT,'coverage')
emmaJar='%s/%s/lib/emma.jar' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)
- coverageEm='%s/%s/coverage.em' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)
- coverageEc='%s/coverage/%s/coverage.ec' % (TMPDIR,CurrentTestPath['group'])
- coverageXml='%s/coverage/%s/coverage.xml' % (TMPDIR,CurrentTestPath['group'])
- coverageHtml='%s/coverage/%s/coverage.html' % (TMPDIR,CurrentTestPath['group'])
+ coverageEm=os.path.join(coveragePath,'coverage.em')
+ ecPath=os.path.join(coveragePath,CurrentTestPath['group'])
+ coverageEcs=[ os.path.join(ecPath,ec) for ec in os.listdir(ecPath) if ec.startswith('coverage') and ec.endswith('.ec')]
+ coverageFiles=','.join(coverageEcs)
+ coverageXml=os.path.join(ecPath,'coverage.xml')
+ coverageHtml=os.path.join(ecPath,'coverage.html')
</script>
-
<if expr="os.path.exists(emmaJar)">
<sequence>
+ <script>
+ srcPathPrefix = os.path.join(TMPDIR,"..","..","..","..","..","..","src")
+ srcPaths = [ os.path.join(srcPathPrefix,"server"),
+ os.path.join(srcPathPrefix,"ads"),
+ os.path.join(srcPathPrefix,"server","org"),
+ os.path.join(srcPathPrefix,"admin","defn","org"),
+ os.path.join(srcPathPrefix,"snmp","src","org"),
+ os.path.join(srcPathPrefix,"ads","org"),
+ os.path.join(srcPathPrefix,"dsml","org"),
+ os.path.join(srcPathPrefix,"messages","src","org")
+ ]
+ srcArgs = " -sp ".join(srcPaths)
+ </script>
<call function="'runCommand'">
- { 'name' : 'Generate coverage xml report for test group %s' % CurrentTestPath['group'],
- 'command' : 'java',
- 'arguments' : ' -Xms64M -Xmx512M -cp %s emma report -r xml,html -in %s,%s -Dreport.xml.out.file=%s -Dreport.html.out.file=%s -sp %s/../../../src' % (emmaJar,coverageEm,coverageEc,coverageXml,coverageHtml,TMPDIR),
- 'path' : TMPDIR
+ { 'name' : 'Generate coverage xml report for test group %s' % CurrentTestPath['group'],
+ 'command' : 'java',
+ 'arguments' : ' -Xms64M -Xmx1G -cp %s emma report -r html -in %s,%s -Dreport.html.out.file=%s -sp %s' % (emmaJar, coverageEm, coverageFiles, coverageHtml, srcArgs),
+ 'path' : TMPDIR
}
</call>
<script>
diff --git a/opends/tests/staf-tests/shared/tests/runTests.xml b/opends/tests/staf-tests/shared/tests/runTests.xml
index b85c85a..ee9278f 100755
--- a/opends/tests/staf-tests/shared/tests/runTests.xml
+++ b/opends/tests/staf-tests/shared/tests/runTests.xml
@@ -121,13 +121,27 @@
<sequence>
<script>
coverageFiles=''
- for group in os.listdir('%s/coverage/' % TMPDIR):
- coverageFiles+='%s/coverage/%s/coverage.ec' % (TMPDIR,group)
+ coveragePath=os.path.join(LOGS_ROOT,'coverage')
+ srcPathPrefix = os.path.join(TMPDIR,"..","..","..","..","..","..","src")
+ srcPaths = [ os.path.join(srcPathPrefix,"server"),
+ os.path.join(srcPathPrefix,"ads"),
+ os.path.join(srcPathPrefix,"server","org"),
+ os.path.join(srcPathPrefix,"admin","defn","org"),
+ os.path.join(srcPathPrefix,"snmp","src","org"),
+ os.path.join(srcPathPrefix,"ads","org"),
+ os.path.join(srcPathPrefix,"dsml","org"),
+ os.path.join(srcPathPrefix,"messages","src","org")
+ ]
+ srcArgs = " -sp ".join(srcPaths)
+ for group in os.listdir(coveragePath):
+ coverageGroupPath=os.path.join(coveragePath,group)
+ coverageECs=[os.path.join(coverageGroupPath,ec) for ec in os.listdir(coverageGroupPath) if ec.startswith('coverage') and ec.endswith('.ec')]
+ coverageFiles=','.join(coverageECs)
</script>
<call function="'runCommand'">
{ 'name' : 'Generate global coverage xml report',
'command' : 'java',
- 'arguments' : ' -Xms64M -Xmx1024M -cp %s emma report -r xml,html -in %s/coverage.em,%s -Dreport.xml.out.file=%s/coverage/coverage.xml -Dreport.html.out.file=%s/coverage/coverage.html -sp %s/../../../src' % (emmaJar,dsPath,coverageFiles,TMPDIR,TMPDIR,TMPDIR),
+ 'arguments' : '-Xms64M -Xmx2048m -cp %s emma report -r xml,html -in %s/coverage.em,%s -Dreport.xml.out.file=%s/coverage.xml -Dreport.html.out.file=%s/coverage.html -sp %s' % (emmaJar,coveragePath,coverageFiles,coveragePath,coveragePath,srcArgs),
'path' : TMPDIR
}
</call>
--
Gitblit v1.10.0