public void Constructor_WithConfiguration()
        {
            var holder = new PlaceholderResolverProvider(new ConfigurationBuilder().Build());

            Assert.NotNull(holder.Configuration);
            Assert.Empty(holder._providers);
        }
        public void Set_SetsValues_ReturnsResolvedValues()
        {
            var settings = new Dictionary <string, string>()
            {
                { "key1", "value1" },
                { "key2", "${key1?notfound}" },
                { "key3", "${nokey?notfound}" },
                { "key4", "${nokey}" },
            };

            var builder = new ConfigurationBuilder();

            builder.AddInMemoryCollection(settings);
            var providers = builder.Build().Providers.ToList();

            var holder = new PlaceholderResolverProvider(providers);

            Assert.False(holder.TryGet("nokey", out var val));
            Assert.True(holder.TryGet("key1", out val));
            Assert.Equal("value1", val);
            Assert.True(holder.TryGet("key2", out val));
            Assert.Equal("value1", val);
            Assert.True(holder.TryGet("key3", out val));
            Assert.Equal("notfound", val);
            Assert.True(holder.TryGet("key4", out val));
            Assert.Equal("${nokey}", val);

            holder.Set("nokey", "nokeyvalue");
            Assert.True(holder.TryGet("key3", out val));
            Assert.Equal("nokeyvalue", val);
            Assert.True(holder.TryGet("key4", out val));
            Assert.Equal("nokeyvalue", val);
        }
        public void Constructor_WithListIConfigurationProvider()
        {
            var providers = new List <IConfigurationProvider>();
            var holder    = new PlaceholderResolverProvider(providers);

            Assert.Null(holder.Configuration);
            Assert.Same(providers, holder._providers);
        }
Beispiel #4
0
        public void Load_ReloadsConfiguration()
        {
            // Arrange
            var appsettings1 = @"
                {
                    ""spring"": {
                        ""bar"": {
                            ""name"": ""myName""
                    },
                      ""cloud"": {
                        ""config"": {
                            ""name"" : ""${spring:bar:name?noname}"",
                        }
                      }
                    }
                }";

            var appsettings2 = @"
                {
                    ""spring"": {
                        ""bar"": {
                            ""name"": ""newMyName""
                    },
                      ""cloud"": {
                        ""config"": {
                            ""name"" : ""${spring:bar:name?noname}"",
                        }
                      }
                    }
                }";

            var    path      = TestHelpers.CreateTempFile(appsettings1);
            string directory = Path.GetDirectoryName(path);
            string fileName  = Path.GetFileName(path);
            ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.SetBasePath(directory);

            configurationBuilder.AddJsonFile(fileName, false, true);

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

            var holder = new PlaceholderResolverProvider(config);

            Assert.True(holder.TryGet("spring:cloud:config:name", out string val));
            Assert.Equal("myName", val);

            File.WriteAllText(path, appsettings2);
            Thread.Sleep(1000);  // There is a 250ms delay

            holder.Load();

            Assert.True(holder.TryGet("spring:cloud:config:name", out val));
            Assert.Equal("newMyName", val);
        }
        public void Constructor_WithLoggerFactory()
        {
            var loggerFactory = new LoggerFactory();

            var holder = new PlaceholderResolverProvider(new List <IConfigurationProvider>(), loggerFactory);

            Assert.NotNull(holder._logger);

            holder = new PlaceholderResolverProvider(new ConfigurationBuilder().Build(), loggerFactory);
            Assert.NotNull(holder._logger);
        }
