Repository: zookeeper
Updated Branches:
  refs/heads/branch-3.4 b95131997 -> 09fbace1d


ZOOKEEPER-2955: Enable Clover code coverage report

This is the updated PR for the Clover code coverage. Previous PR for branch 3.4 
and 3.5 were not updated, so I cherry picked the complete change from master.

Author: Norbert Kalmar <[email protected]>
Author: Mark Fenes <[email protected]>

Reviewers: [email protected]

Closes #520 from nkalmar/clover-3.4 and squashes the following commits:

459622607 [Norbert Kalmar] Merge branch 'branch-3.4' of 
github.com:apache/zookeeper into clover-3.4
fdf610b1a [Norbert Kalmar] ZOOKEEPER-2955 - dependency def at beggining
89acddf65 [Mark Fenes] ZOOKEEPER-2955: Enable Clover code coverage report

Change-Id: I93f97f2b609d21d40e349eea465669913de5a52d


Project: http://git-wip-us.apache.org/repos/asf/zookeeper/repo
Commit: http://git-wip-us.apache.org/repos/asf/zookeeper/commit/09fbace1
Tree: http://git-wip-us.apache.org/repos/asf/zookeeper/tree/09fbace1
Diff: http://git-wip-us.apache.org/repos/asf/zookeeper/diff/09fbace1

Branch: refs/heads/branch-3.4
Commit: 09fbace1d70baf34c4927a937b5bdf77055f3673
Parents: b951319
Author: Norbert Kalmar <[email protected]>
Authored: Sat May 19 17:36:45 2018 -0700
Committer: Patrick Hunt <[email protected]>
Committed: Sat May 19 17:36:45 2018 -0700

----------------------------------------------------------------------
 build.xml | 187 ++++++++++++++++++++++++++++++---------------------------
 ivy.xml   |   3 +
 2 files changed, 103 insertions(+), 87 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/zookeeper/blob/09fbace1/build.xml
----------------------------------------------------------------------
diff --git a/build.xml b/build.xml
index ef63e8c..f06cfff 100644
--- a/build.xml
+++ b/build.xml
@@ -23,6 +23,45 @@ xmlns:artifact="antlib:org.apache.maven.artifact.ant"
 xmlns:maven="antlib:org.apache.maven.artifact.ant"
 xmlns:cs="antlib:com.puppycrawl.tools.checkstyle">
 
+    <!-- ====================================================== -->
+    <!-- Dependency versions                                    -->
+    <!-- ====================================================== -->
+    <property name="slf4j.version" value="1.7.25"/>
+
+    <property name="wagon-http.version" value="2.4"/>
+    <property name="maven-ant-tasks.version" value="2.1.3"/>
+    <property name="log4j.version" value="1.2.17"/>
+    <property name="jline.version" value="0.9.94"/>
+
+    <property name="jdeb.version" value="0.8"/>
+
+    <property name="audience-annotations.version" value="0.5.0" />
+
+    <property name="netty.version" value="3.10.6.Final"/>
+
+    <property name="junit.version" value="4.12"/>
+    <property name="mockito.version" value="1.8.5"/>
+    <property name="checkstyle.version" value="6.1.1"/>
+    <property name="commons-collections.version" value="3.2.2"/>
+    <property name="commons-io.version" value="2.4"/>
+
+    <property name="apache-directory-server.version" value="2.0.0-M15"/>
+    <property name="apache-directory-api.version" value="1.0.0-M20"/>
+
+    <property name="jdiff.version" value="1.0.9"/>
+    <property name="xerces.version" value="1.4.4"/>
+
+    <property name="apache-rat-tasks.version" value="0.6"/>
+    <property name="commons-lang.version" value="2.4"/>
+
+    <property name="dependency-check-ant.version" value="2.1.0"/>
+
+    <property name="clover.version" value="4.2.1" />
+
+    <!-- ====================================================== -->
+    <!-- Project properties                                     -->
+    <!-- ====================================================== -->
+
     <!-- read build.properties from the basedir if any -->
     <property file="${basedir}/build.properties" />
 
@@ -99,12 +138,6 @@ xmlns:cs="antlib:com.puppycrawl.tools.checkstyle">
     <property name="dist.dir" value="${build.dir}/${final.name}"/>
     <property name="dist.maven.dir" value="${dist.dir}/dist-maven"/>
 
