blob: 4884003d343b30a09493fcd25c328e5d85d61d77 [file] [log] [blame]
<!--
Copyright (c) 2017, 2020 Oracle and/or its affiliates. All rights reserved.
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v. 2.0, which is available at
http://www.eclipse.org/legal/epl-2.0.
This Source Code may also be made available under the following Secondary
Licenses when the conditions for such availability set forth in the
Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
version 2 with the GNU Classpath Exception, which is available at
https://www.gnu.org/software/classpath/license.html.
SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-->
<target name="emma.usage">
<echo><![CDATA[
**************************************************************************************
* Usage : (Take ejb component for example) *
* ant all -> ant enable.emma all emma.gen.coverage.report -Demma.enabled=true *
**************************************************************************************]]></echo>
</target>
<property name="emma.port.used.by.server" value="34543" /> <!-- port number must not be 47653 -->
<property name="emma.coverage.out.file" value="${basedir}/coverage.ec" />
<property name="glassfish-zip-file" value="${env.GLASSFISH_ZIP_FILE}" />
<property name="glassfish.src.dir" value="${env.GLASSFISH_SRC_DIR}" />
<property name="glassfish.server.dir" value="${env.S1AS_HOME}" />
<property name="emma-filters-file" value="emma-filters.txt" />
<!--the direcotry in which the reports are placed-->
<property name="report.dir" value="${basedir}/report" />
<!--the direcotry in which the coverage report is placed-->
<property name="coverage.dir" value="${report.dir}/coverage" />
<!-- directory that contains emma.jar and emma_ant.jar: -->
<property name="emma.lib.dir" value="${env.APS_HOME}/lib" />
<property name="emma.jar.name" value="emma.jar" />
<property name="emma.ant.jar.name" value="emma_ant.jar" />
<path id="emma.lib">
<!-- use version 2.1.5320 of emma, otherwise, there is a Malformed data exception. -->
<pathelement location="${emma.lib.dir}/${emma.jar.name}" />
<pathelement location="${emma.lib.dir}/${emma.ant.jar.name}" />
</path>
<taskdef resource="emma_ant.properties" classpathref="emma.lib" />
<target name="emma.prerequsite.check" description="Checking Prerequsite ...">
<condition property="emma.prerequsite.met">
<and>
<isset property="emma.enabled" />
<available file="${glassfish-zip-file}" type="file" />
<antversion atleast="1.8"/>
</and>
</condition>
<fail message="Please make sure ant version is 1.8 or higher, emma.enabled property is set, and environment variable GLASSFISH_ZIP_FILE is exported.">
<condition>
<not>
<isset property="emma.prerequsite.met" />
</not>
</condition>
</fail>
<echo>[EMMA] : The prerequisite conditions are satisfied.</echo>
</target>
<target name="emma.init" depends="emma.prerequsite.check" if="emma.prerequsite.met" description="Initialize EMMA">
<touch file="${emma-filters-file}"/>
<mkdir dir="${coverage.dir}"/>
<copy file="${emma.lib.dir}/${emma.jar.name}" todir="${glassfish.server.dir}/domains/domain1/lib/ext/" overwrite="true" />
</target>
<target name="emma.instrument" depends="emma.init" if="emma.prerequsite.met" description="Instrument Classes With EMMA">
<property name="original.jar.dir" value="${glassfish.server.dir}/modules" />
<echo>[EMMA] : Start to instrument the JAR files under ${original.jar.dir}/.</echo>
<!--The temporary directory contains instrumented classes, and the jar files-->
<property name="instrumented.dir" value="${basedir}/.instrumented" />
<mkdir dir="${instrumented.dir}" />
<emma enabled="true" verbosity="quiet">
<instr mode="fullcopy"
outdir="${instrumented.dir}"
merge="true"
metadatafile="${basedir}/metadata.em"
>
<instrpath>
<!-- There is a bug in EMMA that it instruments all JARs under ${original.jar.dir} -->
<fileset dir="${original.jar.dir}">
<patternset refid="emma.instrument.jar.files" />
</fileset>
</instrpath>
<filter file="${emma-filters-file}" />
</instr>
</emma>
<!-- copy instrumented jars to glassfish server's classpath to overwite the old ones-->
<copy todir="${original.jar.dir}" overwrite="true">
<fileset dir="${instrumented.dir}/lib">
<!-- we are not using '**/*.jar' to copy file due to the above bug, instead, copy one by one. -->
<patternset refid="emma.instrument.jar.files" />
</fileset>
</copy>
<delete dir="${instrumented.dir}" />
<echo>[EMMA] : The JAR files under ${original.jar.dir}/ have been instrumented.</echo>
</target>
<target name="emma.glassfish.settings" depends="emma.prerequsite.check" if="emma.prerequsite.met" description="Set port used by EMMA in GF, and let GF load EMMA's JARs">
<replace file="${glassfish.server.dir}/domains/domain1/config/domain.xml">
<replacetoken><![CDATA[ <jvm-options>-XX:NewRatio=2</jvm-options>
</java-config>]]></replacetoken>
<replacevalue expandProperties="true"><![CDATA[ <jvm-options>-XX:NewRatio=2</jvm-options>
<jvm-options>-Demma.rt.control.port=${emma.port.used.by.server}</jvm-options>
<jvm-options>-Demma.coverage.out.file=${emma.coverage.out.file}</jvm-options>
</java-config>]]></replacevalue>
</replace>
<copy file="${glassfish.server.dir}/config/osgi.properties" todir="${glassfish.server.dir}/domains/domain1/config/" overwrite="true" />
<property file="${glassfish.server.dir}/domains/domain1/config/osgi.properties" />
<propertyfile
file="${glassfish.server.dir}/domains/domain1/config/osgi.properties"
comment="Adding EMMA settings">
<entry key="org.osgi.framework.bootdelegation" value="${org.osgi.framework.bootdelegation}, com.vladium, com.vladium.*"/>
</propertyfile>
</target>
<target name="emma.gen.coverage.report" depends="emma.prerequsite.check" if="emma.prerequsite.met" description="Generate Coverage Report With EMMA">
<delete>
<fileset dir="${coverage.dir}">
<include name="**/*.html" />
</fileset>
</delete>
<emma enabled="true">
<report sourcepath="${glassfish.src.dir}"
sort="+block,+name,+method,+class"
metrics="method:70,block:80,line:80,class:100">
<fileset dir="${basedir}">
<include name="**/*.em" />
<include name="**/*.ec" />
</fileset>
<html outfile="${coverage.dir}/coverage.html"
columns="name,class,method,block,line"
depth="method"
/>
</report>
</emma>
<echo>[EMMA] : Code coverage report has been generated.</echo>
<antcall target="emma.clean"/>
</target>
<target name="emma.clean" description="Clean Temporary Files During Generating EMMA Code Coverage Report">
<echo>[EMMA] : Cleaning Files Generated By EMMA.</echo>
<replace file="${glassfish.server.dir}/domains/domain1/config/domain.xml">
<replacetoken expandProperties="true"><![CDATA[ <jvm-options>-XX:NewRatio=2</jvm-options>
<jvm-options>-Demma.rt.control.port=${emma.port.used.by.server}</jvm-options>
<jvm-options>-Demma.coverage.out.file=${emma.coverage.out.file}</jvm-options>
</java-config>]]></replacetoken>
<replacevalue><![CDATA[ <jvm-options>-XX:NewRatio=2</jvm-options>
</java-config>]]></replacevalue>
</replace>
<delete file="${glassfish.server.dir}/domains/domain1/lib/ext/${emma.jar.name}"/>
<delete file="${glassfish.server.dir}/domains/domain1/config/osgi.properties" />
<delete>
<fileset dir="${basedir}">
<include name="**/*.ec" />
<include name="**/*.em" />
</fileset>
</delete>
<!-- create a temporatory direcotry for exploding glassfish.zip -->
<property name="tmp.gf.exploded.dir" value="${basedir}/tmp_exploded_gf" />
<mkdir dir="${tmp.gf.exploded.dir}/" />
<!-- restore original EJB jar files -->
<unzip src="${glassfish-zip-file}" dest="${tmp.gf.exploded.dir}"/>
<copy todir="${glassfish.server.dir}/modules" overwrite="true">
<fileset dir="${tmp.gf.exploded.dir}/glassfish7/glassfish/modules/">
<include name="**/*.jar"/>
</fileset>
</copy>
<delete dir="${tmp.gf.exploded.dir}/" />
</target>
<target name="enable.emma" depends="emma.init, emma.instrument, emma.glassfish.settings" if="emma.prerequsite.met" description="Enable EMMA">
<echo>[EMMA] : Enable EMMA to collect code coverage runtime data.</echo>
</target>