package com.lambdaworks.redis.cluster;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import com.lambdaworks.redis.ReadFrom;
import com.lambdaworks.redis.cluster.models.partitions.Partitions;
import com.lambdaworks.redis.cluster.models.partitions.RedisClusterNode;
import com.lambdaworks.redis.models.role.RedisNodeDescription;
/**
* @author Mark Paluch
*/
public class ReadFromTest {
private Partitions sut = new Partitions();
private RedisClusterNode nearest = new RedisClusterNode();
private RedisClusterNode master = new RedisClusterNode();
private RedisClusterNode slave = new RedisClusterNode();
@Before
public void before() throws Exception {
master.setFlags(Collections.singleton(RedisClusterNode.NodeFlag.MASTER));
nearest.setFlags(Collections.singleton(RedisClusterNode.NodeFlag.SLAVE));
slave.setFlags(Collections.singleton(RedisClusterNode.NodeFlag.SLAVE));
sut.addPartition(nearest);
sut.addPartition(master);
sut.addPartition(slave);
}
@Test
public void master() throws Exception {
List<RedisNodeDescription> result = ReadFrom.MASTER.select(getNodes());
assertThat(result).hasSize(1).containsOnly(master);
}
@Test
public void masterPreferred() throws Exception {
List<RedisNodeDescription> result = ReadFrom.MASTER_PREFERRED.select(getNodes());
assertThat(result).hasSize(3).containsExactly(master, nearest, slave);
}
@Test
public void slave() throws Exception {
List<RedisNodeDescription> result = ReadFrom.SLAVE.select(getNodes());
assertThat(result).hasSize(2).contains(nearest, slave);
}
@Test
public void nearest() throws Exception {
List<RedisNodeDescription> result = ReadFrom.NEAREST.select(getNodes());
assertThat(result).hasSize(3).containsExactly(nearest, master, slave);
}
@Test(expected = IllegalArgumentException.class)
public void valueOfNull() throws Exception {
ReadFrom.valueOf(null);
}
@Test(expected = IllegalArgumentException.class)
public void valueOfUnknown() throws Exception {
ReadFrom.valueOf("unknown");
}
@Test
public void valueOfNearest() throws Exception {
assertThat(ReadFrom.valueOf("nearest")).isEqualTo(ReadFrom.NEAREST);
}
@Test
public void valueOfMaster() throws Exception {
assertThat(ReadFrom.valueOf("master")).isEqualTo(ReadFrom.MASTER);
}
@Test
public void valueOfMasterPreferred() throws Exception {
assertThat(ReadFrom.valueOf("masterPreferred")).isEqualTo(ReadFrom.MASTER_PREFERRED);
}
@Test
public void valueOfSlave() throws Exception {
assertThat(ReadFrom.valueOf("slave")).isEqualTo(ReadFrom.SLAVE);
}
private ReadFrom.Nodes getNodes() {
return new ReadFrom.Nodes() {
@Override
public List<RedisNodeDescription> getNodes() {
return (List) sut.getPartitions();
}
@Override
public Iterator<RedisNodeDescription> iterator() {
return getNodes().iterator();
}
};
}
}