#582: Unit test to reproduce the issue and test the fix

pull/583/head
Shailender R. Bathula 9 years ago
parent 3b5c1f848b
commit 1a87a5edda

@ -0,0 +1,70 @@
package org.redisson.connection.balancer;
import static com.jayway.awaitility.Awaitility.await;
import static org.assertj.core.api.Assertions.assertThat;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import org.junit.Test;
import org.redisson.RedisRunner;
import org.redisson.RedisRunner.RedisProcess;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.config.ReadMode;
public class WeightedRoundRobinBalancerTest {
@Test
public void testUseMasterForReadsIfNoConnectionsToSlaves() throws IOException, InterruptedException {
RedisProcess master = null;
RedisProcess slave = null;
RedissonClient client = null;
try {
master = redisTestInstance(6379);
slave = redisTestInstance(6380);
Map<String, Integer> weights = new HashMap<>();
weights.put("127.0.0.1:6379", 1);
weights.put("127.0.0.1:6380", 2);
Config config = new Config();
config.useMasterSlaveServers()
.setReadMode(ReadMode.SLAVE)
.setMasterAddress("127.0.0.1:6379")
.addSlaveAddress("127.0.0.1:6380")
.setLoadBalancer(new WeightedRoundRobinBalancer(weights, 1));
client = Redisson.create(config);
// To simulate network connection issues to slave, stop the slave
// after creating the client. Cannot create the client without the
// slave running. See https://github.com/mrniko/redisson/issues/580
slave.stop();
RedissonClient clientCopy = client;
await().atMost(5, TimeUnit.SECONDS).until(() -> assertThat(clientCopy.getBucket("key").get()).isNull());
} finally {
if (master != null) {
master.stop();
}
if (slave != null) {
slave.stop();
}
if (client != null) {
client.shutdown();
}
}
}
private RedisProcess redisTestInstance(int port) throws IOException, InterruptedException {
return new RedisRunner()
.nosave()
.randomDir()
.port(port)
.run();
}
}
Loading…
Cancel
Save