JedisPooledClientSideCacheTestBase.java

package redis.clients.jedis.csc;

import org.junit.jupiter.api.Test;
import redis.clients.jedis.EndpointConfig;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPooled;
import redis.clients.jedis.args.ClientType;
import redis.clients.jedis.exceptions.JedisConnectionException;
import redis.clients.jedis.params.ClientKillParams;

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

public abstract class JedisPooledClientSideCacheTestBase extends UnifiedJedisClientSideCacheTestBase {

  protected static EndpointConfig endpoint;

  @Override
  protected JedisPooled createRegularJedis() {
    return new JedisPooled(endpoint.getHostAndPort(), endpoint.getClientConfigBuilder().build());
  }

  @Override
  protected JedisPooled createCachedJedis(CacheConfig cacheConfig) {
    return new JedisPooled(endpoint.getHostAndPort(), endpoint.getClientConfigBuilder().resp3().build(), cacheConfig);
  }

  @Test
  public void clearIfOneDiesTest() {
    try (JedisPooled jedis = createCachedJedis(CacheConfig.builder().build())) {
      Cache cache = jedis.getCache();
      // Create 100 keys
      for (int i = 0; i < 100; i++) {
        jedis.set("key" + i, "value" + i);
      }
      assertEquals(0, cache.getSize());

      // Get 100 keys into the cache
      for (int i = 0; i < 100; i++) {
        jedis.get("key" + i);
      }
      assertEquals(100, cache.getSize());

      try (Jedis killer = new Jedis(endpoint.getHostAndPort(), endpoint.getClientConfigBuilder().build())) {
        killer.clientKill(ClientKillParams.clientKillParams().type(ClientType.NORMAL).skipMe(ClientKillParams.SkipMe.YES));
      }

      try {
        jedis.get("foo");
      } catch (JedisConnectionException jce) {
        // expected
      }
      assertEquals(0, cache.getSize());
    }
  }
}