public void DefaultConstructor_InitializedWithDefaultSettings()
        {
            // Arrange
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider();

            // Act and Assert
            ConfigServerTestHelpers.VerifyDefaults(provider.Settings);
        }
        public void SettingsConstructor__WithLoggerFactorySucceeds()
        {
            // Arrange
            LoggerFactory logFactory = new LoggerFactory();
            ConfigServerClientSettings settings = new ConfigServerClientSettings();

            // Act and Assert
            var provider = new ConfigServerConfigurationProvider(settings, logFactory);
            Assert.NotNull(provider.Logger);
        }
        public void GetConfigServerUri_NoLabel()
        {
            // Arrange
            ConfigServerClientSettings settings = new ConfigServerClientSettings() { Name = "myName", Environment = "Production" };
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider(settings);

            // Act and Assert
            string path = provider.GetConfigServerUri();
            Assert.Equal(settings.Uri + "/" + settings.Name + "/" + settings.Environment, path);
        }
        public void GetLabels_MultiStringHoles()
        {
            ConfigServerClientSettings settings = new ConfigServerClientSettings();

            settings.Label = "1,,2,3,";
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider(settings);

            string[] result = provider.GetLabels();
            Assert.NotNull(result);
            Assert.Equal(3, result.Length);
            Assert.Equal("1", result[0]);
            Assert.Equal("2", result[1]);
            Assert.Equal("3", result[2]);
        }
        public void GetConfigServerUri_WithEndingSlash()
        {
            // Arrange
            ConfigServerClientSettings settings = new ConfigServerClientSettings()
            {
                Uri = "http://localhost:9999/", Name = "myName", Environment = "Production"
            };
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider(settings);

            // Act and Assert
            string path = provider.GetConfigServerUri(settings.RawUris[0], null);

            Assert.Equal("http://localhost:9999/" + settings.Name + "/" + settings.Environment, path);
        }
Beispiel #6
0
        public void AddConfigServer_AddsConfigServerProviderToProvidersList()
        {
            // Arrange
            var configurationBuilder = new ConfigurationBuilder();
            var environment          = HostingHelpers.GetHostingEnvironment();

            // Act and Assert
            configurationBuilder.AddConfigServer(environment);
            var config = configurationBuilder.Build();

            ConfigServerConfigurationProvider configServerProvider = config.Providers.OfType <ConfigServerConfigurationProvider>().SingleOrDefault();

            Assert.NotNull(configServerProvider);
        }
        public void GetLabels_SingleString()
        {
            var settings = new ConfigServerClientSettings
            {
                Label = "foobar"
            };
            var provider = new ConfigServerConfigurationProvider(settings);

            var result = provider.GetLabels();

            Assert.NotNull(result);
            Assert.Single(result);
            Assert.Equal("foobar", result[0]);
        }
        public void GetLabels_Empty()
        {
            var settings = new ConfigServerClientSettings
            {
                Label = string.Empty
            };
            var provider = new ConfigServerConfigurationProvider(settings);

            var result = provider.GetLabels();

            Assert.NotNull(result);
            Assert.Single(result);
            Assert.Equal(string.Empty, result[0]);
        }
        public void GetConfigServerUri_WithExtraPathInfo()
        {
            // Arrange
            var settings = new ConfigServerClientSettings()
            {
                Uri = "http://localhost:9999/myPath/path/", Name = "myName", Environment = "Production"
            };
            var provider = new ConfigServerConfigurationProvider(settings);

            // Act and Assert
            var path = provider.GetConfigServerUri(settings.RawUris[0], null);

            Assert.Equal("http://localhost:9999/myPath/path/" + settings.Name + "/" + settings.Environment, path);
        }
        public void GetConfigServerUri_WithLabel()
        {
            // Arrange
            var settings = new ConfigServerClientSettings()
            {
                Name = "myName", Environment = "Production", Label = "myLabel"
            };
            var provider = new ConfigServerConfigurationProvider(settings);

            // Act and Assert
            var path = provider.GetConfigServerUri(settings.RawUris[0], settings.Label);

            Assert.Equal(settings.RawUris[0] + settings.Name + "/" + settings.Environment + "/" + settings.Label, path);
        }
        public void GetConfigServerUri_WithLabelContainingSlash()
        {
            // Arrange
            ConfigServerClientSettings settings = new ConfigServerClientSettings()
            {
                Name = "myName", Environment = "Production", Label = "myLabel/version"
            };
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider(settings);

            // Act and Assert
            string path = provider.GetConfigServerUri(settings.RawUris[0], settings.Label);

            Assert.Equal(settings.RawUris[0] + settings.Name + "/" + settings.Environment + "/" + "myLabel(_)version", path);
        }
