|
| 1 | +package com.redis.testcontainers.junit; |
| 2 | + |
| 3 | +import java.util.Arrays; |
| 4 | +import java.util.Collection; |
| 5 | +import java.util.HashMap; |
| 6 | +import java.util.Map; |
| 7 | + |
| 8 | +import org.junit.jupiter.api.Assertions; |
| 9 | +import org.junit.jupiter.params.ParameterizedTest; |
| 10 | +import org.testcontainers.junit.jupiter.Container; |
| 11 | + |
| 12 | +import com.redis.enterprise.Database; |
| 13 | +import com.redis.enterprise.RedisModule; |
| 14 | +import com.redis.lettucemod.api.sync.RedisModulesCommands; |
| 15 | +import com.redis.lettucemod.api.sync.RedisTimeSeriesCommands; |
| 16 | +import com.redis.lettucemod.search.Field; |
| 17 | +import com.redis.lettucemod.search.SearchResults; |
| 18 | +import com.redis.lettucemod.timeseries.CreateOptions; |
| 19 | +import com.redis.testcontainers.RedisEnterpriseContainer; |
| 20 | +import com.redis.testcontainers.RedisModulesContainer; |
| 21 | +import com.redis.testcontainers.RedisServer; |
| 22 | + |
| 23 | +class RedisModulesTests extends AbstractTestcontainersRedisTestBase { |
| 24 | + |
| 25 | + @Container |
| 26 | + private static final RedisModulesContainer REDIS_MOD = new RedisModulesContainer( |
| 27 | + RedisModulesContainer.DEFAULT_IMAGE_NAME.withTag(RedisModulesContainer.DEFAULT_TAG)); |
| 28 | + |
| 29 | + @Container |
| 30 | + private static final RedisEnterpriseContainer REDIS_ENTERPRISE = new RedisEnterpriseContainer( |
| 31 | + RedisEnterpriseContainer.DEFAULT_IMAGE_NAME.withTag(RedisEnterpriseContainer.DEFAULT_TAG)) |
| 32 | + .withDatabase(Database.name("RedisEnterpriseContainerTests").ossCluster(true) |
| 33 | + .modules(RedisModule.SEARCH, RedisModule.GEARS, RedisModule.TIMESERIES).build()); |
| 34 | + |
| 35 | + @Override |
| 36 | + protected Collection<RedisServer> servers() { |
| 37 | + return Arrays.asList(REDIS_MOD, REDIS_ENTERPRISE); |
| 38 | + } |
| 39 | + |
| 40 | + @ParameterizedTest |
| 41 | + @RedisTestContextsSource |
| 42 | + void gearsPyExecute(RedisTestContext context) { |
| 43 | + RedisModulesCommands<String, String> sync = context.sync(); |
| 44 | + sync.set("foo", "bar"); |
| 45 | + String sleepPy = "def sleep(x):\n" + " from time import sleep\n" + " sleep(1)\n" + " return 1\n" + "\n" |
| 46 | + + "GB().map(sleep).run()"; |
| 47 | + Assertions.assertTrue(sync.pyexecute(sleepPy).getErrors().isEmpty()); |
| 48 | + Assertions.assertTrue(sync.pyexecute("GB().run()").isOk()); |
| 49 | + } |
| 50 | + |
| 51 | + @ParameterizedTest |
| 52 | + @RedisTestContextsSource |
| 53 | + void timeSeries(RedisTestContext context) { |
| 54 | + RedisTimeSeriesCommands<String, String> ts = context.sync(); |
| 55 | + ts.create("temperature:3:11", CreateOptions.<String, String>builder().retentionTime(6000) |
| 56 | + .label("sensor_id", "2").label("area_id", "32").build()); |
| 57 | + // TS.ADD temperature:3:11 1548149181 30 |
| 58 | + Long add1 = ts.add("temperature:3:11", 1548149181, 30); |
| 59 | + Assertions.assertEquals(1548149181, add1); |
| 60 | + } |
| 61 | + |
| 62 | + @ParameterizedTest |
| 63 | + @RedisTestContextsSource |
| 64 | + void search(RedisTestContext context) { |
| 65 | + context.sync().create("test", Field.text("name").build(), Field.tag("id").build()); |
| 66 | + for (int index = 0; index < 10; index++) { |
| 67 | + Map<String, String> hash = new HashMap<>(); |
| 68 | + hash.put("name", "name " + index); |
| 69 | + hash.put("id", String.valueOf(index + 1)); |
| 70 | + context.sync().hset("hash:" + index, hash); |
| 71 | + } |
| 72 | + SearchResults<String, String> results = context.sync().search("test", "*"); |
| 73 | + Assertions.assertEquals(10, results.getCount()); |
| 74 | + } |
| 75 | + |
| 76 | +} |
0 commit comments