package voldemort.store.slop.strategy; import static org.junit.Assert.assertEquals; import java.util.List; import org.junit.Test; import voldemort.VoldemortTestConstants; import voldemort.cluster.Cluster; import voldemort.cluster.Node; import com.google.common.collect.Lists; public class ProximityHandoffStrategyTest { @Test public void testTwoZones() { Cluster cluster = VoldemortTestConstants.getEightNodeClusterWithZones(); List<Node> zone0Nodes = Lists.newArrayList(); List<Node> zone1Nodes = Lists.newArrayList(); for(Node node: cluster.getNodes()) { if(node.getZoneId() == 0) { zone0Nodes.add(node); } else if(node.getZoneId() == 1) { zone1Nodes.add(node); } } ProximityHandoffStrategy handoffStrategy = new ProximityHandoffStrategy(cluster, 0); for(Node node: cluster.getNodes()) { List<Node> prefList = handoffStrategy.routeHint(node); for(int i = 0; i < prefList.size(); i++) { if(node.getZoneId() == 0) { if(i < zone0Nodes.size() - 1) { assertEquals(prefList.get(i).getZoneId(), 0); } else { assertEquals(prefList.get(i).getZoneId(), 1); } } else { if(i < zone0Nodes.size()) { assertEquals(prefList.get(i).getZoneId(), 0); } else { assertEquals(prefList.get(i).getZoneId(), 1); } } } } handoffStrategy = new ProximityHandoffStrategy(cluster, 1); for(Node node: cluster.getNodes()) { List<Node> prefList = handoffStrategy.routeHint(node); for(int i = 0; i < prefList.size(); i++) { if(node.getZoneId() == 0) { if(i < zone0Nodes.size()) { assertEquals(prefList.get(i).getZoneId(), 1); } else { assertEquals(prefList.get(i).getZoneId(), 0); } } else { if(i < zone0Nodes.size() - 1) { assertEquals(prefList.get(i).getZoneId(), 1); } else { assertEquals(prefList.get(i).getZoneId(), 0); } } } } } }