This repository contains tools for debugging UDFs.
Install as maven dependency. You can get the dependency declaration by clicking the maven badge above.
Typically, you use this package together with test-db-builder-java and exasol-testcontainers as follows:
private static final ExasolContainer<?extends ExasolContainer<?>> EXASOL=new ExasolContainer<>();
final UdfTestSetup udfTestSetup=new UdfTestSetup(getTestHostIp(),EXASOL.getDefaultBucket());
final ExasolObjectFactory testDbBuilder=new ExasolObjectFactory(EXASOL.createConnection(),
ExasolObjectConfiguration.builder().withJvmOptions(udfTestSetup.getJvmOptions()).build());
This package contains multiple modules that you can enable on runtime by setting the corresponding system property to true
. Typically, you do so by appending -D<PROPERTY_NAME>="true"
to your JVM call.
System property: test.debug
This module instructs the UDF JVMs to connect to a Java debugger listening on the default port 8000 on you machine, running the tests.
System property: test.coverage
This module installs a jacoco agent to the UDF JVM and receives the execution data using a TCP socket.
This module requires additional maven configuration. Use project-keeper module udf_coverage
to verify it.
Please note that using a JaCoCo agent fails when running on Windows using a Docker image in a Linux virtual machine, see known issue Failing Integration Tests on Windows.
System property: test.jprofiler
This module allows you to profile UDF runs using JProfiler. For that it uploads the JProfiler archive to BucketFs and adds the agent to the UDF command.
Since JProfiler uses a forward TCP connection you can only profile one UDF instance at once. Make sure that you don't start multiple parallel instances.
.tar.gz
(Also choose the Linux version if you're on a different operating system!)jprofiler.tar.gz
in your home directory-DjProfilerAgent=<path to the archive.tar.gz>
to each test run-Dtest.jprofiler=true
docker inspect
)<EXASOL_IP>:11002
System property: test.udf-logs
This module redirects the STDOUT from UDFs to files on the test host.
You can find the logs in target/udf-logs/
. For each incoming stream (UDF instance) this module creates one file and logs its name:
Created log file for UDF output: target/udf-logs/udf-log-2023-07-05T10:49:09.316547Z-576983159368731727.log
Please note that integration tests fail when running on Windows using a Docker image in a Linux virtual machine due to JaCoCo agent obtaining the Code Coverage in the UDF.
Steps to reproduce
mvn clean verify -Dtest=MySQLSqlDialectIT
Known workarounds
.withJvmOptions(udfTestSetup.getJvmOptions())
from ExasolObjectConfiguration.builder()
-Dtest.coverage="false"