# TomEE-TCK

## GETTING SETUP

This document and the OpenEJB TCK setup can be cloned from Git:

      git clone https://github.com/apache/tomee-tck.git

### TCK Setup

In order to run the TCK, you will need both the TCK binary itself, and the Eclipse Glassfish RI.

To do so, you have two options to acquire the related TCK binary.

#### Use a pre-built binary (recommended)

    wget https://download.eclipse.org/jakartaee/platform/8/jakarta-jakartaeetck-8.0.2.zip
    unzip jakarta-jakartaeetck-8.0.2.zip
    # Please note: Direct download is not working here. You need to select a mirror!
    wget https://www.eclipse.org/downloads/download.php?file=/glassfish/glassfish-5.1.0.zip
    unzip glassfish-5.1.0.zip

#### Built the TCK by yourself

At present, we are building the TCK binary from source, following these steps:

    git clone https://github.com/eclipse-ee4j/jakartaee-tck
    cd jakaratee-tck
    git checkout 8.0.2
    export WORKSPACE=$(pwd)
    # Please note: Direct download is not working here. You need to select a mirror!
    export GF_BUNDLE_URL=https://www.eclipse.org/downloads/download.php?file=/glassfish/glassfish-5.1.0.zip
    export GF_HOME=$WORKSPACE
    export ANT_HOME=/home/jgallimore/Apps/apache-ant-1.10.5
    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
    export PATH=$JAVA_HOME/bin:$ANT_HOME/bin/:$PATH
    # Might be required, if you downloaded a ZIP rather than to use a git checkout
    chmod +x $WORKSPACE/docker/build_jakartaeetck.sh
    $WORKSPACE/docker/build_jakartaeetck.sh

NOTE: Substitute in your path for `JAVA_HOME` and `$ANT_HOME` as appropriate. The TCK takes around an hour to build.

#### Next Steps

Unzip the TCK zip file (if you have built the TCK by yourself, it is contained in `$WORKSPACE/jakartaeetck-bundles`) somewhere on your file system. Where and how you set this up is all down to personal preference, but I like to create a ee8tck folder under ~/dev and have both the TCK and Glassfish in this folder:

    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
    export TCK_HOME=/Users/jgallimore/dev/ee8tck/javaeetck
    export RI_HOME=/Users/jgallimore/dev/ee8tck/glassfish5

NOTE: This environment variables are required for every test run and need to be set again, if you didn't configured them permanently.

In addition, you'll then need to add Apache Ant to the TCK:

    mkdir -p $TCK_HOME/tools/ant
    cp -R $ANT_HOME $TCK_HOME/tools/

NOTE: I'm hoping we can eliminate this step (copying Ant) in the coming days.

**Alternative:** Provide a symlink to `$ANT_HOME`

    mkdir -p $TCK_HOME/tools/
    ln -s $ANT_HOME $TCK_HOME/tools/ant

Once unpacked, they can be "hooked" up via your maven settings.xml file like so:

      <settings>
        <profiles>
          <profile>
            <id>javaee-tck-environment</id>
            <activation>
      	    <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
               <javaee8.cts.home>/Users/jgallimore/dev/ee8tck/javaeetck</javaee8.cts.home>
               <javaee8.ri.home>/Users/jgallimore/dev/ee8tck/glassfish5/glassfish</javaee8.ri.home>
            </properties>
          </profile>
        </profiles>
      </settings>


## TEST RUN

To complete a test run against the latest TomEE 8.0.X-SNAPSHOT, from the tomee-tck folder, run

    ./runtests --web tomee-plume com.sun.ts.tests.ejb30.bb.localaccess.statelessclient

