PrefixedKeysTest.java

package redis.clients.jedis.prefix;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import redis.clients.jedis.AbstractPipeline;
import redis.clients.jedis.AbstractTransaction;
import redis.clients.jedis.UnifiedJedis;
import redis.clients.jedis.resps.Tuple;
import redis.clients.jedis.util.PrefixedKeyArgumentPreProcessor;
import redis.clients.jedis.util.SafeEncoder;

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

public abstract class PrefixedKeysTest<T extends UnifiedJedis> {

    abstract T nonPrefixingJedis();

    T prefixingJedis() {
        T jedis = nonPrefixingJedis();
        jedis.setKeyArgumentPreProcessor(new PrefixedKeyArgumentPreProcessor("test-prefix:"));
        return jedis;
    }

    @AfterEach
    public void cleanUp() {
        try (UnifiedJedis jedis = prefixingJedis()) {
            jedis.flushAll();
        }
    }

    @Test
    public void prefixesKeys() {
        try (UnifiedJedis jedis = prefixingJedis()) {
            jedis.set("foo1", "bar1");
            jedis.set(SafeEncoder.encode("foo2"), SafeEncoder.encode("bar2"));
            AbstractPipeline pipeline = jedis.pipelined();
            pipeline.incr("foo3");
            pipeline.zadd("foo4", 1234, "bar4");
            pipeline.sync();
        }

        try (UnifiedJedis jedis = nonPrefixingJedis()) {
            assertEquals("bar1", jedis.get("test-prefix:foo1"));
            assertEquals("bar2", jedis.get("test-prefix:foo2"));
            assertEquals("1", jedis.get("test-prefix:foo3"));
            assertEquals(new Tuple("bar4", 1234d), jedis.zpopmax("test-prefix:foo4"));
        }
    }

    @Test
    public void prefixesKeysInTransaction() {
        try (UnifiedJedis jedis = prefixingJedis()) {
            AbstractTransaction transaction = jedis.multi();
            transaction.set("foo1", "bar1-from-transaction");
            transaction.hset("foo2", "bar2-key", "bar2-value");
            transaction.exec();
        }

        try (UnifiedJedis jedis = nonPrefixingJedis()) {
            assertEquals("bar1-from-transaction", jedis.get("test-prefix:foo1"));
            assertEquals("bar2-value", jedis.hget("test-prefix:foo2", "bar2-key"));
        }
    }
}