public void RoundRobinTest() { var locator = new RoundRobinLocator(); locator.Initialize(_nodes); var nodeSet = new HashSet<IMemcacheNode>(); for (int i = 0; i < _nodes.Count; ++i) { var key = i.ToString().Select(c => (byte)c).ToArray(); var locations = locator.Locate(new RequestKeyWrapper(key)); Assert.IsNotEmpty(locations, "RoundRobinLocator found no node"); var chosenNode = locations.First<IMemcacheNode>(); Assert.IsNotNull(chosenNode, "RoundRobinLocator found no node"); nodeSet.Add(chosenNode); } Assert.AreEqual(_nodes.Count, nodeSet.Count, "All nodes should have been chosen at least once"); }
public void RoundRobinDeadNodeDetectionTest() { var locator = new RoundRobinLocator(); locator.Initialize(_nodes); for (int i = 1; i < _nodes.Count; ++i) (_nodes[i] as NodeMock).IsDead = true; for (int i = 0; i < _nodes.Count; ++i) { var keyAsBytes = i.ToString().Select(c => (byte)c).ToArray(); var locations = locator.Locate(new RequestKeyWrapper(keyAsBytes)); Assert.IsNotEmpty(locations, "RoundRobinLocator found no node, but at least 1 is alive"); var chosenNode = locations.First(); Assert.IsFalse(chosenNode.IsDead, "RoundRobinLocator returned a dead node"); } (_nodes[0] as NodeMock).IsDead = true; for (int i = 0; i < _nodes.Count; ++i) { var keyAsBytes = i.ToString().Select(c => (byte)c).ToArray(); CollectionAssert.IsEmpty(locator.Locate(new RequestKeyWrapper(keyAsBytes)), "RoundRobinLocator found a node when all are dead"); } foreach (var node in _nodes) (node as NodeMock).IsDead = false; }