A successful execution should show and output similiar to:

          ===============================================================================
              1/-0/?0 - com/sun/ts/tests/ejb30/bb/localaccess/statelessclient/Client#java#exceptionTest1 - PASSED
              2/-0/?0 - com/sun/ts/tests/ejb30/bb/localaccess/statelessclient/Client#java#exceptionTest2 - PASSED
              3/-0/?0 - com/sun/ts/tests/ejb30/bb/localaccess/statelessclient/Client#java#exceptionTest3 - PASSED
              4/-0/?0 - com/sun/ts/tests/ejb30/bb/localaccess/statelessclient/Client#java#exceptionTest4 - PASSED
              5/-0/?0 - com/sun/ts/tests/ejb30/bb/localaccess/statelessclient/Client#java#exceptionTest5 - PASSED
              6/-0/?0 - com/sun/ts/tests/ejb30/bb/localaccess/statelessclient/Client#java#passByReferenceTest1 - PASSED
              7/-0/?0 - com/sun/ts/tests/ejb30/bb/localaccess/statelessclient/Client#java#passByReferenceTest2 - PASSED
              8/-0/?0 - com/sun/ts/tests/ejb30/bb/localaccess/statelessclient/Client#java#passByReferenceTest3 - PASSED
              9/-0/?0 - com/sun/ts/tests/ejb30/bb/localaccess/statelessclient/Client#java#passByReferenceTest4 - PASSED
              10/-0/?0 - com/sun/ts/tests/ejb30/bb/localaccess/statelessclient/Client#java#passByReferenceTest5 - PASSED
              11/-0/?0 - com/sun/ts/tests/ejb30/bb/localaccess/statelessclient/Client#java#passByValueTest - PASSED
              12/-0/?0 - com/sun/ts/tests/ejb30/bb/localaccess/statelessclient/Client#java#runtimeExceptionTest1 - PASSED
              13/-0/?0 - com/sun/ts/tests/ejb30/bb/localaccess/statelessclient/Client#java#runtimeExceptionTest2 - PASSED
              14/-0/?0 - com/sun/ts/tests/ejb30/bb/localaccess/statelessclient/Client#java#runtimeExceptionTest3 - PASSED
              15/-0/?0 - com/sun/ts/tests/ejb30/bb/localaccess/statelessclient/Client#java#runtimeExceptionTest4 - PASSED
              16/-0/?0 - com/sun/ts/tests/ejb30/bb/localaccess/statelessclient/Client#java#runtimeExceptionTest5 - PASSED
          ===============================================================================
          Completed running 16 tests (0:00:37.088):
              Passed: 16
              Failed: 0
              Errors: 0
          ===============================================================================


## MISC

The target directory is not cleaned out at the beginning of a test
run.  There are a few thousand tests and sometimes multiple
executions are required to get complete results.  It's also nice to
be able to look back on older log files when tracking down and fixing
bugs that the tests uncover.

Bottom line is you have to clear out the target directory manually.
On occasion some bad state will get into the server install in the
target/ directory.  If you start getting weird maven or groovy
errors, clean out the target dir and try again.

## TAB COMPLETION

There is a nice little script in the root directory called
runtests.completer which, when sourced, can give be a great
time-saver when trying to navigate to run a specific test.

In bash just source the file like so:

  source runtests.completer

### ZSH

If you are using ZSH, you need to execute the follows commands:

      autoload -U +X compinit && compinit
      autoload -U +X bashcompinit && bashcompinit
      source runtests.completer

Then you will be able to have the completer working fine for you ZSH as well. :)

## LOGS

The TCK for the most part runs as a client in a separate vm.  The
test results are sent to this vm and then logged here:

   target/logs/javatest.log

When looking at exceptions in that log file often come from the
remote deployer tool -- the same tool we use on the command line for
deployment.  Most of the deployment related exceptions were generated
on the server and sent to the client and that's why the show up in
that log.

The server logs are in the usual place:

   target/apache-tomee-plume-8.0.0-SNAPSHOT/logs
   target/apache-tomee-plume-8.0.0-SNAPSHOT/logs

## SELECTING TESTS

It is possible to select whole groups of tests or even individual
tests.  The following are all valid ways to select which tests you'd
like to run.

       ./runtests --web tomee-plume -c com.sun.ts.tests.ejb30 com.sun.ts.tests.ejb
       ./runtests --web tomee-plume -c com.sun.ts.tests.ejb30.lite.stateful.concurrency.accesstimeout
       ./runtests --web tomee-plume -c com.sun.ts.tests.ejb30.lite.stateful.concurrency.accesstimeout.annotated
       ./runtests --web tomee-plume -c com.sun.ts.tests.ejb30.lite.stateful.concurrency.accesstimeout.annotated.Client#beanClassLevel_from_ejbembed

The first command runs of the ejb30 and ejb sections of the TCK
illustrating that it is possble to run many sections or tests at
once.  The very last line shows the syntax for running just one
specific test.

Note that the output of the tck shows which exact tests are being
run.  For example:

       ...[tck output]...
        com/sun/ts/tests/ejb30/lite/stateful/concurrency/accesstimeout/annotated/Client#java#beanClassLevel_from_ejbembed - FAILED
        com/sun/ts/tests/ejb30/lite/stateful/concurrency/accesstimeout/annotated/Client#java#beanClassLevel_from_ejblitejsf - PASSED
        com/sun/ts/tests/ejb30/lite/stateful/concurrency/accesstimeout/annotated/Client#java#beanClassLevel_from_ejblitejsp - PASSED
        com/sun/ts/tests/ejb30/lite/stateful/concurrency/accesstimeout/annotated/Client#java#beanClassLevel_from_ejbliteservlet - PASSED
        com/sun/ts/tests/ejb30/lite/stateful/concurrency/accesstimeout/annotated/Client#java#beanClassLevel_from_ejbliteservlet2 - PASSED
        com/sun/ts/tests/ejb30/lite/stateful/concurrency/accesstimeout/annotated/Client#java#beanClassLevel2_from_ejbembed - FAILED
       ....

