protected async Task Test_GatewaySelection(IGatewayListProvider listProvider) { IList <Uri> gatewayUris = listProvider.GetGateways().GetResult(); Assert.True(gatewayUris.Count > 0, $"Found some gateways. Data = {Utils.EnumerableToString(gatewayUris)}"); var gatewayEndpoints = gatewayUris.Select(uri => { return(new IPEndPoint(IPAddress.Parse(uri.Host), uri.Port)); }).ToList(); var gatewayManager = new GatewayManager(Options.Create(new GatewayOptions()), listProvider, NullLoggerFactory.Instance, null); await gatewayManager.StartAsync(CancellationToken.None); var counts = new int[4]; for (int i = 0; i < 2300; i++) { var ip = gatewayManager.GetLiveGateway(); var addr = ip.Endpoint.Address; Assert.Equal(IPAddress.Loopback, addr); // "Incorrect IP address returned for gateway" Assert.True((0 < ip.Endpoint.Port) && (ip.Endpoint.Port < 5), "Incorrect IP port returned for gateway"); counts[ip.Endpoint.Port - 1]++; } // The following needed to be changed as the gateway manager now round-robins through the available gateways, rather than // selecting randomly based on load numbers. //Assert.True((500 < counts[0]) && (counts[0] < 1500), "Gateway selection is incorrectly skewed"); //Assert.True((500 < counts[1]) && (counts[1] < 1500), "Gateway selection is incorrectly skewed"); //Assert.True((125 < counts[2]) && (counts[2] < 375), "Gateway selection is incorrectly skewed"); //Assert.True((25 < counts[3]) && (counts[3] < 75), "Gateway selection is incorrectly skewed"); //Assert.True((287 < counts[0]) && (counts[0] < 1150), "Gateway selection is incorrectly skewed"); //Assert.True((287 < counts[1]) && (counts[1] < 1150), "Gateway selection is incorrectly skewed"); //Assert.True((287 < counts[2]) && (counts[2] < 1150), "Gateway selection is incorrectly skewed"); //Assert.True((287 < counts[3]) && (counts[3] < 1150), "Gateway selection is incorrectly skewed"); int low = 2300 / 4; int up = 2300 / 4; Assert.True((low <= counts[0]) && (counts[0] <= up), "Gateway selection is incorrectly skewed. " + counts[0]); Assert.True((low <= counts[1]) && (counts[1] <= up), "Gateway selection is incorrectly skewed. " + counts[1]); Assert.True((low <= counts[2]) && (counts[2] <= up), "Gateway selection is incorrectly skewed. " + counts[2]); Assert.True((low <= counts[3]) && (counts[3] <= up), "Gateway selection is incorrectly skewed. " + counts[3]); }
public Task StartAsync(CancellationToken cancellationToken) { return(manager.StartAsync(cancellationToken)); }