Skip to content

Commit 22c7737

Browse files
committed
Added tests.
1 parent bdbd684 commit 22c7737

File tree

13 files changed

+238
-31
lines changed

13 files changed

+238
-31
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public static LoggerConfiguration MSSqlServer(
117117
logEventFormatter: logEventFormatter,
118118
applySystemConfiguration: new ApplySystemConfiguration(),
119119
sinkFactory: new MSSqlServerSinkFactory(),
120-
periodicBatchingSinkFactory: new PeriodicBatchingSinkFactory());
120+
batchingSinkFactory: new PeriodicBatchingSinkFactory());
121121

122122
// Internal overload with parameters used by tests to override the config section and inject mocks
123123
internal static LoggerConfiguration MSSqlServerInternal(
@@ -131,7 +131,7 @@ internal static LoggerConfiguration MSSqlServerInternal(
131131
ITextFormatter logEventFormatter,
132132
IApplySystemConfiguration applySystemConfiguration,
133133
IMSSqlServerSinkFactory sinkFactory,
134-
IPeriodicBatchingSinkFactory periodicBatchingSinkFactory)
134+
IPeriodicBatchingSinkFactory batchingSinkFactory)
135135
{
136136
if (loggerConfiguration == null)
137137
throw new ArgumentNullException(nameof(loggerConfiguration));
@@ -140,7 +140,7 @@ internal static LoggerConfiguration MSSqlServerInternal(
140140

141141
var sink = sinkFactory.Create(connectionString, sinkOptions, formatProvider, columnOptions, logEventFormatter);
142142

143-
var periodicBatchingSink = periodicBatchingSinkFactory.Create(sink, sinkOptions);
143+
var periodicBatchingSink = batchingSinkFactory.Create(sink, sinkOptions);
144144

145145
return loggerConfiguration.Sink(periodicBatchingSink, restrictedToMinimumLevel);
146146
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,11 @@ public ValueConfigElement BatchPeriod
173173
public ValueConfigElement EagerlyEmitFirstEvent
174174
{
175175
get => (ValueConfigElement)base[nameof(EagerlyEmitFirstEvent)];
176+
internal set
177+
{
178+
// Internal setter for unit testing purpose
179+
base[nameof(PrimaryKeyColumnName)] = value;
180+
}
176181
}
177182

178183
[ConfigurationProperty(nameof(UseAzureManagedIdentity))]

test/Serilog.Sinks.MSSqlServer.Tests/App.config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
<AutoCreateSqlTable Value="true" />
4444
<BatchPostingLimit Value="13" />
4545
<BatchPeriod Value="00:00:15" />
46+
<EagerlyEmitFirstEvent Value="false" />
4647
</SinkOptionsConfig>
4748

4849
</configuration>

test/Serilog.Sinks.MSSqlServer.Tests/Configuration/Extensions/Hybrid/LoggerConfigurationMSSqlServerExtensionsTests.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using Serilog.Sinks.MSSqlServer.Configuration.Factories;
88
using Serilog.Sinks.MSSqlServer.Sinks.MSSqlServer.Options;
99
using Serilog.Sinks.MSSqlServer.Tests.TestUtils;
10+
using Serilog.Sinks.PeriodicBatching;
1011
using Xunit;
1112

1213
namespace Serilog.Sinks.MSSqlServer.Tests.Configuration.Extensions.Hybrid
@@ -606,6 +607,38 @@ public void MSSqlServerCallsSinkFactoryWithSuppliedParameters()
606607
logEventFormatterMock.Object), Times.Once);
607608
}
608609