-    <property name="clover.home" location="${env.CLOVER_HOME}"/>
-    <property name="clover.jar" location="${clover.home}/lib/clover.jar" />
-    <property name="clover.db.dir" 
location="${test.java.build.dir}/clover/db"/>
-    <property name="clover.report.dir"
-              location="${test.java.build.dir}/clover/reports"/>
-
     <property name="contrib.dir" value="${src.dir}/contrib"/>
     <property name="recipes.dir" value="${src.dir}/recipes"/>
 
@@ -118,6 +151,7 @@ xmlns:cs="antlib:com.puppycrawl.tools.checkstyle">
     <property name="ivy.jdiff.lib" value="${build.dir}/jdiff/lib"/>
     <property name="ivy.releaseaudit.lib" 
value="${build.dir}/releaseaudit/lib"/>
     <property name="ivy.owasp.lib" value="${build.dir}/owasp/lib"/>
+    <property name="ivy.clover.lib" value="${build.dir}/clover/lib"/>
     <property name="ivysettings.xml" value="${basedir}/ivysettings.xml"/>
 
     <property name="mvnrepo" value="https://repo1.maven.org/maven2"/>
@@ -126,21 +160,16 @@ xmlns:cs="antlib:com.puppycrawl.tools.checkstyle">
     <property name="ant_task_repo_url"
         
value="${mvnrepo}${tsk.org}${ant-task.version}/maven-ant-tasks-${ant-task.version}.jar"/>
     <property name="ant_task.jar" 
location="${ivy.lib}/maven-ant-tasks-${ant-task.version}.jar"/>
-    
-    <available property="clover.present"
-               classname="com.cenqua.clover.CloverInstr"
-               classpath="${clover.home}/lib/clover.jar"/>
 
-    <available file="${c.src.dir}/Makefile" property="Makefile.present"/>
-
-    <!-- check if clover reports should be generated -->
-    <condition property="clover.enabled">
-      <and>
-        <isset property="run.clover"/>
-        <isset property="clover.present"/>
-      </and>
-    </condition>
+    <!-- clover property set -->
+    <property name="clover.home" location="${build.dir}/clover"/>
+    <property name="clover.jar" 
location="${clover.home}/lib/clover-${clover.version}.jar"/>
+    <property name="clover.dest" location="${build.dir}/clover"/>
+    <property name="clover.db.dir" location="${clover.dest}/db"/>
+    <property name="clover.report.dir" location="${clover.dest}/reports"/>
+    <property name="clover.db" 
location="${clover.db.dir}/zookeeper-coverage.db"/>
 
+    <available file="${c.src.dir}/Makefile" property="Makefile.present"/>
 
     <property name="test.cobertura.output.format" value="html" />
     <property name="coveragereport.dir" value="${build.dir}/cobertura" />
@@ -205,39 +234,6 @@ xmlns:cs="antlib:com.puppycrawl.tools.checkstyle">
     <property name="javadoc-jar" 
value="${dist.maven.dir}/${final.name}-javadoc.jar"/>
 
     <!-- ====================================================== -->
-    <!-- Dependency versions                                    -->
-    <!-- ====================================================== -->
-    <property name="slf4j.version" value="1.7.25"/>
-
-    <property name="wagon-http.version" value="2.4"/>
-    <property name="maven-ant-tasks.version" value="2.1.3"/>
-    <property name="log4j.version" value="1.2.17"/>
-    <property name="jline.version" value="0.9.94"/>
-
-    <property name="jdeb.version" value="0.8"/>
-
-    <property name="audience-annotations.version" value="0.5.0" />
-
-    <property name="netty.version" value="3.10.6.Final"/>
-
-    <property name="junit.version" value="4.12"/>
-    <property name="mockito.version" value="1.8.5"/>
-    <property name="checkstyle.version" value="6.1.1"/>
-    <property name="commons-collections.version" value="3.2.2"/>
-    <property name="commons-io.version" value="2.4"/>
-
-    <property name="apache-directory-server.version" value="2.0.0-M15"/>
-    <property name="apache-directory-api.version" value="1.0.0-M20"/>
-
-    <property name="jdiff.version" value="1.0.9"/>
-    <property name="xerces.version" value="1.4.4"/>
-
-    <property name="apache-rat-tasks.version" value="0.6"/>
-    <property name="commons-lang.version" value="2.4"/>
-
-    <property name="dependency-check-ant.version" value="2.1.0"/>
-
-    <!-- ====================================================== -->
     <!-- Macro definitions                                      -->
     <!-- ====================================================== -->
     <macrodef name="macro_tar" description="Worker Macro for tar">
