From 8e2d9a972faa08b2f9329ae61d925411c8cbcca5 Mon Sep 17 00:00:00 2001 From: Ivan Maximov Date: Mon, 13 Mar 2023 11:08:05 +0300 Subject: [PATCH 1/3] Allow internal types and methods --- .../Configuration/ConfigurationReader.cs | 42 +++++----- .../ConfigurationReaderOptions.cs | 10 +++ .../ConfigurationSettingsTests.cs | 81 +++++++++++++++++++ ...erilog.Settings.Configuration.approved.txt | 2 + .../DummyLoggerConfigurationExtensions.cs | 30 +++++++ 5 files changed, 144 insertions(+), 21 deletions(-) diff --git a/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs b/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs index f0202f27..79f00cc7 100644 --- a/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs +++ b/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs @@ -233,7 +233,7 @@ void ApplyFilters(LoggerConfiguration loggerConfiguration) if (filterDirective.GetChildren().Any()) { var methodCalls = GetMethodCalls(filterDirective); - CallConfigurationMethods(methodCalls, FindFilterConfigurationMethods(_configurationAssemblies), loggerConfiguration.Filter); + CallConfigurationMethods(methodCalls, FindFilterConfigurationMethods(_configurationAssemblies, _resolutionContext.ReaderOptions.AllowInternalTypes, _resolutionContext.ReaderOptions.AllowInternalMethods), loggerConfiguration.Filter); } } @@ -243,7 +243,7 @@ void ApplyDestructuring(LoggerConfiguration loggerConfiguration) if (destructureDirective.GetChildren().Any()) { var methodCalls = GetMethodCalls(destructureDirective); - CallConfigurationMethods(methodCalls, FindDestructureConfigurationMethods(_configurationAssemblies), loggerConfiguration.Destructure); + CallConfigurationMethods(methodCalls, FindDestructureConfigurationMethods(_configurationAssemblies, _resolutionContext.ReaderOptions.AllowInternalTypes, _resolutionContext.ReaderOptions.AllowInternalMethods), loggerConfiguration.Destructure); } } @@ -253,7 +253,7 @@ void ApplySinks(LoggerConfiguration loggerConfiguration) if (writeToDirective.GetChildren().Any()) { var methodCalls = GetMethodCalls(writeToDirective); - CallConfigurationMethods(methodCalls, FindSinkConfigurationMethods(_configurationAssemblies), loggerConfiguration.WriteTo); + CallConfigurationMethods(methodCalls, FindSinkConfigurationMethods(_configurationAssemblies, _resolutionContext.ReaderOptions.AllowInternalTypes, _resolutionContext.ReaderOptions.AllowInternalMethods), loggerConfiguration.WriteTo); } } @@ -263,20 +263,20 @@ void ApplyAuditSinks(LoggerConfiguration loggerConfiguration) if (auditToDirective.GetChildren().Any()) { var methodCalls = GetMethodCalls(auditToDirective); - CallConfigurationMethods(methodCalls, FindAuditSinkConfigurationMethods(_configurationAssemblies), loggerConfiguration.AuditTo); + CallConfigurationMethods(methodCalls, FindAuditSinkConfigurationMethods(_configurationAssemblies, _resolutionContext.ReaderOptions.AllowInternalTypes, _resolutionContext.ReaderOptions.AllowInternalMethods), loggerConfiguration.AuditTo); } } void IConfigurationReader.ApplySinks(LoggerSinkConfiguration loggerSinkConfiguration) { var methodCalls = GetMethodCalls(_section); - CallConfigurationMethods(methodCalls, FindSinkConfigurationMethods(_configurationAssemblies), loggerSinkConfiguration); + CallConfigurationMethods(methodCalls, FindSinkConfigurationMethods(_configurationAssemblies, _resolutionContext.ReaderOptions.AllowInternalTypes, _resolutionContext.ReaderOptions.AllowInternalMethods), loggerSinkConfiguration); } void IConfigurationReader.ApplyEnrichment(LoggerEnrichmentConfiguration loggerEnrichmentConfiguration) { var methodCalls = GetMethodCalls(_section); - CallConfigurationMethods(methodCalls, FindEventEnricherConfigurationMethods(_configurationAssemblies), loggerEnrichmentConfiguration); + CallConfigurationMethods(methodCalls, FindEventEnricherConfigurationMethods(_configurationAssemblies, _resolutionContext.ReaderOptions.AllowInternalTypes, _resolutionContext.ReaderOptions.AllowInternalMethods), loggerEnrichmentConfiguration); } void ApplyEnrichment(LoggerConfiguration loggerConfiguration) @@ -285,7 +285,7 @@ void ApplyEnrichment(LoggerConfiguration loggerConfiguration) if (enrichDirective.GetChildren().Any()) { var methodCalls = GetMethodCalls(enrichDirective); - CallConfigurationMethods(methodCalls, FindEventEnricherConfigurationMethods(_configurationAssemblies), loggerConfiguration.Enrich); + CallConfigurationMethods(methodCalls, FindEventEnricherConfigurationMethods(_configurationAssemblies, _resolutionContext.ReaderOptions.AllowInternalTypes, _resolutionContext.ReaderOptions.AllowInternalMethods), loggerConfiguration.Enrich); } var propertiesDirective = _section.GetSection("Properties"); @@ -494,51 +494,51 @@ static bool ParameterNameMatches(string actualParameterName, IEnumerable return suppliedNames.Any(s => ParameterNameMatches(actualParameterName, s)); } - static IReadOnlyCollection FindSinkConfigurationMethods(IReadOnlyCollection configurationAssemblies) + static IReadOnlyCollection FindSinkConfigurationMethods(IReadOnlyCollection configurationAssemblies, bool allowInternalTypes, bool allowInternalMethods) { - var found = FindConfigurationExtensionMethods(configurationAssemblies, typeof(LoggerSinkConfiguration)); + var found = FindConfigurationExtensionMethods(configurationAssemblies, typeof(LoggerSinkConfiguration), allowInternalTypes, allowInternalMethods); if (configurationAssemblies.Contains(typeof(LoggerSinkConfiguration).GetTypeInfo().Assembly)) found.AddRange(SurrogateConfigurationMethods.WriteTo); return found; } - static IReadOnlyCollection FindAuditSinkConfigurationMethods(IReadOnlyCollection configurationAssemblies) + static IReadOnlyCollection FindAuditSinkConfigurationMethods(IReadOnlyCollection configurationAssemblies, bool allowInternalTypes, bool allowInternalMethods) { - var found = FindConfigurationExtensionMethods(configurationAssemblies, typeof(LoggerAuditSinkConfiguration)); + var found = FindConfigurationExtensionMethods(configurationAssemblies, typeof(LoggerAuditSinkConfiguration), allowInternalTypes, allowInternalMethods); if (configurationAssemblies.Contains(typeof(LoggerAuditSinkConfiguration).GetTypeInfo().Assembly)) found.AddRange(SurrogateConfigurationMethods.AuditTo); return found; } - static IReadOnlyCollection FindFilterConfigurationMethods(IReadOnlyCollection configurationAssemblies) + static IReadOnlyCollection FindFilterConfigurationMethods(IReadOnlyCollection configurationAssemblies, bool allowInternalTypes, bool allowInternalMethods) { - var found = FindConfigurationExtensionMethods(configurationAssemblies, typeof(LoggerFilterConfiguration)); + var found = FindConfigurationExtensionMethods(configurationAssemblies, typeof(LoggerFilterConfiguration), allowInternalTypes, allowInternalMethods); if (configurationAssemblies.Contains(typeof(LoggerFilterConfiguration).GetTypeInfo().Assembly)) found.AddRange(SurrogateConfigurationMethods.Filter); return found; } - static IReadOnlyCollection FindDestructureConfigurationMethods(IReadOnlyCollection configurationAssemblies) + static IReadOnlyCollection FindDestructureConfigurationMethods(IReadOnlyCollection configurationAssemblies, bool allowInternalTypes, bool allowInternalMethods) { - var found = FindConfigurationExtensionMethods(configurationAssemblies, typeof(LoggerDestructuringConfiguration)); + var found = FindConfigurationExtensionMethods(configurationAssemblies, typeof(LoggerDestructuringConfiguration), allowInternalTypes, allowInternalMethods); if (configurationAssemblies.Contains(typeof(LoggerDestructuringConfiguration).GetTypeInfo().Assembly)) found.AddRange(SurrogateConfigurationMethods.Destructure); return found; } - static IReadOnlyCollection FindEventEnricherConfigurationMethods(IReadOnlyCollection configurationAssemblies) + static IReadOnlyCollection FindEventEnricherConfigurationMethods(IReadOnlyCollection configurationAssemblies, bool allowInternalTypes, bool allowInternalMethods) { - var found = FindConfigurationExtensionMethods(configurationAssemblies, typeof(LoggerEnrichmentConfiguration)); + var found = FindConfigurationExtensionMethods(configurationAssemblies, typeof(LoggerEnrichmentConfiguration), allowInternalTypes, allowInternalMethods); if (configurationAssemblies.Contains(typeof(LoggerEnrichmentConfiguration).GetTypeInfo().Assembly)) found.AddRange(SurrogateConfigurationMethods.Enrich); return found; } - static List FindConfigurationExtensionMethods(IReadOnlyCollection configurationAssemblies, Type configType) + static List FindConfigurationExtensionMethods(IReadOnlyCollection configurationAssemblies, Type configType, bool allowInternalTypes, bool allowInternalMethods) { // ExtensionAttribute can be polyfilled to support extension methods static bool HasCustomExtensionAttribute(MethodInfo m) @@ -554,11 +554,11 @@ static bool HasCustomExtensionAttribute(MethodInfo m) } return configurationAssemblies - .SelectMany(a => a.ExportedTypes + .SelectMany(a => (allowInternalTypes ? a.GetTypes() : a.ExportedTypes) .Select(t => t.GetTypeInfo()) - .Where(t => t.IsSealed && t.IsAbstract && !t.IsNested)) + .Where(t => t.IsSealed && t.IsAbstract && !t.IsNested && (t.IsPublic || allowInternalTypes && !t.IsVisible))) .SelectMany(t => t.DeclaredMethods) - .Where(m => m.IsStatic && m.IsPublic && (m.IsDefined(typeof(ExtensionAttribute), false) || HasCustomExtensionAttribute(m))) + .Where(m => m.IsStatic && (m.IsPublic || allowInternalMethods && m.IsAssembly) && (m.IsDefined(typeof(ExtensionAttribute), false) || HasCustomExtensionAttribute(m))) .Where(m => m.GetParameters()[0].ParameterType == configType) .ToList(); } diff --git a/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReaderOptions.cs b/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReaderOptions.cs index 7fa22a50..bc682084 100644 --- a/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReaderOptions.cs +++ b/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReaderOptions.cs @@ -57,6 +57,16 @@ public ConfigurationReaderOptions() : this(dependencyContext: null) /// public IFormatProvider FormatProvider { get; init; } = CultureInfo.InvariantCulture; + /// + /// Allows to use internal types for extension methods for sink configuration. Defaults to . + /// + public bool AllowInternalTypes { get; set; } + + /// + /// Allows to use internal extension methods for sink configuration. Defaults to . + /// + public bool AllowInternalMethods { get; set; } + /// /// Called when a log level switch is created while reading the configuration. /// Log level switches are created either from the Serilog:LevelSwitches section (declared switches) or the Serilog:MinimumLevel:Override section (minimum level override switches). diff --git a/test/Serilog.Settings.Configuration.Tests/ConfigurationSettingsTests.cs b/test/Serilog.Settings.Configuration.Tests/ConfigurationSettingsTests.cs index fbeeaf0c..78af9d07 100644 --- a/test/Serilog.Settings.Configuration.Tests/ConfigurationSettingsTests.cs +++ b/test/Serilog.Settings.Configuration.Tests/ConfigurationSettingsTests.cs @@ -119,6 +119,87 @@ public void ConfigurationAssembliesFromDllScanning() Assert.Single(DummyConsoleSink.Emitted); } + [Fact] + public void ConfigurationAssembliesFromDllScanningWithInternalMethodInPublicClass() + { + var json = """ + { + "Serilog": { + "Using": ["TestDummies"], + "WriteTo": ["DummyConsoleInternal"] + } + } + """; + + var builder = new ConfigurationBuilder().AddJsonString(json); + var config = builder.Build(); + var log = new LoggerConfiguration() + .ReadFrom.Configuration( + configuration: config, + readerOptions: new ConfigurationReaderOptions(ConfigurationAssemblySource.AlwaysScanDllFiles) { AllowInternalMethods = true }) + .CreateLogger(); + + DummyConsoleSink.Emitted.Clear(); + + log.Write(Some.InformationEvent()); + + Assert.Single(DummyConsoleSink.Emitted); + } + + [Fact] + public void ConfigurationAssembliesFromDllScanningWithPublicMethodInInternalClass() + { + var json = """ + { + "Serilog": { + "Using": ["TestDummies"], + "WriteTo": ["DummyConsolePublicInInternal"] + } + } + """; + + var builder = new ConfigurationBuilder().AddJsonString(json); + var config = builder.Build(); + var log = new LoggerConfiguration() + .ReadFrom.Configuration( + configuration: config, + readerOptions: new ConfigurationReaderOptions(ConfigurationAssemblySource.AlwaysScanDllFiles) { AllowInternalTypes = true }) + .CreateLogger(); + + DummyConsoleSink.Emitted.Clear(); + + log.Write(Some.InformationEvent()); + + Assert.Single(DummyConsoleSink.Emitted); + } + + [Fact] + public void ConfigurationAssembliesFromDllScanningWithInternalMethodInInternalClass() + { + var json = """ + { + "Serilog": { + "Using": ["TestDummies"], + "WriteTo": ["DummyConsoleInternalInInternal"] + } + } + """; + + var builder = new ConfigurationBuilder().AddJsonString(json); + var config = builder.Build(); + var log = new LoggerConfiguration() + .ReadFrom.Configuration( + configuration: config, + readerOptions: new ConfigurationReaderOptions(ConfigurationAssemblySource.AlwaysScanDllFiles) { AllowInternalTypes = true, AllowInternalMethods = true }) + .CreateLogger(); + + DummyConsoleSink.Emitted.Clear(); + + log.Write(Some.InformationEvent()); + + Assert.Single(DummyConsoleSink.Emitted); + } + [Fact] public void SinksAreConfigured() { diff --git a/test/Serilog.Settings.Configuration.Tests/Serilog.Settings.Configuration.approved.txt b/test/Serilog.Settings.Configuration.Tests/Serilog.Settings.Configuration.approved.txt index 912f1716..a5c46503 100644 --- a/test/Serilog.Settings.Configuration.Tests/Serilog.Settings.Configuration.approved.txt +++ b/test/Serilog.Settings.Configuration.Tests/Serilog.Settings.Configuration.approved.txt @@ -43,6 +43,8 @@ namespace Serilog.Settings.Configuration public ConfigurationReaderOptions(Microsoft.Extensions.DependencyModel.DependencyContext dependencyContext) { } public ConfigurationReaderOptions(Serilog.Settings.Configuration.ConfigurationAssemblySource configurationAssemblySource) { } public ConfigurationReaderOptions(params System.Reflection.Assembly[] assemblies) { } + public bool AllowInternalMethods { get; set; } + public bool AllowInternalTypes { get; set; } public System.IFormatProvider FormatProvider { get; init; } public System.Action OnLevelSwitchCreated { get; init; } public string SectionName { get; init; } diff --git a/test/TestDummies/DummyLoggerConfigurationExtensions.cs b/test/TestDummies/DummyLoggerConfigurationExtensions.cs index 7dfccc0c..909e9b5b 100644 --- a/test/TestDummies/DummyLoggerConfigurationExtensions.cs +++ b/test/TestDummies/DummyLoggerConfigurationExtensions.cs @@ -120,6 +120,15 @@ public static LoggerConfiguration DummyConsole( return loggerSinkConfiguration.Sink(new DummyConsoleSink(theme), restrictedToMinimumLevel, levelSwitch); } + internal static LoggerConfiguration DummyConsoleInternal( + this LoggerSinkConfiguration loggerSinkConfiguration, + LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum, + LoggingLevelSwitch levelSwitch = null, + ConsoleTheme theme = null) + { + return loggerSinkConfiguration.Sink(new DummyConsoleSink(theme), restrictedToMinimumLevel, levelSwitch); + } + public static LoggerConfiguration Dummy( this LoggerSinkConfiguration loggerSinkConfiguration, Action wrappedSinkAction) @@ -170,3 +179,24 @@ public static LoggerConfiguration DummyNumbers(this LoggerDestructuringConfigura }); } } + +internal static class DummyLoggerConfigurationExtensionsInternal +{ + public static LoggerConfiguration DummyConsolePublicInInternal( + this LoggerSinkConfiguration loggerSinkConfiguration, + LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum, + LoggingLevelSwitch levelSwitch = null, + ConsoleTheme theme = null) + { + return loggerSinkConfiguration.Sink(new DummyConsoleSink(theme), restrictedToMinimumLevel, levelSwitch); + } + + internal static LoggerConfiguration DummyConsoleInternalInInternal( + this LoggerSinkConfiguration loggerSinkConfiguration, + LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum, + LoggingLevelSwitch levelSwitch = null, + ConsoleTheme theme = null) + { + return loggerSinkConfiguration.Sink(new DummyConsoleSink(theme), restrictedToMinimumLevel, levelSwitch); + } +} From 3849967b9b27ee71ba9de0c1f43b7707ff7f895f Mon Sep 17 00:00:00 2001 From: Ivan Maximov Date: Fri, 17 Mar 2023 08:50:10 +0300 Subject: [PATCH 2/3] fix --- ...erilog.Settings.Configuration.approved.txt | 4 +- ...erilog.Settings.Configuration.received.txt | 52 ------------------- 2 files changed, 2 insertions(+), 54 deletions(-) delete mode 100644 test/Serilog.Settings.Configuration.Tests/Serilog.Settings.Configuration.received.txt diff --git a/test/Serilog.Settings.Configuration.Tests/Serilog.Settings.Configuration.approved.txt b/test/Serilog.Settings.Configuration.Tests/Serilog.Settings.Configuration.approved.txt index 175708e7..4c7fc7cf 100644 --- a/test/Serilog.Settings.Configuration.Tests/Serilog.Settings.Configuration.approved.txt +++ b/test/Serilog.Settings.Configuration.Tests/Serilog.Settings.Configuration.approved.txt @@ -43,8 +43,8 @@ namespace Serilog.Settings.Configuration public ConfigurationReaderOptions(Microsoft.Extensions.DependencyModel.DependencyContext? dependencyContext) { } public ConfigurationReaderOptions(Serilog.Settings.Configuration.ConfigurationAssemblySource configurationAssemblySource) { } public ConfigurationReaderOptions(params System.Reflection.Assembly[] assemblies) { } - public bool AllowInternalMethods { get; set; } - public bool AllowInternalTypes { get; set; } + public bool AllowInternalMethods { get; init; } + public bool AllowInternalTypes { get; init; } public System.IFormatProvider? FormatProvider { get; init; } public System.Action? OnLevelSwitchCreated { get; init; } public string? SectionName { get; init; } diff --git a/test/Serilog.Settings.Configuration.Tests/Serilog.Settings.Configuration.received.txt b/test/Serilog.Settings.Configuration.Tests/Serilog.Settings.Configuration.received.txt deleted file mode 100644 index 4c7fc7cf..00000000 --- a/test/Serilog.Settings.Configuration.Tests/Serilog.Settings.Configuration.received.txt +++ /dev/null @@ -1,52 +0,0 @@ -namespace Serilog -{ - public static class ConfigurationLoggerConfigurationExtensions - { - public const string DefaultSectionName = "Serilog"; - [System.Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, ConfigurationReaderOptio" + - "ns readerOptions) instead.")] - public static Serilog.LoggerConfiguration Configuration(this Serilog.Configuration.LoggerSettingsConfiguration settingConfiguration, Microsoft.Extensions.Configuration.IConfiguration configuration, Microsoft.Extensions.DependencyModel.DependencyContext dependencyContext) { } - [System.Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, ConfigurationReaderOptio" + - "ns readerOptions) instead.")] - public static Serilog.LoggerConfiguration Configuration(this Serilog.Configuration.LoggerSettingsConfiguration settingConfiguration, Microsoft.Extensions.Configuration.IConfiguration configuration, Serilog.Settings.Configuration.ConfigurationAssemblySource configurationAssemblySource) { } - public static Serilog.LoggerConfiguration Configuration(this Serilog.Configuration.LoggerSettingsConfiguration settingConfiguration, Microsoft.Extensions.Configuration.IConfiguration configuration, Serilog.Settings.Configuration.ConfigurationReaderOptions? readerOptions = null) { } - [System.Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, ConfigurationReaderOptio" + - "ns readerOptions) instead.")] - public static Serilog.LoggerConfiguration Configuration(this Serilog.Configuration.LoggerSettingsConfiguration settingConfiguration, Microsoft.Extensions.Configuration.IConfiguration configuration, params System.Reflection.Assembly[] assemblies) { } - [System.Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, ConfigurationReaderOptio" + - "ns readerOptions) instead.")] - public static Serilog.LoggerConfiguration Configuration(this Serilog.Configuration.LoggerSettingsConfiguration settingConfiguration, Microsoft.Extensions.Configuration.IConfiguration configuration, string sectionName, Microsoft.Extensions.DependencyModel.DependencyContext? dependencyContext = null) { } - [System.Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, ConfigurationReaderOptio" + - "ns readerOptions) instead.")] - public static Serilog.LoggerConfiguration Configuration(this Serilog.Configuration.LoggerSettingsConfiguration settingConfiguration, Microsoft.Extensions.Configuration.IConfiguration configuration, string sectionName, Serilog.Settings.Configuration.ConfigurationAssemblySource configurationAssemblySource) { } - [System.Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, ConfigurationReaderOptio" + - "ns readerOptions) instead.")] - public static Serilog.LoggerConfiguration Configuration(this Serilog.Configuration.LoggerSettingsConfiguration settingConfiguration, Microsoft.Extensions.Configuration.IConfiguration configuration, string sectionName, params System.Reflection.Assembly[] assemblies) { } - [System.Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, string sectionName, Depe" + - "ndencyContext dependencyContext) instead.")] - public static Serilog.LoggerConfiguration ConfigurationSection(this Serilog.Configuration.LoggerSettingsConfiguration settingConfiguration, Microsoft.Extensions.Configuration.IConfigurationSection configSection, Microsoft.Extensions.DependencyModel.DependencyContext? dependencyContext = null) { } - [System.Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, string sectionName, Conf" + - "igurationAssemblySource configurationAssemblySource) instead.")] - public static Serilog.LoggerConfiguration ConfigurationSection(this Serilog.Configuration.LoggerSettingsConfiguration settingConfiguration, Microsoft.Extensions.Configuration.IConfigurationSection configSection, Serilog.Settings.Configuration.ConfigurationAssemblySource configurationAssemblySource) { } - } -} -namespace Serilog.Settings.Configuration -{ - public enum ConfigurationAssemblySource - { - UseLoadedAssemblies = 0, - AlwaysScanDllFiles = 1, - } - public sealed class ConfigurationReaderOptions - { - public ConfigurationReaderOptions() { } - public ConfigurationReaderOptions(Microsoft.Extensions.DependencyModel.DependencyContext? dependencyContext) { } - public ConfigurationReaderOptions(Serilog.Settings.Configuration.ConfigurationAssemblySource configurationAssemblySource) { } - public ConfigurationReaderOptions(params System.Reflection.Assembly[] assemblies) { } - public bool AllowInternalMethods { get; init; } - public bool AllowInternalTypes { get; init; } - public System.IFormatProvider? FormatProvider { get; init; } - public System.Action? OnLevelSwitchCreated { get; init; } - public string? SectionName { get; init; } - } -} \ No newline at end of file From 264d3bea89db31e6ceb90602bc558753ddb4f57f Mon Sep 17 00:00:00 2001 From: Ivan Maximov Date: Fri, 17 Mar 2023 08:57:25 +0300 Subject: [PATCH 3/3] tests --- .../ConfigurationSettingsTests.cs | 39 +++++++++++++------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/test/Serilog.Settings.Configuration.Tests/ConfigurationSettingsTests.cs b/test/Serilog.Settings.Configuration.Tests/ConfigurationSettingsTests.cs index 72f82891..f9e8886e 100644 --- a/test/Serilog.Settings.Configuration.Tests/ConfigurationSettingsTests.cs +++ b/test/Serilog.Settings.Configuration.Tests/ConfigurationSettingsTests.cs @@ -144,8 +144,10 @@ public void ConfigurationAssembliesFromDllScanning() Assert.Single(DummyConsoleSink.Emitted); } - [Fact] - public void ConfigurationAssembliesWithInternalMethodInPublicClass() + [Theory] + [InlineData(false)] + [InlineData(true)] + public void ConfigurationAssembliesWithInternalMethodInPublicClass(bool allowInternalMethods) { var json = """ { @@ -161,18 +163,23 @@ public void ConfigurationAssembliesWithInternalMethodInPublicClass() var log = new LoggerConfiguration() .ReadFrom.Configuration( configuration: config, - readerOptions: new ConfigurationReaderOptions(ConfigurationAssemblySource.AlwaysScanDllFiles) { AllowInternalMethods = true }) + readerOptions: new ConfigurationReaderOptions(ConfigurationAssemblySource.AlwaysScanDllFiles) { AllowInternalMethods = allowInternalMethods }) .CreateLogger(); DummyConsoleSink.Emitted.Clear(); log.Write(Some.InformationEvent()); - Assert.Single(DummyConsoleSink.Emitted); + if (allowInternalMethods) + Assert.Single(DummyConsoleSink.Emitted); + else + Assert.Empty(DummyConsoleSink.Emitted); } - [Fact] - public void ConfigurationAssembliesWithPublicMethodInInternalClass() + [Theory] + [InlineData(false)] + [InlineData(true)] + public void ConfigurationAssembliesWithPublicMethodInInternalClass(bool allowInternalTypes) { var json = """ { @@ -188,18 +195,23 @@ public void ConfigurationAssembliesWithPublicMethodInInternalClass() var log = new LoggerConfiguration() .ReadFrom.Configuration( configuration: config, - readerOptions: new ConfigurationReaderOptions(ConfigurationAssemblySource.AlwaysScanDllFiles) { AllowInternalTypes = true }) + readerOptions: new ConfigurationReaderOptions(ConfigurationAssemblySource.AlwaysScanDllFiles) { AllowInternalTypes = allowInternalTypes }) .CreateLogger(); DummyConsoleSink.Emitted.Clear(); log.Write(Some.InformationEvent()); - Assert.Single(DummyConsoleSink.Emitted); + if (allowInternalTypes) + Assert.Single(DummyConsoleSink.Emitted); + else + Assert.Empty(DummyConsoleSink.Emitted); } - [Fact] - public void ConfigurationAssembliesWithInternalMethodInInternalClass() + [Theory] + [InlineData(false, false)] + [InlineData(true, true)] + public void ConfigurationAssembliesWithInternalMethodInInternalClass(bool allowInternalTypes, bool allowInternalMethods) { var json = """ { @@ -215,14 +227,17 @@ public void ConfigurationAssembliesWithInternalMethodInInternalClass() var log = new LoggerConfiguration() .ReadFrom.Configuration( configuration: config, - readerOptions: new ConfigurationReaderOptions(ConfigurationAssemblySource.AlwaysScanDllFiles) { AllowInternalTypes = true, AllowInternalMethods = true }) + readerOptions: new ConfigurationReaderOptions(ConfigurationAssemblySource.AlwaysScanDllFiles) { AllowInternalTypes = allowInternalTypes, AllowInternalMethods = allowInternalMethods }) .CreateLogger(); DummyConsoleSink.Emitted.Clear(); log.Write(Some.InformationEvent()); - Assert.Single(DummyConsoleSink.Emitted); + if (allowInternalTypes && allowInternalMethods) + Assert.Single(DummyConsoleSink.Emitted); + else + Assert.Empty(DummyConsoleSink.Emitted); } [Fact]