For the most part, you can copy and paste that test name as-is and use
it to run a test that failed... with one slight adjustment.  You need
to delete the "#java" part and then it will work.

### BAD

   ./runtests --web tomee-plume com/sun/ts/tests/ejb30/lite/stateful/concurrency/accesstimeout/annotated/Client#java#beanClassLevel_from_ejbembed

### GOOD

   ./runtests --web tomee-plume com/sun/ts/tests/ejb30/lite/stateful/concurrency/accesstimeout/annotated/Client#beanClassLevel_from_ejbembed

## TEST DEBUG

The following are the flags the scrip `runtests` accept for debuggin purposes:


    -d,--debug              Enable Server and TCK appclient debug options (5005 and 5003)
    -de,--debug-embedded    Enable TCK embedded ejb debug options (port 5001)
    -dh,--debug-harness     Enable TCK harness debug options (port 5002)
    -da,--debug-appclient   Enable TCK appclient debug options (port 5003)
    -dj,--debug-javatest    Enable TCK javatest debug options (port 5004)
    -ds,--debug-server      Enable Server debug options (port 5005)
    --connector             deploy connectors for connector tests

You can attach to the ports via your IDE remote debugger options.
Example:

    ./runtests --web tomee-plume -c -d com.sun.ts.tests.ejb30.lite.stateful.concurrency.accesstimeout.annotated.Client#beanClassLevel_from_ejbembed

Depending on the IDE, you will need to attempt twice to connect to the exposed port.

## WHAT TO TEST

The test that needs to be tested are the one having the following `keywords`:

    javaee_web_profile, ejb_web_profile, jacc_web_profile, jaspic_web_profile, javamail_web_profile, jaxr_web_profile, xa_web_profile, jaxrpc_web_profile, jaxws_web_profile

For more information about TCK structure and tests attributes check the link:about_tck{outfilesuffix}[about_tck] documentation.

## WHAT NEXT

Getting from zero to passing is a long road.  Failures and the
overall progress tends to go in three stages:

1. setup issues -- the right things are not where they need to be.

2. missing features -- a key feature is missing causing failures in unrelated tests.

3. compliance issues -- legitimate failures.

During phase 1 there will be big jumps in numbers. It is best to
clear out as much of phase 1 as possible before moving on to any
issues of phase 2 or 3.

During phase 2 it becomes apparent that many tests fail simply
because of an unrelated feature that many tests use, such as global
jndi support.  As these features are added, the tests that still fail
are usually failing for more legitimate reasons -- actual compliance
issues -- this is phase 3.

Phase 3 takes the longest and is often the hardest.  Unlike phase 1
or 2, the time spent debugging and fixing a test usually only results
in one or two more passing tests.  It is also common that fixing a
specific test requires reworking part of the code.  This inevitably
results in "two steps forward, one step backward" and other tests
might fail because of the change.  This is normal. It is also the
reason why there should be no more phase 1 or 2 style issues, so that
it is possible to see the regressions.  Working on phase 3 style
issues while there are still phase 1 and 2 style issues is a little
bit like working blind.  You don't really know how many steps
backward you might be taking as a result of a change.  It can be
done, but it is risky.

## WORKING TOGETHER
 Communication:-
 -Email:Make use of dev@tomee.apache.org

We want to divide and conquer on each phase and clear it out as much
as possible before moving to the next one. We could possibly get up
to 80% passing before reaching phase 3.

So the name of the game is "call your shot" or "name it and claim
it."  Find an issue that affects as many tests as possible and post
that you are working on it so others know not to look into it as
well.

If you get busy or stuck, no problem, just post again to let others
know the issue is up for grabs.  This is also normal.  Taking a quick
peak and then realizing that the issue involves someone else's area
of expertise is common.  Even if you aren't able to fix something,
taking a look and reporting as much info as you can is incredibly
valuable.  It's all part of the certification dance and will ideally
happen very often -- the right people working on the right things
gets you certified much faster.

There are usually so many issues that finding the right one for you
is somewhat like sifting through a pile of legos looking for that
perfect piece.  It doesn't always fit -- chuck it back and look for
another one.
