Skip to content

Commit

Permalink
Add support for async profiler to model testsuite
Browse files Browse the repository at this point in the history
  • Loading branch information
hmlnarik committed May 3, 2022
1 parent 0efa4af commit 1b1cf26
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 1 deletion.
50 changes: 50 additions & 0 deletions testsuite/model/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
Model testsuite
===============

Model testsuite runs tests on raw `KeycloakSessionFactory` which is
initialized only with those providers that are explicitly enabled
in a used profile via `keycloak.model.parameters` system property.

This allows writing tests and running those in different
configurations quickly, e.g. once with legacy JPA storage,
second time with purely new Hot Rod implementation.

The valid parameters are names of classes in `org.keycloak.testsuite.model.parameters`
package, and it is possible to combine those by providing multiple class names
separated by comma.

To simplify matters, common combinations of parameters are defined as maven profiles.


Test coverage
-------------

To see test coverage via jacoco, set `jacoco.skip` property to `false`, e.g.:

```
mvn test -Pjpa -Dtest=ClientModelTest -Djacoco.skip=false
```

Then you can generate the coverage report by using the following command:

```
mvn org.jacoco:jacoco-maven-plugin:0.8.7:report \
-Djacoco.skip=false -Djacoco.dataFile=target/jacoco.exec
```

The test coverage report is then available from `target/site/jacoco/index.html` file.

Profiling
---------

If you have [Async Profiler](https://github.com/jvm-profiling-tools/async-profiler/)
installed, you can generate flame graphs of the test run for profiling purposes.
To do so, you set `libasyncProfilerPath` system property to the location of the
async profiler library:

```
mvn test -Pjpa -Dtest=ClientModelTest \
-DlibasyncProfilerPath=/usr/local/async-profiler/build/libasyncProfiler.so
```

The results are available in the `target/profile.html` file.
12 changes: 12 additions & 0 deletions testsuite/model/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,18 @@
</properties>
</profile>

<profile>
<id>.asyncProfiler</id>
<activation>
<property><name>libasyncProfilerPath</name></property>
</activation>
<properties>
<asyncProfiler.event>cpu</asyncProfiler.event>
<asyncProfiler.file>target/profile.html</asyncProfiler.file>
<argLine>-agentpath:${libasyncProfilerPath}=start,event=${asyncProfiler.event},file=${asyncProfiler.file}</argLine>
</properties>
</profile>

</profiles>

</project>
2 changes: 1 addition & 1 deletion testsuite/model/test-all-profiles.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ mvn -version

EXIT_CODE=0
mvn clean
for I in `perl -ne 'print "$1\n" if (m,<id>([^<]+)</id>,)' pom.xml`; do
for I in `perl -ne 'print "$1\n" if (m,<id>([^.<]+)</id>,)' pom.xml`; do
echo "========"
echo "======== Start of Profile $I"
echo "========"
Expand Down

0 comments on commit 1b1cf26

Please sign in to comment.