@@ -265,7 +261,9 @@ xmlns:cs="antlib:com.puppycrawl.tools.checkstyle">
       <fileset dir="${ant.home}/lib">
           <include name="ant.jar" />
       </fileset>
-      <pathelement path="${clover.jar}" />
+      <fileset dir="${clover.home}/lib" erroronmissingdir="false">
+          <include name="**/*.jar" if="run.clover" />
+      </fileset>
     </path>
 
     <!-- the normal classpath -->
@@ -435,6 +433,12 @@ xmlns:cs="antlib:com.puppycrawl.tools.checkstyle">
         <ivy:cachepath pathid="owasp-classpath" conf="owasp"/>
     </target>
 
+    <target name="ivy-retrieve-clover" if="run.clover" depends="init,ivy-init">
+        <ivy:retrieve settingsRef="${ant.project.name}" conf="clover"
+                      pattern="${ivy.clover.lib}/[artifact]-[revision].[ext]"/>
+        <ivy:cachepath pathid="clover-classpath" conf="clover"/>
+    </target>
+
     <target name="ivy-retrieve-mvn-ant-task" depends="init,ivy-init">
       <ivy:retrieve settingsRef="${ant.project.name}" conf="mvn-ant-task"
                     pattern="${ivy.lib}/[artifact]-[revision].[ext]"/>
@@ -949,7 +953,7 @@ xmlns:cs="antlib:com.puppycrawl.tools.checkstyle">
         <replacetoken>/tmp/zookeeper</replacetoken>
         <replacevalue>${VAR_DIR}/data</replacevalue>
       </replace>
-         
+
       <chmod perm="ugo+x" type="file" parallel="false">
         <fileset dir="${dist.dir}/bin"/>
         <fileset dir="${dist.dir}/sbin"/>
@@ -1063,7 +1067,7 @@ xmlns:cs="antlib:com.puppycrawl.tools.checkstyle">
         <property name="dist.dir" value="${dist.dir}"/>
         <fileset file="${contrib.dir}/build.xml"/>
         <fileset file="${recipes.dir}/build.xml"/>
-      </subant>        
+      </subant>
       <path id="c.lib">
         <fileset dir="${build.dir}">
           <include name="${final.name}-lib.tar.gz"/>
@@ -1168,10 +1172,10 @@ xmlns:cs="antlib:com.puppycrawl.tools.checkstyle">
         </tarfileset>
         <tarfileset dir="${build.dir}/c/build/${package.prefix}/include" 
prefix="${package.prefix}/include">
           <include name="**" />
-        </tarfileset> 
+        </tarfileset>
         <tarfileset dir="${build.dir}/c/build/${package.prefix}/lib" 
filemode="755" prefix="${package.prefix}/lib">
           <include name="**" />
-        </tarfileset> 
+        </tarfileset>
         <tarfileset dir="${build.dir}/${final.name}/conf" filemode="644" 
prefix="${package.conf.dir}">
           <include name="**" />
         </tarfileset>
@@ -1479,56 +1483,65 @@ xmlns:cs="antlib:com.puppycrawl.tools.checkstyle">
        <!-- yet to implement -->
     </target>
     
-    <target name="test-core-java" depends="test-init, test-category, 
junit.run"/> 
+    <target name="test-core-java" depends="test-init, test-category, 
junit.run"/>
 
-    <target name="test-core-cppunit" depends="test-init, test-category, 
call-test-cppunit"/> 
+    <target name="test-core-cppunit" depends="test-init, test-category, 
call-test-cppunit"/>
 
-    <target name="test-core" depends="test-core-java, test-core-cppunit"/> 
+    <target name="test-core" depends="test-core-java, test-core-cppunit"/>
 
     <!-- ====================================================== -->
     <!-- Run optional third-party tool targets                  -->
     <!-- ====================================================== -->
 