Beispiel #12
0
        public void AddConfigServer_XmlAppSettingsConfiguresClient()
        {
            // Arrange
            var    appsettings = @"
<settings>
    <spring>
      <cloud>
        <config>
            <uri>https://foo.com:9999</uri>
            <enabled>false</enabled>
            <failFast>false</failFast>
            <label>myLabel</label>
            <name>myName</name>
            <username>myUsername</username>
            <password>myPassword</password>
        </config>
      </cloud>
    </spring>
</settings>";
            var    path        = TestHelpers.CreateTempFile(appsettings);
            string directory   = Path.GetDirectoryName(path);
            string fileName    = Path.GetFileName(path);
            ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.SetBasePath(directory);

            var environment = HostingHelpers.GetHostingEnvironment("Production");

            configurationBuilder.AddXmlFile(fileName);

            // Act and Assert
            configurationBuilder.AddConfigServer(environment);
            IConfigurationRoot config = configurationBuilder.Build();
            ConfigServerConfigurationProvider configServerProvider = config.Providers.OfType <ConfigServerConfigurationProvider>().SingleOrDefault();

            Assert.NotNull(configServerProvider);
            ConfigServerClientSettings settings = configServerProvider.Settings;

            Assert.False(settings.Enabled);
            Assert.False(settings.FailFast);
            Assert.Equal("https://foo.com:9999", settings.Uri);
            Assert.Equal(ConfigServerClientSettings.DEFAULT_ENVIRONMENT, settings.Environment);
            Assert.Equal("myName", settings.Name);
            Assert.Equal("myLabel", settings.Label);
            Assert.Equal("myUsername", settings.Username);
            Assert.Equal("myPassword", settings.Password);
            Assert.Null(settings.AccessTokenUri);
            Assert.Null(settings.ClientId);
            Assert.Null(settings.ClientSecret);
        }
        public void GetConfigServerUri_NoLabel()
        {
            // Arrange
            ConfigServerClientSettings settings = new ConfigServerClientSettings()
            {
                Name = "myName", Environment = "Production"
            };
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider(settings);

            // Act and Assert
            string path = provider.GetConfigServerUri(settings.RawUris[0], null);

            Assert.Equal(settings.RawUris[0] + settings.Name + "/" + settings.Environment, path);
        }
Beispiel #14
0
        public void AddConfigServer_CommandLineAppSettingsConfiguresClient()
        {
            // Arrange
            var appsettings = new string[]
            {
                "spring:cloud:config:enabled=false",
                "--spring:cloud:config:failFast=false",
                "/spring:cloud:config:uri=http://foo.com:9999",
                "--spring:cloud:config:name", "myName",
                "/spring:cloud:config:label", "myLabel",
                "--spring:cloud:config:username", "myUsername",
                "--spring:cloud:config:password", "myPassword"
            };

            var configurationBuilder = new ConfigurationBuilder();
            var environment          = new HostingEnvironment();

            configurationBuilder.AddCommandLine(appsettings);

            // Act and Assert
            configurationBuilder.AddConfigServer(environment);
            IConfigurationRoot root = configurationBuilder.Build();

            ConfigServerConfigurationProvider configServerProvider = null;

            foreach (IConfigurationSource source in configurationBuilder.Sources)
            {
                configServerProvider = source as ConfigServerConfigurationProvider;
                if (configServerProvider != null)
                {
                    break;
                }
            }

            Assert.NotNull(configServerProvider);
            ConfigServerClientSettings settings = configServerProvider.Settings;

            Assert.False(settings.Enabled);
            Assert.False(settings.FailFast);
            Assert.Equal("http://foo.com:9999", settings.Uri);
            Assert.Equal(ConfigServerClientSettings.DEFAULT_ENVIRONMENT, settings.Environment);
            Assert.Equal("myName", settings.Name);
            Assert.Equal("myLabel", settings.Label);
            Assert.Equal("myUsername", settings.Username);
            Assert.Equal("myPassword", settings.Password);
            Assert.Null(settings.AccessTokenUri);
            Assert.Null(settings.ClientId);
            Assert.Null(settings.ClientSecret);
        }
        public void GetConfigServerUri_NoEndingSlash()
        {
            // Arrange
            IHostingEnvironment        env      = new HostingEnvironment();
            ConfigServerClientSettings settings = new ConfigServerClientSettings()
            {
                Uri = "http://localhost:9999", Name = "myName", Environment = "Production"
            };
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider(settings, env);

            // Act and Assert
            string path = provider.GetConfigServerUri(null);

            Assert.Equal("http://localhost:9999/" + settings.Name + "/" + settings.Environment, path);
        }
        public void GetConfigServerUri_WithLabel()
        {
            // Arrange
            IHostingEnvironment        env      = new HostingEnvironment();
            ConfigServerClientSettings settings = new ConfigServerClientSettings()
            {
                Name = "myName", Environment = "Production", Label = "myLabel"
            };
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider(settings, env);

            // Act and Assert
            string path = provider.GetConfigServerUri(settings.Label);

            Assert.Equal(settings.RawUri + settings.Name + "/" + settings.Environment + "/" + settings.Label, path);
        }
