TCK debugging tips

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

TCK debugging tips

David Blevins-2
Sharing a few tips for happy TCK work.

## Opening the TCK in your IDE

The primary thing you need to debug through TCK tests is the source setup.  Here's a pom.xml I use that you can add to the root directory of an unzipped Jakarta EE TCK.  This is just enough pom.xml to get the TCK imported as a project in Intellij and sources appear without compile errors.  It does not actually build the TCK.

 - https://gist.github.com/dblevins/43eda499b820a2539a3d88c0e61d65a2


## Getting a fresh TCK install after modifications

A critical thing to be aware of is that 1) running the TCK will in fact modify your install in a handful of ways and 2) some of these process happen exactly once and will not repeat unless you unpack a completely fresh TCK install.

I got tired of repeatedly deleting and unpacking fresh TCK installs and also wanted a way to see exactly what had been changed after running tests, so I created a git project from a completely fresh TCK install.  Here it is for those who want to use it:

 - https://github.com/dblevins/jakartaeetck-8.0.2

The only changes post-unzip are to add Ant, and my pom.xml and a .gitignore.  With that I can do a `git clean -fd` at any time to restore my TCK install to a fresh state.  I can also do a `git status` and `git diff` to see exactly what has been modified.


## Setup TomEE, TomEE TCK and TCK in Intellij as one project

In most debugging scenarios you will need to step into both the test sources and the server sources.  You can't do that easily if they are setup in separate IDE windows.  They really need to be in the same project.  Here's how you can easily do that in Intellij.


 1.  Open your project settings, select `modules` and click the + button in the upper right.  https://pasteboard.co/JWgsOiJ.png
 2.  Select `Import Module` https://pasteboard.co/JWgtGXt.png
 3.  Navigate to the `pom.xml` file at the root of your clone of https://github.com/apache/tomee-tck and select `Open`.  https://pasteboard.co/JWguhKA.png
 4.  Repeat steps 1-3, but this time Navigate to the `pom.xml` of your Jakarta EE 8.0.2 TCK and select `Open`.  https://pasteboard.co/JWgw6Ze.png

When this is done you should now see all three projects side-by-side in Intellij.  https://pasteboard.co/JWgxmQl.png


## Opening a debug port 5005 to the TomEE server

Now that the IDE is all setup, you can run a test with debug enabled and connect using Remote debugging in Intellij.  For this to work, you need to tell the tomee-tck `runtests` script to start the server with the debug port 5005 enabled via the `-ds` flag as follows:

    ./runtests -ds -c -w tomee-plume com/sun/ts/tests/jaxrs/spec/provider/visibility


## Running just one failing test in a group

There will be situations where there is just one test failing in a group and you don't want to run the whole group, just the one failing test.  The TCK output will print the test names like follows:

    1/-0/?0 - com/sun/ts/tests/jaxrs/spec/provider/exceptionmapper/JAXRSClient#java#clientErrorExceptionTest_from_standalone - PASSED
    2/-0/?0 - com/sun/ts/tests/jaxrs/spec/provider/exceptionmapper/JAXRSClient#java#exceptionTest_from_standalone - PASSED
    3/-0/?0 - com/sun/ts/tests/jaxrs/spec/provider/exceptionmapper/JAXRSClient#java#filterChainTest_from_standalone - PASSED
    3/-1/?0 - com/sun/ts/tests/jaxrs/spec/provider/exceptionmapper/JAXRSClient#java#mappedExceptionTest_from_standalone - FAILED
    4/-1/?0 - com/sun/ts/tests/jaxrs/spec/provider/exceptionmapper/JAXRSClient#java#runtimeExceptionTest_from_standalone - PASSED
    5/-1/?0 - com/sun/ts/tests/jaxrs/spec/provider/exceptionmapper/JAXRSClient#java#throwableTest_from_standalone - PASSED

To run just that failing test in the middle you just need to yank the "#java" portion and feed that to `./runtests` like so:

    ./runtests -ds -c -w tomee-plume com/sun/ts/tests/jaxrs/spec/provider/visibility


Hope any of the above is helpful!


--
David Blevins
http://twitter.com/dblevins
http://www.tomitribe.com


