public void GetUserName_GoodWithUserPassOnUri()
        {
            // Arrange
            ConfigServerClientSettingsBase settings = new ConfigServerClientSettingsBase() { Uri = "https://*****:*****@localhost:8888/" };

            // Act and Assert
            Assert.Equal("user", settings.Username);
        }
        public void GetRawUri_GoodWithUserPass()
        {
            // Arrange
            ConfigServerClientSettingsBase settings = new ConfigServerClientSettingsBase() { Uri = "https://*****:*****@localhost:8888/" };

            // Act and Assert
            Assert.Equal("https://localhost:8888/", settings.RawUri);
        }
        public void GetRawUri_Bad()
        {
            // Arrange
            ConfigServerClientSettingsBase settings = new ConfigServerClientSettingsBase() { Uri = "blahblah" };

            // Act and Assert
            Assert.Equal("blahblah", settings.RawUri);
        }
        public void DefaultConstructor_InitializedWithDefaults()
        {
            // Arrange
            ConfigServerClientSettingsBase settings = new ConfigServerClientSettingsBase();

            // Act and Assert
            ConfigServerTestHelpers.VerifyDefaults(settings);
        }
        public void GetPassword_GoodWithUserPassOnUri_SettingsOverrides()
        {
            // Arrange
            ConfigServerClientSettingsBase settings = new ConfigServerClientSettingsBase() { Uri = "https://*****:*****@localhost:8888/" , Password = "******" };

            // Act and Assert
            Assert.Equal("explicitOverrides", settings.Password);
            Assert.Equal("user", settings.Username);
        }
        public void GetConfigServerUri_WithLabel()
        {
            // Arrange
            ConfigServerClientSettingsBase settings = new ConfigServerClientSettingsBase() { Name = "myName", Environment = "Production", Label = "myLabel" };
            ConfigServerConfigurationProviderBase provider = new ConfigServerConfigurationProviderBase(settings);

            // Act and Assert
            string path = provider.GetConfigServerUri(settings.Label);
            Assert.Equal(settings.RawUri + settings.Name + "/" + settings.Environment + "/" + settings.Label, path);
        }
        public void SettingsConstructor__WithLoggerFactorySucceeds()
        {
            // Arrange
            LoggerFactory logFactory = new LoggerFactory();
            ConfigServerClientSettingsBase settings = new ConfigServerClientSettingsBase();

            // Act and Assert
            var provider = new ConfigServerConfigurationProviderBase(settings, logFactory);
            Assert.NotNull(provider.Logger);
        }
        public void SettingsConstructor__ThrowsIfHttpClientNull()
        {
            // Arrange
            ConfigServerClientSettingsBase settings = new ConfigServerClientSettingsBase();
            HttpClient httpClient = null;

            // Act and Assert
            var ex = Assert.Throws<ArgumentNullException>(() => new ConfigServerConfigurationProviderBase(settings, httpClient));
            Assert.Contains(nameof(httpClient), ex.Message);
        }
 public static void VerifyDefaults(ConfigServerClientSettingsBase settings)
 {
     Assert.False(settings.Enabled);
     Assert.False(settings.FailFast);
     Assert.Null(settings.Uri);
     Assert.Null(settings.Environment);
     Assert.False(settings.ValidateCertificates);
     Assert.Null(settings.Name);
     Assert.Null(settings.Label);
     Assert.Null(settings.Username);
     Assert.Null(settings.Password);
 }
        public void Initialize_WithDefaultSettings()
        {
            // Arrange
            string prefix = "spring:cloud:config";
            ConfigServerClientSettingsBase settings = new ConfigServerClientSettingsBase();
            HostingEnvironment env = new HostingEnvironment();
            env.EnvironmentName = null;
            ConfigurationRoot root = new ConfigurationRoot(new List<IConfigurationProvider>());

            // Act and Assert
            ConfigServerConfigurationSettingsHelper.Initialize(prefix, settings, env, root);
            ConfigServerTestHelpers.VerifyDefaults(settings);
        }
        public void Load_ConfigServerReturnsNotFoundStatus()
        {
            // Arrange
            var startup = new TestConfigServerStartup("", 404);
            var server = TestServer.Create(startup.Configure);
            ConfigServerClientSettingsBase settings = new ConfigServerClientSettingsBase();
            settings.Uri = "http://localhost:8888";
            settings.Name = "myName";
            server.BaseAddress = new Uri(settings.Uri);
            ConfigServerConfigurationProviderBase provider = new ConfigServerConfigurationProviderBase(settings, server.CreateClient());

            // Act and Assert
            provider.Load();
            Assert.NotNull(startup.LastRequest);
            Assert.Equal("/" + settings.Name + "/" + settings.Environment, startup.LastRequest.Path.Value);
            Assert.Equal(9, provider.Properties.Count);
        }
        public void GetRequestMessage_AddsBasicAuthIfPassword()
        {
            ConfigServerClientSettingsBase settings = new ConfigServerClientSettingsBase();
            settings.Uri = "http://*****:*****@localhost:8888/";
            settings.Name = "foo";
            settings.Environment = "development";
            ConfigServerConfigurationProviderBase provider = new ConfigServerConfigurationProviderBase(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);
        }
        public void GetLabels_MultiStringHoles()
        {
            ConfigServerClientSettingsBase settings = new ConfigServerClientSettingsBase();
            settings.Label = "1,,2,3,";
            ConfigServerConfigurationProviderBase provider = new ConfigServerConfigurationProviderBase(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 GetLabels_SingleString()
        {
            ConfigServerClientSettingsBase settings = new ConfigServerClientSettingsBase();
            settings.Label = "foobar";
            ConfigServerConfigurationProviderBase provider = new ConfigServerConfigurationProviderBase(settings);

            string[] result = provider.GetLabels();
            Assert.NotNull(result);
            Assert.Equal(1, result.Length);
            Assert.Equal("foobar", result[0]);
        }
        public void AddConfigServerClientSettings_ChangesDataDictionary()
        {
            // Arrange
            ConfigServerClientSettingsBase settings = new ConfigServerClientSettingsBase();

            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;
            ConfigServerConfigurationProviderBase provider = new ConfigServerConfigurationProviderBase(settings);


            // 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);

        }
        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);
            ConfigServerClientSettingsBase settings = new ConfigServerClientSettingsBase();
            settings.Uri = "http://localhost:8888";
            settings.Name = "myName";
            server.BaseAddress = new Uri(settings.Uri);
            ConfigServerConfigurationProviderBase provider = new ConfigServerConfigurationProviderBase(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);
        }
        public void Load_ConfigServerReturnsBadStatus_FailFastEnabled()
        {
            // Arrange
            var startup = new TestConfigServerStartup("", 500);
            var server = TestServer.Create(startup.Configure);
            ConfigServerClientSettingsBase settings = new ConfigServerClientSettingsBase();
            settings.Uri = "http://localhost:8888";
            settings.Name = "myName";
            settings.FailFast = true;
            server.BaseAddress = new Uri(settings.Uri);
            ConfigServerConfigurationProviderBase provider = new ConfigServerConfigurationProviderBase(settings, server.CreateClient());

            // Act and Assert
            var ex = Assert.Throws<ConfigServerException>(() => provider.Load());

        }
        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);
            ConfigServerClientSettingsBase settings = new ConfigServerClientSettingsBase();
            settings.Uri ="http://localhost:8888";
            settings.Name = "myName";
            server.BaseAddress = new Uri(settings.Uri);
            ConfigServerConfigurationProviderBase provider = new ConfigServerConfigurationProviderBase(settings, server.CreateClient());
            string path = provider.GetConfigServerUri(null);

            // 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_ConfigServerReturnsLessThanBadRequest()
        {
            // Arrange
            var startup = new TestConfigServerStartup("", 204);
            var server = TestServer.Create(startup.Configure);
            ConfigServerClientSettingsBase settings = new ConfigServerClientSettingsBase();
            settings.Uri = "http://localhost:8888";
            settings.Name = "myName";
            server.BaseAddress = new Uri(settings.Uri);
            ConfigServerConfigurationProviderBase provider = new ConfigServerConfigurationProviderBase(settings, server.CreateClient());
            string path = provider.GetConfigServerUri(null);

            // 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);

        }