or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

index.md
tile.json

tessl/maven-org-testcontainers--rabbitmq

Testcontainers RabbitMQ module for integration testing with throwaway RabbitMQ container instances

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/org.testcontainers/rabbitmq@1.21.x

To install, run

npx @tessl/cli install tessl/maven-org-testcontainers--rabbitmq@1.21.0

index.mddocs/

Testcontainers RabbitMQ

Testcontainers RabbitMQ module provides a specialized container implementation for integration testing with RabbitMQ message brokers. It enables developers to easily spin up throwaway RabbitMQ container instances for JUnit tests, supporting both AMQP and AMQPS protocols along with HTTP and HTTPS management interfaces.

Package Information

  • Package Name: org.testcontainers:rabbitmq
  • Package Type: Maven
  • Language: Java
  • Installation: Add to build.gradle: testImplementation "org.testcontainers:rabbitmq:1.21.3"
  • Installation: Add to pom.xml: <groupId>org.testcontainers</groupId><artifactId>rabbitmq</artifactId><version>1.21.3</version>

Core Imports

import org.testcontainers.containers.RabbitMQContainer;
import org.testcontainers.utility.DockerImageName;
import org.testcontainers.utility.MountableFile;

For SSL configuration:

import org.testcontainers.containers.RabbitMQContainer.SslVerification;

For testing utilities:

import org.testcontainers.containers.RabbitMQTestImages;

Basic Usage

import org.testcontainers.containers.RabbitMQContainer;
import org.testcontainers.containers.RabbitMQTestImages;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

@Test
public void testRabbitMQ() {
    try (RabbitMQContainer container = new RabbitMQContainer(RabbitMQTestImages.RABBITMQ_IMAGE)) {
        container.start();
        
        // Get connection details
        String amqpUrl = container.getAmqpUrl();
        String adminUser = container.getAdminUsername();
        String adminPassword = container.getAdminPassword();
        
        // Create AMQP connection
        ConnectionFactory factory = new ConnectionFactory();
        factory.setUri(amqpUrl);
        factory.setUsername(adminUser);
        factory.setPassword(adminPassword);
        
        try (Connection connection = factory.newConnection()) {
            // Use the connection for testing
            assertThat(connection.isOpen()).isTrue();
        }
    }
}

Architecture

The RabbitMQContainer extends Testcontainers' GenericContainer with RabbitMQ-specific functionality:

  • Container Management: Automatic lifecycle management for RabbitMQ Docker containers
  • Port Mapping: Exposes standard RabbitMQ ports with dynamic host port mapping
  • Protocol Support: AMQP (5672), AMQPS (5671), HTTP (15672), HTTPS (15671)
  • SSL Configuration: Custom certificate support for secure connections
  • Credential Management: Configurable admin credentials with environment variable injection
  • Configuration Files: Support for both sysctl and Erlang format configuration files
  • Declarative Setup: Programmatic RabbitMQ entity creation during container startup

Capabilities

Container Creation and Configuration

Core container instantiation and basic configuration options.

// Constructors
public RabbitMQContainer(DockerImageName dockerImageName);
public RabbitMQContainer(String dockerImageName);
@Deprecated
public RabbitMQContainer();

// Basic configuration
public RabbitMQContainer withAdminUser(String adminUsername);
public RabbitMQContainer withAdminPassword(String adminPassword);

Connection Information Access

Methods to retrieve connection details and URLs for different protocols.

// Credential access
public String getAdminUsername();
public String getAdminPassword();

// Port access
public Integer getAmqpPort();
public Integer getAmqpsPort();
public Integer getHttpPort();
public Integer getHttpsPort();

// URL generation
public String getAmqpUrl();
public String getAmqpsUrl();
public String getHttpUrl();
public String getHttpsUrl();

SSL/TLS Configuration

SSL certificate configuration for secure connections.

public RabbitMQContainer withSSL(
    MountableFile keyFile,
    MountableFile certFile,
    MountableFile caFile,
    SslVerification verify
);

public RabbitMQContainer withSSL(
    MountableFile keyFile,
    MountableFile certFile,
    MountableFile caFile,
    SslVerification verify,
    boolean failIfNoCert
);

public RabbitMQContainer withSSL(
    MountableFile keyFile,
    MountableFile certFile,
    MountableFile caFile,
    SslVerification verify,
    boolean failIfNoCert,
    int verificationDepth
);

Configuration File Management

Custom RabbitMQ configuration file support.

// Generic config (delegates to sysctl format)
public RabbitMQContainer withRabbitMQConfig(MountableFile rabbitMQConf);

// Sysctl format (RabbitMQ >= 3.7)
public RabbitMQContainer withRabbitMQConfigSysctl(MountableFile rabbitMQConf);

// Erlang format
public RabbitMQContainer withRabbitMQConfigErlang(MountableFile rabbitMQConf);

Container Lifecycle Management

Inherited methods from GenericContainer for container lifecycle management.

// Container lifecycle
public void start();
public void stop();
public void close();
public boolean isRunning();

// Container interaction
public String getLogs();
public ExecResult execInContainer(String... command) throws IOException, InterruptedException;

Deprecated Declarative Configuration

Legacy methods for programmatic RabbitMQ entity creation. Use execInContainer() instead.

// Plugin management
@Deprecated
public RabbitMQContainer withPluginsEnabled(String... pluginNames);

