diff --git a/docs/modules/activemq.md b/docs/modules/activemq.md index 7959c47576a..b907480ae67 100644 --- a/docs/modules/activemq.md +++ b/docs/modules/activemq.md @@ -37,6 +37,12 @@ With anonymous login: [Allow anonymous login](../../modules/activemq/src/test/java/org/testcontainers/activemq/ArtemisContainerTest.java) inside_block:enableAnonymousLogin +Running an Artemis CLI command: + + +[Executing a CLI command](../../modules/activemq/src/test/java/org/testcontainers/activemq/ArtemisContainerTest.java) inside_block:execInArtemis + + ## Adding this module to your project dependencies Add the following dependency to your `pom.xml`/`build.gradle` file: diff --git a/modules/activemq/src/main/java/org/testcontainers/activemq/ArtemisContainer.java b/modules/activemq/src/main/java/org/testcontainers/activemq/ArtemisContainer.java index 82072993b48..1c1a5d08e42 100644 --- a/modules/activemq/src/main/java/org/testcontainers/activemq/ArtemisContainer.java +++ b/modules/activemq/src/main/java/org/testcontainers/activemq/ArtemisContainer.java @@ -1,10 +1,15 @@ package org.testcontainers.activemq; +import lombok.SneakyThrows; +import org.testcontainers.containers.Container.ExecResult; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.utility.DockerImageName; import java.time.Duration; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; /** * Testcontainers implementation for Apache ActiveMQ Artemis. @@ -43,6 +48,8 @@ public class ArtemisContainer extends GenericContainer { private static final int WS_PORT = 61614; + private static final String ARTEMIS_CLI = "/var/lib/artemis-instance/bin/artemis"; + private String username = "artemis"; private String password = "artemis"; @@ -86,4 +93,24 @@ public String getUser() { public String getPassword() { return getEnvMap().get("ARTEMIS_PASSWORD"); } + + /** + * Executes an Artemis CLI command, prepending the binary path and injecting credentials unless already supplied. + * + * @param command the CLI arguments (e.g. {@code "queue", "create", "--name=myqueue"}). + * @return the result of the command execution. + */ + @SneakyThrows + public ExecResult execInArtemis(String... command) { + List fullCommand = new ArrayList<>(); + fullCommand.add(ARTEMIS_CLI); + fullCommand.addAll(Arrays.asList(command)); + if (Arrays.stream(command).noneMatch(arg -> arg.startsWith("--user"))) { + fullCommand.add("--user=" + getUser()); + } + if (Arrays.stream(command).noneMatch(arg -> arg.startsWith("--password"))) { + fullCommand.add("--password=" + getPassword()); + } + return execInContainer(fullCommand.toArray(new String[0])); + } } diff --git a/modules/activemq/src/test/java/org/testcontainers/activemq/ArtemisContainerTest.java b/modules/activemq/src/test/java/org/testcontainers/activemq/ArtemisContainerTest.java index 74cdfa76da7..aa2528d70f1 100644 --- a/modules/activemq/src/test/java/org/testcontainers/activemq/ArtemisContainerTest.java +++ b/modules/activemq/src/test/java/org/testcontainers/activemq/ArtemisContainerTest.java @@ -11,6 +11,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; +import org.testcontainers.containers.Container.ExecResult; import static org.assertj.core.api.Assertions.assertThat; @@ -62,6 +63,27 @@ void allowAnonymousLogin() { } } + @Test + @SneakyThrows + void execInArtemis() { + try (ArtemisContainer artemis = new ArtemisContainer("apache/activemq-artemis:2.32.0-alpine")) { + artemis.start(); + + // execInArtemis { + artemis.execInArtemis( + "queue", + "create", + "--name=exec-test-queue", + "--auto-create-address", + "--anycast", + "--silent" + ); + ExecResult stat = artemis.execInArtemis("queue", "stat", "--queueName=exec-test-queue"); + assertThat(stat.getStdout()).contains("exec-test-queue"); + // } + } + } + @ParameterizedTest @ValueSource(strings = { "apache/activemq-artemis:2.32.0-alpine", "apache/artemis:2.53.0-alpine" }) void compatibility(String image) {