-    <!-- clover code coverage -->
-    <target name="clover" depends="clover.setup, clover.info" 
-            description="Instrument the Unit tests using Clover.  Requires a 
Clover license and CLOVER_HOME environment variable set appropriately.  To use, 
specify -Drun.clover=true on the command line."/>
+    <!-- Clover code coverage -->
+    <target name="test-coverage-clover-java"
+            description="Runs Java tests with Clover and generates coverage 
report in HTML and XML.">
+      <antcall target="test-core-java">
+        <param name="run.clover" value="true"/>
+      </antcall>
+      <antcall target="clover-report"/>
+    </target>
 
-    <target name="clover.setup" if="clover.enabled">
+    <target name="clover" if="run.clover" 
depends="ivy-retrieve-clover,clover.check,clover.setup"
+            description="Used in compile target to add source code 
instrumentation for Clover and sets up the Clover database."/>
+
+    <target name="clover.check">
+        <available property="clover.present"
+                   classname="com.atlassian.clover.CloverInstr"
+                   
classpath="${clover.home}/lib/clover-${clover.version}.jar"/>
+        <fail if="run.clover" unless="clover.present">
+            Clover not found.
+            Please make sure clover-${clover.version}.jar is in 
${clover.home}/lib, or made available
+            to Ant using other mechanisms like -lib or CLASSPATH.
+        </fail>
+    </target>
+
+    <target name="clover.setup" if="run.clover">
       <taskdef resource="cloverlib.xml" classpath="${clover.jar}"/>
       <mkdir dir="${clover.db.dir}"/>
-      <clover-setup initString="${clover.db.dir}/zookeeper_coverage.db">
+      <clover-setup initString="${clover.db}">
         <fileset dir="${java.src.dir}"
                  includes="org/apache/zookeeper/**/*"
-                 excludes="org/apache/zookeeper/version/**/*"/>
+                 excludes="org/apache/zookeeper/version/**/*">
+        </fileset>
+        <testsources dir="${test.src.dir}">
+          <testclass package="org.apache.zookeeper.*" name=".*Test">
+              <testmethod annotation="Test"/>
+          </testclass>
+        </testsources>
       </clover-setup>
     </target>
 
-    <target name="clover.info" if="run.clover" unless="clover.present">
-      <echo>
-        Clover not found. Code coverage reports disabled.
-      </echo>
-    </target>
-
-    <target name="clover.check">
-      <fail unless="clover.present">
-        ##################################################################
-        Clover not found.
-        Please make sure clover.jar is in ANT_HOME/lib, or made available
-        to Ant using other mechanisms like -lib or CLASSPATH.
-        ##################################################################
-      </fail>
-    </target>
-
-    <target name="generate-clover-reports" depends="clover.check, clover">
+    <target name="clover-report" depends="ivy-retrieve-clover"
+            description="Generates coverage report in HTML and XML. Run the 
tests first with 'ant -Drun.clover=true test-core-java' to generate coverage 
data.">
+      <taskdef resource="cloverlib.xml" classpath="${clover.jar}"/>
       <mkdir dir="${clover.report.dir}"/>
-      <taskdef resource="cloverlib.xml" classpath="${clover.jar}"/> 
-      
-      <clover-report initString="${clover.db.dir}/zookeeper_coverage.db">
+      <clover-report initString="${clover.db}">
         <current outfile="${clover.report.dir}" title="${final.name}">
           <format type="html"/>
         </current>
       </clover-report>
-      <clover-report initString="${clover.db.dir}/zookeeper_coverage.db">
+      <clover-report initString="${clover.db}">
         <current outfile="${clover.report.dir}/clover.xml" 
title="${final.name}">
           <format type="xml"/>
         </current>

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/09fbace1/ivy.xml
----------------------------------------------------------------------
diff --git a/ivy.xml b/ivy.xml
index 152654f..a758ea7 100644
--- a/ivy.xml
+++ b/ivy.xml
@@ -34,6 +34,7 @@
     <conf name="jdiff" visibility="private"/>
     <conf name="releaseaudit" visibility="private" description="Artifacts 
required for releaseaudit target"/>
     <conf name="owasp" visibility="private" description="Artifacts required 
for owasp target"/>
+    <conf name="clover" visibility="private" description="Artifacts required 
for clover target"/>
   </configurations>
 
   <publications>
@@ -143,6 +144,8 @@
         <exclude org="org.slf4j" module="slf4j-api"/>
     </dependency>
 
+    <dependency org="org.openclover" name="clover" rev="${clover.version}" 
conf="clover->default"/>
+
     <conflict manager="strict"/>
 
   </dependencies>

Reply via email to