Skip to content

Commit 18230fc

Browse files
committed
Add test to ensure the bug does not come back
1 parent 2ad9d9a commit 18230fc

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

src/libraries/Microsoft.Extensions.Configuration.Json/tests/JsonConfigurationTest.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
using System;
55
using System.Globalization;
66
using System.IO;
7+
using System.Linq;
78
using Microsoft.Extensions.Configuration.Json;
89
using Microsoft.Extensions.Configuration.Test;
10+
using Microsoft.Extensions.FileProviders;
911
using Xunit;
1012

1113
namespace Microsoft.Extensions.Configuration
@@ -219,5 +221,34 @@ public void ThrowFormatExceptionWhenFileIsEmpty()
219221
var exception = Assert.Throws<FormatException>(() => LoadProvider(@""));
220222
Assert.Contains("Could not parse the JSON file.", exception.Message);
221223
}
224+
225+
[Fact]
226+
public void AddJsonFile_FileProvider_Is_Not_Disposed_When_SourcesGetReloaded()
227+
{
228+
string filePath = Path.Combine(Path.GetTempPath(), $"{nameof(AddJsonFile_FileProvider_Is_Not_Disposed_When_SourcesGetReloaded)}.json");
229+
File.WriteAllText(filePath, @"{ ""some"": ""value"" }");
230+
231+
IConfigurationBuilder builder = new ConfigurationManager();
232+
233+
builder.AddJsonFile(filePath, optional: false);
234+
235+
FileConfigurationSource fileConfigurationSource = (FileConfigurationSource)builder.Sources.Last();
236+
PhysicalFileProvider fileProvider = (PhysicalFileProvider)fileConfigurationSource.FileProvider;
237+
238+
Assert.False(GetIsDisposed(fileProvider));
239+
240+
builder.Properties.Add("simplest", "repro");
241+
242+
Assert.False(GetIsDisposed(fileProvider));
243+
244+
fileProvider.Dispose();
245+
Assert.True(GetIsDisposed(fileProvider));
246+
}
247+
248+
private static bool GetIsDisposed(PhysicalFileProvider fileProvider)
249+
{
250+
System.Reflection.FieldInfo isDisposedField = typeof(PhysicalFileProvider).GetField("_disposed", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
251+
return (bool)isDisposedField.GetValue(fileProvider);
252+
}
222253
}
223254
}

0 commit comments

Comments
 (0)