public void TryGet_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); }
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 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); }
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); }