Provides a JUnit test rules to run Concord containers using Testcontainers.
<dependency>
<groupId>ca.ibodrov.concord</groupId>
<artifactId>testcontainers-concord-junit4</artifactId>
<version>...</version>
</dependency>
or
<dependency>
<groupId>ca.ibodrov.concord</groupId>
<artifactId>testcontainers-concord-junit5</artifactId>
<version>...</version>
</dependency>
public class MyTest {
@Rule
public ConcordRule concord = new ConcordRule();
@Test
public void test() {
// ...
}
}
By default, the DB, the Server and the Agent are started using Docker containers. See below for other options.
See test cases for details.
In this mode testcontainers-concord
connect to a remove Concord instance.
You need to provide the API's base URL and the token:
public class MyTest {
@Rule
public ConcordRule concord = new ConcordRule()
.mode(Concord.Mode.REMOTE)
.apiBaseUrl("http://localhost:8001")
.apiToken("...");
@Test
public void test() {
// ...
}
}
Local mode starts Concord Server and Concord Agent in the current JVM:
public class MyTest {
@Rule
public ConcordRule concord = new ConcordRule()
.mode(Concord.Mode.LOCAL);
@Test
public void test() {
// ...
}
}
This allows for easier debugging, i.e. it is possible to set up a breakpoint inside the Server's, the Agent's or the plugin's code while running tests.
Requires additional Maven configuration:
<project>
<dependencies>
<dependency>
<groupId>com.walmartlabs.concord.server</groupId>
<artifactId>concord-server-impl</artifactId>
<version>${concord.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.walmartlabs.concord.server</groupId>
<artifactId>concord-server</artifactId>
<version>${concord.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.walmartlabs.concord</groupId>
<artifactId>concord-agent</artifactId>
<version>${concord.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- copy the runtime's JAR into the target directory -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.2</version>
<executions>
<execution>
<id>copy-runner-jar</id>
<phase>process-test-resources</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<overWriteIfNewer>true</overWriteIfNewer>
<artifactItems>
<artifactItem>
<groupId>com.walmartlabs.concord.runtime.v1</groupId>
<artifactId>concord-runtime-impl-v1</artifactId>
<version>${concord.version}</version>
<classifier>jar-with-dependencies</classifier>
<destFileName>runner-v1.jar</destFileName>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Runtime V2 requires a different artifact:
<project>
<build>
<plugins>
<!-- copy the runtime's JAR into the target directory -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.2</version>
<executions>
<execution>
<id>copy-runner-jar</id>
<phase>process-test-resources</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<overWriteIfNewer>true</overWriteIfNewer>
<artifactItems>
<artifactItem>
<groupId>com.walmartlabs.concord.runtime.v2</groupId>
<artifactId>concord-runner-v2</artifactId>
<version>${concord.version}</version>
<classifier>jar-with-dependencies</classifier>
<destFileName>runner-v2.jar</destFileName>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>