Beispiel #17
0
        public void AddConfigServer_WithLoggerFactorySucceeds()
        {
            // Arrange
            var configurationBuilder = new ConfigurationBuilder();
            var loggerFactory        = new LoggerFactory();
            var environment          = new HostingEnvironment();

            // Act and Assert
            configurationBuilder.AddConfigServer(environment, loggerFactory);
            var config = configurationBuilder.Build();
            ConfigServerConfigurationProvider configServerProvider = config.Providers.OfType <ConfigServerConfigurationProvider>().SingleOrDefault();

            Assert.NotNull(configServerProvider);
            Assert.NotNull(configServerProvider.Logger);
        }
Beispiel #18
0
        public void UpdateSettingsFromDiscovery_UpdatesSettingsCorrectly()
        {
            var values = new Dictionary <string, string>()
            {
                { "spring:cloud:config:discovery:enabled", "True" }
            };

            IConfiguration configuration = new ConfigurationBuilder()
                                           .AddInMemoryCollection(values)
                                           .Build();

            var settings = new ConfigServerClientSettings
            {
                Uri         = "http://localhost:8888/",
                Name        = "foo",
                Environment = "development"
            };
            ConfigServerConfigurationSource source = new ConfigServerConfigurationSource(settings, configuration);
            var provider = new ConfigServerConfigurationProvider(source);

            provider.UpdateSettingsFromDiscovery(new List <IServiceInstance>(), settings);
            Assert.Null(settings.Username);
            Assert.Null(settings.Password);
            Assert.Equal("http://localhost:8888/", settings.Uri);

            var metadata1 = new Dictionary <string, string>()
            {
                { "password", "firstPassword" }
            };

            var metadata2 = new Dictionary <string, string>()
            {
                { "password", "secondPassword" },
                { "user", "secondUser" },
                { "configPath", "configPath" }
            };

            var instances = new List <IServiceInstance>()
            {
                new TestServiceInfo(new Uri("http://foo.bar:8888/"), metadata1),
                new TestServiceInfo(new Uri("http://foo.bar.baz:9999/"), metadata2)
            };

            provider.UpdateSettingsFromDiscovery(instances, settings);
            Assert.Equal("secondUser", settings.Username);
            Assert.Equal("secondPassword", settings.Password);
            Assert.Equal("http://foo.bar:8888/,http://foo.bar.baz:9999/configPath", settings.Uri);
        }
        public void AddConfigServerClientSettings_ChangesDataDictionary()
        {
            // Arrange
            ConfigServerClientSettings settings = new ConfigServerClientSettings();
            IHostingEnvironment        envir    = new HostingEnvironment();

            settings.Enabled              = true;
            settings.Environment          = "environment";
            settings.FailFast             = false;
            settings.Label                = "label";
            settings.Name                 = "name";
            settings.Password             = "******";
            settings.Uri                  = "http://foo.bar/";
            settings.Username             = "******";
            settings.ValidateCertificates = false;
            settings.Token                = "vaulttoken";
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider(settings, envir);


            // Act and Assert
            provider.AddConfigServerClientSettings();

            string value;

            Assert.True(provider.TryGet("spring:cloud:config:env", out value));
            Assert.Equal("environment", value);
            Assert.True(provider.TryGet("spring:cloud:config:label", out value));
            Assert.Equal("label", value);
            Assert.True(provider.TryGet("spring:cloud:config:name", out value));
            Assert.Equal("name", value);
            Assert.True(provider.TryGet("spring:cloud:config:password", out value));
            Assert.Equal("password", value);
            Assert.True(provider.TryGet("spring:cloud:config:uri", out value));
            Assert.Equal("http://foo.bar/", value);
            Assert.True(provider.TryGet("spring:cloud:config:username", out value));
            Assert.Equal("username", value);

            Assert.True(provider.TryGet("spring:cloud:config:enabled", out value));
            Assert.Equal("True", value);
            Assert.True(provider.TryGet("spring:cloud:config:failFast", out value));
            Assert.Equal("False", value);
            Assert.True(provider.TryGet("spring:cloud:config:validate_certificates", out value));
            Assert.Equal("False", value);
            Assert.True(provider.TryGet("spring:cloud:config:token", out value));
            Assert.Equal("vaulttoken", value);
            Assert.True(provider.TryGet("spring:cloud:config:timeout", out value));
            Assert.Equal("3000", value);
        }
