<!--

    Copyright (c) 2010, 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

-->

<!--
    To use this file, the Maven Ant tasks and Ant Contrib must be added to the local Ant installation
-->

<project name="GlassFish Admin Console Dev Test Hudson Helper" default="test" basedir="."
         xmlns:artifact="antlib:org.apache.maven.artifact.ant">

    <tstamp/>
    <property file="test.properties"/>
    <property environment="env"/>

    <property name="install.dir" value="binaries/${TSTAMP}"/>
    <property name="server.dir" value="${install.dir}/glassfish6"/>
    <property name="maven.dir" value="${install.dir}/${maven.version}"/>
    <property name="glassfish.download.dir" value="."/>
    <property name="glassfish.download" value="${glassfish.download.dir}/glassfish.zip"/>

    <property name="http.proxyHost" value=""/>
    <property name="http.proxyPort" value=""/>

    <property name="BROWSER" value="firefox"/>
    <property name="GUI_ADMIN_PORT" value="4848"/>
    <property name="DOMAIN" value="domain1"/>
    <property name="RELEASEAFTER" value="true"/>
    <property name="SLOWDOWN" value="true"/>

    <property name="env.ADMIN_PORT" value="14848"/>
    <property name="env.INSTANCE_PORT" value="18080"/>
    <property name="env.JMS_PORT" value="17676"/>
    <property name="env.JMX_PORT" value="18686"/>
    <property name="env.ORB_PORT" value="13700"/>
    <property name="env.SSL_PORT" value="18181"/>
    <property name="env.ORB_SSL_PORT" value="13820"/>
    <property name="env.ORB_SSL_MUTUALAUTH_PORT" value="13920"/>
    <property name="env.OSGI_SHELL" value="16666"/>
    <property name="env.DEBUGGER_PORT" value="19009"/>

    <property name="env.MAVEN_HOME" value="${user.home}/.m2"/>

    <property name="ant.contrib.url"
              value="http://mirrors.ibiblio.org/pub/mirrors/maven2/ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3.jar"/>
    <property name="maven.ant.tasks.url"
              value="https://repo1.maven.org/maven2/org/apache/maven/maven-ant-tasks/2.1.1/maven-ant-tasks-2.1.1.jar"/>
    <property name="glassfish.dist.url"
              value="http://hudson.glassfish.org/job/gf-trunk-build-continuous/lastSuccessfulBuild/artifact/bundles/glassfish.zip"/>

    <target name="download">
        <get src="${glassfish.dist.url}" dest="${glassfish.download}" usetimestamp="true"/>

        <delete dir="binaries" failonerror="false" />
        <mkdir dir="${install.dir}"/>
        <unzip src="${glassfish.download}" dest="${install.dir}"/>
        <if>
            <not>
                <os family="windows"/>
            </not>
            <then>
                <chmod perm="a+x" file="${executable}"/>
                <chmod perm="a+x" file="${server.dir}/glassfish/bin/asadmin"/>
            </then>
        </if>
        <antcall target="shutdown-server"/>
    </target>

    <target name="setup">
        <get src="${ant.contrib.url}" dest="ant-contrib.jar" skipexisting="true"/>
        <get src="${maven.ant.tasks.url}" dest="maven-ant-tasks.jar" skipexisting="true"/>
        <taskdef resource="net/sf/antcontrib/antlib.xml" classpath="ant-contrib.jar"/>
        <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="antlib:org.apache.maven.artifact.ant"
                 classpath="maven-ant-tasks.jar"/>

        <if>
            <os family="windows"/>
            <then>
                <property name="executable" value="${server.dir}/bin/asadmin.bat"/>
            </then>
            <else>
                <property name="executable" value="${server.dir}/bin/asadmin"/>
            </else>
        </if>
    </target>

    <target name="recreate-domain" depends="shutdown-server">
        <echo>
            Port assigments:
            Admin port: ${env.ADMIN_PORT}
            Instance port: ${env.INSTANCE_PORT}
            JMS Port: ${env.JMS_PORT}
            JMX Port: ${env.JMX_PORT}
            ORB Port: ${env.ORB_PORT}
            SSL Port: ${env.SSL_PORT}
            ORB SSL Port: ${env.ORB_SSL_PORT}
            ORB SSL Mutual Auth Port: ${env.ORB_SSL_MUTUALAUTH_PORT}
            OSGi Shell: ${env.OSGI_SHELL}
            JAVA Debugger Port: ${env.DEBUGGER_PORT}
        </echo>

        <exec executable="${executable}">
            <arg value="--port"/>
            <arg value="${env.ADMIN_PORT}"/>
            <arg value="delete-domain"/>
            <arg value="${DOMAIN}"/>
        </exec>

        <delete dir="${server.dir}/glassfish/domains/domain1" failonerror="false" deleteonexit="true"/>

        <exec executable="${executable}">
            <arg value="--port"/>
            <arg value="${env.ADMIN_PORT}"/>
            <arg value="create-domain"/>
            <arg value="--adminport"/>
            <arg value="${env.ADMIN_PORT}"/>
            <arg value="--nopassword=true"/>
            <arg value="--domainproperties"/>
            <arg value="jms.port=${env.JMS_PORT}:domain.jmxPort=${env.JMX_PORT}:orb.listener.port=${env.ORB_PORT}:http.ssl.port=${env.SSL_PORT}:orb.ssl.port=${env.ORB_SSL_PORT}:orb.mutualauth.port=${env.ORB_SSL_MUTUALAUTH_PORT}:osgi.shell.telnet.port=${env.OSGI_SHELL}:java.debugger.port=${env.DEBUGGER_PORT}"/>
            <arg value="--instanceport"/>
            <arg value="${env.INSTANCE_PORT}"/>
            <arg value="${DOMAIN}"/>
        </exec>
    </target>

    <target name="start-server" depends="recreate-domain">
        <echo message="***** Starting GlassFish"/>
        <exec executable="${executable}">
            <arg value="start-domain"/>
            <arg value="${DOMAIN}"/>
        </exec>
    </target>

    <target name="test" depends="setup,download">
        <trycatch>
            <try>
                <antcall target="start-server"/>
                <artifact:mvn pom="pom.xml" fork="true" mavenHome="${env.MAVEN_HOME}" failonerror="false" resultproperty="test.result">
                    <arg value="-Dhttp.proxyHost=${http.proxyHost}"/>
                    <arg value="-Dhttp.proxyPort=${http.proxyPort}"/>
                    <arg value="-Dadmin.port=${env.ADMIN_PORT}"/>
                    <arg value="-Dinstance.port=${env.INSTANCE_PORT}"/>
                    <arg value="-Dbrowser=${BROWSER}"/>
                    <arg value="-DreleaseAfter=${RELEASEAFTER}"/>
                    <arg value="-DslowDown=${SLOWDOWN}"/>
                    <arg value="-Dtest=${testClasses}"/>
                    <arg value="test"/>
                </artifact:mvn>
            </try>
            <finally>
                <antcall target="shutdown-server"/>
                <delete dir="${install.dir}" failonerror="false" deleteonexit="true"/>
            </finally>
        </trycatch>
        <fail message="The test run failed.  Please see the console output for details.">
            <condition>
                <not>
                    <equals arg1="${test.result}" arg2="0"/>
                </not>
            </condition>
        </fail>
    </target>

    <target name="shutdown-server">
        <echo message="***** Stopping GlassFish"/>
        <exec executable="${executable}">
            <arg value="stop-domain"/>
            <arg value="${DOMAIN}"/>
        </exec>
    </target>
</project>
