1+ package io .cloudflight .testresources .springboot .rabbitmq ;
2+
3+ import io .micronaut .testresources .testcontainers .AbstractTestContainersProvider ;
4+ import org .testcontainers .containers .RabbitMQContainer ;
5+ import org .testcontainers .utility .DockerImageName ;
6+
7+ import java .util .*;
8+
9+ public class RabbitMQTestResourceProvider extends AbstractTestContainersProvider <RabbitMQContainer > {
10+
11+ private static final String RABBITMQ_HOST = "spring.rabbitmq.host" ;
12+ private static final String RABBITMQ_PORT = "spring.rabbitmq.port" ;
13+ private static final String RABBITMQ_USERNAME = "spring.rabbitmq.username" ;
14+ private static final String RABBITMQ_PASSWORD = "spring.rabbitmq.password" ;
15+ private static final String DEFAULT_IMAGE = "rabbitmq" ;
16+ private static final String SIMPLE_NAME = "rabbitmq" ;
17+
18+ private static final List <String > SUPPORTED_KEYS = List .of (RABBITMQ_HOST , RABBITMQ_PORT , RABBITMQ_USERNAME , RABBITMQ_PASSWORD );
19+ private static final Set <String > SUPPORTED_KEYSET = Set .copyOf (SUPPORTED_KEYS );
20+
21+ @ Override
22+ public List <String > getResolvableProperties (Map <String , Collection <String >> propertyEntries , Map <String , Object > testResourcesConfig ) {
23+ return SUPPORTED_KEYS ;
24+ }
25+
26+ @ Override
27+ protected String getSimpleName () {
28+ return SIMPLE_NAME ;
29+ }
30+
31+ @ Override
32+ protected String getDefaultImageName () {
33+ return DEFAULT_IMAGE ;
34+ }
35+
36+ @ Override
37+ protected RabbitMQContainer createContainer (DockerImageName imageName , Map <String , Object > requestedProperties , Map <String , Object > testResourcesConfiguration ) {
38+ return new RabbitMQContainer (imageName );
39+ }
40+
41+ @ Override
42+ protected Optional <String > resolveProperty (String propertyName , RabbitMQContainer container ) {
43+ switch (propertyName ) {
44+ case RABBITMQ_HOST -> {
45+ return Optional .of (container .getHost ());
46+ }
47+ case RABBITMQ_PORT -> {
48+ return Optional .of (container .getAmqpPort ().toString ());
49+ }
50+ case RABBITMQ_USERNAME -> {
51+ return Optional .of (container .getAdminUsername ());
52+ }
53+ case RABBITMQ_PASSWORD -> {
54+ return Optional .of (container .getAdminPassword ());
55+ }
56+ default -> {
57+ return Optional .empty ();
58+ }
59+ }
60+ }
61+
62+ @ Override
63+ protected boolean shouldAnswer (String propertyName , Map <String , Object > requestedProperties , Map <String , Object > testResourcesConfiguration ) {
64+ return SUPPORTED_KEYSET .contains (propertyName );
65+ }
66+ }
0 commit comments