Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/arquillian/arquillian-testcontainers
Arquillian loadable extension for test-container support
https://github.com/arquillian/arquillian-testcontainers
Last synced: 4 days ago
JSON representation
Arquillian loadable extension for test-container support
- Host: GitHub
- URL: https://github.com/arquillian/arquillian-testcontainers
- Owner: arquillian
- License: apache-2.0
- Created: 2024-06-28T15:09:57.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2024-11-08T15:27:23.000Z (5 days ago)
- Last Synced: 2024-11-08T16:33:01.861Z (5 days ago)
- Language: Java
- Size: 121 KB
- Stars: 5
- Watchers: 8
- Forks: 4
- Open Issues: 5
-
Metadata Files:
- Readme: README.adoc
- License: LICENSE
Awesome Lists containing this project
README
= Arquillian Testcontainers
Arquillian Testcontainers is a loadable extension for https://testcontainers.com/[testcontainers] support. This project
is not meant to provide an Arquillian adaptor via a Testcontainer, but rather compliment an Arquillian adaptor by
allowing Arquillian to manage a Testcontainer.== Usage
To start using Arquillian Testcontainors add the following Maven dependency:
[source,xml]
----org.jboss.arquillian
arquillian-testcontainers
${version.org.jboss.arquillian.testcontainers
test----
=== Using a Testcontainer
To use a Testcontainer within an Arquillian test you must annotate the type with `@DockerRequired`. What this annotation
does is verify a Docker implementation is available. If a Docker implementation is not available, an exception is thrown.
By default, this is a `java.lang.AssertionError`. This can be overridden in the `@DockerRequired(value=)` attribute. For
example in JUnit 5 to skip the test rather than throw an error you would use the `@DockerRequired(TestAbortedException.class)`.
This would throw a `org.opentest4j.TestAbortedException` if a Docker implementation is not available and the test will
be skipped.To inject a Testcontainer into your Arquillian test, use the `@Testcontainer` annotation.
[source,java]
----
@ExtendWith(ArquillianExtension.class)
@DockerRequired(TestAbortedException.class)
@RunAsClient
public class SimpleContainerTest {@Testcontainer
private static SimpleTestContainer container;@Deployment
public static JavaArchive createDeployment() {
return ShrinkWrap.create(JavaArchive.class)
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
}@Test
public void testContainerInjected() {
Assertions.assertNotNull(container, "Expected the container to be injected.");
Assertions.assertTrue(container.isRunning(), "Expected the container to not be running");
}
}
----The injected type must be an implementation of `org.testcontainers.containers.GenericContainer`. If you would like to
inject a `GenericContainer>`, you can use the `type` parameter in the `@Testcontainer` annotation to qualify the type:[source,java]
----
@ExtendWith(ArquillianExtension.class)
@RunAsClient
@DockerRequired(TestAbortedException.class)
public class TypeSpecifiedInjectionTest {@Deployment
public static JavaArchive createDeployment() {
return ShrinkWrap.create(JavaArchive.class)
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
}@Testcontainer(type = WildFlyContainer.class)
private GenericContainer> wildfly;@Testcontainer(type = SimpleTestContainer.class)
private GenericContainer> container;@Test
public void checkWildFly() {
Assertions.assertNotNull(wildfly);
Assertions.assertTrue(wildfly.isRunning());
}@Test
public void checkSimpleTestContainer() {
Assertions.assertNotNull(container, "Expected the container to be injected.");
Assertions.assertTrue(container.isRunning(), "Expected the container to be running");
}
}
----By default, this extension will manage the lifecyle of each Testcontainer that is injected into the test. If you'd
prefer to manage the lifecyle yourself, use the `value=true` attribute in the `@Testcontainer` annotation. For example
use `@Testcontainer(false)`.== Helpers
Arquillian Testcontainers contains a helper for consuming log messages. The `LoggingConsumer` simply consumes the
containers output and logs it via a `java.util.logging.Logger`.== WildFly Example
The following is an example of using a Testcontainer in WildFly with a `ServerSetupTask`.
[source,java]
----
@DockerRequired
@ExtendWith(ArquillianExtension.class)
@RunAsClient
@ServerSetup(WildFlyTest.ContainerSetupTask.class)
public class WildFlyTest {
@DockerRequired
@ReloadIfRequired
public static class ContainerSetupTask implements ServerSetupTask {@Testcontainer
private KeycloakContainer keycloak;@Override
public final void setup(final ManagementClient managementClient, final String containerId) throws Exception {
final var containerAddress = keycloak.getContainerAddress();
// Do the Keycloak setup
}@Override
public final void tearDown(final ManagementClient managementClient, final String containerId) throws Exception {
}
}@Testcontainer
private KeycloakContainer keycloak;@Deployment
public static WebArchive createDeployment() {
return ShrinkWrap.create(WebArchive.class)
.addClasses(SecureEndpoint.class, SecureApplication.class)
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
}@Test
public void auth() throws Exception {
final var response = makeRequest(keycloak.getContainerAddress(keycloak.getMappedPort(8080)));
// Validate response
}
}
----