public class DynamicEndpointSnitchTest
{
@Test
public void testSnitch() throws UnknownHostException, InterruptedException
{
DynamicEndpointSnitch dsnitch = new DynamicEndpointSnitch(new SimpleSnitch());
InetAddress self = FBUtilities.getLocalAddress();
ArrayList<InetAddress> order = new ArrayList<InetAddress>();
InetAddress host1 = InetAddress.getByName("127.0.0.1");
InetAddress host2 = InetAddress.getByName("127.0.0.2");
InetAddress host3 = InetAddress.getByName("127.0.0.3");
// first, make all hosts equal
for (int i = 0; i < 5; i++)
{
dsnitch.receiveTiming(host1, 1.0);
dsnitch.receiveTiming(host2, 1.0);
dsnitch.receiveTiming(host3, 1.0);
}
Thread.sleep(1500);
order.add(host1);
order.add(host2);
order.add(host3);
assert dsnitch.getSortedListByProximity(self, order).equals(order);
// make host1 a little worse
dsnitch.receiveTiming(host1, 2.0);
Thread.sleep(1500);
order.clear();
order.add(host2);
order.add(host3);
order.add(host1);
assert dsnitch.getSortedListByProximity(self, order).equals(order);
// make host2 a little worse
dsnitch.receiveTiming(host2, 2.0);
Thread.sleep(1500);
order.clear();
order.add(host3);
order.add(host2);
order.add(host1);
assert dsnitch.getSortedListByProximity(self, order).equals(order);
// make host3 the worst
for (int i = 0; i < 2; i++)
{
dsnitch.receiveTiming(host3, 2.0);
}
Thread.sleep(1500);
order.clear();
order.add(host2);
order.add(host1);
order.add(host3);
// make host3 equal to the others
for (int i = 0; i < 2; i++)
{
dsnitch.receiveTiming(host3, 1.0);
}
Thread.sleep(1500);
order.clear();
order.add(host1);
order.add(host2);
order.add(host3);
assert dsnitch.getSortedListByProximity(self, order).equals(order);
}