smime.p7s (1K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: TCK debugging tips

Zowalla, Richard
Thanks for the detailed explanation! It is indeed very helpful.

Might be worth adding this introduction to a README.adoc or a separate
HOW-TO-DEBUG.adoc to the "tomee-tck" repository (and link it from the
README.adoc) ?

Gruss
Richard

Am Mittwoch, den 07.04.2021, 14:49 -0700 schrieb David Blevins:

> Sharing a few tips for happy TCK work.
>
> ## Opening the TCK in your IDE
>
> The primary thing you need to debug through TCK tests is the source
> setup.  Here's a pom.xml I use that you can add to the root directory
> of an unzipped Jakarta EE TCK.  This is just enough pom.xml to get
> the TCK imported as a project in Intellij and sources appear without
> compile errors.  It does not actually build the TCK.
>
>  - https://gist.github.com/dblevins/43eda499b820a2539a3d88c0e61d65a2
>
>
> ## Getting a fresh TCK install after modifications
>
> A critical thing to be aware of is that 1) running the TCK will in
> fact modify your install in a handful of ways and 2) some of these
> process happen exactly once and will not repeat unless you unpack a
> completely fresh TCK install.
>
> I got tired of repeatedly deleting and unpacking fresh TCK installs
> and also wanted a way to see exactly what had been changed after
> running tests, so I created a git project from a completely fresh TCK
> install.  Here it is for those who want to use it:
>
>  - https://github.com/dblevins/jakartaeetck-8.0.2
>
> The only changes post-unzip are to add Ant, and my pom.xml and a
> .gitignore.  With that I can do a `git clean -fd` at any time to
> restore my TCK install to a fresh state.  I can also do a `git
> status` and `git diff` to see exactly what has been modified.
>
>
> ## Setup TomEE, TomEE TCK and TCK in Intellij as one project
>
> In most debugging scenarios you will need to step into both the test
> sources and the server sources.  You can't do that easily if they are
> setup in separate IDE windows.  They really need to be in the same
> project.  Here's how you can easily do that in Intellij.
>
>
>  1.  Open your project settings, select `modules` and click the +
> button in the upper right.  https://pasteboard.co/JWgsOiJ.png
>  2.  Select `Import Module` https://pasteboard.co/JWgtGXt.png
>  3.  Navigate to the `pom.xml` file at the root of your clone of
> https://github.com/apache/tomee-tck and select `Open`.  
> https://pasteboard.co/JWguhKA.png
>  4.  Repeat steps 1-3, but this time Navigate to the `pom.xml` of
> your Jakarta EE 8.0.2 TCK and select `Open`.  
> https://pasteboard.co/JWgw6Ze.png
>
> When this is done you should now see all three projects side-by-side
> in Intellij.  https://pasteboard.co/JWgxmQl.png
>
>
> ## Opening a debug port 5005 to the TomEE server
>
> Now that the IDE is all setup, you can run a test with debug enabled
> and connect using Remote debugging in Intellij.  For this to work,
> you need to tell the tomee-tck `runtests` script to start the server
> with the debug port 5005 enabled via the `-ds` flag as follows:
>
>     ./runtests -ds -c -w tomee-plume
> com/sun/ts/tests/jaxrs/spec/provider/visibility
>
>
> ## Running just one failing test in a group
>
> There will be situations where there is just one test failing in a
> group and you don't want to run the whole group, just the one failing
> test.  The TCK output will print the test names like follows:
>
>     1/-0/?0 -
> com/sun/ts/tests/jaxrs/spec/provider/exceptionmapper/JAXRSClient#java
> #clientErrorExceptionTest_from_standalone - PASSED
>     2/-0/?0 -
> com/sun/ts/tests/jaxrs/spec/provider/exceptionmapper/JAXRSClient#java
> #exceptionTest_from_standalone - PASSED
>     3/-0/?0 -
> com/sun/ts/tests/jaxrs/spec/provider/exceptionmapper/JAXRSClient#java
> #filterChainTest_from_standalone - PASSED
>     3/-1/?0 -
> com/sun/ts/tests/jaxrs/spec/provider/exceptionmapper/JAXRSClient#java
> #mappedExceptionTest_from_standalone - FAILED
>     4/-1/?0 -
> com/sun/ts/tests/jaxrs/spec/provider/exceptionmapper/JAXRSClient#java
> #runtimeExceptionTest_from_standalone - PASSED
>     5/-1/?0 -
> com/sun/ts/tests/jaxrs/spec/provider/exceptionmapper/JAXRSClient#java
> #throwableTest_from_standalone - PASSED
>
> To run just that failing test in the middle you just need to yank the
> "#java" portion and feed that to `./runtests` like so:
>
>     ./runtests -ds -c -w tomee-plume
> com/sun/ts/tests/jaxrs/spec/provider/visibility
>
>
> Hope any of the above is helpful!
>
>
--
Richard Zowalla, M.Sc.
Research Associate, PhD Student | Medical Informatics

Hochschule Heilbronn – University of Applied Sciences
Max-Planck-Str. 39
D-74081 Heilbronn
phone: +49 7131 504 6791
mail: [hidden email]
web: https://www.mi.hs-heilbronn.de/ 

smime.p7s (9K) Download Attachment