Beispiel #20
0
        public void AddConfigServer_WithLoggerFactorySucceeds()
        {
            // Arrange
            var configurationBuilder = new ConfigurationBuilder();
            var loggerFactory        = new LoggerFactory();
            var settings             = new ConfigServerClientSettings();

            // Act and Assert
            configurationBuilder.AddConfigServer(settings, loggerFactory);
            IConfigurationRoot config = configurationBuilder.Build();
            ConfigServerConfigurationProvider configServerProvider =
                config.Providers.OfType <ConfigServerConfigurationProvider>().SingleOrDefault();

            Assert.NotNull(configServerProvider);
            Assert.NotNull(configServerProvider.Logger);
        }
        public void GetLabels_MultiString()
        {
            var settings = new ConfigServerClientSettings
            {
                Label = "1,2,3,"
            };
            var provider = new ConfigServerConfigurationProvider(settings);

            var result = provider.GetLabels();

            Assert.NotNull(result);
            Assert.Equal(3, result.Length);
            Assert.Equal("1", result[0]);
            Assert.Equal("2", result[1]);
            Assert.Equal("3", result[2]);
        }
        public void AddConfigServer_IniAppSettingsConfiguresClient()
        {
            // Arrange
            var    appsettings = @"
[spring:cloud:config]
    uri=http://foo.com:9999
    enabled=false
    failFast=false
    label=myLabel
    name=myName
    username=myUsername
    password=myPassword
";
            var    path        = TestHelpers.CreateTempFile(appsettings);
            string directory   = Path.GetDirectoryName(path);
            string fileName    = Path.GetFileName(path);
            ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.SetBasePath(directory);

            var environment = new HostingEnvironment();

            configurationBuilder.AddIniFile(fileName);

            // Act and Assert
            configurationBuilder.AddConfigServer(environment);

            IConfigurationRoot config = configurationBuilder.Build();
            ConfigServerConfigurationProvider configServerProvider =
                config.Providers.OfType <ConfigServerConfigurationProvider>().SingleOrDefault();

            Assert.NotNull(configServerProvider);
            ConfigServerClientSettings settings = configServerProvider.Settings;

            // Act and Assert
            Assert.False(settings.Enabled);
            Assert.False(settings.FailFast);
            Assert.Equal("http://foo.com:9999", settings.Uri);
            Assert.Equal(ConfigServerClientSettings.DEFAULT_ENVIRONMENT, settings.Environment);
            Assert.Equal("myName", settings.Name);
            Assert.Equal("myLabel", settings.Label);
            Assert.Equal("myUsername", settings.Username);
            Assert.Equal("myPassword", settings.Password);
            Assert.Null(settings.AccessTokenUri);
            Assert.Null(settings.ClientId);
            Assert.Null(settings.ClientSecret);
        }
        public async Task Deserialize_GoodJsonAsync()
        {
            // Arrange
            var environment = new ConfigEnvironment
            {
                Name     = "testname",
                Label    = "testlabel",
                Profiles = new List <string> {
                    "Production"
                },
                Version         = "testversion",
                State           = "teststate",
                PropertySources = new List <PropertySource>
                {
                    new PropertySource
                    {
                        Name   = "source",
                        Source = new Dictionary <string, object>
                        {
                            { "key1", "value1" },
                            { "key2", 10 }
                        }
                    }
                }
            };
            var provider = new ConfigServerConfigurationProvider();
            var content  = JsonContent.Create(environment);

            // Act and Assert
            var env = await content.ReadFromJsonAsync <ConfigEnvironment>(provider.SerializerOptions);

            Assert.NotNull(env);
            Assert.Equal("testname", env.Name);
            Assert.NotNull(env.Profiles);
            Assert.Single(env.Profiles);
            Assert.Equal("testlabel", env.Label);
            Assert.Equal("testversion", env.Version);
            Assert.Equal("teststate", env.State);
            Assert.NotNull(env.PropertySources);
            Assert.Single(env.PropertySources);
            Assert.Equal("source", env.PropertySources[0].Name);
            Assert.NotNull(env.PropertySources[0].Source);
            Assert.Equal(2, env.PropertySources[0].Source.Count);
            Assert.Equal("value1", env.PropertySources[0].Source["key1"].ToString());
            Assert.Equal(10L, long.Parse(env.PropertySources[0].Source["key2"].ToString()));
        }
