<!-- An ant project fragement imported into the main testsuite build that
defines the jboss server config and start/stop targets.
$Id: server-config.xml 63288 2007-05-31 21:54:41Z rachmatowicz@jboss.com $
-->
<project name="server-config" default="help"
         xmlns:server="http://jboss.org/ns/test/ant/server">

   <property name="version" value="${version.major}.${version.minor}.${version.revision}.${version.tag}"/>
   <!-- Use the ${/} platform seperator in jboss.dist, jboss.test.deploy.dir as
      this is used in the security policy file property references and needs to
      be valid for the platform.
   -->
   <property name="jboss.dist"
      value="${project.root}${/}build${/}output${/}jboss-${version}"/>
   <property name="jboss.test.deploy.dir"
      value="${project.root}${/}testsuite${/}output${/}lib"/>
   <!-- Override for non-Sun compatible JDK layouts -->
   <property name="javac.jar"
      value="${env.JAVA_HOME}/lib/tools.jar"/>
   <!-- Override with the jpda settings for debugging start-jboss. An example
   for connecting with a debugger via the socket protocol:
   -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y

   An example of running with the
   -Xrunyjpagent
   -->
   <!--
   <property name="jpda.cmdline" value="-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y" />
-->
   <property name="jpda.cmdline" value="" />

   <path id="jboss.boot.classpath">
      <pathelement location="${jboss.dist}/bin/run.jar"/>
      <pathelement location="${javac.jar}"/>
   </path>

   <!-- Set a extension property -bat for win32, sh
   otherwise
   -->
   <condition property="exten" value="bat">
      <os family="windows"/>
   </condition>
   <condition property="exten" value="sh">
      <not>
         <os family="windows"/>
      </not>
   </condition>

   <condition property="separator" value=";">
      <os family="windows"/>
   </condition>
   <condition property="separator" value=":">
      <not>
         <os family="windows"/>
      </not>
   </condition>

   <!-- TTL for multicast packets. Use jbosstest namespace
        so it gets passed in to test client as well -->
   <property name="jbosstest.udp.ip_ttl" value="0"/>

   <taskdef name="config" classname="org.jboss.ant.taskdefs.server.ConfigManagerTask"
            uri="http://jboss.org/ns/test/ant/server" loaderref="server.loader">
      <classpath id="server.taskdef.classpath">
         <path refid="jboss.test.classpath"/>
      </classpath>
   </taskdef>
   <taskdef name="start" classname="org.jboss.ant.taskdefs.server.StartServerTask"
            uri="http://jboss.org/ns/test/ant/server" loaderref="server.loader">
      <classpath refid="server.taskdef.classpath"/>
   </taskdef>
   <taskdef name="stop" classname="org.jboss.ant.taskdefs.server.StopServerTask"
            uri="http://jboss.org/ns/test/ant/server" loaderref="server.loader">
      <classpath refid="server.taskdef.classpath"/>
   </taskdef>

   <server:config javaHome="${env.JAVA_HOME}" jbossHome="${jboss.dist}"
                  udpGroup="${udpGroup}">
      <server name="all" host="${node0}">
         <jvmarg value="${jpda.cmdline}" />
         <jvmarg value="-Xmx128m" />
         <jvmarg value="-XX:MaxPermSize=128m" />
         <sysproperty key="java.endorsed.dirs" value="${jboss.dist}/lib/endorsed" />
         <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="securitymgr" config="default" host="${node0}">
         <jvmarg value="${jpda.cmdline}" />
         <jvmarg value="-Xmx64m" />
         <jvmarg value="-Djboss.home.dir=${jboss.dist}" />
         <jvmarg value="-Djboss.server.home.dir=${jboss.dist}${/}server${/}default" />
         <jvmarg value="-Djboss.test.deploy.dir=${jboss.test.deploy.dir}" />
         <jvmarg value="-Djava.security.manager"/>
         <jvmarg value="-Djava.security.policy==${build.resources}/securitymgr/server.policy"/>
         <jvmarg value="-Djava.security.debug=policy"/>
      </server>
      <server name="scoped-aop-jdk14" host="${node0}">
         <jvmarg value="${jpda.cmdline}" />
         <jvmarg value="-Xbootclasspath/p:${jboss.dist}/bin/jdk14-pluggable-instrumentor.jar${separator}${jboss.dist}/bin/woven-classloader"/>
         <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="scoped-aop-jdk50" host="${node0}">
         <jvmarg value="${jpda.cmdline}" />
         <jvmarg value="-javaagent:pluggable-instrumentor.jar"/>
         <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="jacc-securitymgr" host="${node0}" config="jacc-securitymgr">
         <jvmarg value="${jpda.cmdline}" />
         <jvmarg value="-Xmx64m" />
         <jvmarg value="-Djboss.home.dir=${jboss.dist}" />
         <jvmarg value="-Djboss.server.home.dir=${jboss.dist}${/}server${/}jacc-securitymgr" />
         <jvmarg value="-Djava.security.manager"/>
         <jvmarg value="-Djava.security.policy==${build.resources}/securitymgr/server.policy"/>
         <jvmarg value="-Djava.security.debug="/>
      </server>
      <server name="jacc" host="${node0}">
         <jvmarg value="${jpda.cmdline}" />
      </server>
      <server name="jacc-security-external" host="${node0}">
         <jvmarg value="${jpda.cmdline}" />
      </server>
      <server name="jacc-security-allstarrole" host="${node0}">
         <jvmarg value="${jpda.cmdline}" />
      </server>
      <server name="custom-securitymgr" host="${node0}">
         <jvmarg value="${jpda.cmdline}" />
      </server>
      <server name="tomcat-ssl" host="${node0}">
         <jvmarg value="${jpda.cmdline}" />
      </server>
      <server name="tomcat-sso" host="${node0}">
         <jvmarg value="${jpda.cmdline}" />
      </server>
      <server name="tomcat-webctx" host="${node0}">
         <jvmarg value="${jpda.cmdline}" />
      </server>
      <server name="tomcat-federation" host="${node0}">
         <jvmarg value="${jpda.cmdline}" />
      </server>
    <server name="unified-java" host="${node0}">
       <jvmarg value="${jpda.cmdline}" />
       <jvmarg value="-Xmx128m" />
       <sysproperty key="java.endorsed.dirs" value="${jboss.dist}/lib/endorsed" />
    </server>
    <server name="unified-jboss" host="${node0}">
       <jvmarg value="${jpda.cmdline}" />
       <jvmarg value="-Xmx128m" />
       <sysproperty key="java.endorsed.dirs" value="${jboss.dist}/lib/endorsed" />
    </server>
      <server name="node0" host="${node0}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="node1" host="${node1}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-UDP-0" host="${node0}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-UDP-1" host="${node1}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-field-UDP-0" host="${node0}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-field-UDP-1" host="${node1}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-UDP-SYNC-0" host="${node0}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-UDP-SYNC-1" host="${node1}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-field-UDP-SYNC-0" host="${node0}">
        <sysproperty key="resolve.dns" value="false" />
         <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-field-UDP-SYNC-1" host="${node1}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-UDP-BR-0" host="${node0}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-UDP-BR-1" host="${node1}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-field-UDP-BR-0" host="${node0}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-field-UDP-BR-1" host="${node1}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-TCP-0" host="${node0}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-TCP-1" host="${node1}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-field-TCP-0" host="${node0}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-field-TCP-1" host="${node1}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-TCP-SYNC-0" host="${node0}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-TCP-SYNC-1" host="${node1}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-field-TCP-SYNC-0" host="${node0}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-field-TCP-SYNC-1" host="${node1}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-TCP-BR-0" host="${node0}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
       </server>
      <server name="cluster-TCP-BR-1" host="${node1}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-field-TCP-BR-0" host="${node0}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="cluster-field-TCP-BR-1" host="${node1}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="tomcat-sso-cluster0" host="${node0}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="tomcat-sso-cluster1" host="${node1}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="tomcat-sso-cluster-br0" host="${node0}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="tomcat-sso-cluster-br1" host="${node1}">
        <sysproperty key="resolve.dns" value="false" />
        <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="dtm0" host="${node0}">
         <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="dtm1" host="${node1}"/>
      <server name="dtm2" host="${node2}"/>
      <server name="dtm3" host="${node3}"/>
      <server name="binding-manager1" host="${node0}" httpPort="8180" rmiPort="1199">
         <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
      <server name="binding-manager2" host="${node0}" httpPort="8280" rmiPort="1299">
         <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
      </server>
    <server name="jrmp-invoker" host="${node0}"/>
    <server name="minimal" host="${node0}" hasWebServer="false"/>
    <server name="webservice-ssl" host="${node0}"/>
    <server name="deployment-service" host="${node0}"/>
    <server name="classloader-leak" host="${node0}">
       <jvmarg value="${jpda.cmdline}" />
       <jvmarg value="-Xmx128m" />
       <jvmarg value="-XX:MaxPermSize=128m" />
       <sysproperty key="java.endorsed.dirs" value="${jboss.dist}/lib/endorsed" />
       <sysproperty key="jgroups.udp.ip_ttl" value="${jbosstest.udp.ip_ttl}" />
    </server>
   </server:config>

    <!-- A macro for printing sleep before going into sleep
   -->
   <macrodef name="start-sleep">
      <attribute name="seconds" default="30"/>
      <sequential>
         <echo message="Will sleep for @{seconds} seconds"/>
         <sleep seconds="@{seconds}"/>
      </sequential>
   </macrodef>

   <!-- A macro for starting jboss with a given conf name and host binding
   -->
   <macrodef name="start-jboss">
      <attribute name="conf"
         description="The config name passed in as the -c option to jboss"/>
      <attribute name="host" default="${node0}"
         description="The hostname/address passed in as the -b option to jboss" />
      <attribute name="jvmargs" default="-Xmx64m"
         description="An additional jvmarg line set after any ${jpda.cmdline}"/>
      <attribute name="jboss.dist" default="${jboss.dist}"
         description="The jboss dist root directory" />
      <sequential>
         <echo message="Will start the jboss instance @{host} with @{conf}, dist=@{jboss.dist}"/>
          <java classname="org.jboss.Main" fork="true" spawn="true" dir="@{jboss.dist}/bin">
            <classpath>
               <pathelement location="@{jboss.dist}/bin/run.jar"/>
               <pathelement location="${javac.jar}"/>
            </classpath>
            <jvmarg line="${jpda.cmdline}" />
            <jvmarg line="@{jvmargs}" />
            <arg value="-c"/>
            <arg value="@{conf}"/>
            <arg value="-b"/>
            <arg value="@{host}"/>
         </java>
      </sequential>
   </macrodef>
   <!-- A macro for stopping jboss with a jnp url
   -->
   <macrodef name="stop-jboss">
      <attribute name="url" default="jnp://${node0}:1099"
         description="The jndi provider url used to lookup the RMIAdaptor"/>
      <attribute name="jvmargs" default=""
         description="Addtional jvm args"/>
      <attribute name="jboss.dist" default="${jboss.dist}"
         description="The jboss dist root directory" />
      <sequential>
         <echo message="Will stop the jboss instance at url @{url}"/>
         <java classname="org.jboss.Shutdown" fork="true" dir="@{jboss.dist}/bin"
	       jvmargs="@{jvmargs}">
            <classpath>
               <pathelement location="@{jboss.dist}/bin/shutdown.jar"/>
               <pathelement location="@{jboss.dist}/client/jbossall-client.jar"/>
            </classpath>
            <arg value="--server"/>
            <arg value="@{url}"/>
            <arg value="--shutdown"/>
         </java>
      </sequential>
   </macrodef>

    <!-- A macro for starting/stopping Apache required for httpsessionreplication tests
   -->
   <macrodef name="apache">
      <attribute name="location" default="/usr/local/apache"/>
       <attribute name="action-type" default="start"/>
      <sequential>
         <echo message="Will @{action-type} the apache instance at @{location}"/>
         <echo message="If you need apache to run on port 80, then"/>
         <echo message="you need to start apache with admin/root rights."/>
         <echo message="If so, start/stop apache independent of this testsuite"/>
         <exec executable="@{location}/bin/apachectl"
               failonerror="false" failifexecutionfails="false">
             <arg value="@{action-type}"/>
         </exec>
      </sequential>
   </macrodef>

   <!-- A macro for creating a test unifiedInvoker config -->
   <macrodef name="create-unifiedInvoker-server"
      description="Create an unified invoker configuration">
      <attribute name="conf"/>
      <attribute name="serial" default="jboss"/>
      <attribute name="jboss.dist" default="${jboss.dist}"
         description="The jboss dist root directory" />
      <sequential>
         <delete dir="@{jboss.dist}/server/@{conf}" failonerror="false"/>
         <echo message="creating @{conf} config, jboss.dist=@{jboss.dist}"/>
         <create-config baseconf="default" newconf="@{conf}">
            <patternset>
               <include name="**/*"/>
             </patternset>
         </create-config>
         <!-- Unified config is now the default in 4.2.x
      	 <replace file="@{jboss.dist}/server/@{conf}/conf/standardjboss.xml">
            <replacefilter token="&lt;invoker-mbean&gt;jboss:service=invoker,type=jrmp&lt;/invoker-mbean&gt;" value="&lt;invoker-mbean&gt;jboss:service=invoker,type=unified&lt;/invoker-mbean&gt;"/>
      	    <replacefilter token="&lt;invoker-mbean&gt;jboss:service=invoker,type=jrmpha&lt;/invoker-mbean&gt;" value="&lt;invoker-mbean&gt;jboss:service=invoker,type=unifiedha&lt;/invoker-mbean&gt;"/>
      	 </replace>

         <replace file="@{jboss.dist}/server/@{conf}/conf/jboss-service.xml">
            <replacetoken><![CDATA[<!- - @TESTSUITE_CLUSTER_CONFIG@ - ->]]></replacetoken>
            <replacevalue><![CDATA[
           	<!- - configuration generated for UnifiedInvokers tests - ->
            <mbean code="org.jboss.invocation.unified.server.UnifiedInvoker"
               name="jboss:service=invoker,type=unified">
               <depends>jboss:service=TransactionManager</depends>
               <depends>jboss.remoting:service=Connector,transport=socket</depends>
            </mbean>
             <mbean code="org.jboss.remoting.network.NetworkRegistry"
                    name="jboss.remoting:service=NetworkRegistry"/>
            <mbean code="org.jboss.remoting.transport.Connector"
                   name="jboss.remoting:service=Connector,transport=socket"
                   display-name="Socket transport Connector">
               <attribute name="Configuration">
                  <config>
                     <invoker transport="socket">
                        <attribute name="dataType" isParam="true">invocation</attribute>
                        <attribute name="marshaller" isParam="true">org.jboss.invocation.unified.marshall.InvocationMarshaller</attribute>
                        <attribute name="unmarshaller" isParam="true">org.jboss.invocation.unified.marshall.InvocationUnMarshaller</attribute>
         		<attribute name="serializationtype" isParam="true">@{serial}</attribute>
                        <attribute name="maxPoolSize">5000</attribute>
                        <attribute name="clientMaxPoolSize" isParam="true">5000</attribute>
                        <attribute name="socketTimeout">3600000</attribute>
                        <attribute name="serverBindAddress">${jboss.bind.address}</attribute>
                        <attribute name="serverBindPort">4446</attribute>
                     </invoker>

                     <handlers>
                        <handler subsystem="invoker">jboss:service=invoker,type=unified</handler>
                     </handlers>
                  </config>
               </attribute>
               <depends>jboss.remoting:service=NetworkRegistry</depends>
            </mbean>
            ]]></replacevalue>
         </replace>
         -->
      </sequential>
   </macrodef>


   <!-- A macro for creating a test cluster config -->
   <macrodef name="create-cluster-node"
      description="Create a simplified cluster configuration">
      <attribute name="conf"/>
      <attribute name="host" default="${node0}"/>
      <attribute name="jboss.dist" default="${jboss.dist}"
         description="The jboss dist root directory" />
      <sequential>
         <delete dir="@{jboss.dist}/server/@{conf}" failonerror="false"/>
         <echo message="creating @{conf} config, jboss.dist=@{jboss.dist}"/>
         <copy todir="@{jboss.dist}/server/@{conf}">
            <fileset dir="@{jboss.dist}/server/all">
               <include name="conf/**"/>
               <include name="lib/**"/>
               <include name="deploy/ear-deployer.xml"/>
               <include name="deploy/ejb-deployer.xml"/>
               <!-- To support both JDK1.4 and 5.0 -->
               <include name="deploy/jboss-aop*.deployer/**"/>
               <include name="deploy/jbossjca-service.xml"/>
               <include name="deploy/jboss-jdbc-metadata.sar"/>
               <include name="deploy/jboss-web.deployer/**"/>
               <include name="deploy/jmx-console.war/**"/>
               <include name="deploy/jmx-invoker-service.xml"/>
               <include name="deploy/cluster-service.xml"/>
               <include name="deploy/cache-invalidation-service.xml"/>
               <include name="deploy/hsqldb-ds.xml"/>
               <include name="deploy/jboss-local-jdbc.rar"/>
               <include name="deploy/jboss-jca.sar"/>
               <include name="deploy/transaction-service.xml"/>
               <include name="deploy/jboss-web-cluster.sar/**"/>
               <include name="deploy/deploy.last/farm-service.xml"/>
               <include name="deploy/jbossws*.sar/**"/>
               <include name="deploy/ejb3.deployer/**"/>
                <include name="deploy/properties-service.xml"/>
            </fileset>
         </copy>
         <antcall target="modify-farming">
            <param name="file_" value="@{jboss.dist}/server/@{conf}/deploy/deploy.last/farm-service.xml"/>
         </antcall>
         <antcall target="modify-cluster-stack">
            <param name="file_" value="@{jboss.dist}/server/@{conf}/deploy/cluster-service.xml"/>
            <param name="host_" value="@{host}"/>
         </antcall>
         <antcall target="modify-cluster-stack">
            <param name="file_" value="@{jboss.dist}/server/@{conf}/deploy/jboss-web-cluster.sar/META-INF/jboss-service.xml"/>
            <param name="host_" value="@{host}"/>
         </antcall>
      </sequential>
   </macrodef>

   <!-- A macro for creating a test cluster config -->
   <macrodef name="create-all-cluster-node"
      description="Create a full cluster configuration">
      <attribute name="conf"/>
      <attribute name="ports"/>
      <attribute name="jboss.dist" default="${jboss.dist}"
         description="The jboss dist root directory" />
      <sequential>
         <delete dir="@{jboss.dist}/server/@{conf}" failonerror="false"/>
         <echo message="creating @{conf} config, jboss.dist=@{jboss.dist}"/>
         <copy todir="@{jboss.dist}/server/@{conf}">
            <fileset dir="@{jboss.dist}/server/all">
               <include name="conf/**"/>
               <include name="lib/**"/>
               <include name="deploy/**"/>
               <include name="deploy-hasingleton/**"/>
            </fileset>
         </copy>
         <replace file="@{jboss.dist}/server/@{conf}/conf/jboss-service.xml">
            <replacetoken><![CDATA[<!-- @TESTSUITE_CLUSTER_CONFIG@ -->]]></replacetoken>
            <replacevalue><![CDATA[
   <mbean code="org.jboss.services.binding.ServiceBindingManager"
     name="jboss.system:service=ServiceBindingManager">
     <attribute name="ServerName">]]>@{ports}<![CDATA[</attribute>
     <attribute name="StoreURL">../docs/examples/binding-manager/sample-bindings.xml</attribute>
     <attribute name="StoreFactoryClassName">
       org.jboss.services.binding.XMLServicesStoreFactory
     </attribute>
   </mbean>
            ]]></replacevalue>
         </replace>
      </sequential>
   </macrodef>

   <!-- A macro for creating a clustered sso config -->
   <macrodef name="create-cluster-sso-node"
	      description="Create a simplified clustered-sso configuration">
	<attribute name="newconf"/>
   	<sequential>
	    <create-config baseconf="all" newconf="@{newconf}"
	      newconf-src="tomcat-sso-cluster">
	      <patternset>
	        <include name="conf/**"/>
	        <include name="deploy/jboss-web.deployer/**"/>
	        <include name="deploy/jmx-invoker-service.xml"/>
	        <include name="deploy/ear-deployer.xml"/>
	        <include name="deploy/ejb-deployer.xml"/>
	        <include name="deploy/hsqldb-ds.xml"/>
	        <include name="deploy/jbossjca-service.xml"/>
	        <include name="deploy/jboss-local-jdbc.rar"/>
	        <include name="deploy/jboss-jdbc-metadata.sar"/>
	        <include name="deploy/jboss-aop*.deployer/**"/>
	        <include name="deploy/jboss-web-cluster.sar/**"/>
	        <include name="lib/**"/>
	      </patternset>
	    </create-config>
    </sequential>
   </macrodef>

   <!-- This macro makes a new config whose name is given by the newconf
   attribute by copying the config given by the baseconf. The content that
   is copied from baseconf is limited to the patternset nested element. In
   addition, any content under ${build.resources}/test-configs/@{newconf}
   is also copied.
   -->
   <macrodef name="create-config"
      description="Create new config based on an existing config">
      <attribute name="baseconf" description="The base config to start with" default="default"/>
      <attribute name="newconf" description="The name of the new config"/>
      <attribute name="newconf-src" description="The name of the tests-config to copy or the baseconf" default="@{newconf}"/>
      <attribute name="jboss.dist" default="${jboss.dist}"
         description="The jboss dist root directory" />
      <element name="patternset" />
      <sequential>
         <echo message="creating @{newconf} config"/>
         <copy todir="@{jboss.dist}/server/@{newconf}" filtering="false">
            <fileset dir="@{jboss.dist}/server/@{baseconf}">
               <patternset />
            </fileset>
         </copy>
         <!-- Overwrite any config content with that from the
         resources/test-configs/@{newconf}
         -->
         <echo message="Overwriting config descriptors" />
         <copy todir="@{jboss.dist}/server/@{newconf}" overwrite="true" failonerror="false">
            <fileset dir="${build.resources}/test-configs/@{newconf-src}" />
         </copy>
      </sequential>
   </macrodef>

   <!-- A macro for setting up a node ready for http clustering with REPL_SYNC, JK and BR -->
   <macrodef name="http-cluster-node-config-change">
      <attribute name="conf"/>
      <attribute name="jboss.dist" default="${jboss.dist}"
         description="The jboss dist root directory" />
   	  <attribute name="useBuddyRepl" default="false"/>
      <sequential>
         <echo message="Configuring the Tomcat instance under @{jboss.dist}/server/@{conf} for REPL_SYNC and UseJK"/>
         <!-- Switch from sync to async mode in jboss-web-cluster-service.xml -->
         <replace file="@{jboss.dist}/server/@{conf}/deploy/jboss-web-cluster.sar/META-INF/jboss-service.xml"
           token="&quot;CacheMode&quot;&gt;REPL_ASYNC" value="&quot;CacheMode&quot;&gt;REPL_SYNC"/>
      	 <!-- Toggle buddy replication in jboss-web-cluster-service.xml -->
      	 <replace file="@{jboss.dist}/server/@{conf}/deploy/jboss-web-cluster.sar/META-INF/jboss-service.xml"
      	   token="buddyReplicationEnabled&gt;false" value="buddyReplicationEnabled&gt;@{useBuddyRepl}"/>
      	 <!-- Added jvmRoute in server.xml -->
         <replace file="@{jboss.dist}/server/@{conf}/deploy/jboss-web.deployer/server.xml"
           token="jvmRoute=&quot;@{conf}&quot;" value=""/>
          <replace file="@{jboss.dist}/server/@{conf}/deploy/jboss-web.deployer/server.xml"
            token="defaultHost" value="jvmRoute=&quot;@{conf}&quot; defaultHost"/>
         <!-- Turn on UseJK in jboss-service.xml -->
          <replace file="@{jboss.dist}/server/@{conf}/deploy/jboss-web.deployer/META-INF/jboss-service.xml"
            token="&quot;UseJK&quot;&gt;false&lt;" value="&quot;UseJK&quot;&gt;true&lt;"/>
      </sequential>
   </macrodef>

   <!-- A macro for setting up a node ready for http clustering with FIELD granularity -->
   <macrodef name="http-cluster-field-node-config-change">
      <attribute name="conf"/>
      <attribute name="jboss.dist" default="${jboss.dist}"
         description="The jboss dist root directory" />
      <sequential>
         <echo message="Configuring the Tomcat instance under ${jboss.dist}/server/@{conf} for FIELD granularity"/>
         <!-- Switch on marshalling in jboss-web-cluster-service.xml -->
         <replace file="@{jboss.dist}/server/@{conf}/deploy/jboss-web-cluster.sar/META-INF/jboss-service.xml"
           token="&quot;UseMarshalling&quot;&gt;false" value="&quot;UseMarshalling&quot;&gt;true"/>
         <replace file="@{jboss.dist}/server/@{conf}/deploy/jboss-web-cluster.sar/META-INF/jboss-service.xml"
           token="&quot;UseRegionBasedMarshalling&quot;&gt;false" value="&quot;UseRegionBasedMarshalling&quot;&gt;true"/>
         <!-- Inactivate on startup in jboss-web-cluster-service.xml -->
         <replace file="@{jboss.dist}/server/@{conf}/deploy/jboss-web-cluster.sar/META-INF/jboss-service.xml"
           token="&quot;InactiveOnStartup&quot;&gt;false" value="&quot;InactiveOnStartup&quot;&gt;true"/>
      </sequential>
   </macrodef>

   <!-- A macro to execute a junit task. macro attributes:

   junit.patternset : require patternset id that identifies the junit test
      classes to run
   junit.configuration : option name used to unique a unit test that is
      run more than once. The junit.configuration value is appended to the
      test name as (@{junit.configuration}) while the output file extension is
      -@{junit.configuration}.xml.
   junit.syspropertyset : optional propertyset id that will be passed as
      system properties to the junit jvm.
   -->
   <macrodef name="run-junit"
      description="Run a batch of junit on the given patternset">
      <attribute name="junit.patternset"
         description="The patternset used to select the tests to run" />
      <attribute name="junit.configuration" default=""
         description="An optional configuration name added to the test and extention" />
      <attribute name="junit.syspropertyset" default="jbosstest-props"
         description="An optional propertyset id that will be passed as system properties" />

      <sequential>
         <!-- Set the report extension based on the -->
         <condition property="report.ext" value=".xml" >
            <equals arg1="" arg2="@{junit.configuration}" />
         </condition>
         <condition property="report.ext" value="-@{junit.configuration}.xml" >
            <not>
               <equals arg1="" arg2="@{junit.configuration}" />
            </not>
         </condition>
         <mkdir dir="${build.reports}"/>
         <mkdir dir="${build.testlog}"/>
         <echo message="Starting patternset=@{junit.patternset} config=@{junit.configuration}" />
         <junit dir="${module.output}"
            printsummary="${junit.printsummary}"
            haltonerror="${junit.haltonerror}"
            haltonfailure="${junit.haltonfailure}"
            fork="${junit.fork}"
            timeout="${junit.timeout}"
            jvm="${junit.jvm}">

			 <!--
		      <jvmarg value="-verbose:gc"/>
              <jvmarg value="-Xdebug"/>
              <jvmarg value="-Xnoagent"/>
              <jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8686"/>
              <jvmarg value="${junit.jvm.options}"/>
            -->

            <jvmarg value="${junit.jvm.options}"/>
            <sysproperty key="jbosstest.deploy.dir" file="${build.lib}"/>
            <sysproperty key="build.testlog" value="${build.testlog}"/>
            <sysproperty key="log4j.configuration" value="file:${build.resources}/log4j.xml"/>
            <sysproperty key="jboss-junit-configuration" value="@{junit.configuration}"/>
            <sysproperty key="java.naming.provider.url" value="${node0.jndi.url}"/>
            <sysproperty key="jbosstest.server.host" value="${node0}"/>
            <syspropertyset>
               <propertyref prefix="jbosstest"/>
            </syspropertyset>

            <syspropertyset>
               <propertyset refid="@{junit.syspropertyset}" />
            </syspropertyset>

            <classpath>
               <pathelement location="${build.classes}"/>
               <pathelement location="${build.resources}"/>
               <!-- This may need to be externalized -->
               <pathelement location="${build.resources}/security"/>
               <path refid="tests.compile.classpath"/>
            </classpath>

            <formatter classname="org.jboss.ant.taskdefs.XMLJUnitMultipleResultFormatter"
               usefile="${junit.formatter.usefile}"
               extension="${report.ext}"/>

            <batchtest todir="${build.reports}"
               haltonerror="${junit.batchtest.haltonerror}"
               haltonfailure="${junit.batchtest.haltonfailure}"
               fork="${junit.batchtest.fork}">

               <fileset dir="${build.classes}">
                  <patternset refid="@{junit.patternset}"/>
               </fileset>
            </batchtest>
         </junit>
      </sequential>
   </macrodef>

   <target name="modify-farming">
       <echo message="reducing the farm deployment scan time in ${file_}"/>
       <replaceregexp file="${file_}" byline="false" flags="is"
           match="5000"
           replace="1000"/>
   </target>


   <!--
   Modifies cluster-service.xml by enbling a certain JGroups stack configuration, depending on the
   value of ${jgroups-stack}.
   -->
   <target name="modify-cluster-stack" if="jgroups-stack">
      <echo message="enabling the ${jgroups-stack} JGroups stack in ${file_}"/>
      <replaceregexp file="${file_}" byline="false" flags="is"
         match="(&lt;config&gt;\s*&lt;UDP.*&lt;/config&gt;)\s*&lt;!--"
         replace="&lt;!-- \1 --&gt;     &lt;!--"/>
      <replaceregexp file="${file_}" byline="false" flags="is"
         match="&lt;!--\s*(&lt;config&gt;\s*&lt;${jgroups-stack}.*&lt;/config&gt;\s*)--&gt;"
         replace="\1"/>
      <replaceregexp file="${file_}" byline="false" flags="s"
         match="(&lt;${jgroups-stack} bind_addr=&quot;).*(&quot; start_port)"
         replace="\1${host_}\2"/>
      <replaceregexp file="${file_}" byline="false" flags="s"
         match="(&lt;TCPPING initial_hosts=&quot;).*\[(.+)\](&quot; port_range)"
         replace="\1${node0}\[\2],${node1}\[\2]\3"/>
   </target>

   <target name="create-cluster-config">
      <create-cluster-node conf="node1"/>
      <create-cluster-node conf="node2"/>
   </target>

   <target name="help">
      <echo message="The project fragment which defines the jboss server configs"/>
   </target>
</project>