610+
[Fact]
611+
public void MSSqlServerCallsBatchedSinkFactoryWithSinkFromSinkFactoryAndSuppliedSinkOptions()
612+
{
613+
// Arrange
614+
var sinkOptions = new SinkOptions();
615+
var sinkMock = new Mock<IBatchedLogEventSink>();
616+
var sinkFactoryMock = new Mock<IMSSqlServerSinkFactory>();
617+
var periodicBatchingSinkFactoryMock = new Mock<IPeriodicBatchingSinkFactory>();
618+
sinkFactoryMock.Setup(f => f.Create(It.IsAny<string>(), It.IsAny<SinkOptions>(), It.IsAny<IFormatProvider>(),
619+
It.IsAny<MSSqlServer.ColumnOptions>(), It.IsAny<ITextFormatter>()))
620+
.Returns(sinkMock.Object);
621+
622+
// Act
623+
_loggerConfiguration.WriteTo.MSSqlServerInternal(
624+
connectionString: "TestConnectionString",
625+
sinkOptions: sinkOptions,
626+
sinkOptionsSection: null,
627+
appConfiguration: null,
628+
restrictedToMinimumLevel: LevelAlias.Minimum,
629+
formatProvider: null,
630+
columnOptions: null,
631+
columnOptionsSection: null,
632+
logEventFormatter: null,
633+
applySystemConfiguration: _applySystemConfigurationMock.Object,
634+
applyMicrosoftExtensionsConfiguration: _applyMicrosoftExtensionsConfigurationMock.Object,
635+
sinkFactory: sinkFactoryMock.Object,
636+
batchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
637+
638+
// Assert
639+
periodicBatchingSinkFactoryMock.Verify(f => f.Create(sinkMock.Object, sinkOptions), Times.Once);
640+
}
641+
609642
[Fact]
610643
public void MSSqlServerAuditCallsApplyMicrosoftExtensionsConfigurationGetConnectionString()
611644
{

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public void CustomStandardColumnNames()
7777
logEventFormatter: null,
7878
applySystemConfiguration: new ApplySystemConfiguration(),
7979
sinkFactory: new MSSqlServerSinkFactory(),
80-
periodicBatchingSinkFactory: new PeriodicBatchingSinkFactory())
80+
batchingSinkFactory: new PeriodicBatchingSinkFactory())
8181
.CreateLogger();
8282
Log.CloseAndFlush();
8383

@@ -100,7 +100,7 @@ public void SinkOptionsFromConfig()
100100
logEventFormatter: null,
101101
applySystemConfiguration: new ApplySystemConfiguration(),
102102
sinkFactory: new MSSqlServerSinkFactory(),
103-
periodicBatchingSinkFactory: new PeriodicBatchingSinkFactory())
103+
batchingSinkFactory: new PeriodicBatchingSinkFactory())
104104
.CreateLogger();
105105
Log.CloseAndFlush();
106106

@@ -121,7 +121,7 @@ public void CustomizedColumnListFromConfig()
121121
logEventFormatter: null,
122122
applySystemConfiguration: new ApplySystemConfiguration(),
123123
sinkFactory: new MSSqlServerSinkFactory(),
124-
periodicBatchingSinkFactory: new PeriodicBatchingSinkFactory())
124+
batchingSinkFactory: new PeriodicBatchingSinkFactory())
125125
.CreateLogger();
126126
Log.CloseAndFlush();
127127

@@ -151,7 +151,7 @@ public void AdditionalColumnWithCustomPropertyNameFromConfig()
151151
logEventFormatter: null,
152152
applySystemConfiguration: new ApplySystemConfiguration(),
153153
sinkFactory: new MSSqlServerSinkFactory(),
154-
periodicBatchingSinkFactory: new PeriodicBatchingSinkFactory())
154+
batchingSinkFactory: new PeriodicBatchingSinkFactory())
155155
.CreateLogger();
156156
Log.Information(messageTemplate, propertyValue);
157157
Log.CloseAndFlush();

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

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using Serilog.Sinks.MSSqlServer.Configuration.Factories;
88
using Serilog.Sinks.MSSqlServer.Sinks.MSSqlServer.Options;
99
using Serilog.Sinks.MSSqlServer.Tests.TestUtils;
10+
using Serilog.Sinks.PeriodicBatching;
1011
using Xunit;
1112

