Skip to content

Commit f9c02e2

Browse files
committed
Added junit-jupiter project
1 parent 883ac4a commit f9c02e2

33 files changed

+543
-236
lines changed

build.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ config {
4848
}
4949
}
5050

51+
eclipse {
52+
project {
53+
name = 'testcontainers-redis-root'
54+
}
55+
}
56+
5157
allprojects {
5258
repositories {
5359
gradlePluginPortal()

settings.gradle

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,7 @@ projects {
3232
}
3333

3434
enforce {
35-
mergeStrategy = 'append'
35+
36+
enabled = false
3637

37-
rule(enforcer.rules.ForceDependencies) { r ->
38-
r.dependencies.addAll "org.slf4j:slf4j-api:1.7.30",
39-
"org.junit.jupiter:junit-jupiter-api:5.7.2"
40-
}
4138
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
project_description = "Testcontainers Redis :: JUnit Jupiter Extension"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.redis.testcontainers.junit.jupiter;
2+
3+
import java.util.Collection;
4+
import java.util.stream.Collectors;
5+
6+
import org.awaitility.Awaitility;
7+
import org.junit.jupiter.api.AfterAll;
8+
import org.junit.jupiter.api.BeforeAll;
9+
import org.junit.jupiter.api.BeforeEach;
10+
import org.junit.jupiter.api.TestInstance;
11+
import org.junit.jupiter.api.TestInstance.Lifecycle;
12+
import org.testcontainers.junit.jupiter.Testcontainers;
13+
14+
import com.redis.testcontainers.RedisServer;
15+
16+
/**
17+
* <code>
18+
*
19+
* &#64;ParameterizedTest
20+
* &#64;RedisTestContextsSource
21+
* void myTest(RedisTestContext redis) {
22+
* ...
23+
* }
24+
* </code>
25+
*
26+
* @author jruaux
27+
*
28+
*/
29+
@Testcontainers
30+
@TestInstance(Lifecycle.PER_CLASS)
31+
public abstract class AbstractTestcontainersRedisTestBase {
32+
33+
private Collection<RedisTestContext> contexts;
34+
35+
protected abstract Collection<RedisServer> servers();
36+
37+
protected Collection<RedisTestContext> getContexts() {
38+
return contexts;
39+
}
40+
41+
@BeforeAll
42+
protected void setupContexts() {
43+
contexts = servers().stream().map(RedisTestContext::new).collect(Collectors.toList());
44+
}
45+
46+
@BeforeEach
47+
protected void flushAll() {
48+
contexts.forEach(c -> {
49+
c.sync().flushall();
50+
Awaitility.await().until(() -> c.sync().dbsize() == 0);
51+
});
52+
}
53+
54+
@AfterAll
55+
protected void teardownContexts() {
56+
contexts.forEach(RedisTestContext::close);
57+
}
58+
59+
}
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
package com.redis.testcontainers.junit.jupiter;
2+
3+
import com.redis.lettucemod.RedisModulesClient;
4+
import com.redis.lettucemod.api.StatefulRedisModulesConnection;
5+
import com.redis.lettucemod.api.async.RedisModulesAsyncCommands;
6+
import com.redis.lettucemod.api.reactive.RedisModulesReactiveCommands;
7+
import com.redis.lettucemod.api.sync.RedisModulesCommands;
8+
import com.redis.lettucemod.cluster.RedisModulesClusterClient;
9+
import com.redis.testcontainers.RedisServer;
10+
11+
import io.lettuce.core.AbstractRedisClient;
12+
import io.lettuce.core.RedisClient;
13+
import io.lettuce.core.cluster.RedisClusterClient;
14+
import io.lettuce.core.pubsub.StatefulRedisPubSubConnection;
15+
16+
public class RedisTestContext implements AutoCloseable {
17+
18+
private final RedisServer server;
19+
private final AbstractRedisClient client;
20+
private StatefulRedisModulesConnection<String, String> connection;
21+
private StatefulRedisPubSubConnection<String, String> pubSubConnection;
22+
23+
public RedisTestContext(RedisServer server) {
24+
this.server = server;
25+
this.client = client(server);
26+
}
27+
28+
private AbstractRedisClient client(RedisServer server) {
29+
if (server.isCluster()) {
30+
return RedisModulesClusterClient.create(server.getRedisURI());
31+
}
32+
return RedisModulesClient.create(server.getRedisURI());
33+
}
34+
35+
public RedisServer getServer() {
36+
return server;
37+
}
38+
39+
public AbstractRedisClient getClient() {
40+
return client;
41+
}
42+
43+
public StatefulRedisModulesConnection<String, String> getConnection() {
44+
if (connection == null) {
45+
this.connection = connection();
46+
}
47+
return connection;
48+
}
49+
50+
public StatefulRedisPubSubConnection<String, String> getPubSubConnection() {
51+
if (pubSubConnection == null) {
52+
pubSubConnection = pubSubConnection();
53+
}
54+
return pubSubConnection;
55+
}
56+
57+
private StatefulRedisModulesConnection<String, String> connection() {
58+
if (client instanceof RedisModulesClusterClient) {
59+
return ((RedisModulesClusterClient) client).connect();
60+
}
61+
return ((RedisModulesClient) client).connect();
62+
}
63+
64+
private StatefulRedisPubSubConnection<String, String> pubSubConnection() {
65+
if (client instanceof RedisModulesClusterClient) {
66+
return ((RedisModulesClusterClient) client).connectPubSub();
67+
}
68+
return ((RedisModulesClient) client).connectPubSub();
69+
}
70+
71+
public RedisModulesCommands<String, String> sync() {
72+
return getConnection().sync();
73+
}
74+
75+
public RedisModulesAsyncCommands<String, String> async() {
76+
return getConnection().async();
77+
}
78+
79+
public RedisModulesReactiveCommands<String, String> reactive() {
80+
return getConnection().reactive();
81+
}
82+
83+
@Override
84+
public void close() {
85+
if (pubSubConnection != null) {
86+
pubSubConnection.close();
87+
}
88+
if (connection != null) {
89+
connection.close();
90+
}
91+
client.shutdown();
92+
client.getResources().shutdown();
93+
}
94+
95+
public RedisClient getRedisClient() {
96+
return (RedisClient) client;
97+
}
98+
99+
public RedisClusterClient getRedisClusterClient() {
100+
return (RedisClusterClient) client;
101+
}
102+
103+
public boolean isCluster() {
104+
return client instanceof RedisClusterClient;
105+
}
106+
107+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.redis.testcontainers.junit.jupiter;
2+
3+
import java.util.stream.Stream;
4+
5+
import org.junit.jupiter.api.extension.ExtensionContext;
6+
import org.junit.jupiter.params.provider.Arguments;
7+
import org.junit.jupiter.params.provider.ArgumentsProvider;
8+
9+
class RedisTestContextsProvider implements ArgumentsProvider {
10+
11+
@Override
12+
public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
13+
AbstractTestcontainersRedisTestBase instance = (AbstractTestcontainersRedisTestBase) context.getRequiredTestInstance();
14+
return instance.getContexts().stream().map(Arguments::of);
15+
}
16+
17+
}

0 commit comments

Comments
 (0)