Beispiel #24
0
        public void Load_ChangesDataDictionary()
        {
            // Arrange
            var environment           = @"
{
    'name': 'testname',
    'profiles': ['Production'],
    'label': 'testlabel',
    'version': 'testversion',
    'propertySources': [ 
        { 
            'name': 'source',
            'source': {
                'key1': 'value1',
                'key2': 10
            }
        }
    ]
}";
            IHostingEnvironment envir = new HostingEnvironment();

            TestConfigServerStartup.Reset();
            TestConfigServerStartup.Response = environment;
            var builder = new WebHostBuilder().UseStartup <TestConfigServerStartup>().UseEnvironment(envir.EnvironmentName);
            var server  = new TestServer(builder);

            ConfigServerClientSettings settings = new ConfigServerClientSettings
            {
                Uri  = "http://localhost:8888",
                Name = "myName"
            };

            server.BaseAddress = new Uri(settings.Uri);
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider(settings, server.CreateClient());

            // Act and Assert
            provider.Load();
            Assert.NotNull(TestConfigServerStartup.LastRequest);
            Assert.Equal("/" + settings.Name + "/" + settings.Environment, TestConfigServerStartup.LastRequest.Path.Value);

            Assert.True(provider.TryGet("key1", out string value));
            Assert.Equal("value1", value);
            Assert.True(provider.TryGet("key2", out value));
            Assert.Equal("10", value);
        }
        public void AddConfigServer_Validate_Certificates_DisablesCertValidation()
        {
            // Arrange
            var    appsettings = @"
{
    'spring': {
      'cloud': {
        'config': {
            'validate_certificates': false
        }
      }
    }
}";
            var    path        = TestHelpers.CreateTempFile(appsettings);
            string directory   = Path.GetDirectoryName(path);
            string fileName    = Path.GetFileName(path);
            ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.SetBasePath(directory);

            var environment = new HostingEnvironment();

            configurationBuilder.AddJsonFile(fileName);

            // Act and Assert
            configurationBuilder.AddConfigServer(environment);

            ConfigServerConfigurationProvider configServerProvider = null;

            foreach (IConfigurationSource source in configurationBuilder.Sources)
            {
                configServerProvider = source as ConfigServerConfigurationProvider;
                if (configServerProvider != null)
                {
                    break;
                }
            }

            Assert.NotNull(configServerProvider);
            configurationBuilder.Build();

            ConfigServerClientSettings settings = configServerProvider.Settings;

            Assert.False(settings.ValidateCertificates);
        }
        public void Load_ChangesDataDictionary()
        {
            // Arrange
            var environment = @"
                {
                    ""name"": ""testname"",
                    ""profiles"": [""Production""],
                    ""label"": ""testlabel"",
                    ""version"": ""testversion"",
                    ""propertySources"": [ 
                        { 
                            ""name"": ""source"",
                            ""source"": {
                                ""key1"": ""value1"",
                                ""key2"": 10
                            }
                        }
                    ]
                }";
            var envir       = HostingHelpers.GetHostingEnvironment();

            TestConfigServerStartup.Reset();
            TestConfigServerStartup.Response = environment;
            var builder = new WebHostBuilder().UseStartup <TestConfigServerStartup>().UseEnvironment(envir.EnvironmentName);
            var server  = new TestServer(builder);

            ConfigServerClientSettings settings = new ConfigServerClientSettings
            {
                Uri  = "http://localhost:8888",
                Name = "myName"
            };

            server.BaseAddress = new Uri(settings.Uri);
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider(settings, server.CreateClient());

            // Act and Assert
            provider.LoadInternal();
            Assert.NotNull(TestConfigServerStartup.LastRequest);
            Assert.Equal("/" + settings.Name + "/" + settings.Environment, TestConfigServerStartup.LastRequest.Path.Value);

            Assert.True(provider.TryGet("key1", out string value));
            Assert.Equal("value1", value);
            Assert.True(provider.TryGet("key2", out value));
            Assert.Equal("10", value);
        }
