diff --git a/Makefile b/Makefile index 2987ad80dd..9baef62196 100644 --- a/Makefile +++ b/Makefile @@ -442,7 +442,7 @@ stop: test: compile-module start sleep 2 - mvn -Dtest=${SKIP_SSL}${TEST} clean compile test + mvn -Dredisversion=${REDIS_VERSION} -Dtest=${SKIP_SSL}${TEST} clean compile test make stop package: start diff --git a/pom.xml b/pom.xml index f2995791da..85b7e8da15 100644 --- a/pom.xml +++ b/pom.xml @@ -72,7 +72,16 @@ gson 2.10.1 - + + org.junit.jupiter + junit-jupiter + 5.9.2 + + + org.junit.platform + junit-platform-launcher + 1.9.2 + junit junit diff --git a/src/test/java/redis/clients/jedis/commands/jedis/JedisCommandsTestBase.java b/src/test/java/redis/clients/jedis/commands/jedis/JedisCommandsTestBase.java index c69302d3c5..99b2728300 100644 --- a/src/test/java/redis/clients/jedis/commands/jedis/JedisCommandsTestBase.java +++ b/src/test/java/redis/clients/jedis/commands/jedis/JedisCommandsTestBase.java @@ -1,7 +1,7 @@ package redis.clients.jedis.commands.jedis; -import org.junit.After; -import org.junit.Before; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.AfterEach; import redis.clients.jedis.DefaultJedisClientConfig; import redis.clients.jedis.HostAndPort; @@ -19,7 +19,7 @@ public JedisCommandsTestBase() { super(); } - @Before + @BeforeEach public void setUp() throws Exception { // jedis = new Jedis(hnp, DefaultJedisClientConfig.builder().timeoutMillis(500).password("foobared").build()); jedis = new Jedis(hnp, DefaultJedisClientConfig.builder() @@ -27,7 +27,7 @@ public void setUp() throws Exception { jedis.flushAll(); } - @After + @AfterEach public void tearDown() throws Exception { jedis.close(); } diff --git a/src/test/java/redis/clients/jedis/commands/jedis/SetCommandsTest.java b/src/test/java/redis/clients/jedis/commands/jedis/SetCommandsTest.java index 4d29392fce..a36f1d0847 100644 --- a/src/test/java/redis/clients/jedis/commands/jedis/SetCommandsTest.java +++ b/src/test/java/redis/clients/jedis/commands/jedis/SetCommandsTest.java @@ -19,7 +19,9 @@ import java.util.List; import java.util.Set; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import redis.clients.jedis.versiontag.EnabledOnRedis; +import redis.clients.jedis.versiontag.RedisType; import redis.clients.jedis.params.ScanParams; import redis.clients.jedis.resps.ScanResult; @@ -283,6 +285,7 @@ public void sismember() { } @Test + @EnabledOnRedis({RedisType.REDIS_UNSTABLE, RedisType.REDIS_7}) public void smismember() { jedis.sadd("foo", "a", "b"); @@ -323,6 +326,7 @@ public void sinter() { } @Test + @EnabledOnRedis({RedisType.REDIS_UNSTABLE, RedisType.REDIS_7}) public void sinterstore() { jedis.sadd("foo", "a"); jedis.sadd("foo", "b"); @@ -356,6 +360,7 @@ public void sinterstore() { } @Test + @EnabledOnRedis({RedisType.REDIS_UNSTABLE, RedisType.REDIS_7}) public void sintercard() { jedis.sadd("foo", "a"); jedis.sadd("foo", "b"); diff --git a/src/test/java/redis/clients/jedis/versiontag/CustomExecutionCondition.java b/src/test/java/redis/clients/jedis/versiontag/CustomExecutionCondition.java new file mode 100644 index 0000000000..b3b69c8cb4 --- /dev/null +++ b/src/test/java/redis/clients/jedis/versiontag/CustomExecutionCondition.java @@ -0,0 +1,46 @@ +package redis.clients.jedis.versiontag; + +import org.junit.jupiter.api.extension.ConditionEvaluationResult; +import org.junit.jupiter.api.extension.ExecutionCondition; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.platform.commons.util.AnnotationUtils; + +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + +import static java.lang.System.getenv; + +public class CustomExecutionCondition implements ExecutionCondition { + + @Override + public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) { + Optional optional = AnnotationUtils.findAnnotation(context.getElement(), + EnabledOnRedis.class); + + if (optional.isPresent()) { + List typeList = Arrays.asList(optional.get().value()); + String type = System.getProperty("redisversion"); + if (type == null || type.isEmpty()) type = "REDIS_UNSTABLE"; + + RedisType Redis_type = null; + try { + Redis_type = Enum.valueOf(RedisType.class, type.toUpperCase()); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + System.out.println("Supported engines are: "); + for (RedisType et : RedisType.values()) { + System.out.println(et.name()); + } + System.exit(1); + } + + if (typeList.contains(Redis_type)) { + return ConditionEvaluationResult.enabled("Test is enabled for engine " + Redis_type.name()); + } else { + return ConditionEvaluationResult.disabled("Test is disabled for engine " + Redis_type.name()); + } + } + return ConditionEvaluationResult.enabled("@EnabledOnEngine is not present"); + } +} diff --git a/src/test/java/redis/clients/jedis/versiontag/EnabledOnRedis.java b/src/test/java/redis/clients/jedis/versiontag/EnabledOnRedis.java new file mode 100644 index 0000000000..1d0689f5ee --- /dev/null +++ b/src/test/java/redis/clients/jedis/versiontag/EnabledOnRedis.java @@ -0,0 +1,15 @@ +package redis.clients.jedis.versiontag; + +import org.junit.jupiter.api.extension.ExtendWith; + +import java.lang.annotation.*; + +@Target({ ElementType.TYPE, ElementType.METHOD }) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +@Documented +@ExtendWith(CustomExecutionCondition.class) +public @interface EnabledOnRedis { + RedisType[] value(); +} + diff --git a/src/test/java/redis/clients/jedis/versiontag/RedisType.java b/src/test/java/redis/clients/jedis/versiontag/RedisType.java new file mode 100644 index 0000000000..a6b491c3cf --- /dev/null +++ b/src/test/java/redis/clients/jedis/versiontag/RedisType.java @@ -0,0 +1,8 @@ +package redis.clients.jedis.versiontag; + +public enum RedisType { + REDIS_6, + REDIS_7, + REDIS_UNSTABLE +} +