<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE project [
<!--

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

-->

<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
]>

<project name="libclasspath2" default="all" basedir=".">

<!--
    This set of tests make sure that the handling of <library-directory> is
    done properly, that the server-side and client-side class paths are set
    correctly, and that the generated client JAR contains what it should.
    
    
    **** THE APP CLIENT ****
    
    The app client that drives the tests invokes an EJB method to make sure the
    server-side class path is correct, then checks for the very same resources
    itself on the client side to make sure that its class path and the generated
    app client JAR file are both correct.
    
    The appclient's output servers are property definitions that are written to
    the client run's log file.  The log file is then used by the ant task to 
    define run-specific properties for checking the results and displaying any
    test failures.
    
    
    **** THE EARS ****
    
    The tests use a single EAR structure.  The <library-directory> setting
    in application.xml changes to affect the outcome of the tests.
    
    Here is the EAR structure:
    
    topLevel.jar - always included due to backward compatibility with the legacy feature
    that includes all top-level JARs in the class path
    
        topLevel.properties
    
    lib/lib.jar - accessible when <library-directory> element is omitted
    because the default is lib (there are no tests in this project that explicitly 
    specify <library-directory>lib</library-directory>)
    
        lib.properties 

    lib/sub/lib_sub.jar - should not be accessible because JARs in subdirectories of the
    library directory should not be accessible
    
        lib_sub.properties
    
    x/x.jar - accessible when lib dir is "x"  - The manifest of x.jar specifies Class-Path: xExtra/xExtra.jar xMore/sub
        
        x.properties - accessible (since x.jar contains it and is in the lib directory)
        
    x/xExtra/xExtra.jar - accessible when lib dir is "x" since the manifest of x.jar includes xExtra/xExtra.jar
    
        x_xExtra.properties 
        
    xExtra/xExtra.jar - never accessible.  Here to make sure that the Class-Path handling
    of xExtra/xExtra.jar in /x/x.jar's manifest correctly resolves relative to the x directory 
    where x.jar resides and not relative to the top-level of the EAR
    
        xExtra.properties
    
    x/xMore - never accessible because even when the lib-dir is x (and
    x.jar's manifest Class-Path specifies xMore/sub), only xMore/sub should be added to the
    class path, not its parent directory.
    
        x_xMore.properties 
        
    x/xMore/sub - accessible when lib-dir is x
    
        x_xMore_sub.properties 
    
    xExtra/xExtra.jar - neve accessible because the manifest Class-Path entries in x/x.jar should be relative to 
    the URI of the JAR itself, and so should resolve to x/xExtra/xExtra.jar, not xExtra/xExtra.jar
    
        xExtra_xExtra.properties 
    
    xMore/sub/ - never accessible (again because x/x.jar's Class-Path entry for xMore/sub 
    should be resolved relative to x/x.jar's location which is /x and should therefore resovle to x/xMore/sub
    within the JAR rather than xMore/sub
    
        xMore_sub.properties 

    y/y.jar - always accessible to the client (appears in the Class-Path of the app client JAR's manifest)
    
        y.properties
        
    
    There are three different versions of the EAR created, each of which uses a
    different <library-directory> setting:
    
        default.ear - omits <library-directory>, so the default of lib should be used
        none.ear - specifies <library-directory/> (empty); no library directory should be used
        x.ear - specifies <library-directory> as x
    
    Each EAR should give somewhat different results in trying to locate various 
    properties files and properties within them.
    
    
    **** SPECIFYING TESTS ****
    
    The app client driver accepts command-line arguments that specify a path for a resource,
    a property name expected to be found in the resource, and the value expected for that
    property in that resource.  The format of each test expression is
    
       {resource-path}:{property-name}={expected-value}
       
    The client- and server-side tests use the same common logic in ResourceHelper 
    to parse the test expressions, to search for a
    resource, to load a Properties object using the resource, and to get the value 
    of a requested property and comparing it to the expected value.
-->
    &commonBuild;

        <property name="testName" value="libClassPath2"/>
        <property name="archivedir" value="${build}/archives"/>
        
        <property name="x.ear" value="${archivedir}/${testName}x-App.ear"/>
        <property name="default.ear" value="${archivedir}/${testName}default-App.ear"/>
        <property name="none.ear" value="${archivedir}/${testName}none-App.ear"/>

        <property name="ejb.jar.name" value="libdirtest-EJBModule.jar"/>
        <property name="ejb.jar" value="${build}/${ejb.jar.name}"/>
        <property name="client.jar.name" value="libdirtest-client.jar"/>
        <property name="client.jar" value="${build}/client/${client.jar.name}"/>

        <!--
            The next properties point to the various JARs and directories in the
            build area for constructing the EAR.
        -->
        <property name="x.jar" value="${build}/x/x.jar"/>
        <property name="lib.jar" value="${build}/lib/lib.jar"/>
        <property name="lib_sub.jar" value="${build}/lib/sub/lib_sub.jar"/>
        <property name="xExtra.jar" value="${build}/xExtra/xExtra.jar"/>
        <property name="x_xExtra.jar" value="${build}/x/xExtra/xExtra.jar"/>
        <property name="x.xMore.dir" value="${build}/x/xMore"/>
        <property name="x.xMore.sub.dir" value="${x.xMore.dir}/sub"/>
        <property name="xMore.dir" value="${build}/xMore"/>
        <property name="xMore.sub.dir" value="${xMore.dir}/sub"/>
        <property name="topLevel.jar" value="${build}/topLevel.jar"/>
        <property name="z.jar" value="${build}/client/z/z.jar"/>
        <property name="y.dir" value="${build}/client/y"/>

        <!--
            The next groups of properties define the possible positive and negative results
            in trying to find a given resource.  Some tests will work in some
            EARs but not others; some should work in all EARs; some should work
            in no EARs.
        -->
        
        <!--
            The test for the top-level JAR should always be positive, unless
            and until we retire that legacy feature.
        -->
        <property name="test.tl" value="/topLevel.properties:lib.path="/>
        <property name="test.tl.pos" value="${test.tl}topLevel"/>

        <!--
            x.properties is accessible only using x.ear (lib-dir specified as x)
        -->
        <property name="test.x" value="/x.properties:lib.path="/>
        <property name="test.x.pos" value="${test.x}x"/>
        <property name="test.x.neg" value="${test.x}NO_RESOURCE"/>
        
        <!--
            xExtra.properties is never accessible
        -->
        <property name="test.xExtra" value="/xExtra.properties:xExtra="/>
        <property name="test.xExtra.neg" value="${test.xExtra}NO_RESOURCE"/>

        <!--
            x_xExtra.properties is accessible only using x.ear
        -->
        <property name="test.x.xExtra" value="/x_xExtra.properties:x_xExtra="/>
        <property name="test.x.xExtra.pos" value="${test.x.xExtra}x_xExtra"/>
        <property name="test.x.xExtra.neg" value="${test.x.xExtra}NO_RESOURCE"/>
        
        <!--
            lib.properties is accessible only using default.ear
        -->
        <property name="test.lib" value="/lib.properties:lib.path="/>
        <property name="test.lib.pos" value="${test.lib}lib"/>
        <property name="test.lib.neg" value="${test.lib}NO_RESOURCE"/>

        <!--
            lib_sub.properties is never accessible
        -->
        <property name="test.lib.sub" value="/lib_sub.properties:lib_sub="/>
        <property name="test.lib.sub.neg" value="${test.lib.sub}NO_RESOURCE"/>

        <!--
            x_xMore.properties is never accessible
        -->
        <property name="test.x.xMore" value="/x_xMore.properties:x_xMore="/>
        <property name="test.x.xMore.pos" value="${test.x.xMore}x_xMore"/>
        <property name="test.x.xMore.neg" value="${test.x.xMore}NO_RESOURCE"/>

        <!--
            xMore_sub.properties is never accessible (because the xMore/sub 
            Class-Path entry in x.jar's manifest must be resolved within the /x 
            directory where x.jar is found, not from the top-level of the EAR
        -->
        <property name="test.xMore.sub" value="/xMore_sub.properties:xMore_sub="/>
        <property name="test.xMore.sub.neg" value="${test.xMore.sub}NO_RESOURCE"/>

        <!--
            x_xMore_sub.properties is accessible only using x.ear
        -->
        <property name="test.x.xMore.sub" value="/x_xMore_sub.properties:x_xMore_sub="/>
        <property name="test.x.xMore.sub.pos" value="${test.x.xMore.sub}x_xMore_sub"/>
        <property name="test.x.xMore.sub.neg" value="${test.x.xMore.sub}NO_RESOURCE"/>

        <!--
            z.properties is always accessible to the client (it appears in the Class-Path 
            in the app client JAR's manifest) but never to the server
        -->
        <property name="test.z" value="/z.properties:value="/>
        <property name="test.z.pos" value="${test.z}z"/>
        <property name="test.z.neg" value="${test.z}NO_RESOURCE"/>
        
        <!--
            y.properties should always be accessible because the
            app client JAR manifest used for the app client JAR shared by all
            EARs specifies y/y.properties in its Class-Path.
        -->
        <property name="test.y" value="/y.properties:value="/>
        <property name="test.y.pos" value="${test.y}y"/>
        <property name="test.y.neg" value="${test.y}NO_RESOURCE"/>
        
        <!--
            The following properties define the expected results for each test run.
        -->
        
        <!-- library-directory specified as empty, meaning no lib dir should be used -->
        <property name="noLib.expected.results" 
            value="${test.tl.pos} ${test.x.neg} ${test.xExtra.neg} ${test.lib.neg} ${test.lib.sub.neg} ${test.x.xExtra.neg} ${test.xMore.sub.neg} ${test.x.xMore.neg} ${test.x.xMore.sub.neg} -clientonly ${test.z.pos} -serveronly ${test.z.neg} ${test.y.neg}"/>
        
        <!-- library-directory not specified; default of lib used -->
        <property name="defaultLib.expected.results" 
            value="${test.tl.pos} ${test.x.neg} ${test.xExtra.neg} ${test.lib.pos} ${test.lib.sub.neg} ${test.x.xExtra.neg} ${test.xMore.sub.neg} ${test.x.xMore.neg} ${test.x.xMore.sub.neg} -clientonly ${test.z.pos} -serveronly ${test.z.neg} ${test.y.neg}"/>

        <!-- library-directory specified as x; x.jar and its Class-Path entries xExtra/xExtra.jar and xMore/sub used -->
        <property name="explicitLibWithDir.expected.results" 
            value="${test.tl.pos} ${test.x.pos} ${test.xExtra.neg} ${test.lib.neg} ${test.lib.sub.neg} ${test.x.xExtra.pos} ${test.xMore.sub.neg} ${test.x.xMore.neg} -clientonly ${test.z.pos} -serveronly ${test.z.neg} ${test.y.neg}"/>


    <target name="prepare" depends="init">
        <mkdir dir="${build}"/>
        <mkdir dir="${build}/ejb"/>
        <mkdir dir="${build}/client"/>
        <mkdir dir="${build}/client/y"/>
        <mkdir dir="${build}/client/z"/>
        
        <mkdir dir="${archivedir}"/>
        
        <!-- The following directories will hold different files so they will
             appear in the EAR in the right places.
         -->
        <mkdir dir="${build}/x"/>           <!-- holds x.jar -->
        <mkdir dir="${build}/x/xExtra"/>    <!-- holds xExtra.jar -->
        <mkdir dir="${build}/x/xMore"/>     <!-- holds x_xMore.properties (should not be accessible) -->
        <mkdir dir="${build}/x/xMore/sub"/> <!-- holds x_xMore_sub.properties -->
        
        <mkdir dir="${build}/xMore/"/>
        <mkdir dir="${build}/xMore/sub"/>   <!-- holds xMore_sub.properties (should not be accessible) -->
        
        <mkdir dir="${build}/lib"/>         <!-- holds lib.jar -->
        <mkdir dir="${build}/lib/sub"/>     <!-- holds lib_sub.jar (should not be accessible) -->
        
        <mkdir dir="${build}/xExtra"/>      <!-- holds xExtra.jar (should not be accessible) --> 
        
    </target>

    <target name="compile" depends="prepare">
        <javac srcdir="." destdir="${build}" debug="on" failonerror="true">
          <classpath refid="gfv3.classpath"/>
        </javac>
    </target>

    <target name="assemble" depends="makeEars"/>

    <target name="makeJars" depends="compile">
    
        <!--
            Build the various jars used in the different tests.
        -->
        
        <!--
            The x/x.jar will have the Class-Path setting in its manifest, so
            specify the manifest rather than letting ant create it.
        -->
        <jar destfile="${x.jar}" manifest="x/MANIFEST.MF">
            <fileset dir="x" includes="*.properties"/>
        </jar>
   
        <jar destfile="${x_xExtra.jar}">
            <fileset dir="x/xExtra" includes="*.properties"/>
        </jar>
        
        <jar destfile="${xExtra.jar}">
            <fileset dir="xExtra" includes="*.properties"/>
        </jar>
        
        <jar destfile="${lib.jar}">
            <fileset dir="lib" includes="*.properties"/>
        </jar>

        <jar destfile="${lib_sub.jar}">
            <fileset dir="lib/sub" includes="*.properties"/>
        </jar>

        <jar destfile="${topLevel.jar}">
            <fileset dir="topLevel" includes="**/*.properties"/>
        </jar>
        
        <jar destfile="${z.jar}">
            <fileset dir="client/z" includes="*.properties"/>
        </jar>

        <!--
            Copy the properties files that should occupy directories (as opposed
            to JARs) to the build area so they will be included in the EARs.
        -->
        <copy file="x/xMore/x_xMore.properties" todir="${x.xMore.dir}"/>
        <copy file="x/xMore/sub/x_xMore_sub.properties" todir="${x.xMore.sub.dir}"/>
        <copy file="xMore/sub/xMore_sub.properties" todir="${xMore.sub.dir}"/>
        
        <copy file="client/y/y.properties" todir="${y.dir}"/>
        
        <!--
            Build the EJB and client jars.  The ResourceHelper class is used from
            the EJB and also from the client, so include it in both submodules.
        -->
        <fileset id="resourceHelperClass" dir="${build}" includes="**/ResourceHelper*.class"/> <!-- the shared utility class -->

        <jar destfile="${ejb.jar}">
            <fileset dir="${build}" includes="**/ejb/**/*.class"/>
            <fileset refid="resourceHelperClass"/>
        </jar>
        
        <jar destfile="${client.jar}" manifest="client/MANIFEST.MF">
            <fileset dir="${build}" includes="**/client/**/*.class"/>
            <fileset dir="${build}" includes="**/ejb/LookupSBRemote.class"/>
            <fileset refid="resourceHelperClass"/>
        </jar>
    </target>
    
    <target name="makeEars" depends="makeJars">

        <!--
            All the EARs are populated with exactly the same content EXCEPT for
            the application.xml, which differs for each.  The earIncludes property 
            defined next spells out all the JARs and directories included in all
            the EARs.
        -->
        <property name="earIncludes" value="libdirtest-EJBModule.jar,client/libdirtest-client.jar,client/z/z.jar,client/y/y.properties,topLevel.jar,lib/lib.jar,lib/sub/lib_sub.jar,x/x.jar,xExtra/xExtra.jar,x/xExtra/xExtra.jar,x/xMore/**,xMore/**"/>
        
        <ear destfile="${none.ear}" basedir="${build}"
             appxml="application-noLibDir.xml" includes="${earIncludes}"/>

        <ear destfile="${default.ear}" basedir="${build}"
             appxml="application-defaultLibDir.xml" includes="${earIncludes}"/>

        <ear destfile="${x.ear}" basedir="${build}"
             appxml="application-xLibDir.xml" includes="${earIncludes}"/>
    </target>

    <target name="deploy.asadmin" depends="prepare">
        <antcall target="common.deploy.asadmin">
            <param name="arg.list" value="--property compatibility=v2 --retrieve ${archivedir} --name ${module.name} ${ear.file}"/>
            <param name="testName" value="${testName}"/>
        </antcall>
    </target>

    <target name="undeploy.asadmin" depends="prepare">
        <antcall target="common.undeploy.asadmin">
            <param name="arg.list" value="${module.name}"/>
            <param name="testName" value="${testName}"/>
        </antcall>
    </target>

    <target name="runclient" depends="init">
       <echo message="appclient -client ${archivedir}/${clientName} ${tests}"/>
       <exec command="appclient" resultproperty="result" output="${build}/${log.id}.output.log">
           <arg value="-client"/>
           <arg value="${archivedir}/${clientName}"/>
           <arg value="${tests}"/>
       </exec>

        <antcall target="processResult">
            <param name="result" value="${result}"/>
            <param name="log" value="${build}/${log.id}.output.log"/>
        </antcall>
    </target>

   <target name="run" depends="run.positive"/>

    <target name="run.positive" depends="setHttpPort">
        <antcall target="common.run.positive">
            <param name="link" value="${contextRoot}/${testName}"/>
            <param name="log.id" value="${log.id}"/>
        </antcall>
    </target>

    <target name="private-all" depends="prepare" if="PE">
        <antcall target="assemble"/>

        <deploy moduleName="libtest-none" earFile="${none.ear}"/>
        <run-test tests="${noLib.expected.results}" moduleName="libtest-none" logID="0" testLogTitle="noLibUsed"/>
        <undeploy moduleName="libtest-none"/>

        <deploy moduleName="libtest-default" earFile="${default.ear}"/>
        <run-test tests="${defaultLib.expected.results}" moduleName="libtest-default" logID="1" testLogTitle="defaultLibUsed"/>
        <undeploy moduleName="libtest-default"/>

        <deploy moduleName="libtest-explicitWithDir" earFile="${x.ear}"/>
        <run-test tests="${explicitLibWithDir.expected.results}" moduleName="libtest-explicitWithDir" logID="2" testLogTitle="explicitLibWithDir"/>
        <undeploy moduleName="libtest-explicitWithDir"/>

    </target>

    
    <macrodef name="deploy">
        <attribute name="moduleName"/>
        <attribute name="earFile" default="${archivedir}/@{moduleName}.ear"/>
        <sequential>
            <antcall target="deploy.asadmin">
                <param name="module.name" value="@{moduleName}"/>
                <param name="ear.file" value="@{earFile}"/>
            </antcall>
        </sequential>
    </macrodef>

    <macrodef name="undeploy">
        <attribute name="moduleName"/>
        <sequential>
            <antcall target="undeploy.asadmin">
                <param name="module.name" value="@{moduleName}"/>
            </antcall>
        </sequential>
    </macrodef>
    
    <macrodef name="run-test">
        <attribute name="tests"/>
        <attribute name="logID"/>
        <attribute name="moduleName"/>
        <attribute name="clientFile" default="${archivedir}/@{moduleName}Client.jar"/>
        <attribute name="testLogTitle" default="@{expectedResult}"/>
        
        <sequential>
            <antcall target="declare-test">
                <param name="description" value="ear/libclasspath2 Testing for @{testLogTitle}"/>
            </antcall>
            
            <echo message="${APPCLIENT} -client @{clientFile} @{tests}"/>
            <exec executable="${APPCLIENT}" resultproperty="result" output="${build}/@{logID}.output.log" failonerror="false">
                <arg value="-client"/>
                <arg value="@{clientFile}"/>
                <arg line="@{tests}"/>
            </exec>
            <checkResult logID="@{logID}"/>
            
       </sequential>
    </macrodef>  
<!--    
    <macrodef name="run-test-only">
        <attribute name="expectedResult"/>
        <attribute name="logID"/>
        <attribute name="appEarPrefix" default="${archivedir}/${testName}@{expectedResult}-App"/>
        <attribute name="moduleName" default="libtest-@{expectedResult}"/>
        <attribute name="clientFile" default="${archivedir}/@{moduleName}Client.jar"/>
        <sequential>
            <echo message="${APPCLIENT} -client @{clientFile} @{expectedResult}"/>
            <exec executable="${APPCLIENT}" resultproperty="result" output="${build}/@{logID}.output.log" failonerror="false">
                <arg value="-client"/>
                <arg value="@{clientFile}"/>
                <arg value="@{expectedResult}"/>
            </exec> 
        </sequential>   
    </macrodef>  
    
    <target name="run-only" depends="init">
        <run-test-only expectedResult="${expectedResult}" logID="${logID}"/>
    </target>
    -->
    <!--
        Convenience target for deploying and running a single test.  Hand-edit the 
        expectedResult property (and the logID if you feel like it) so it is
        one of the test apps build by the assemble task.
    -->
    <!--
    <target name="deploy-run" depends="init">
        <property name="expectedResult" value="topLevel5"/>
        <property name="logID" value="0"/>
-->


    <macrodef name="checkResult">
        <attribute name="logID"/>
        <attribute name="logFile" default="${build}/@{logID}.output.log"/>
        <sequential>
            <property file="@{logFile}" prefix="x@{logID}"/>
            
            <concat>
                <fileset file="@{logFile}"/>
            </concat>
            <antcall target="processResult">
                <param name="result" value="${x@{logID}.result}"/>
            </antcall>
        </sequential>
    </macrodef>
</project>