Beispiel #27
0
        public void DoLoad_MultipleLabels_ChecksAllLabels()
        {
            // Arrange
            var environment           = @"
{
    'name': 'testname',
    'profiles': ['Production'],
    'label': 'testlabel',
    'version': 'testversion',
    'propertySources': [ 
        { 
            'name': 'source',
            'source': {
                'key1': 'value1',
                'key2': 10
            }
        }
    ]
}";
            IHostingEnvironment envir = new HostingEnvironment();

            TestConfigServerStartup.Reset();
            TestConfigServerStartup.Response     = environment;
            TestConfigServerStartup.ReturnStatus = new int[] { 404, 200 };
            TestConfigServerStartup.Label        = "testlabel";
            var builder = new WebHostBuilder().UseStartup <TestConfigServerStartup>().UseEnvironment(envir.EnvironmentName);
            var server  = new TestServer(builder);

            ConfigServerClientSettings settings = new ConfigServerClientSettings
            {
                Uri   = "http://localhost:8888",
                Name  = "myName",
                Label = "label,testlabel"
            };

            server.BaseAddress = new Uri(settings.Uri);
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider(settings, server.CreateClient());

            // Act and Assert
            provider.DoLoad();

            Assert.NotNull(TestConfigServerStartup.LastRequest);
            Assert.Equal(2, TestConfigServerStartup.RequestCount);
            Assert.Equal("/" + settings.Name + "/" + settings.Environment + "/testlabel", TestConfigServerStartup.LastRequest.Path.Value);
        }
        public void DoLoad_MultipleLabels_ChecksAllLabels()
        {
            // Arrange
            var environment = @"
                {
                    ""name"": ""testname"",
                    ""profiles"": [""Production""],
                    ""label"": ""testlabel"",
                    ""version"": ""testversion"",
                    ""propertySources"": [ 
                        { 
                            ""name"": ""source"",
                            ""source"": {
                                ""key1"": ""value1"",
                                ""key2"": 10
                            }
                        }
                    ]
                }";
            var envir       = HostingHelpers.GetHostingEnvironment();

            TestConfigServerStartup.Reset();
            TestConfigServerStartup.Response     = environment;
            TestConfigServerStartup.ReturnStatus = new int[] { 404, 200 };
            TestConfigServerStartup.Label        = "testlabel";
            var builder = new WebHostBuilder().UseStartup <TestConfigServerStartup>().UseEnvironment(envir.EnvironmentName);
            var server  = new TestServer(builder);

            var settings = new ConfigServerClientSettings
            {
                Uri   = "http://localhost:8888",
                Name  = "myName",
                Label = "label,testlabel"
            };

            server.BaseAddress = new Uri(settings.Uri);
            var provider = new ConfigServerConfigurationProvider(settings, server.CreateClient());

            // Act and Assert
            provider.DoLoad();

            Assert.NotNull(TestConfigServerStartup.LastRequest);
            Assert.Equal(2, TestConfigServerStartup.RequestCount);
            Assert.Equal("/" + settings.Name + "/" + settings.Environment + "/testlabel", TestConfigServerStartup.LastRequest.Path.Value);
        }
        public void GetRequestMessage_AddsBasicAuthIfPassword()
        {
            ConfigServerClientSettings settings = new ConfigServerClientSettings();

            settings.Uri         = "http://*****:*****@localhost:8888/";
            settings.Name        = "foo";
            settings.Environment = "development";
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider(settings);

            string requestURI = provider.GetConfigServerUri(null);
            var    request    = provider.GetRequestMessage(requestURI);

            Assert.Equal(HttpMethod.Get, request.Method);
            Assert.Equal(requestURI, request.RequestUri.ToString());
            Assert.NotNull(request.Headers.Authorization);
            Assert.Equal("Basic", request.Headers.Authorization.Scheme);
            Assert.Equal(provider.GetEncoded("user", "password"), request.Headers.Authorization.Parameter);
        }
Beispiel #30
0
        public void AddConfigServer_WithSettings_SettingsAreUsed()
        {
            // Arrange
            var configurationBuilder = new ConfigurationBuilder();
            var settings             = new ConfigServerClientSettings()
            {
                Uri = "https://someUriSring"
            };

            // Act and Assert
            configurationBuilder.AddConfigServer(settings);

            IConfigurationRoot config = configurationBuilder.Build();
            ConfigServerConfigurationProvider configServerProvider =
                config.Providers.OfType <ConfigServerConfigurationProvider>().SingleOrDefault();

            Assert.NotNull(configServerProvider);
            Assert.Equal(settings.Uri, configServerProvider.Settings.Uri);
        }
        public void GetRequestMessage_AddsVaultToken_IfNeeded()
        {
            ConfigServerClientSettings settings = new ConfigServerClientSettings();

            settings.Uri         = "http://localhost:8888/";
            settings.Name        = "foo";
            settings.Environment = "development";
            settings.Token       = "MyVaultToken";
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider(settings);

            string requestURI = provider.GetConfigServerUri(null);
            var    request    = provider.GetRequestMessage(requestURI);

            Assert.Equal(HttpMethod.Get, request.Method);
            Assert.Equal(requestURI, request.RequestUri.ToString());
            Assert.True(request.Headers.Contains(ConfigServerConfigurationProvider.TOKEN_HEADER));
            var headerValues = request.Headers.GetValues(ConfigServerConfigurationProvider.TOKEN_HEADER);

            Assert.Contains("MyVaultToken", headerValues);
        }