// Queue management
@Deprecated
public RabbitMQContainer withQueue(String name);
@Deprecated
public RabbitMQContainer withQueue(String vhost, String name);
@Deprecated
public RabbitMQContainer withQueue(String name, boolean autoDelete, boolean durable, Map<String, Object> arguments);
@Deprecated
public RabbitMQContainer withQueue(String vhost, String name, boolean autoDelete, boolean durable, Map<String, Object> arguments);

// Exchange management
@Deprecated
public RabbitMQContainer withExchange(String name, String type);
@Deprecated
public RabbitMQContainer withExchange(String vhost, String name, String type);
@Deprecated
public RabbitMQContainer withExchange(String name, String type, boolean autoDelete, boolean internal, boolean durable, Map<String, Object> arguments);
@Deprecated
public RabbitMQContainer withExchange(String vhost, String name, String type, boolean autoDelete, boolean internal, boolean durable, Map<String, Object> arguments);

// Binding management
@Deprecated
public RabbitMQContainer withBinding(String source, String destination);
@Deprecated
public RabbitMQContainer withBinding(String vhost, String source, String destination);
@Deprecated
public RabbitMQContainer withBinding(String source, String destination, Map<String, Object> arguments, String routingKey, String destinationType);
@Deprecated
public RabbitMQContainer withBinding(String vhost, String source, String destination, Map<String, Object> arguments, String routingKey, String destinationType);

// User and permission management
@Deprecated
public RabbitMQContainer withUser(String name, String password);
@Deprecated
public RabbitMQContainer withUser(String name, String password, Set<String> tags);
@Deprecated
public RabbitMQContainer withPermission(String vhost, String user, String configure, String write, String read);

// Virtual host management
@Deprecated
public RabbitMQContainer withVhost(String name);
@Deprecated
public RabbitMQContainer withVhost(String name, boolean tracing);
@Deprecated
public RabbitMQContainer withVhostLimit(String vhost, String name, int value);

// Policy management
@Deprecated
public RabbitMQContainer withPolicy(String name, String pattern, Map<String, Object> definition);
@Deprecated
public RabbitMQContainer withPolicy(String vhost, String name, String pattern, Map<String, Object> definition);
@Deprecated
public RabbitMQContainer withPolicy(String name, String pattern, Map<String, Object> definition, int priority, String applyTo);
@Deprecated
public RabbitMQContainer withOperatorPolicy(String name, String pattern, Map<String, Object> definition);
@Deprecated
public RabbitMQContainer withOperatorPolicy(String name, String pattern, Map<String, Object> definition, int priority, String applyTo);

// Parameter management
@Deprecated
public RabbitMQContainer withParameter(String component, String name, String value);

Types

// SSL verification options
public enum SslVerification {
    VERIFY_NONE("verify_none"),  // No SSL peer verification
    VERIFY_PEER("verify_peer")   // Verify SSL peer certificates
}

// Test image constants
public interface RabbitMQTestImages {
    DockerImageName RABBITMQ_IMAGE = DockerImageName.parse("rabbitmq:3.7.25-management-alpine");
}

// Container execution result
interface ExecResult {
    String getStdout();
    String getStderr();
    int getExitCode();
}

Usage Examples

Custom Credentials

@Test
public void testWithCustomCredentials() {
    try (RabbitMQContainer container = new RabbitMQContainer(RabbitMQTestImages.RABBITMQ_IMAGE)
            .withAdminUser("admin")
            .withAdminPassword("secret123")) {
        container.start();
        
        assertEquals("admin", container.getAdminUsername());
        assertEquals("secret123", container.getAdminPassword());
    }
}

SSL Configuration

@Test
public void testWithSSL() {
    MountableFile keyFile = MountableFile.forClasspathResource("ssl/server.key");
    MountableFile certFile = MountableFile.forClasspathResource("ssl/server.crt");
    MountableFile caFile = MountableFile.forClasspathResource("ssl/ca.crt");
    
    try (RabbitMQContainer container = new RabbitMQContainer(RabbitMQTestImages.RABBITMQ_IMAGE)
            .withSSL(keyFile, certFile, caFile, SslVerification.VERIFY_PEER)) {
        container.start();
        
        String amqpsUrl = container.getAmqpsUrl();
        assertTrue(amqpsUrl.startsWith("amqps://"));
    }
}

Modern Entity Management (Recommended)

@Test
public void testWithModernConfiguration() throws Exception {
    try (RabbitMQContainer container = new RabbitMQContainer(RabbitMQTestImages.RABBITMQ_IMAGE)) {
        container.start();
        
        // Use execInContainer for RabbitMQ configuration
        container.execInContainer("rabbitmq-plugins", "enable", "rabbitmq_management");
        container.execInContainer("rabbitmqadmin", "declare", "queue", "name=test-queue");
        container.execInContainer("rabbitmqadmin", "declare", "exchange", "name=test-exchange", "type=direct");
        container.execInContainer("rabbitmqadmin", "declare", "binding", 
            "source=test-exchange", "destination=test-queue");
        
        // Verify configuration
        ExecResult result = container.execInContainer("rabbitmqctl", "list_queues");
        assertTrue(result.getStdout().contains("test-queue"));
    }
}

Custom Configuration File

@Test
public void testWithCustomConfig() {
    MountableFile configFile = MountableFile.forClasspathResource("rabbitmq-custom.conf");
    
    try (RabbitMQContainer container = new RabbitMQContainer(RabbitMQTestImages.RABBITMQ_IMAGE)
            .withRabbitMQConfigSysctl(configFile)) {
        container.start();
        
        // Container will use the custom configuration
    }
}