ClusterFunctionCommandsTest.java

package redis.clients.jedis.commands.unified.cluster;

import io.redis.test.annotations.SinceRedisVersion;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.junit.jupiter.params.ParameterizedClass;
import org.junit.jupiter.params.provider.MethodSource;
import redis.clients.jedis.DefaultJedisClientConfig;
import redis.clients.jedis.HostAndPorts;
import redis.clients.jedis.RedisProtocol;
import redis.clients.jedis.UnifiedJedis;
import redis.clients.jedis.commands.unified.FunctionCommandsTestBase;
import redis.clients.jedis.exceptions.JedisBroadcastException;
import redis.clients.jedis.exceptions.JedisException;
import redis.clients.jedis.util.EnabledOnCommandCondition;
import redis.clients.jedis.util.RedisVersionCondition;

import java.util.List;
import java.util.stream.Collectors;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.everyItem;
import static org.hamcrest.Matchers.instanceOf;
import static org.junit.jupiter.api.Assertions.assertThrows;

@ParameterizedClass
@MethodSource("redis.clients.jedis.commands.CommandsTestsParameters#respVersions")
public class ClusterFunctionCommandsTest extends FunctionCommandsTestBase {

  public ClusterFunctionCommandsTest(RedisProtocol protocol) {
    super(protocol);
  }

  @RegisterExtension
  public RedisVersionCondition versionCondition = new RedisVersionCondition(
      HostAndPorts.getStableClusterServers().get(0),
      DefaultJedisClientConfig.builder().password("cluster").build());
  @RegisterExtension
  public EnabledOnCommandCondition enabledOnCommandCondition = new EnabledOnCommandCondition(
      HostAndPorts.getStableClusterServers().get(0),
      DefaultJedisClientConfig.builder().password("cluster").build());

  @Override
  protected UnifiedJedis createTestClient() {
    return ClusterCommandsTestHelper.getCleanCluster(protocol);
  }

  @AfterEach
  public void tearDown() {
    ClusterCommandsTestHelper.clearClusterData();
  }

  @Test
  @SinceRedisVersion(value = "7.0.0")
  @Override
  public void testFunctionKill() {
    JedisException e = assertThrows(JedisException.class, () -> jedis.functionKill());
    assertThat(e, instanceOf(JedisBroadcastException.class));
    JedisBroadcastException jbe = (JedisBroadcastException) e;
    List<String> replies = jbe.getReplies().values().stream().map(e1 -> (Exception) e1)
        .map(Exception::getMessage).collect(Collectors.toList());
    assertThat(replies.size(), equalTo(3));
    assertThat(replies, everyItem(containsString("No scripts in execution right now")));
  }

}