package codeine.nodes;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import codeine.api.NodeInfo;
import codeine.executer.PeriodicExecuter;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
public class NodesSelectorTest {
Map<NodeInfo, PeriodicExecuter> runningNodes = Maps.newHashMap();
List<NodeInfo> newNodes = Lists.newArrayList();
@Test
public void testEmpty() {
SelectedNodes result = create().selectStartStop();
assertEquals(newNodes, result.nodesToStart());
assertEquals(runningNodes, result.nodesToStop());
assertEquals(runningNodes, result.existingProjectExecutors());
}
private NodesSelector create() {
return new NodesSelector(runningNodes, newNodes);
}
@Test
public void testNewNode() {
newNodes.add(new NodeInfo("1"));
SelectedNodes result = create().selectStartStop();
assertEquals(newNodes, result.nodesToStart());
assertEquals(Maps.newHashMap(), result.existingProjectExecutors());
}
@Test
public void testNewNodeAlreadyExists() {
NodeInfo node1 = new NodeInfo("1");
newNodes.add(node1);
runningNodes.put(node1, mock(PeriodicExecuter.class));
SelectedNodes result = create().selectStartStop();
assertEquals(Lists.newArrayList(), result.nodesToStart());
assertEquals(runningNodes, result.existingProjectExecutors());
}
@Test
public void testNewNodeAlreadyExistsWithDifferentAlias() {
NodeInfo newNode = new NodeInfo("1", "?");
newNodes.add(newNode);
runningNodes.put(new NodeInfo("1", "!"), mock(PeriodicExecuter.class));
SelectedNodes result = create().selectStartStop();
assertEquals(Lists.newArrayList(newNode), result.nodesToStart());
assertEquals(Maps.newHashMap(), result.existingProjectExecutors());
assertEquals(runningNodes, result.nodesToStop());
}
@Test
public void testNewNodeAlreadyExistsWithDifferentTags() {
NodeInfo newNode = new NodeInfo("1");
newNode.tags(Lists.newArrayList("a"));
newNodes.add(newNode);
runningNodes.put(new NodeInfo("1"), mock(PeriodicExecuter.class));
SelectedNodes result = create().selectStartStop();
assertEquals(Lists.newArrayList(newNode), result.nodesToStart());
assertEquals(Maps.newHashMap(), result.existingProjectExecutors());
assertEquals(runningNodes, result.nodesToStop());
}
@Test
public void testQA() {
NodeInfo nodeToStart = new NodeInfo("1");
newNodes.add(nodeToStart);
NodeInfo node2 = new NodeInfo("2");
newNodes.add(node2);
PeriodicExecuter mock2 = mock(PeriodicExecuter.class);
runningNodes.put(node2, mock2);
PeriodicExecuter mock3 = mock(PeriodicExecuter.class);
runningNodes.put(node("3"), mock3);
HashMap<Object, Object> nodeSToStop = Maps.newHashMap();
nodeSToStop.put(node("3"), mock3);
HashMap<Object, Object> nodesToKeep = Maps.newHashMap();
nodesToKeep.put(node2, mock2);
SelectedNodes result = create().selectStartStop();
assertEquals(Lists.newArrayList(nodeToStart), result.nodesToStart());
assertEquals(nodeSToStop, result.nodesToStop());
assertEquals(nodesToKeep, result.existingProjectExecutors());
}
@Test
public void testRemoveNode() {
runningNodes.put(node("1"), mock(PeriodicExecuter.class));
SelectedNodes result = create().selectStartStop();
assertEquals(runningNodes, result.nodesToStop());
assertEquals(Maps.newHashMap(), result.existingProjectExecutors());
}
private NodeInfo node(String name) {
return new NodeInfo(name);
}
}