@Test public void scriptExistsWithBrokenConnection() { Jedis deadClient = new Jedis(jedis.getClient().getHost(), jedis.getClient().getPort()); deadClient.auth("foobared"); deadClient.clientSetname("DEAD"); ClientKillerUtil.killClient(deadClient, "DEAD"); // sure, script doesn't exist, but it's just for checking connection try { deadClient.scriptExists("abcdefg"); } catch (JedisConnectionException e) { // ignore it } assertEquals(true, deadClient.getClient().isBroken()); deadClient.close(); }
@Test(timeout = DEFAULT_TIMEOUT) public void testReturnConnectionOnJedisConnectionException() throws InterruptedException { Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>(); jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); JedisPoolConfig config = DEFAULT_CONFIG; config.setMaxTotal(1); JedisCluster jc = new JedisCluster(jedisClusterNode, DEFAULT_TIMEOUT, DEFAULT_TIMEOUT, DEFAULT_REDIRECTIONS, "cluster", config); Jedis j = jc.getClusterNodes().get("127.0.0.1:7380").getResource(); ClientKillerUtil.tagClient(j, "DEAD"); ClientKillerUtil.killClient(j, "DEAD"); j.close(); jc.get("test"); }
@Test(timeout = 2000) public void testReturnConnectionOnJedisConnectionException() throws InterruptedException { Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>(); jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(1); JedisCluster jc = new JedisCluster(jedisClusterNode, config); Jedis j = jc.getClusterNodes().get("127.0.0.1:7380").getResource(); ClientKillerUtil.tagClient(j, "DEAD"); ClientKillerUtil.killClient(j, "DEAD"); j.close(); jc.get("test"); }
/** * Test for "Issue - BinaryShardedJedis.disconnect() may occur memory leak". You can find more * detailed information at https://github.com/xetorthio/jedis/issues/808 * @throws InterruptedException */ @Test public void testAvoidLeaksUponDisconnect() throws InterruptedException { List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>(2); // 6379 JedisShardInfo shard1 = new JedisShardInfo(redis1.getHost(), redis1.getPort()); shard1.setPassword("foobared"); shards.add(shard1); // 6380 JedisShardInfo shard2 = new JedisShardInfo(redis2.getHost(), redis2.getPort()); shard2.setPassword("foobared"); shards.add(shard2); @SuppressWarnings("resource") ShardedJedis shardedJedis = new ShardedJedis(shards); // establish the connection for two redis servers shardedJedis.set("a", "bar"); JedisShardInfo ak = shardedJedis.getShardInfo("a"); assertEquals(shard2, ak); shardedJedis.set("b", "bar1"); JedisShardInfo bk = shardedJedis.getShardInfo("b"); assertEquals(shard1, bk); // We set a name to the instance so it's easy to find it Iterator<Jedis> it = shardedJedis.getAllShards().iterator(); Jedis deadClient = it.next(); deadClient.clientSetname("DEAD"); ClientKillerUtil.killClient(deadClient, "DEAD"); assertEquals(true, deadClient.isConnected()); assertEquals(false, deadClient.getClient().getSocket().isClosed()); assertEquals(false, deadClient.getClient().isBroken()); // normal - not found shardedJedis.disconnect(); assertEquals(false, deadClient.isConnected()); assertEquals(true, deadClient.getClient().getSocket().isClosed()); assertEquals(true, deadClient.getClient().isBroken()); Jedis jedis2 = it.next(); assertEquals(false, jedis2.isConnected()); assertEquals(true, jedis2.getClient().getSocket().isClosed()); assertEquals(false, jedis2.getClient().isBroken()); }