1213
namespace Serilog.Sinks.MSSqlServer.Tests.Configuration.Extensions.System.Configuration
@@ -44,7 +45,7 @@ public void MSSqlServerCallsApplySystemGetSectionWithSectionName()
4445
logEventFormatter: null,
4546
applySystemConfiguration: _applySystemConfigurationMock.Object,
4647
sinkFactory: sinkFactoryMock.Object,
47-
periodicBatchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
48+
batchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
4849

4950
// Assert
5051
_applySystemConfigurationMock.Verify(c => c.GetSinkConfigurationSection(inputSectionName),
@@ -74,7 +75,7 @@ public void MSSqlServerCallsApplySystemConfigurationGetConnectionString()
7475
logEventFormatter: null,
7576
applySystemConfiguration: _applySystemConfigurationMock.Object,
7677
sinkFactory: sinkFactoryMock.Object,
77-
periodicBatchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
78+
batchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
7879

7980
// Assert
8081
_applySystemConfigurationMock.Verify(c => c.GetConnectionString(inputConnectionString),
@@ -106,7 +107,7 @@ public void MSSqlServerCallsSinkFactoryWithConnectionStringFromSystemConfig()
106107
logEventFormatter: null,
107108
applySystemConfiguration: _applySystemConfigurationMock.Object,
108109
sinkFactory: sinkFactoryMock.Object,
109-
periodicBatchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
110+
batchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
110111

111112
// Assert
112113
sinkFactoryMock.Verify(f => f.Create(configConnectionString, It.IsAny<SinkOptions>(), It.IsAny<IFormatProvider>(),
@@ -137,7 +138,7 @@ public void MSSqlServerCallsApplySystemConfigurationGetColumnOptions()
137138
logEventFormatter: null,
138139
applySystemConfiguration: _applySystemConfigurationMock.Object,
139140
sinkFactory: sinkFactoryMock.Object,
140-
periodicBatchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
141+
batchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
141142

142143
// Assert
143144
_applySystemConfigurationMock.Verify(c => c.ConfigureColumnOptions(systemConfigSection, columnOptions),
@@ -169,7 +170,7 @@ public void MSSqlServerCallsSinkFactoryWithColumnOptionsFromSystemConfig()
169170
logEventFormatter: null,
170171
applySystemConfiguration: _applySystemConfigurationMock.Object,
171172
sinkFactory: sinkFactoryMock.Object,
172-
periodicBatchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
173+
batchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
173174

174175
// Assert
175176
sinkFactoryMock.Verify(f => f.Create(It.IsAny<string>(), It.IsAny<SinkOptions>(),
@@ -196,7 +197,7 @@ public void MSSqlServerDoesNotCallApplySystemConfigurationGetColumnOptionsWhenNo
196197
logEventFormatter: null,
197198
applySystemConfiguration: _applySystemConfigurationMock.Object,
198199
sinkFactory: sinkFactoryMock.Object,
199-
periodicBatchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
200+
batchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
200201

201202
// Assert
202203
_applySystemConfigurationMock.Verify(c => c.ConfigureColumnOptions(It.IsAny<MSSqlServerConfigurationSection>(), It.IsAny<Serilog.Sinks.MSSqlServer.ColumnOptions>()),
@@ -227,7 +228,7 @@ public void MSSqlServerCallsApplySystemConfigurationGetSinkOptions()
227228
logEventFormatter: null,
228229
applySystemConfiguration: _applySystemConfigurationMock.Object,
229230
sinkFactory: sinkFactoryMock.Object,
230-
periodicBatchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
231+
batchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
231232

232233
// Assert
233234
_applySystemConfigurationMock.Verify(c => c.ConfigureSinkOptions(systemConfigSection, sinkOptions),
@@ -259,7 +260,7 @@ public void MSSqlServerCallsSinkFactoryWithSinkOptionsFromSystemConfig()
259260
logEventFormatter: null,
260261
applySystemConfiguration: _applySystemConfigurationMock.Object,
261262
sinkFactory: sinkFactoryMock.Object,
262-
periodicBatchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
263+
batchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
263264

264265
// Assert
265266
sinkFactoryMock.Verify(f => f.Create(It.IsAny<string>(), configSinkOptions,
@@ -286,7 +287,7 @@ public void MSSqlServerDoesNotCallApplySystemConfigurationGetSinkOptionsWhenNotU
286287
logEventFormatter: null,
287288
applySystemConfiguration: _applySystemConfigurationMock.Object,
288289
sinkFactory: sinkFactoryMock.Object,
289-
periodicBatchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
290+
batchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
290291

291292
// Assert
292293
_applySystemConfigurationMock.Verify(c => c.ConfigureSinkOptions(It.IsAny<MSSqlServerConfigurationSection>(), It.IsAny<SinkOptions>()),
@@ -319,13 +320,42 @@ public void MSSqlServerCallsSinkFactoryWithSuppliedParameters()
319320
logEventFormatter: logEventFormatterMock.Object,
320321
applySystemConfiguration: _applySystemConfigurationMock.Object,
321322
sinkFactory: sinkFactoryMock.Object,
322-
periodicBatchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
323+
batchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
323324

324325
// Assert
325326
sinkFactoryMock.Verify(f => f.Create(It.IsAny<string>(), sinkOptions, formatProviderMock.Object,
326327
columnOptions, logEventFormatterMock.Object), Times.Once);
327328
}
328329

330+
[Fact]
331+
public void MSSqlServerCallsBatchedSinkFactoryWithSinkFromSinkFactoryAndSuppliedSinkOptions()
332+
{
333+
// Arrange
334+
var sinkOptions = new SinkOptions();
335+
var sinkMock = new Mock<IBatchedLogEventSink>();
336+
var sinkFactoryMock = new Mock<IMSSqlServerSinkFactory>();
337+
var periodicBatchingSinkFactoryMock = new Mock<IPeriodicBatchingSinkFactory>();
338+
sinkFactoryMock.Setup(f => f.Create(It.IsAny<string>(), It.IsAny<SinkOptions>(), It.IsAny<IFormatProvider>(),
339+
It.IsAny<MSSqlServer.ColumnOptions>(), It.IsAny<ITextFormatter>()))
340+
.Returns(sinkMock.Object);
341+
342+
// Act
343+
_loggerConfiguration.WriteTo.MSSqlServerInternal(
344+
configSectionName: "TestConfigSectionName",
345+
connectionString: "TestConnectionString",
346+
sinkOptions: sinkOptions,
347+
restrictedToMinimumLevel: LevelAlias.Minimum,
348+
formatProvider: null,
349+
columnOptions: null,
350+
logEventFormatter: null,
351+
applySystemConfiguration: _applySystemConfigurationMock.Object,
352+
sinkFactory: sinkFactoryMock.Object,
353+
batchingSinkFactory: periodicBatchingSinkFactoryMock.Object);
354+
355+
// Assert
356+
periodicBatchingSinkFactoryMock.Verify(f => f.Create(sinkMock.Object, sinkOptions), Times.Once);
357+
}
358+
329359
[Fact]
330360
public void MSSqlServerAuditCallsApplySystemGetSectionWithSectionName()
331361
{
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using Serilog.Sinks.MSSqlServer.Configuration.Factories;
2+
using Serilog.Sinks.MSSqlServer.Sinks.MSSqlServer.Options;
3+
using Serilog.Sinks.MSSqlServer.Tests.TestUtils;
4+
using Xunit;
5+
6+
namespace Serilog.Sinks.MSSqlServer.Tests.Configuration.Factories
7+
{
8+
[Trait(TestCategory.TraitName, TestCategory.Unit)]
9+
public class MSSqlServerAuditSinkFactoryTests
10+
{
11+
[Fact]
12+
public void MSSqlServerAuditSinkFactoryCreateReturnsInstance()
13+
{
14+
// Arrange
15+
var sinkOptions = new SinkOptions { TableName = "TestTableName" };
16+
var sut = new MSSqlServerAuditSinkFactory();
17+
18+
// Act
19+
var result = sut.Create("TestConnectionString", sinkOptions, null, new MSSqlServer.ColumnOptions(), null);
20+
21+
// Assert
22+
Assert.IsType<MSSqlServerAuditSink>(result);
23+
}
24+
}
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using Serilog.Sinks.MSSqlServer.Configuration.Factories;
2+
using Serilog.Sinks.MSSqlServer.Sinks.MSSqlServer.Options;
3+
using Serilog.Sinks.MSSqlServer.Tests.TestUtils;
4+
using Xunit;
5+
6+
namespace Serilog.Sinks.MSSqlServer.Tests.Configuration.Factories
7+
{
8+
[Trait(TestCategory.TraitName, TestCategory.Unit)]
9+
public class MSSqlServerSinkFactoryTests
10+
{
11+
[Fact]
12+
public void MSSqlServerSinkFactoryCreateReturnsInstance()
13+
{
14+
// Arrange
15+
var sinkOptions = new SinkOptions { TableName = "TestTableName" };
16+
var sut = new MSSqlServerSinkFactory();
17+
18+
// Act
19+
var result = sut.Create("TestConnectionString", sinkOptions, null, new MSSqlServer.ColumnOptions(), null);
20+
21+
// Assert
22+
Assert.IsType<MSSqlServerSink>(result);
23+
}
24+
}
25+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using Moq;
2+
using Serilog.Sinks.MSSqlServer.Configuration.Factories;
3+
using Serilog.Sinks.MSSqlServer.Sinks.MSSqlServer.Options;
4+
using Serilog.Sinks.MSSqlServer.Tests.TestUtils;
5+
using Serilog.Sinks.PeriodicBatching;
6+
using Xunit;
7+
8+
namespace Serilog.Sinks.MSSqlServer.Tests.Configuration.Factories
9+
{
10+
[Trait(TestCategory.TraitName, TestCategory.Unit)]
11+
public class PeriodicBatchingSinkFactoryTests
12+
{
13+
[Fact]
14+
public void PeriodicBatchingSinkFactoryCreateReturnsInstance()
15+
{
16+
// Arrange
17+
var sinkMock = new Mock<IBatchedLogEventSink>();
18+
var sut = new PeriodicBatchingSinkFactory();
19+
20+
// Act
21+
var result = sut.Create(sinkMock.Object, new SinkOptions());
22+
23+
// Assert
24+
Assert.IsType<PeriodicBatchingSink>(result);
25+
}
26+
}
27+
}

test/Serilog.Sinks.MSSqlServer.Tests/Configuration/Implementations/Microsoft.Extensions.Configuration/MicrosoftExtensionsSinkOptionsProviderTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,20 @@ public void ConfigureSinkOptionsSetsBatchPeriod()
109109
Assert.Equal(batchPeriod, result.BatchPeriod);
110110
}
111111

112+
[Fact]
113+
public void ConfigureSinkOptionsSetsEagerlyEmitFirstEvent()
114+
{
115+
// Arrange
116+
_configurationSectionMock.Setup(s => s["eagerlyEmitFirstEvent"]).Returns("true");
117+
var sut = new MicrosoftExtensionsSinkOptionsProvider();
118+
119+
// Act
120+
var result = sut.ConfigureSinkOptions(new SinkOptions(), _configurationSectionMock.Object);
121+
122+
// Assert
123+
Assert.True(result.EagerlyEmitFirstEvent);
124+
}
125+
112126
[Fact]
113127
public void ConfigureSinkOptionsSetsUseAzureManagedIdentity()
114128
{

0 commit comments

Comments
 (0)