Bump log4j2 test dependencies
[lttng-ust-java-tests.git] / README.md
CommitLineData
08d409fb
AM
1LTTng-UST Java Agent Test Package
2=================================
3
4This git tree contains integration tests and benchmarks for the
5[LTTng-UST](https://lttng.org/) Java Agent. It requires many additional
6dependencies compared to the library itself, so it is shipped as a separate
7package for now.
8
9
10Prerequisites
11-------------
12
13* Java 1.8
14* [Apache Maven](https://maven.apache.org/) 3.0+
15* A recent version of [LTTng-Tools](https://lttng.org/download/)
fd2b8059 16* A recent version of [Babeltrace 2.x](http://www.efficios.com/babeltrace)
08d409fb
AM
17* A git branch or version of LTTng-UST you want to test
18
19For example, on Ubuntu you can use the
20[LTTng PPA](https://launchpad.net/~lttng/+archive/ubuntu/ppa), then Maven and
21OpenJDK from the main repository:
22
23 sudo apt-add-repository ppa:lttng/ppa
24 sudo apt-get update
fd2b8059 25 sudo apt-get install lttng-tools babeltrace2 maven openjdk-8-jre
08d409fb
AM
26
27Also make sure `mvn -version` reports a `Java version: 1.8` or higher. If it
28does not, you may need to set your `JAVA_HOME` accordingly.
29
30
31Usage
32-----
33
34First you need to `make install` the LTTng-UST git branch you want to test.
35For example:
36
37 git clone git://git.lttng.org/lttng-ust.git
38 cd lttng-ust/
39 (do some modifications, checkout a different branch, etc.)
40 ./bootstrap
41 ./configure --enable-java-agent-all
42 make
43 sudo make install
44
45Then, `cd` back to the directory where you cloned the present git tree, and
46issue a
47
48 mvn clean verify
49
50This will run all the tests on the UST agent that was `make install`'ed. Tests
51will be skipped if they cannot find their required classes or native libraries,
52so make sure the output mentions succesful tests and not skipped ones.
53
54Please make sure you have no `lttng` session active prior to or during the
55tests, or it might interfere with the test runs!
56
7b82be36 57Detailed JUnit test reports will be available under
4821eac9 58`lttng-ust-java-tests-{jul|log4j}/target/failsafe-reports/`
08d409fb
AM
59
60
ca5cfa43
AM
61Setting library paths
62---------------------
63
64By default, the tests will look for the Java and JNI libraries in the default
65locations of `make install` (`/usr/local/lib`, `/usr/local/share/java`, etc.)
66
67If for example, you installed into the `/usr` prefix instead of `/usr/local`,
68you can use the following properties to specify different locations for the
69lttng-ust-agent-java jars:
70
eca1a136
MJ
71 mvn clean verify \
72 -Dcommon-jar-location=/usr/share/java/lttng-ust-agent-common.jar \
73 -Djul-jar-location=/usr/share/java/lttng-ust-agent-jul.jar \
74 -Dlog4j-jar-location=/usr/share/java/lttng-ust-agent-log4j.jar \
75 -Dlog4j2-jar-location=/usr/share/java/lttng-ust-agent-log4j2.jar
ca5cfa43
AM
76
77To specify a different locations for the JNI .so libraries, you can set the
78`-Djava.library.path` property on the JVM:
79
80 mvn (...) -DargLine=-Djava.library.path=/usr/lib
81
82Note: do not use `MAVEN_OPTS` to set the library path, since the `argLine`
83property defined in the build will overwrite it.
84
0b7cb727
JR
85Running a single test
86----------------------
87
88This test suite is comprised of integration tests. We use the failsafe
89maven plugin [1]. To run a single test, one can use the test class name and the
90following command:
91
92 mvn clean verify -Dit.test=JulAppContextOrderingIT -DfailIfNoTests=false
93
94The `-DfailIfNoTests=false` argument is necessary otherwise maven will fail on
95the first test set that is empty. See [2] for more info.
96
97
98[1] http://maven.apache.org/surefire/maven-failsafe-plugin/index.html
99[2] http://maven.apache.org/surefire/maven-failsafe-plugin/examples/single-test.html
100
9db2c69a
MJ
101Running tests by tags
102---------------------
103
104Tests can also be filtered by Junit tags or tag expressions [1], for example to
105run only the Log4 1.x agent tests:
106
107 mvn clean verify -Dgroups='agent:log4j'
108
109Or to exclude the tests of the Log4j2 domain:
110
111 mvn clean verify -Dgroups='!domain:log4j2'
112
113[1] https://junit.org/junit5/docs/current/user-guide/#running-tests-tags
114
0b7cb727
JR
115Debugging a test
116----------------------
117
118Note that for most tests, the test itself is the traced application.
119The fastest and "easiest" way of putting a breakpoint is to use eclipse.
120
121Download eclipse (for java dev).
122Import a maven project that points to this repo:
123
9a24d281
JRJ
124 File -> Import -> Project -> Select Maven folder -> Select Existing Maven Projects
125 Point the root directory to this repo. Select all projects. Finish
0b7cb727
JR
126
127Setup the Debug Configuration:
9a24d281
JRJ
128
129 Run -> Debug Configurations.
130 Select Remote Java Application.
131 Press the New Configuration button.
132 Give it the name "Remote lttng maven".
133 Select the project and select `lttng-tools-java`
134 Set the port to 5005
135 Go in the Source tab.
136 Click Add -> Java project -> Select all
137 Click Apply
138 Click Close
0b7cb727
JR
139
140Now let's run a single test with debug:
141
9a24d281 142 mvn clean verify -Dit.test=JulAppContextOrderingIT -DfailIfNoTests=false -Dmaven.failsafe.debug
0b7cb727
JR
143
144Wait for:
9a24d281
JRJ
145
146 Listening for transport dt_socket at address: 5005
0b7cb727
JR
147
148Now go back to eclipse:
9a24d281
JRJ
149
150 Navigate to where you want to put a break point. For example, JulAppContextOrderingIT.registerAgent.
151 Ctrl + shift + b can be used to set a tracepoint at the desired line.
0b7cb727
JR
152
153Then attach to the debugger:
9a24d281
JRJ
154
155 Run -> Debug Configurations.
156 Select on the right "Remote lttng maven"
157 Click Debug
0b7cb727
JR
158
159You should hit the breakpoint at some point and from there use steps etc.
160
161If you want to debug lttng-ust, you need to insert a breakpoint at a valid point
162in time for the test and then use gdb to hook yourself to the java process.
163From there debugging is the same as any C application.
964084b4
JRJ
164You will need to ignore SIGSEV from java under gdb:
165
166 handle SIGSEGV nostop noprint pass
ca5cfa43 167
08d409fb
AM
168Running the benchmarks
169----------------------
170
171By default only the unit/integration tests are run. To also run the benchmarks,
172run Maven with the `benchmark` profile, as follows:
173
174 mvn clean verify -Pbenchmark
175
176The benchmark results should be part of the standard output.
177
This page took 0.029932 seconds and 4 git commands to generate.