Beispiel #32
0
        public async void RemoteLoadAsync_HostTimesOut()
        {
            // Arrange
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider(new ConfigServerClientSettings());

            // Act and Assert
            try
            {
                HttpRequestException ex = await Assert.ThrowsAsync <HttpRequestException>(() => provider.RemoteLoadAsync(new string[] { "http://localhost:9999/app/profile" }, null));
            }
            catch (ThrowsException e)
            {
                if (e.InnerException is TaskCanceledException)
                {
                    return;
                }

                Assert.True(false, "Request didn't timeout or throw TaskCanceledException");
            }
        }
        public void Load_ConfigServerReturnsBadStatus_FailFastEnabled()
        {
            // Arrange
            IHostingEnvironment envir = new HostingEnvironment();

            TestConfigServerStartup.Response     = "";
            TestConfigServerStartup.ReturnStatus = 500;
            var builder = new WebHostBuilder().UseStartup <TestConfigServerStartup>().UseEnvironment(envir.EnvironmentName);
            var server  = new TestServer(builder);

            ConfigServerClientSettings settings = new ConfigServerClientSettings();

            settings.Uri       = "http://localhost:8888";
            settings.Name      = "myName";
            settings.FailFast  = true;
            server.BaseAddress = new Uri(settings.Uri);
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider(settings, server.CreateClient(), envir);

            // Act and Assert
            var ex = Assert.Throws <ConfigServerException>(() => provider.Load());
        }
        public void AddPropertySource_ChangesDataDictionary()
        {
            // Arrange
            IDictionary<string,object> properties = new Dictionary<string, object>();
            properties["a.b.c.d"] = "value1";
            properties["a"] = "value2";
            properties["b"] = 10;
            PropertySource source = new PropertySource("test", properties );
            source.Name = "test";
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider();

            // Act and Assert
            provider.AddPropertySource(source);

            string value;
            Assert.True(provider.TryGet("a:b:c:d", out value));
            Assert.Equal("value1", value);
            Assert.True(provider.TryGet("a", out value));
            Assert.Equal("value2", value);
            Assert.True(provider.TryGet("b", out value));
            Assert.Equal("10", value);

        }
        public void Deserialize_EmptyStream()
        {
            // Arrange
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider();
            MemoryStream stream = new MemoryStream();

            // Act and Assert
            Assert.Null(provider.Deserialize(stream));
        }
        public void Deserialize_BadJson()
        {
            // Arrange (propertySources array bad!)
            var environment = @"
{
    'name': 'testname',
    'profiles': ['Production'],
    'label': 'testlabel',
    'version': 'testversion',
    'propertySources': [ 
        { 
            'name': 'source',
            'source': {
                'key1': 'value1',
                'key2': 10
            }
        }
    
}";
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider();
            Stream stream = ConfigServerTestHelpers.StringToStream(environment);

            // Act and Assert
            Environment env = provider.Deserialize(stream);
            Assert.Null(env);
        }
        public void Deserialize_GoodJson()
        {
            // Arrange
            var environment = @"
{
    'name': 'testname',
    'profiles': ['Production'],
    'label': 'testlabel',
    'version': 'testversion',
    'propertySources': [ 
        { 
            'name': 'source',
            'source': {
                'key1': 'value1',
                'key2': 10
            }
        }
    ]
}";
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider();
            Stream stream = ConfigServerTestHelpers.StringToStream(environment);

            // Act and Assert
            Environment env = provider.Deserialize(stream);
            Assert.NotNull(env);
            Assert.Equal("testname", env.Name);
            Assert.NotNull(env.Profiles);
            Assert.Equal(1, env.Profiles.Count);
            Assert.Equal("testlabel", env.Label);
            Assert.Equal("testversion", env.Version);
            Assert.NotNull(env.PropertySources);
            Assert.Equal(1, env.PropertySources.Count);
            Assert.Equal("source", env.PropertySources[0].Name);
            Assert.NotNull(env.PropertySources[0].Source);
            Assert.Equal(2, env.PropertySources[0].Source.Count);
            Assert.Equal("value1", env.PropertySources[0].Source["key1"]);
            Assert.Equal((long)10, env.PropertySources[0].Source["key2"]);

        }
        public void Load_ConfigServerReturnsNotFoundStatus()
        {
            // Arrange
            var startup = new TestConfigServerStartup("", 404);
            var server = TestServer.Create(startup.Configure);
            ConfigServerClientSettings settings = new ConfigServerClientSettings();
            settings.Name = "myName";
            server.BaseAddress = new Uri(settings.Uri);
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider(settings, server.CreateClient());

            // Act and Assert
            provider.Load();
            Assert.NotNull(startup.LastRequest);
            Assert.Equal("/" + settings.Name + "/" + settings.Environment, startup.LastRequest.Path.Value);
            Assert.Equal(12, provider.Properties.Count);
        }
        public void AddConfigServerClientSettings_ChangesDataDictionary()
        {
            // Arrange
            ConfigServerClientSettings settings = new ConfigServerClientSettings();
            settings.AccessTokenUri = "http://foo.bar/";
            settings.ClientId = "client_id";
            settings.ClientSecret = "client_secret";
            settings.Enabled = true;
            settings.Environment = "environment";
            settings.FailFast = false;
            settings.Label = "label";
            settings.Name = "name";
            settings.Password = "******";
            settings.Uri = "http://foo.bar/";
            settings.Username = "******";
            settings.ValidateCertificates = false;
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider();


            // Act and Assert
            provider.AddConfigServerClientSettings(settings);

            string value;
            Assert.True(provider.TryGet("spring:cloud:config:access_token_uri", out value));
            Assert.Equal("http://foo.bar/", value);
            Assert.True(provider.TryGet("spring:cloud:config:client_id", out value));
            Assert.Equal("client_id", value);
            Assert.True(provider.TryGet("spring:cloud:config:client_secret", out value));
            Assert.Equal("client_secret", value);
            Assert.True(provider.TryGet("spring:cloud:config:env", out value));
            Assert.Equal("environment", value);
            Assert.True(provider.TryGet("spring:cloud:config:label", out value));
            Assert.Equal("label", value);
            Assert.True(provider.TryGet("spring:cloud:config:name", out value));
            Assert.Equal("name", value);
            Assert.True(provider.TryGet("spring:cloud:config:password", out value));
            Assert.Equal("password", value);
            Assert.True(provider.TryGet("spring:cloud:config:uri", out value));
            Assert.Equal("http://foo.bar/", value);
            Assert.True(provider.TryGet("spring:cloud:config:username", out value));
            Assert.Equal("username", value);

            Assert.True(provider.TryGet("spring:cloud:config:enabled", out value));
            Assert.Equal("True", value);
            Assert.True(provider.TryGet("spring:cloud:config:failFast", out value));
            Assert.Equal("False", value);
            Assert.True(provider.TryGet("spring:cloud:config:validate_certificates", out value));
            Assert.Equal("False", value);

        }
        public async void RemoteLoadAsync_HostTimesout()
        {
            // Arrange
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider();

            // Act and Assert
            Environment env = await provider.RemoteLoadAsync("http://foo.bar:9999/app/profile");
            Assert.Null(env);

        }
        public async void RemoteLoadAsync_ConfigServerReturnsNotOkStatus()
        {
            // Arrange
            var startup = new TestConfigServerStartup("",500);
            var server = TestServer.Create(startup.Configure);
            ConfigServerClientSettings settings = new ConfigServerClientSettings();
            settings.Name = "myName";
            server.BaseAddress = new Uri(settings.Uri);
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider(settings, server.CreateClient());
            string path = provider.GetConfigServerUri();

            // Act and Assert
            Environment result = await provider.RemoteLoadAsync(path);
            Assert.NotNull(startup.LastRequest);
            Assert.Equal("/" + settings.Name + "/" + settings.Environment, startup.LastRequest.Path.Value);
            Assert.Null(result);
        }
        public async void RemoteLoadAsync_ConfigServerReturnsGood()
        {
            // Arrange
            var environment = @"
{
    'name': 'testname',
    'profiles': ['Production'],
    'label': 'testlabel',
    'version': 'testversion',
    'propertySources': [ 
        { 
            'name': 'source',
            'source': {
                'key1': 'value1',
                'key2': 10
            }
        }
    ]
}";
            var startup = new TestConfigServerStartup(environment, 200);
            var server = TestServer.Create(startup.Configure);
            ConfigServerClientSettings settings = new ConfigServerClientSettings();
            settings.Name = "myName";
            server.BaseAddress = new Uri(settings.Uri);
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider(settings, server.CreateClient());
            string path = provider.GetConfigServerUri();

            // Act and Assert
            Environment env = await provider.RemoteLoadAsync(path);
            Assert.NotNull(startup.LastRequest);
            Assert.Equal("/" + settings.Name + "/" + settings.Environment, startup.LastRequest.Path.Value);
            Assert.NotNull(env);
            Assert.Equal("testname", env.Name);
            Assert.NotNull(env.Profiles);
            Assert.Equal(1, env.Profiles.Count);
            Assert.Equal("testlabel", env.Label);
            Assert.Equal("testversion", env.Version);
            Assert.NotNull(env.PropertySources);
            Assert.Equal(1, env.PropertySources.Count);
            Assert.Equal("source", env.PropertySources[0].Name);
            Assert.NotNull(env.PropertySources[0].Source);
            Assert.Equal(2, env.PropertySources[0].Source.Count);
            Assert.Equal("value1", env.PropertySources[0].Source["key1"]);
            Assert.Equal((long)10, env.PropertySources[0].Source["key2"]);
        }
        public async void RemoteLoadAsync_InvalidPath()
        {
            // Arrange
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider();

            // Act and Assert
            Environment env = await provider.RemoteLoadAsync("foobar\\foobar\\");
            Assert.Null(env);

        }
        public void Load_ChangesDataDictionary()
        {
            // Arrange
            var environment = @"
{
    'name': 'testname',
    'profiles': ['Production'],
    'label': 'testlabel',
    'version': 'testversion',
    'propertySources': [ 
        { 
            'name': 'source',
            'source': {
                'key1': 'value1',
                'key2': 10
            }
        }
    ]
}";
            var startup = new TestConfigServerStartup(environment, 200);
            var server = TestServer.Create(startup.Configure);
            ConfigServerClientSettings settings = new ConfigServerClientSettings();
            settings.Name = "myName";
            server.BaseAddress = new Uri(settings.Uri);
            ConfigServerConfigurationProvider provider = new ConfigServerConfigurationProvider(settings, server.CreateClient());

            // Act and Assert
            provider.Load();
            Assert.NotNull(startup.LastRequest);
            Assert.Equal("/" + settings.Name + "/" + settings.Environment, startup.LastRequest.Path.Value);

            string value;
            Assert.True(provider.TryGet("key1", out value));
            Assert.Equal("value1", value);
            Assert.True(provider.TryGet("key2", out value));
            Assert.Equal("10", value);
        }