Skip to content

Commit f741691

Browse files
committed
Added a test for Configuration.Extensions.Hybrid,LoggerConfigurationMSSqlServerExtensions.
1 parent 5b3d3dd commit f741691

File tree

10 files changed

+156
-36
lines changed

10 files changed

+156
-36
lines changed

src/Serilog.Sinks.MSSqlServer/Configuration/Extensions/Hybrid/LoggerConfigurationMSSqlServerExtensions.cs

Lines changed: 72 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,40 @@ public static LoggerConfiguration MSSqlServer(
7171
ColumnOptions columnOptions = null,
7272
IConfigurationSection columnOptionsSection = null,
7373
string schemaName = "dbo",
74-
ITextFormatter logEventFormatter = null)
74+
ITextFormatter logEventFormatter = null) =>
75+
loggerConfiguration.MSSqlServerInternal(
76+
connectionString: connectionString,
77+
tableName: tableName,
78+
appConfiguration: appConfiguration,
79+
restrictedToMinimumLevel: restrictedToMinimumLevel,
80+
batchPostingLimit: batchPostingLimit,
81+
period: period,
82+
formatProvider: formatProvider,
83+
autoCreateSqlTable: autoCreateSqlTable,
84+
columnOptions: columnOptions,
85+
columnOptionsSection: columnOptionsSection,
86+
schemaName: schemaName,
87+
logEventFormatter: logEventFormatter,
88+
applySystemConfiguration: new ApplySystemConfiguration(),
89+
applyMicrosoftExtensionsConfiguration: new ApplyMicrosoftExtensionsConfiguration());
90+
91+
// Internal overload with parameters applySystemConfiguration and applyMicrosoftExtensionsConfiguration used by tests to inject mocks
92+
internal static LoggerConfiguration MSSqlServerInternal(
93+
this LoggerSinkConfiguration loggerConfiguration,
94+
string connectionString,
95+
string tableName,
96+
IConfiguration appConfiguration = null,
97+
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
98+
int batchPostingLimit = MSSqlServerSink.DefaultBatchPostingLimit,
99+
TimeSpan? period = null,
100+
IFormatProvider formatProvider = null,
101+
bool autoCreateSqlTable = false,
102+
ColumnOptions columnOptions = null,
103+
IConfigurationSection columnOptionsSection = null,
104+
string schemaName = "dbo",
105+
ITextFormatter logEventFormatter = null,
106+
IApplySystemConfiguration applySystemConfiguration = null,
107+
IApplyMicrosoftExtensionsConfiguration applyMicrosoftExtensionsConfiguration = null)
75108
{
76109
if (loggerConfiguration == null)
77110
throw new ArgumentNullException(nameof(loggerConfiguration));
@@ -82,19 +115,17 @@ public static LoggerConfiguration MSSqlServer(
82115

83116
if (ConfigurationManager.GetSection(AppConfigSectionName) is MSSqlServerConfigurationSection serviceConfigSection)
84117
{
85-
var systemConfiguration = new ApplySystemConfiguration();
86-
colOpts = systemConfiguration.ConfigureColumnOptions(serviceConfigSection, colOpts);
87-
connStr = systemConfiguration.GetConnectionString(connStr);
118+
colOpts = applySystemConfiguration.ConfigureColumnOptions(serviceConfigSection, colOpts);
119+
connStr = applySystemConfiguration.GetConnectionString(connStr);
88120

89121
if (appConfiguration != null || columnOptionsSection != null)
90122
SelfLog.WriteLine("Warning: Both System.Configuration (app.config or web.config) and Microsoft.Extensions.Configuration are being applied to the MSSQLServer sink.");
91123
}
92124

93125
if (appConfiguration != null || columnOptionsSection != null)
94126
{
95-
var microsoftExtensionsConfiguration = new ApplyMicrosoftExtensionsConfiguration();
96-
connStr = microsoftExtensionsConfiguration.GetConnectionString(connStr, appConfiguration);
97-
colOpts = microsoftExtensionsConfiguration.ConfigureColumnOptions(colOpts, columnOptionsSection);
127+
connStr = applyMicrosoftExtensionsConfiguration.GetConnectionString(connStr, appConfiguration);
128+
colOpts = applyMicrosoftExtensionsConfiguration.ConfigureColumnOptions(colOpts, columnOptionsSection);
98129
}
99130

100131
return loggerConfiguration.Sink(
@@ -138,7 +169,36 @@ public static LoggerConfiguration MSSqlServer(
138169
ColumnOptions columnOptions = null,
139170
IConfigurationSection columnOptionsSection = null,
140171
string schemaName = "dbo",
141-
ITextFormatter logEventFormatter = null)
172+
ITextFormatter logEventFormatter = null) =>
173+
loggerAuditSinkConfiguration.MSSqlServerInternal(
174+
connectionString: connectionString,
175+
tableName: tableName,
176+
appConfiguration: appConfiguration,
177+
restrictedToMinimumLevel: restrictedToMinimumLevel,
178+
formatProvider: formatProvider,
179+
autoCreateSqlTable: autoCreateSqlTable,
180+
columnOptions: columnOptions,
181+
columnOptionsSection: columnOptionsSection,
182+
schemaName: schemaName,
183+
logEventFormatter: logEventFormatter,
184+
applySystemConfiguration: new ApplySystemConfiguration(),
185+
applyMicrosoftExtensionsConfiguration: new ApplyMicrosoftExtensionsConfiguration());
186+
187+
// Internal overload with parameters applySystemConfiguration and applyMicrosoftExtensionsConfiguration used by tests to inject mocks
188+
internal static LoggerConfiguration MSSqlServerInternal(
189+
this LoggerAuditSinkConfiguration loggerAuditSinkConfiguration,
190+
string connectionString,
191+
string tableName,
192+
IConfiguration appConfiguration = null,
193+
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
194+
IFormatProvider formatProvider = null,
195+
bool autoCreateSqlTable = false,
196+
ColumnOptions columnOptions = null,
197+
IConfigurationSection columnOptionsSection = null,
198+
string schemaName = "dbo",
199+
ITextFormatter logEventFormatter = null,
200+
IApplySystemConfiguration applySystemConfiguration = null,
201+
IApplyMicrosoftExtensionsConfiguration applyMicrosoftExtensionsConfiguration = null)
142202
{
143203
if (loggerAuditSinkConfiguration == null)
144204
throw new ArgumentNullException(nameof(loggerAuditSinkConfiguration));
@@ -148,19 +208,17 @@ public static LoggerConfiguration MSSqlServer(
148208

149209
if (ConfigurationManager.GetSection(AppConfigSectionName) is MSSqlServerConfigurationSection serviceConfigSection)
150210
{
151-
var systemConfiguration = new ApplySystemConfiguration();
152-
colOpts = systemConfiguration.ConfigureColumnOptions(serviceConfigSection, colOpts);
153-
connStr = systemConfiguration.GetConnectionString(connStr);
211+
colOpts = applySystemConfiguration.ConfigureColumnOptions(serviceConfigSection, colOpts);
212+
connStr = applySystemConfiguration.GetConnectionString(connStr);
154213

155214
if (appConfiguration != null || columnOptionsSection != null)
156215
SelfLog.WriteLine("Warning: Both System.Configuration (app.config or web.config) and Microsoft.Extensions.Configuration are being applied to the MSSQLServer sink.");
157216
}
158217

159218
if (appConfiguration != null || columnOptionsSection != null)
160219
{
161-
var microsoftExtensionsConfiguration = new ApplyMicrosoftExtensionsConfiguration();
162-
connStr = microsoftExtensionsConfiguration.GetConnectionString(connStr, appConfiguration);
163-
colOpts = microsoftExtensionsConfiguration.ConfigureColumnOptions(colOpts, columnOptionsSection);
220+
connStr = applyMicrosoftExtensionsConfiguration.GetConnectionString(connStr, appConfiguration);
221+
colOpts = applyMicrosoftExtensionsConfiguration.ConfigureColumnOptions(colOpts, columnOptionsSection);
164222
}
165223

166224
return loggerAuditSinkConfiguration.Sink(

src/Serilog.Sinks.MSSqlServer/Configuration/Extensions/System.Configuration/LoggerConfigurationMSSqlServerExtensions.cs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public static LoggerConfiguration MSSqlServer(
6464
ColumnOptions columnOptions = null,
6565
string schemaName = "dbo",
6666
ITextFormatter logEventFormatter = null) =>
67-
loggerConfiguration.MSSqlServer(
67+
loggerConfiguration.MSSqlServerInternal(
6868
configSectionName: AppConfigSectionName,
6969
connectionString,
7070
tableName,
@@ -75,10 +75,11 @@ public static LoggerConfiguration MSSqlServer(
7575
autoCreateSqlTable,
7676
columnOptions,
7777
schemaName,
78-
logEventFormatter);
78+
logEventFormatter,
79+
new ApplySystemConfiguration());
7980

80-
// Internal overload with parameter configSectionName used by tests to override the config section
81-
internal static LoggerConfiguration MSSqlServer(
81+
// Internal overload with parameters configSectionName and applySystemConfiguration used by tests to override the config section and inject mock
82+
internal static LoggerConfiguration MSSqlServerInternal(
8283
this LoggerSinkConfiguration loggerConfiguration,
8384
string configSectionName,
8485
string connectionString,
@@ -90,19 +91,19 @@ internal static LoggerConfiguration MSSqlServer(
9091
bool autoCreateSqlTable = false,
9192
ColumnOptions columnOptions = null,
9293
string schemaName = "dbo",
93-
ITextFormatter logEventFormatter = null)
94+
ITextFormatter logEventFormatter = null,
95+
IApplySystemConfiguration applySystemConfiguration = null)
9496
{
9597
if (loggerConfiguration == null)
9698
throw new ArgumentNullException(nameof(loggerConfiguration));
9799

98100
var defaultedPeriod = period ?? MSSqlServerSink.DefaultPeriod;
99101
var colOpts = columnOptions ?? new ColumnOptions();
100102

101-
var systemConfiguration = new ApplySystemConfiguration();
102103
if (ConfigurationManager.GetSection(configSectionName) is MSSqlServerConfigurationSection serviceConfigSection)
103-
colOpts = systemConfiguration.ConfigureColumnOptions(serviceConfigSection, colOpts);
104+
colOpts = applySystemConfiguration.ConfigureColumnOptions(serviceConfigSection, colOpts);
104105

105-
connectionString = systemConfiguration.GetConnectionString(connectionString);
106+
connectionString = applySystemConfiguration.GetConnectionString(connectionString);
106107

107108
return loggerConfiguration.Sink(
108109
new MSSqlServerSink(
@@ -145,7 +146,7 @@ public static LoggerConfiguration MSSqlServer(
145146
ColumnOptions columnOptions = null,
146147
string schemaName = "dbo",
147148
ITextFormatter logEventFormatter = null) =>
148-
loggerAuditSinkConfiguration.MSSqlServer(
149+
loggerAuditSinkConfiguration.MSSqlServerInternal(
149150
configSectionName: AppConfigSectionName,
150151
connectionString,
151152
tableName,
@@ -154,10 +155,11 @@ public static LoggerConfiguration MSSqlServer(
154155
autoCreateSqlTable,
155156
columnOptions,
156157
schemaName,
157-
logEventFormatter);
158+
logEventFormatter,
159+
new ApplySystemConfiguration());
158160

159-
// Internal overload with parameter configSectionName used by tests to override the config section
160-
internal static LoggerConfiguration MSSqlServer(
161+
// Internal overload with parameters configSectionName and applySystemConfiguration used by tests to override the config section and inject mock
162+
internal static LoggerConfiguration MSSqlServerInternal(
161163
this LoggerAuditSinkConfiguration loggerAuditSinkConfiguration,
162164
string configSectionName,
163165
string connectionString,
@@ -167,18 +169,18 @@ internal static LoggerConfiguration MSSqlServer(
167169
bool autoCreateSqlTable = false,
168170
ColumnOptions columnOptions = null,
169171
string schemaName = "dbo",
170-
ITextFormatter logEventFormatter = null)
172+
ITextFormatter logEventFormatter = null,
173+
IApplySystemConfiguration applySystemConfiguration = null)
171174
{
172175
if (loggerAuditSinkConfiguration == null)
173176
throw new ArgumentNullException(nameof(loggerAuditSinkConfiguration));
174177

175178
var colOpts = columnOptions ?? new ColumnOptions();
176179

177-
var systemConfiguration = new ApplySystemConfiguration();
178180
if (ConfigurationManager.GetSection(configSectionName) is MSSqlServerConfigurationSection serviceConfigSection)
179-
colOpts = systemConfiguration.ConfigureColumnOptions(serviceConfigSection, colOpts);
181+
colOpts = applySystemConfiguration.ConfigureColumnOptions(serviceConfigSection, colOpts);
180182

181-
connectionString = systemConfiguration.GetConnectionString(connectionString);
183+
connectionString = applySystemConfiguration.GetConnectionString(connectionString);
182184

183185
return loggerAuditSinkConfiguration.Sink(
184186
new MSSqlServerAuditSink(

src/Serilog.Sinks.MSSqlServer/Configuration/Implementations/Microsoft.Extensions.Configuration/ApplyMicrosoftExtensionsConfiguration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace Serilog.Sinks.MSSqlServer
66
/// <summary>
77
/// Configures the sink's connection string and ColumnOtions object.
88
/// </summary>
9-
internal class ApplyMicrosoftExtensionsConfiguration
9+
internal class ApplyMicrosoftExtensionsConfiguration : IApplyMicrosoftExtensionsConfiguration
1010
{
1111
private readonly IMicrosoftExtensionsConnectionStringProvider _connectionStringProvider;
1212
private readonly IMicrosoftExtensionsColumnOptionsProvider _columnOptionsProvider;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using Microsoft.Extensions.Configuration;
2+
3+
namespace Serilog.Sinks.MSSqlServer
4+
{
5+
internal interface IApplyMicrosoftExtensionsConfiguration
6+
{
7+
ColumnOptions ConfigureColumnOptions(ColumnOptions columnOptions, IConfigurationSection config);
8+
string GetConnectionString(string nameOrConnectionString, IConfiguration appConfiguration);
9+
}
10+
}

src/Serilog.Sinks.MSSqlServer/Configuration/Implementations/System.Configuration/ApplySystemConfiguration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace Serilog.Sinks.MSSqlServer
66
/// <summary>
77
/// Configures the sink's connection string and ColumnOtions object.
88
/// </summary>
9-
internal class ApplySystemConfiguration
9+
internal class ApplySystemConfiguration : IApplySystemConfiguration
1010
{
1111
private readonly ISystemConfigurationConnectionStringProvider _connectionStringProvider;
1212
private readonly ISystemConfigurationColumnOptionsProvider _columnOptionsProvider;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using Serilog.Configuration;
2+
3+
namespace Serilog.Sinks.MSSqlServer
4+
{
5+
internal interface IApplySystemConfiguration
6+
{
7+
ColumnOptions ConfigureColumnOptions(MSSqlServerConfigurationSection config, ColumnOptions columnOptions);
8+
string GetConnectionString(string nameOrConnectionString);
9+
}
10+
}

src/Serilog.Sinks.MSSqlServer/Serilog.Sinks.MSSqlServer.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@
7979
<Compile Include="Configuration\Implementations\System.Configuration\**\*.cs" />
8080
</ItemGroup>
8181

82+
<ItemGroup>
83+
<None Remove="Configuration\Implementations\Microsoft.Extensions.Configuration\IApplyMicrosoftExtensionsConfiguration.cs" />
84+
</ItemGroup>
85+
8286
<ItemGroup>
8387
<None Include="Images\serilog-sink-nuget.png" Pack="true" PackagePath="" />
8488
</ItemGroup>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using Microsoft.Extensions.Configuration;
2+
using Moq;
3+
using Xunit;
4+
5+
namespace Serilog.Sinks.MSSqlServer.Tests.Configuration.Extensions.Hybrid
6+
{
7+
public class LoggerConfigurationMSSqlServerExtensionsTests
8+
{
9+
[Fact]
10+
public void MSSqlServerCallsApplyMicrosoftExtensionsConfigurationGetConnectionString()
11+
{
12+
// Arrange
13+
const string connectionString = "TestConnectionString";
14+
var loggerConfiguration = new LoggerConfiguration();
15+
var applyMicrosoftExtensionsConfigurationMock = new Mock<IApplyMicrosoftExtensionsConfiguration>();
16+
applyMicrosoftExtensionsConfigurationMock.Setup(c => c.GetConnectionString(It.IsAny<string>(), It.IsAny<IConfiguration>()))
17+
.Returns(connectionString);
18+
var appConfigurationMock = new Mock<IConfiguration>();
19+
var columnOptionsSectionMock = new Mock<IConfigurationSection>();
20+
21+
// Act
22+
loggerConfiguration.WriteTo.MSSqlServerInternal(
23+
connectionString: connectionString,
24+
tableName: "TestTableName",
25+
appConfiguration: appConfigurationMock.Object,
26+
columnOptionsSection: columnOptionsSectionMock.Object,
27+
applyMicrosoftExtensionsConfiguration: applyMicrosoftExtensionsConfigurationMock.Object);
28+
29+
// Assert
30+
applyMicrosoftExtensionsConfigurationMock.Verify(c => c.GetConnectionString(connectionString, appConfigurationMock.Object));
31+
}
32+
}
33+
}

test/Serilog.Sinks.MSSqlServer.Tests/Configuration/Extensions/System.Configuration/ConfigurationExtensionsTests.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,12 @@ public void CustomStandardColumnNames()
4545
var standardNames = new List<string> { "CustomMessage", "CustomMessageTemplate", "CustomLevel", "CustomTimeStamp", "CustomException", "CustomProperties" };
4646

4747
var loggerConfiguration = new LoggerConfiguration();
48-
Log.Logger = loggerConfiguration.WriteTo.MSSqlServer(
48+
Log.Logger = loggerConfiguration.WriteTo.MSSqlServerInternal(
4949
configSectionName: "CustomStandardColumnNames",
5050
connectionString: DatabaseFixture.LogEventsConnectionString,
5151
tableName: DatabaseFixture.LogTableName,
52-
autoCreateSqlTable: true)
52+
autoCreateSqlTable: true,
53+
applySystemConfiguration: new ApplySystemConfiguration())
5354
.CreateLogger();
5455
Log.CloseAndFlush();
5556

@@ -71,11 +72,12 @@ public void CustomStandardColumnNames()
7172
public void CustomizedColumnList()
7273
{
7374
var loggerConfiguration = new LoggerConfiguration();
74-
Log.Logger = loggerConfiguration.WriteTo.MSSqlServer(
75+
Log.Logger = loggerConfiguration.WriteTo.MSSqlServerInternal(
7576
configSectionName: "CustomizedColumnList",
7677
connectionString: DatabaseFixture.LogEventsConnectionString,
7778
tableName: DatabaseFixture.LogTableName,
78-
autoCreateSqlTable: true)
79+
autoCreateSqlTable: true,
80+
applySystemConfiguration: new ApplySystemConfiguration())
7981
.CreateLogger();
8082
Log.CloseAndFlush();
8183

test/Serilog.Sinks.MSSqlServer.Tests/Serilog.Sinks.MSSqlServer.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
<PrivateAssets>all</PrivateAssets>
6969
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
7070
</PackageReference>
71+
<Compile Include="Configuration\Extensions\Hybrid\**\*.cs" />
7172
<Compile Include="Configuration\Extensions\Microsoft.Extensions.Configuration\**\*.cs" />
7273
<Compile Include="Configuration\Implementations\Microsoft.Extensions.Configuration\**\*.cs" />
7374
<Compile Include="Configuration\Implementations\System.Configuration\**\*.cs" />

0 commit comments

Comments
 (0)