public void PickDestination_WithoutDestinations_Null() { var loadBalancer = Create <LoadBalancer>(); var destinations = new DestinationInfo[0]; var options = new ClusterConfig.ClusterLoadBalancingOptions((LoadBalancingMode)(-1)); var result = loadBalancer.PickDestination(destinations, in options); Assert.Null(result); }
public void PickDestination_SingleDestinations_ShortCircuit() { var loadBalancer = Create <LoadBalancer>(); var destinations = new[] { new DestinationInfo("d1"), }; var options = new ClusterConfig.ClusterLoadBalancingOptions((LoadBalancingMode)(-1)); var result = loadBalancer.PickDestination(destinations, in options); Assert.Same(destinations[0], result); }
public void PickDestination_FirstWithDestinations_Works() { var loadBalancer = Create <LoadBalancer>(); var destinations = new[] { new DestinationInfo("d1"), new DestinationInfo("d2"), }; var options = new ClusterConfig.ClusterLoadBalancingOptions(LoadBalancingMode.First); var result = loadBalancer.PickDestination(destinations, in options); Assert.Same(destinations[0], result); }
public void PickDestination_Random_Works() { var loadBalancer = Create <LoadBalancer>(); var destinations = new[] { new DestinationInfo("d1"), new DestinationInfo("d2"), }; RandomInstance.Sequence = new[] { 1 }; var options = new ClusterConfig.ClusterLoadBalancingOptions(LoadBalancingMode.Random); var result = loadBalancer.PickDestination(destinations, in options); Assert.Same(result, destinations[1]); }
public void PickDestination_LeastRequests_Works() { var loadBalancer = Create <LoadBalancer>(); var destinations = new[] { new DestinationInfo("d1"), new DestinationInfo("d2"), }; destinations[0].ConcurrencyCounter.Increment(); var options = new ClusterConfig.ClusterLoadBalancingOptions(LoadBalancingMode.LeastRequests); var result = loadBalancer.PickDestination(destinations, in options); Assert.Same(result, destinations[1]); }
public void PickDestination_UnsupportedMode_Throws() { var loadBalancer = Create <LoadBalancer>(); var destinations = new[] { new DestinationInfo("d1"), new DestinationInfo("d2"), }; var options = new ClusterConfig.ClusterLoadBalancingOptions((LoadBalancingMode)(-1)); Action action = () => loadBalancer.PickDestination(destinations, in options); // Assert var ex = Assert.Throws <NotSupportedException>(action); Assert.Equal("Load balancing mode '-1' is not supported.", ex.Message); }
public void PickDestination_PowerOfTwoChoices_Works() { var loadBalancer = Create <LoadBalancer>(); var destinations = new[] { new DestinationInfo("d1"), new DestinationInfo("d2"), }; destinations[0].ConcurrencyCounter.Increment(); RandomInstance.Sequence = new[] { 1, 0 }; var options = new ClusterConfig.ClusterLoadBalancingOptions(LoadBalancingMode.PowerOfTwoChoices); var result = loadBalancer.PickDestination(destinations, in options); Assert.Same(result, destinations[1]); }
public void PickDestination_RoundRobin_Works() { var loadBalancer = Create <LoadBalancer>(); var destinations = new[] { new DestinationInfo("d1"), new DestinationInfo("d2"), }; destinations[0].ConcurrencyCounter.Increment(); var options = new ClusterConfig.ClusterLoadBalancingOptions(LoadBalancingMode.RoundRobin); var result0 = loadBalancer.PickDestination(destinations, in options); var result1 = loadBalancer.PickDestination(destinations, in options); var result2 = loadBalancer.PickDestination(destinations, in options); var result3 = loadBalancer.PickDestination(destinations, in options); Assert.Same(result0, destinations[0]); Assert.Same(result1, destinations[1]); Assert.Same(result2, destinations[0]); Assert.Same(result3, destinations[1]); }