----------------------------------------
Steps for running JMS Development Tests
----------------------------------------

1. Set the following variables:

APS_HOME to the location of where v2/appserv-tests are checked out
S1AS_HOME to <GlassFish install location>/glassfish7/glassfish

2. Make sure ant is in your path.  

Also, in some cases the ant test clients run out of memory during the test run.  
If you see this problem, add -Xmx999m to the command that starts the ant java vm, e.g :

    % cat `which ant`


    (... towards bottom of ant script)

    "$JAVACMD" -Xmx999m -classpath "$LOCALCLASSPATH" -Dant.home="${ANT_HOME}" $ANT_OPTS org.apache.tools.ant.Main $ANT_ARGS "$@"

3. Install GlassFish by unzipping glassfish.zip for running the tests against Java EE Full Profile, or web.zip for running the tests against the Web Profile.

4. Run the tests.  

  4.1 The "all" target starts the server, runs the tests, and then stops the server.  

     % ant all

5. The results should look something like this : 

   [exec] input file=/Volumes/Fantom1/work/v2/appserv-tests/test_resultsValid.xml
     [exec] 
     [exec] ************************
     [exec] PASSED=        <total>
     [exec] ------------  =========
     [exec] FAILED=          0
     [exec] ------------  =========
     [exec] DID NOT RUN=   0
     [exec] ------------  =========
     [exec] Total Expected=<total>
     [exec] ************************
     [exec] 

( <total> is equal to the TOTAL value in the result_count.sh file.  We keep this total count up to date based on the total number of test framework PASS assertions in the set of tests run by the ant all target )
