ClusterBitCommandsTest.java

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

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
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.util.EnabledOnCommandCondition;
import redis.clients.jedis.util.RedisVersionCondition;
import redis.clients.jedis.DefaultJedisClientConfig;
import redis.clients.jedis.HostAndPorts;
import redis.clients.jedis.RedisProtocol;
import redis.clients.jedis.args.BitOP;
import redis.clients.jedis.commands.unified.BitCommandsTestBase;
import redis.clients.jedis.exceptions.JedisDataException;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;

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

  @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());

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

  @BeforeEach
  public void setUp() {
    jedis = ClusterCommandsTestHelper.getCleanCluster(protocol);
  }

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

  @Test
  @Override
  public void bitOp() {
    jedis.set("{key}1", "\u0060");
    jedis.set("{key}2", "\u0044");

    jedis.bitop(BitOP.AND, "resultAnd{key}", "{key}1", "{key}2");
    String resultAnd = jedis.get("resultAnd{key}");
    assertEquals("\u0040", resultAnd);

    jedis.bitop(BitOP.OR, "resultOr{key}", "{key}1", "{key}2");
    String resultOr = jedis.get("resultOr{key}");
    assertEquals("\u0064", resultOr);

    jedis.bitop(BitOP.XOR, "resultXor{key}", "{key}1", "{key}2");
    String resultXor = jedis.get("resultXor{key}");
    assertEquals("\u0024", resultXor);
  }

  @Test
  @Override
  public void bitOpNot() {
    jedis.setbit("key", 0, true);
    jedis.setbit("key", 4, true);

    jedis.bitop(BitOP.NOT, "resultNot{key}", "key");
    String resultNot = jedis.get("resultNot{key}");
    assertEquals("\u0077", resultNot);
  }

  @Disabled
  @Override
  public void bitOpBinary() {
  }

  @Test
  @Override
  public void bitOpNotMultiSourceShouldFail() {
    assertThrows(JedisDataException.class,
        () -> jedis.bitop(BitOP.NOT, "{!}dest", "{!}src1", "{!}src2"));
  }

}