Browse Source

Polish support for Testcontainers Redis

- Add support for RedisStackContainer
- Update the docs

Closes gh-41450
pull/39797/head
Andy Wilkinson 2 years ago
parent
commit
f7ba5f1bbc
  1. 2
      spring-boot-project/spring-boot-docs/src/docs/antora/modules/reference/pages/testing/testcontainers.adoc
  2. 14
      spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/redis/CustomRedisContainerConnectionDetailsFactoryTests.java
  3. 4
      spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/redis/RedisContainerConnectionDetailsFactory.java

2
spring-boot-project/spring-boot-docs/src/docs/antora/modules/reference/pages/testing/testcontainers.adoc

@ -87,7 +87,7 @@ The following service connection factories are provided in the `spring-boot-test
| Containers of type `RabbitMQContainer` | Containers of type `RabbitMQContainer`
| `RedisConnectionDetails` | `RedisConnectionDetails`
| Containers named "redis", "redis/redis-stack" or "redis/redis-stack-server" | Containers of type `com.redis.testcontainers.RedisContainer` or `com.redis.testcontainers.RedisStackContainer`, or containers named "redis", "redis/redis-stack" or "redis/redis-stack-server"
| `ZipkinConnectionDetails` | `ZipkinConnectionDetails`
| Containers named "openzipkin/zipkin" | Containers named "openzipkin/zipkin"

14
spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/redis/CustomRedisContainerConnectionDetailsFactoryTests.java

@ -19,6 +19,7 @@ package org.springframework.boot.testcontainers.service.connection.redis;
import java.util.Map; import java.util.Map;
import com.redis.testcontainers.RedisContainer; import com.redis.testcontainers.RedisContainer;
import com.redis.testcontainers.RedisStackContainer;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.data.redis.RedisConnectionDetails; import org.springframework.boot.autoconfigure.data.redis.RedisConnectionDetails;
@ -32,7 +33,7 @@ import org.springframework.core.annotation.MergedAnnotation;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
/** /**
* Test for {@link RedisContainerConnectionDetailsFactory} when using a custom contain * Test for {@link RedisContainerConnectionDetailsFactory} when using a custom container
* without "redis" as the name. * without "redis" as the name.
* *
* @author Phillip Webb * @author Phillip Webb
@ -50,4 +51,15 @@ class CustomRedisContainerConnectionDetailsFactoryTests {
assertThat(connectionDetails.get(RedisConnectionDetails.class)).isNotNull(); assertThat(connectionDetails.get(RedisConnectionDetails.class)).isNotNull();
} }
@Test
void getConnectionDetailsWhenRedisStackContainerWithCustomName() {
ConnectionDetailsFactories factories = new ConnectionDetailsFactories();
MergedAnnotation<ServiceConnection> annotation = MergedAnnotation.of(ServiceConnection.class,
Map.of("value", ""));
ContainerConnectionSource<RedisStackContainer> source = TestContainerConnectionSource.create("test", null,
RedisStackContainer.class, "mycustomimage", annotation, null);
Map<Class<?>, ConnectionDetails> connectionDetails = factories.getConnectionDetails(source, true);
assertThat(connectionDetails.get(RedisConnectionDetails.class)).isNotNull();
}
} }

4
spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/redis/RedisContainerConnectionDetailsFactory.java

@ -19,6 +19,7 @@ package org.springframework.boot.testcontainers.service.connection.redis;
import java.util.List; import java.util.List;
import com.redis.testcontainers.RedisContainer; import com.redis.testcontainers.RedisContainer;
import com.redis.testcontainers.RedisStackContainer;
import org.testcontainers.containers.Container; import org.testcontainers.containers.Container;
import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.GenericContainer;
@ -53,7 +54,8 @@ class RedisContainerConnectionDetailsFactory
protected boolean sourceAccepts(ContainerConnectionSource<Container<?>> source, Class<?> requiredContainerType, protected boolean sourceAccepts(ContainerConnectionSource<Container<?>> source, Class<?> requiredContainerType,
Class<?> requiredConnectionDetailsType) { Class<?> requiredConnectionDetailsType) {
return super.sourceAccepts(source, requiredContainerType, requiredConnectionDetailsType) return super.sourceAccepts(source, requiredContainerType, requiredConnectionDetailsType)
|| source.accepts(ANY_CONNECTION_NAME, RedisContainer.class, requiredConnectionDetailsType); || source.accepts(ANY_CONNECTION_NAME, RedisContainer.class, requiredConnectionDetailsType)
|| source.accepts(ANY_CONNECTION_NAME, RedisStackContainer.class, requiredConnectionDetailsType);
} }
@Override @Override

Loading…
Cancel
Save