Skip to content

Commit

Permalink
Add a unit test for HandoffToAllStrategy
Browse files Browse the repository at this point in the history
  • Loading branch information
afeinberg committed Oct 26, 2010
1 parent 862e6e3 commit bc94db4
Show file tree
Hide file tree
Showing 3 changed files with 156 additions and 0 deletions.
8 changes: 8 additions & 0 deletions test/common/voldemort/VoldemortTestConstants.java
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@ public static String getFourNodeClusterWithZonesXml() {
return readString("config/four-node-cluster-with-zones.xml");
}

public static String getEightNodeClusterWithZonesXml() {
return readString("config/eight-node-cluster-with-zones.xml");
}

public static String getSingleStoreWithZonesXml() {
return readString("config/single-store-with-zones.xml");
}
Expand All @@ -94,6 +98,10 @@ public static Cluster getFourNodeClusterWithZones() {
return new ClusterMapper().readCluster(new StringReader(getFourNodeClusterWithZonesXml()));
}

public static Cluster getEightNodeClusterWithZones() {
return new ClusterMapper().readCluster(new StringReader(getEightNodeClusterWithZonesXml()));
}

private static String readString(String filename) {
try {
return IOUtils.toString(VoldemortTestConstants.class.getResourceAsStream(filename));
Expand Down
86 changes: 86 additions & 0 deletions test/common/voldemort/config/eight-node-cluster-with-zones.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
<?xml version="1.0"?>
<cluster>
<name>mycluster</name>
<zone>
<zone-id>0</zone-id>
<proximity-list>1</proximity-list>
</zone>
<zone>
<zone-id>1</zone-id>
<proximity-list>0</proximity-list>
</zone>
<server>
<id>0</id>
<host>localhost</host>
<http-port>8080</http-port>
<socket-port>6666</socket-port>
<admin-port>7666</admin-port>
<partitions>16, 3, 21</partitions>
<zone-id>0</zone-id>
</server>
<server>
<id>1</id>
<host>localhost</host>
<http-port>8081</http-port>
<socket-port>6667</socket-port>
<admin-port>7667</admin-port>
<partitions>23, 18, 13</partitions>
<zone-id>0</zone-id>
</server>
<server>
<id>2</id>
<host>localhost</host>
<http-port>8082</http-port>
<socket-port>6668</socket-port>
<admin-port>7668</admin-port>
<partitions>22, 12</partitions>
<zone-id>0</zone-id>
</server>
<server>
<id>3</id>
<host>localhost</host>
<http-port>8083</http-port>
<socket-port>6669</socket-port>
<admin-port>7669</admin-port>
<partitions>2, 17, 24</partitions>
<zone-id>0</zone-id>
</server>
<server>
<id>4</id>
<host>localhost</host>
<http-port>8084</http-port>
<socket-port>6670</socket-port>
<admin-port>7670</admin-port>
<partitions>11, 25, 10</partitions>
<zone-id>1</zone-id>
</server>
<server>
<id>5</id>
<host>localhost</host>
<http-port>8085</http-port>
<socket-port>6671</socket-port>
<admin-port>7671</admin-port>
<partitions>
4, 19, 5, 8, 15
</partitions>
<zone-id>1</zone-id>
</server>
<server>
<id>6</id>
<host>localhost</host>
<http-port>8086</http-port>
<socket-port>6672</socket-port>
<admin-port>7672</admin-port>
<partitions>20, 0, 14</partitions>
<zone-id>1</zone-id>
</server>
<server>
<id>7</id>
<host>localhost</host>
<http-port>8087</http-port>
<socket-port>6673</socket-port>
<admin-port>7673</admin-port>
<partitions>1, 7, 9, 6</partitions>
<zone-id>1</zone-id>
</server>
</cluster>
62 changes: 62 additions & 0 deletions test/unit/voldemort/store/slop/HandoffToAllStrategyTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package voldemort.store.slop;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import org.junit.Test;
import voldemort.VoldemortTestConstants;
import voldemort.cluster.Cluster;
import voldemort.cluster.Node;

import java.util.List;

import static org.junit.Assert.*;

public class HandoffToAllStrategyTest {

@Test
public void testRouteHint() {
Cluster cluster = VoldemortTestConstants.getNineNodeCluster();
HintedHandoffStrategy handoffStrategy = new HandoffToAllStrategy(cluster, false, 0);
for(Node origin: cluster.getNodes()) {
List<Node> nodes = handoffStrategy.routeHint(origin);
assertTrue("hint preflist is correctly sized", nodes.size() == cluster.getNumberOfNodes() - 1);
assertFalse("hint preflist doesn't include self", nodes.contains(origin));
}
}

@Test
public void testRouteHintWithZones() {
Cluster cluster = VoldemortTestConstants.getEightNodeClusterWithZones();
HintedHandoffStrategy handoffStrategy0 = new HandoffToAllStrategy(cluster, true, 0);
HintedHandoffStrategy handoffStrategy1 = new HandoffToAllStrategy(cluster, true, 1);

List<Node> zone0Nodes = Lists.newArrayList();
List<Node> zone1Nodes = Lists.newArrayList();
for(int nodeId: ImmutableList.of(0, 1, 2, 3))
zone0Nodes.add(cluster.getNodeById(nodeId));
for(int nodeId: ImmutableList.of(4, 5, 6, 7))
zone1Nodes.add(cluster.getNodeById(nodeId));

for(Node origin: zone0Nodes) {
List<Node> nodes = handoffStrategy0.routeHint(origin);
assertFalse("hint preflist doesn't include self", nodes.contains(origin));
for(Node node: nodes)
assertFalse("local hints not routed remotely", zone1Nodes.contains(node));
nodes = handoffStrategy1.routeHint(origin);
assertFalse("hint preflist doesn't include self", nodes.contains(origin));
for(Node node: nodes)
assertTrue("remote hints routed locally", zone1Nodes.contains(node));
}

for(Node origin: zone1Nodes) {
List<Node> nodes = handoffStrategy1.routeHint(origin);
assertFalse("hint preflist doesn't include self", nodes.contains(origin));
for(Node node: nodes)
assertFalse("local hints not routed remotely", zone0Nodes.contains(node));
nodes = handoffStrategy0.routeHint(origin);
assertFalse("hint preflist doesn't include self", nodes.contains(origin));
for(Node node: nodes)
assertTrue("remote hints routed locally", zone0Nodes.contains(node));
}
}
}

0 comments on commit bc94db4

Please sign in to comment.