Ejemplo n.º 1
0
        public void should_serve_from_service_with_least_connections()
        {
            var serviceName = "products";

            var availableServices = new List <Service>
            {
                new Service(serviceName, new HostAndPort("127.0.0.1", 80), string.Empty, string.Empty, new string[0]),
                new Service(serviceName, new HostAndPort("127.0.0.2", 80), string.Empty, string.Empty, new string[0]),
                new Service(serviceName, new HostAndPort("127.0.0.3", 80), string.Empty, string.Empty, new string[0])
            };

            _services        = availableServices;
            _leastConnection = new LeastConnectionLoadBalancer(() => Task.FromResult(_services), serviceName);

            var response = _leastConnection.Lease().Result;

            response.Data.DownstreamHost.ShouldBe(availableServices[0].HostAndPort.DownstreamHost);

            response = _leastConnection.Lease().Result;

            response.Data.DownstreamHost.ShouldBe(availableServices[1].HostAndPort.DownstreamHost);

            response = _leastConnection.Lease().Result;

            response.Data.DownstreamHost.ShouldBe(availableServices[2].HostAndPort.DownstreamHost);
        }
Ejemplo n.º 2
0
        public void should_be_able_to_lease_and_release_concurrently()
        {
            var serviceName = "products";

            var availableServices = new List <Service>
            {
                new Service(serviceName, new HostAndPort("127.0.0.1", 80), string.Empty, string.Empty, new string[0]),
                new Service(serviceName, new HostAndPort("127.0.0.2", 80), string.Empty, string.Empty, new string[0]),
            };

            _services        = availableServices;
            _leastConnection = new LeastConnectionLoadBalancer(() => Task.FromResult(_services), serviceName);

            var tasks = new Task[100];

            for (var i = 0; i < tasks.Length; i++)
            {
                tasks[i] = LeaseDelayAndRelease();
            }

            Task.WaitAll(tasks);
        }
Ejemplo n.º 3
0
        public void should_release_connection()
        {
            var serviceName = "products";

            var availableServices = new List <Service>
            {
                new Service(serviceName, new HostAndPort("127.0.0.1", 80), string.Empty, string.Empty, new string[0]),
                new Service(serviceName, new HostAndPort("127.0.0.2", 80), string.Empty, string.Empty, new string[0]),
            };

            _services        = availableServices;
            _leastConnection = new LeastConnectionLoadBalancer(() => Task.FromResult(_services), serviceName);

            var response = _leastConnection.Lease().Result;

            response.Data.DownstreamHost.ShouldBe(availableServices[0].HostAndPort.DownstreamHost);

            response = _leastConnection.Lease().Result;

            response.Data.DownstreamHost.ShouldBe(availableServices[1].HostAndPort.DownstreamHost);

            response = _leastConnection.Lease().Result;

            response.Data.DownstreamHost.ShouldBe(availableServices[0].HostAndPort.DownstreamHost);

            response = _leastConnection.Lease().Result;

            response.Data.DownstreamHost.ShouldBe(availableServices[1].HostAndPort.DownstreamHost);

            //release this so 2 should have 1 connection and we should get 2 back as our next host and port
            _leastConnection.Release(availableServices[1].HostAndPort);

            response = _leastConnection.Lease().Result;

            response.Data.DownstreamHost.ShouldBe(availableServices[1].HostAndPort.DownstreamHost);
        }
Ejemplo n.º 4
0
 private void GivenTheLoadBalancerStarts(List <Service> services, string serviceName)
 {
     _services        = services;
     _leastConnection = new LeastConnectionLoadBalancer(() => Task.FromResult(_services), serviceName);
 }