コード例 #1
0
        public async Task ResolveServiceInstance_ResolvesAndIncrementsServiceIndex()
        {
            // arrange
            var services = new List <ConfigurationServiceInstance>
            {
                new ConfigurationServiceInstance {
                    ServiceId = "fruitservice", Host = "fruitball", Port = 8000, IsSecure = true
                },
                new ConfigurationServiceInstance {
                    ServiceId = "fruitservice", Host = "fruitballer", Port = 8001
                },
                new ConfigurationServiceInstance {
                    ServiceId = "fruitservice", Host = "fruitballerz", Port = 8002
                },
                new ConfigurationServiceInstance {
                    ServiceId = "vegetableservice", Host = "vegemite", Port = 8010, IsSecure = true
                },
                new ConfigurationServiceInstance {
                    ServiceId = "vegetableservice", Host = "carrot", Port = 8011
                },
                new ConfigurationServiceInstance {
                    ServiceId = "vegetableservice", Host = "beet", Port = 8012
                },
            };
            var serviceOptions = new TestOptionsMonitor <List <ConfigurationServiceInstance> >(services);
            var provider       = new ConfigurationServiceInstanceProvider(serviceOptions);
            var loadBalancer   = new RoundRobinLoadBalancer(provider);

            // act
            Assert.Throws <KeyNotFoundException>(() => loadBalancer.NextIndexForService[loadBalancer.IndexKeyPrefix + "fruitService"]);
            Assert.Throws <KeyNotFoundException>(() => loadBalancer.NextIndexForService[loadBalancer.IndexKeyPrefix + "vegetableService"]);
            var fruitResult = await loadBalancer.ResolveServiceInstanceAsync(new Uri("https://fruitservice/api"));

            await loadBalancer.ResolveServiceInstanceAsync(new Uri("https://vegetableservice/api"));

            var vegResult = await loadBalancer.ResolveServiceInstanceAsync(new Uri("https://vegetableservice/api"));

            // assert
            Assert.Equal(1, loadBalancer.NextIndexForService[loadBalancer.IndexKeyPrefix + "fruitservice"]);
            Assert.Equal(8000, fruitResult.Port);
            Assert.Equal(2, loadBalancer.NextIndexForService[loadBalancer.IndexKeyPrefix + "vegetableservice"]);
            Assert.Equal(8011, vegResult.Port);
        }
コード例 #2
0
        public async Task ResolveServiceInstance_ResolvesAndIncrementsServiceIndex_WithDistributedCache()
        {
            // arrange
            var services = new List <ConfigurationServiceInstance>
            {
                new ConfigurationServiceInstance {
                    ServiceId = "fruitservice", Host = "fruitball", Port = 8000, IsSecure = true
                },
                new ConfigurationServiceInstance {
                    ServiceId = "fruitservice", Host = "fruitballer", Port = 8001
                },
                new ConfigurationServiceInstance {
                    ServiceId = "fruitservice", Host = "fruitballerz", Port = 8002
                },
                new ConfigurationServiceInstance {
                    ServiceId = "vegetableservice", Host = "vegemite", Port = 8010, IsSecure = true
                },
                new ConfigurationServiceInstance {
                    ServiceId = "vegetableservice", Host = "carrot", Port = 8011
                },
                new ConfigurationServiceInstance {
                    ServiceId = "vegetableservice", Host = "beet", Port = 8012
                },
            };
            var serviceOptions = new TestOptionsMonitor <List <ConfigurationServiceInstance> >(services);
            var provider       = new ConfigurationServiceInstanceProvider(serviceOptions);
            var loadBalancer   = new RoundRobinLoadBalancer(provider, GetCache());

            // act
            var fruitResult = await loadBalancer.ResolveServiceInstanceAsync(new Uri("https://fruitservice/api"));

            await loadBalancer.ResolveServiceInstanceAsync(new Uri("https://vegetableservice/api"));

            var vegResult = await loadBalancer.ResolveServiceInstanceAsync(new Uri("https://vegetableservice/api"));

            // assert
            Assert.Equal(8000, fruitResult.Port);
            Assert.Equal(8011, vegResult.Port);
        }