Skip to content

Commit 016ace4

Browse files
committed
added modules container
1 parent 931fceb commit 016ace4

File tree

5 files changed

+69
-13
lines changed

5 files changed

+69
-13
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ repositories {
2626
dependencies {
2727
compileOnly group: 'org.projectlombok', name: 'lombok', version: lombok_version
2828
annotationProcessor group: 'org.projectlombok', name: 'lombok', version: lombok_version
29-
implementation 'io.lettuce:lettuce-core:6.1.1.RELEASE'
29+
implementation 'com.redislabs:mesclun:1.2.1'
3030
api 'org.junit.jupiter:junit-jupiter-api'
3131
api 'org.junit.jupiter:junit-jupiter-engine'
3232
api 'org.junit.jupiter:junit-jupiter-params'

src/main/java/com/redislabs/testcontainers/BaseRedisModulesTest.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.redislabs.testcontainers;
22

3+
import com.redislabs.mesclun.RedisModulesAsyncCommands;
4+
import com.redislabs.mesclun.RedisModulesCommands;
5+
import com.redislabs.mesclun.RedisModulesReactiveCommands;
36
import io.lettuce.core.api.async.BaseRedisAsyncCommands;
47
import io.lettuce.core.api.reactive.BaseRedisReactiveCommands;
58
import io.lettuce.core.api.sync.BaseRedisCommands;
@@ -18,36 +21,30 @@ public class BaseRedisModulesTest {
1821
@Container
1922
protected static final RedisModulesContainer REDIS = new RedisModulesContainer();
2023

21-
@Container
22-
protected static final RedisModulesContainer REDIS_CLUSTER = new RedisModulesContainer().withClusterMode();
23-
2424
@BeforeAll
2525
static void isRunning() {
2626
Assertions.assertTrue(REDIS.isRunning());
27-
Assertions.assertTrue(REDIS_CLUSTER.isRunning());
2827
}
2928

3029
@AfterEach
3130
public void cleanupEach() {
3231
RedisServerCommands<String, String> redisCommands = REDIS.sync();
3332
redisCommands.flushall();
34-
RedisServerCommands<String, String> redisClusterCommands = REDIS_CLUSTER.sync();
35-
redisClusterCommands.flushall();
3633
}
3734

38-
static Stream<RedisContainer> containers() {
39-
return Stream.of(REDIS, REDIS_CLUSTER);
35+
static Stream<RedisModulesContainer> containers() {
36+
return Stream.of(REDIS);
4037
}
4138

42-
static Stream<BaseRedisCommands<String, String>> sync() {
39+
static Stream<RedisModulesCommands<String, String>> sync() {
4340
return containers().map(RedisContainer::sync);
4441
}
4542

46-
static Stream<BaseRedisAsyncCommands<String, String>> async() {
43+
static Stream<RedisModulesAsyncCommands<String, String>> async() {
4744
return containers().map(RedisContainer::async);
4845
}
4946

50-
static Stream<BaseRedisReactiveCommands<String, String>> reactive() {
47+
static Stream<RedisModulesReactiveCommands<String, String>> reactive() {
5148
return containers().map(RedisContainer::reactive);
5249
}
5350

src/main/java/com/redislabs/testcontainers/RedisContainer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public class RedisContainer extends GenericContainer<RedisContainer> {
2727

2828
public static final int REDIS_PORT = 6379;
2929

30-
private boolean cluster;
30+
protected boolean cluster;
3131

3232
public RedisContainer() {
3333
this(DEFAULT_IMAGE_NAME.withTag(DEFAULT_TAG));

src/main/java/com/redislabs/testcontainers/RedisModulesContainer.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package com.redislabs.testcontainers;
22

3+
import com.redislabs.mesclun.RedisModulesClient;
4+
import io.lettuce.core.api.StatefulConnection;
35
import org.testcontainers.utility.DockerImageName;
46

7+
import java.util.function.Supplier;
8+
59
public class RedisModulesContainer extends RedisContainer {
610

711
private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("redislabs/redismod");
@@ -19,4 +23,12 @@ public RedisModulesContainer(final DockerImageName dockerImageName) {
1923
protected DockerImageName defaultImageName() {
2024
return DEFAULT_IMAGE_NAME;
2125
}
26+
27+
@Override
28+
public Supplier<StatefulConnection<String, String>> connectionSupplier() {
29+
if (cluster) {
30+
throw new UnsupportedOperationException("Redis Modules container does not support cluster mode");
31+
}
32+
return RedisModulesClient.create(redisUri())::connect;
33+
}
2234
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.redislabs.testcontainers;
2+
3+
import com.redislabs.mesclun.gears.RedisGearsCommands;
4+
import com.redislabs.mesclun.gears.output.ExecutionResults;
5+
import com.redislabs.mesclun.timeseries.CreateOptions;
6+
import com.redislabs.mesclun.timeseries.Label;
7+
import com.redislabs.mesclun.timeseries.RedisTimeSeriesCommands;
8+
import io.lettuce.core.api.sync.BaseRedisCommands;
9+
import io.lettuce.core.api.sync.RedisHashCommands;
10+
import org.junit.jupiter.api.Assertions;
11+
import org.junit.jupiter.params.ParameterizedTest;
12+
import org.junit.jupiter.params.provider.MethodSource;
13+
import org.testcontainers.junit.jupiter.Testcontainers;
14+
15+
import java.util.HashMap;
16+
import java.util.Map;
17+
18+
@Testcontainers
19+
public class TestRedisModulesContainer extends BaseRedisModulesTest {
20+
21+
22+
@ParameterizedTest(name = "can ping {0}")
23+
@MethodSource("containers")
24+
void canPing(RedisModulesContainer redisContainer) {
25+
BaseRedisCommands<String, String> commands = redisContainer.sync();
26+
Assertions.assertEquals("PONG", commands.ping());
27+
}
28+
29+
@ParameterizedTest(name = "can execute RedisGears function on {0}")
30+
@MethodSource("containers")
31+
void canExecuteRedisGearsFunction(RedisModulesContainer redisContainer) {
32+
RedisGearsCommands<String, String> gears = redisContainer.sync();
33+
ExecutionResults results = gears.pyExecute("GB().run()");
34+
Assertions.assertTrue(results.isOk());
35+
}
36+
37+
@ParameterizedTest(name = "can write to RedisTimeSeries at {0}")
38+
@MethodSource("containers")
39+
void canWriteToRedisTimeSeries(RedisModulesContainer redisContainer) {
40+
RedisTimeSeriesCommands<String, String> ts = redisContainer.sync();
41+
ts.create("temperature:3:11", CreateOptions.builder().retentionTime(6000).build(), Label.of("sensor_id", "2"), Label.of("area_id", "32"));
42+
// TS.ADD temperature:3:11 1548149181 30
43+
Long add1 = ts.add("temperature:3:11", 1548149181, 30);
44+
Assertions.assertEquals(1548149181, add1);
45+
}
46+
47+
}

0 commit comments

Comments
 (0)