Beispiel #6
0
        public AppConfig()
        {
            var root = new ConfigurationBuilder()
                       .AddCloudFoundry()
                       .AddEnvironmentVariables()
                       .AddConfigServer()
                       .Build();
            var configServerProvider = root.Providers.OfType <ConfigServerConfigurationProvider>().First();
            var appName             = root.GetValue <string>("spring:application:name");
            var placeholderProvider = new PlaceholderResolverProvider(new [] { configServerProvider });

            Configuration = new ConfigurationRoot(new IConfigurationProvider[] { placeholderProvider });
        }
        public void AddPlaceholderResolver_WithLoggerFactorySucceeds()
        {
            // Arrange
            var configurationBuilder = new ConfigurationBuilder();
            var loggerFactory        = new LoggerFactory();

            // Act and Assert
            configurationBuilder.AddPlaceholderResolver(loggerFactory);
            var configuration = configurationBuilder.Build();

            PlaceholderResolverProvider provider =
                configuration.Providers.OfType <PlaceholderResolverProvider>().SingleOrDefault();

            Assert.NotNull(provider);
            Assert.NotNull(provider._logger);
        }
        public void Load_CreatesConfiguration()
        {
            var settings = new Dictionary <string, string>
            {
                { "key1", "value1" },
                { "key2", "${key1?notfound}" },
                { "key3", "${nokey?notfound}" },
                { "key4", "${nokey}" },
            };

            var builder = new ConfigurationBuilder();

            builder.AddInMemoryCollection(settings);
            var providers = builder.Build().Providers.ToList();

            var holder = new PlaceholderResolverProvider(providers);

            Assert.Null(holder.Configuration);
            holder.Load();
            Assert.NotNull(holder.Configuration);
            Assert.Equal("value1", holder.Configuration !["key1"]);
        public void GetChildKeys_ReturnsResolvableSection()
        {
            var settings = new Dictionary <string, string>()
            {
                { "spring:bar:name", "myName" },
                { "spring:cloud:name", "${spring:bar:name?noname}" },
            };

            var builder = new ConfigurationBuilder();

            builder.AddInMemoryCollection(settings);
            var providers = builder.Build().Providers.ToList();

            var holder = new PlaceholderResolverProvider(providers);
            var result = holder.GetChildKeys(Array.Empty <string>(), "spring");

            Assert.NotNull(result);
            var list = result.ToList();

            Assert.Equal(2, list.Count);
            Assert.Contains("bar", list);
            Assert.Contains("cloud", list);
        }
        public void GetReloadToken_ReturnsExpected_NotifyChanges()
        {
            var appsettings1 = @"
                {
                    ""spring"": {
                        ""bar"": {
                            ""name"": ""myName""
                    },
                      ""cloud"": {
                        ""config"": {
                            ""name"" : ""${spring:bar:name?noname}"",
                        }
                      }
                    }
                }";

            var appsettings2 = @"
                {
                    ""spring"": {
                        ""bar"": {
                            ""name"": ""newMyName""
                    },
                      ""cloud"": {
                        ""config"": {
                            ""name"" : ""${spring:bar:name?noname}"",
                        }
                      }
                    }
                }";

            using var sandbox = new Sandbox();
            var path                 = sandbox.CreateFile("appsettings.json", appsettings1);
            var directory            = Path.GetDirectoryName(path);
            var fileName             = Path.GetFileName(path);
            var configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.SetBasePath(directory);

            configurationBuilder.AddJsonFile(fileName, false, true);

            var config = configurationBuilder.Build();

            var holder = new PlaceholderResolverProvider(new List <IConfigurationProvider>(config.Providers));
            var token  = holder.GetReloadToken();

            Assert.NotNull(token);
            Assert.False(token.HasChanged);

            Assert.True(holder.TryGet("spring:cloud:config:name", out var val));
            Assert.Equal("myName", val);

            File.WriteAllText(path, appsettings2);

            // There is a 250ms delay to detect change
            // ASP.NET Core tests use 2000 Sleep for this kind of test
            Thread.Sleep(2000);

            Assert.True(token.HasChanged);
            Assert.True(holder.TryGet("spring:cloud:config:name", out val));
            Assert.Equal("newMyName", val);
        }
Beispiel #11
0
        public void GetReloadToken_ReturnsExpected_NotifyChanges()
        {
            // Arrange
            var appsettings1 = @"
{
    'spring': {
        'bar': {
            'name': 'myName'
    },
      'cloud': {
        'config': {
            'name' : '${spring:bar:name?noname}',
        }
      }
    }
}";

            var appsettings2 = @"
{
    'spring': {
        'bar': {
            'name': 'newMyName'
    },
      'cloud': {
        'config': {
            'name' : '${spring:bar:name?noname}',
        }
      }
    }
}";

            var    path      = TestHelpers.CreateTempFile(appsettings1);
            string directory = Path.GetDirectoryName(path);
            string fileName  = Path.GetFileName(path);
            ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.SetBasePath(directory);

            configurationBuilder.AddJsonFile(fileName, false, true);

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

            var holder = new PlaceholderResolverProvider(new List <IConfigurationProvider>(config.Providers));
            var token  = holder.GetReloadToken();

            Assert.NotNull(token);
            Assert.False(token.HasChanged);

            Assert.True(holder.TryGet("spring:cloud:config:name", out string val));
            Assert.Equal("myName", val);

            File.WriteAllText(path, appsettings2);

            // There is a 250ms delay to detect change
            // ASP.NET Core tests use 2000 Sleep for this kind of test
            Thread.Sleep(2000);

            Assert.True(token.HasChanged);
            Assert.True(holder.TryGet("spring:cloud:config:name", out val));
            Assert.Equal("newMyName", val);
        }