blob: e29c1d320551a59d602b86eb65ce3b0a9bd55ee3 [file] [log] [blame]
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<project name="aspects">
<!-- Properties common for all fault injections -->
<property name="build-fi.dir" location="${basedir}/build-fi"/>
<property name="sqoop-fi.jar" location="${build.dir}/${final.name}-fi.jar"/>
<property name="compile-inject.output"
value="${build-fi.dir}/compile-fi.log"/>
<property name="aspectversion" value="${aspectj.version}"/>
<property name="javac.version" value="${targetJavaVersion}"/>
<property file="${basedir}/build.properties"/>
<!--All Fault Injection (FI) related targets are located in this session -->
<target name="clean-fi">
<delete dir="${build-fi.dir}"/>
</target>
<!-- Weaving aspects in place
Later on one can run 'ant jar-fault-inject' to create
Hadoop jar file with instrumented classes-->
<target name="compile-fault-inject" depends="compile, compile-test">
<!-- AspectJ task definition -->
<taskdef
resource="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties">
<classpath>
<pathelement
location="${build.ivy.lib.dir}/sqoop/test/aspectjtools-${aspectversion}.jar"/>
</classpath>
</taskdef>
<echo message="Start weaving aspects in place"/>
<iajc
encoding="${build.encoding}"
srcdir="${src.dir.path}"
includes="**/org/apache/sqoop/**/*.java, **/org/apache/sqoop/**/*.aj"
destDir="${build-fi.dir}/classes"
debug="${javac.debug}"
target="${javac.version}"
source="${javac.version}"
deprecation="${javac.deprecation}"
fork="true"
maxmem="1024m"
>
<classpath>
<path refid="test.classpath"/>
<fileset dir="${build-fi.dir}/test">
<include name="**/*.jar" />
<exclude name="**/excluded/" />
</fileset>
</classpath>
</iajc>
<loadfile property="injection.failure" srcfile="${compile-inject.output}">
<filterchain>
<linecontainsregexp>
<regexp pattern='iajc.*warning'/>
</linecontainsregexp>
</filterchain>
</loadfile>
<fail if="injection.failure">
Broken binding of advises: ${line.separator}${injection.failure}
</fail>
<echo message="Weaving of aspects is finished"/>
</target>
<target name="fi-init">
<mkdir dir="${build-fi.dir}"/>
</target>
<target name="injectfaults"
description="Instrument classes with faults and other AOP advices">
<mkdir dir="${build-fi.dir}"/>
<delete file="${compile-inject.output}"/>
<echo message="In injectfaults ${src.dir}"/>
<weave-injectfault-aspects dest.dir="${build-fi.dir}/classes"
src.dir="${base.src.dir}">
</weave-injectfault-aspects>
</target>
<macrodef name="weave-injectfault-aspects">
<attribute name="dest.dir" />
<attribute name="src.dir" />
<sequential>
<subant buildpath="build.xml" target="compile-fault-inject"
output="${compile-inject.output}">
<property name="build.dir" value="${build-fi.dir}" />
<property name="src.dir.path" value="@{src.dir}" />
<property name="dest.dir" value="@{dest.dir}" />
</subant>
</sequential>
</macrodef>
<macrodef name="macro-run-tests-fault-inject">
<attribute name="target.name" />
<attribute name="testcasesonly" />
<sequential>
<subant buildpath="build.xml" target="@{target.name}">
<property name="build.dir" value="${build-fi.dir}"/>
<property name="test.fault.inject" value="yes"/>
<property name="test.include" value="TestFi*"/>
<property name="test.timeout" value="3000000"/>
<!-- This one is needed for the special "regression" target only -->
<property name="special.fi.testcasesonly" value="@{testcasesonly}"/>
</subant>
</sequential>
</macrodef>
<!-- ================================================================== -->
<!-- Make sqoop-fi.jar including all Fault injected artifacts -->
<!-- ================================================================== -->
<macrodef name="macro-jar-fault-inject">
<attribute name="target.name" />
<attribute name="build.dir" />
<attribute name="jar.final.name" />
<attribute name="jar.final.value" />
<sequential>
<subant buildpath="build.xml" target="@{target.name}">
<property name="build.dir" value="@{build.dir}"/>
<property name="@{jar.final.name}" value="@{jar.final.value}"/>
<property name="jar.extra.properties.list"
value="${test.dir}/fi-site.xml" />
</subant>
</sequential>
</macrodef>
<!-- ================================================================== -->
<!-- Make test jar files including all Fault Injected artifacts -->
<!-- ================================================================== -->
<macrodef name="macro-jar-test-fault-inject">
<attribute name="target.name" />
<attribute name="jar.final.name" />
<attribute name="jar.final.value" />
<sequential>
<echo message="@{jar.final.value}"/>
<subant buildpath="build.xml" target="@{target.name}">
<property name="build.dir" value="${build-fi.dir}"/>
<property name="@{jar.final.name}"
value="@{jar.final.value}"/>
</subant>
</sequential>
</macrodef>
<!--End of Fault Injection (FI) related session-->
</project>