<!--
   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"
  xmlns:artifact="urn:maven-artifact-ant">
  <!-- The followng are duplications and have to be customized elsewhere too -->
  <!-- TODO this version has to be updated synchronously with Ivy -->
  <property name="aspectversion" value="1.6.5"/>
  <!-- TODO this has to be changed synchronously with build.xml version prop.-->
  <!-- this workarounds of test-patch setting its own 'version' -->
  <property name="project.version" value="0.21.0-SNAPSHOT"/>

  <!-- Properties common for all fault injections -->
  <property name="build-fi.dir" value="${basedir}/build-fi"/>
  <property name="hadoop-fi.jar" location="${build.dir}/${final.name}-fi.jar" />
  <property name="compile-inject.output" value="${build-fi.dir}/compile-fi.log"/>
  <property file="${basedir}/build.properties"/>

  <!-- Properties related to system fault injection and tests -->
  <property name="system-test-build-dir" value="${build-fi.dir}/system"/>
  <!-- This varialbe is set by respective injection targets -->
  <property name="hadoop.instrumented.jar" value=""/>

  <!-- Properties specifically for system fault-injections and system tests -->
  <property name="herriot.suffix" value="instrumented"/>
  <property name="instrumented.final.name"
            value="${name}-${herriot.suffix}-${version}"/>
  <property name="hadoop-hdfs-instrumented.pom"
            location="${ivy.dir}/hadoop-hdfs-${herriot.suffix}.xml" />
  <property name="hadoop-hdfs-instrumented-test.pom"
            location="${ivy.dir}/hadoop-hdfs-${herriot.suffix}-test.xml" />
  <property name="hadoop-hdfs-instrumented.jar"
            location="${system-test-build-dir}/${name}-${herriot.suffix}-${version}.jar" />
  <property name="hadoop-hdfs-instrumented-sources.jar"
            location="${system-test-build-dir}/${name}-${herriot.suffix}-${version}-sources.jar" />
  <property name="hadoop-hdfs-instrumented-test.jar"
            location="${system-test-build-dir}/${name}-${herriot.suffix}-test-${version}.jar" />
  <property name="hadoop-hdfs-instrumented-test-sources.jar"
            location="${system-test-build-dir}/${name}-${herriot.suffix}-test-${version}-sources.jar" />
  <!--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 -classes-compilation has to be defined in build.xml and
  needs to depend on classes compilation and test classes compilation
  targets. This is a poor man parametrization for targets -->
  <target name="-compile-fault-inject" depends="-classes-compilation" >
    <!-- AspectJ task definition -->
    <taskdef
      resource="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties">
      <classpath>
        <pathelement
          location="${common.ivy.lib.dir}/aspectjtools-${aspectversion}.jar"/>
      </classpath>
    </taskdef>
    <echo message="Start weaving aspects in place"/>
    <path id="aspect.path">
      <pathelement location="${hadoop.instrumented.jar}"/>
    </path>
    <iajc
      encoding="${build.encoding}" 
      srcdir="${java.src.dir};${build.src};${src.dir.path}"
      includes="org/apache/hadoop/**/*.java, org/apache/hadoop/**/*.aj"
      excludes="org/apache/hadoop/classification/tools/**/*, org/apache/hadoop/record/**/*"
      destDir="${dest.dir}"
      debug="${javac.debug}"
      target="${javac.version}"
      source="${javac.version}"
      deprecation="${javac.deprecation}"
      fork="true"
      maxmem="256m">
      <aspectpath refid="aspect.path"/>
      <classpath refid="test.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>

  <!-- Classpath for running system tests -->
  <path id="test.system.classpath">
        <pathelement location="${hadoop.conf.dir.deployed}" />
        <pathelement location="${system-test-build-dir}/test/extraconf" />
        <pathelement location="${system-test-build-dir}/test/classes" />
        <pathelement location="${system-test-build-dir}/classes" />
        <pathelement location="${test.src.dir}" />
        <pathelement location="${build-fi.dir}" />
        <pathelement location="${build-fi.dir}/tools" />
        <pathelement path="${clover.jar}" />
        <fileset dir="${system-test-build-dir}">
           <include name="**/*.jar" />
           <exclude name="**/excluded/" />
         </fileset>
        <path refid="classpath" />
  </path>

  <!-- ================ -->
  <!-- run system tests -->
  <!-- ================ -->
  <target name="test-system" depends="ivy-retrieve-common, ivy-retrieve-system"
    description="Run system tests">
    <subant buildpath="build.xml" target="jar-test-system"/>
    <macro-test-runner test.file="${test.hdfs.all.tests.file}"
                       suite.type="system/test"
                       classpath="test.system.classpath"
                       test.dir="${system-test-build-dir}/test"
                       fileset.dir="${test.src.dir}"
                       hadoop.conf.dir.deployed="${hadoop.conf.dir.deployed}">
    </macro-test-runner>
  </target>

  <target name="injectfaults" 
  	description="Instrument classes with faults and other AOP advices">
    <!--mkdir to prevent <subant> failure in case the folder has been removed-->
    <mkdir dir="${build-fi.dir}"/>
    <delete file="${compile-inject.output}"/>
    <weave-injectfault-aspects dest.dir="${build-fi.dir}/classes"
                               src.dir="${test.src.dir}/aop"
      aspects.jar="${build-fi.dir}/ivy/lib/${ant.project.name}/test/hadoop-common-${project.version}.jar">
    </weave-injectfault-aspects>
  </target>

  <!-- =============================================================== -->
  <!-- Create hadoop-{version}-dev-core.jar required to be deployed on -->
  <!-- cluster for system tests                                        -->
  <!-- =============================================================== -->
  <target name="jar-system"
          depends="inject-system-faults"
          description="Make hadoop-hdfs-instrumented.jar with system injections.">
    <macro-jar-fault-inject target.name="jar"
      build.dir="${system-test-build-dir}"
      jar.final.name="final.name"
      jar.final.value="${instrumented.final.name}">
    </macro-jar-fault-inject>
    <jar jarfile="${system-test-build-dir}/${instrumented.final.name}-sources.jar"
      update="yes">
      <fileset dir="${test.src.dir}/system/java" includes="org/apache/hadoop/**/*.java" />
      <fileset dir="${test.src.dir}/system/aop" includes="org/apache/hadoop/**/*.aj" />
    </jar>
  </target>

  <target name="jar-test-system" depends="inject-system-faults, compile-test-system"
    description="Make hadoop-hdfs-instrumented-test.jar with system injections.">
    <subant buildpath="build.xml" target="-do-jar-test">
      <property name="build.dir" value="${system-test-build-dir}"/>
      <property name="test.hdfs.final.name" value="${name}-${herriot.suffix}-test-${version}"/>
      <property name="test.build.classes"
        value="${system-test-build-dir}/test/classes"/>
    </subant>
    <jar jarfile="${hadoop-hdfs-instrumented-test-sources.jar}">
      <fileset dir="${test.src.dir}/system/test" includes="org/apache/hadoop/**/*.java" />
    </jar>
  </target>

  <target name="compile-test-system" description="Compiles system tests">
    <subant buildpath="build.xml" target="-compile-test-system.wrapper">
      <property name="build.dir" value="${system-test-build-dir}"/>
    </subant>
  </target>

  <target name="-compile-test-system.wrapper" depends="ivy-retrieve-common, ivy-retrieve-system">
    <macro-compile-hdfs-test
      target.dir="${system-test-build-dir}/test/classes"
      source.dir="${test.src.dir}/system/test"
      dest.dir="${system-test-build-dir}/test/classes"
      classpath="test.classpath"/>
  </target>

  <macrodef name="weave-injectfault-aspects">
    <attribute name="dest.dir" />
    <attribute name="src.dir" />
    <attribute name="aspects.jar"/>
    <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}" />
        <property name="hadoop.instrumented.jar" value="@{aspects.jar}"/>
      </subant>
    </sequential>
  </macrodef>

  <target name="inject-system-faults"
          description="Inject system faults">
    <property name="build-fi.dir" value="${system-test-build-dir}" />
    <mkdir dir="${build-fi.dir}"/>
    <delete file="${compile-inject.output}"/>
    <subant buildpath="build.xml" target="ivy-retrieve-system">
      <property name="build.dir" value="${build-fi.dir}"/>
    </subant>
    <weave-injectfault-aspects dest.dir="${system-test-build-dir}/classes"
                               src.dir="${test.src.dir}/system/java;${test.src.dir}/system/aop"
      aspects.jar="${build-fi.dir}/ivy/lib/${ant.project.name}/system/hadoop-common-${herriot.suffix}-${project.version}.jar">
    </weave-injectfault-aspects>
  </target>

  <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*"/>
        <!-- This one is needed for the special "regression" target only -->
        <property name="special.fi.testcasesonly" value="@{testcasesonly}"/>
      </subant>
    </sequential>
  </macrodef>
	
  <!-- ================================================================== -->
  <!-- Make hadoop-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.src.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>
      <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-->

  <!-- Start of cluster controller binary target -->
  <property name="runAs.src"
    value ="${test.src.dir}/system/c++/runAs"/>
  <property name="runAs.build.dir"
    value="${system-test-build-dir}/c++-build"/>
  <property name="runAs.configure.script"
    value="${runAs.build.dir}/configure"/>
  <target name="init-runAs-build">
    <condition property="runAs.parameters.passed">
      <not>
        <equals arg1="${run-as.hadoop.home.dir}"
          arg2="$${run-as.hadoop.home.dir}"/>
      </not>
    </condition>
    <fail unless="runAs.parameters.passed"
          message="Required parameters run-as.hadoop.home.dir not passed to the build"/>
    <mkdir dir="${runAs.build.dir}"/>
    <copy todir="${runAs.build.dir}" overwrite="true">
      <fileset dir="${runAs.src}" includes="**/*"/>
    </copy>
    <chmod perm="+x" file="${runAs.configure.script}">
    </chmod>
  </target>

  <target name="configure-runAs"
    depends="init-runAs-build">
    <exec executable="${runAs.configure.script}"
      dir="${runAs.build.dir}" failonerror="true">
      <arg value="--with-home=${run-as.hadoop.home.dir}"/>
    </exec>
  </target>
  <target name="run-as" depends="configure-runAs">
    <exec executable="${make.cmd}" dir="${runAs.build.dir}"
        searchpath="yes" failonerror="yes">
     <arg value="all" />
    </exec>
  </target>
  <!-- End of cluster controller binary target -->
  <!-- Install Herriot artifacts to the local Maven -->
  <target name="-mvn-system-install" depends="mvn-taskdef, jar-system, jar-test-system">
    <artifact:pom file="${hadoop-hdfs-instrumented.pom}"
                  id="hadoop.hdfs.${herriot.suffix}"/>
    <artifact:pom file="${hadoop-hdfs-instrumented-test.pom}"
                  id="hadoop.hdfs.${herriot.suffix}.test"/>
    <artifact:install file="${hadoop-hdfs-instrumented.jar}">
      <pom refid="hadoop.hdfs.${herriot.suffix}"/>
      <attach file="${hadoop-hdfs-instrumented-sources.jar}" classifier="sources" />
    </artifact:install>
    <artifact:install file="${hadoop-hdfs-instrumented-test.jar}">
      <pom refid="hadoop.hdfs.${herriot.suffix}.test"/>
      <attach file="${hadoop-hdfs-instrumented-test-sources.jar}" classifier="sources" />
    </artifact:install>
  </target>
  <target name="-mvn-system-deploy" depends="mvn-taskdef, jar-system, jar-test-system">
    <property name="repourl" value="https://repository.apache.org/content/repositories/snapshots" />
    <artifact:pom file="${hadoop-hdfs-instrumented.pom}"
                  id="hadoop.hdfs.${herriot.suffix}"/>
    <artifact:pom file="${hadoop-hdfs-instrumented-test.pom}"
                   id="hadoop.hdfs.${herriot.suffix}.test"/>
    <artifact:install-provider artifactId="wagon-http" version="1.0-beta-2"/>
    <artifact:deploy file="${hadoop-hdfs-instrumented.jar}">
      <remoteRepository id="apache.snapshots.https" url="${repourl}"/>
      <pom refid="hadoop.hdfs.${herriot.suffix}"/>
      <attach file="${hadoop-hdfs-instrumented-sources.jar}" classifier="sources" />
    </artifact:deploy>
    <artifact:deploy file="${hadoop-hdfs-instrumented-test.jar}">
      <remoteRepository id="apache.snapshots.https" url="${repourl}"/>
      <pom refid="hadoop.hdfs.${herriot.suffix}.test"/>
      <attach file="${hadoop-hdfs-instrumented-test-sources.jar}" classifier="sources" />
    </artifact:deploy>
  </target>
  <!-- End of Maven -->
</project>
