Skip to content

Commit ae32f9a

Browse files
committed
Implemented tests for TraceId and SpanId
1 parent 93fc916 commit ae32f9a

File tree

9 files changed

+404
-0
lines changed

9 files changed

+404
-0
lines changed

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,44 @@ public void ConfigureColumnOptionsAddsColumnLogEventExcludeStandardColumnsOption
488488
Assert.True(result.LogEvent.ExcludeStandardColumns);
489489
}
490490

491+
[Fact]
492+
public void ConfigureColumnOptionsAddsColumnTraceIdWithSpecifiedOptions()
493+
{
494+
// Arrange
495+
const string columnName = "TestColumnName";
496+
var dataType = SqlDbType.NVarChar;
497+
var allowNull = true;
498+
var nonClusteredIndex = true;
499+
SetupConfigurationSectionMocks();
500+
SetupColumnSectionMock("traceId", columnName, dataType, allowNull, nonClusteredIndex);
501+
var sut = new MicrosoftExtensionsColumnOptionsProvider();
502+
503+
// Act
504+
var result = sut.ConfigureColumnOptions(new Serilog.Sinks.MSSqlServer.ColumnOptions(), _configurationSectionMock.Object);
505+
506+
// Assert
507+
AssertColumnSqlOptions(columnName, dataType, allowNull, nonClusteredIndex, result.TraceId);
508+
}
509+
510+
[Fact]
511+
public void ConfigureColumnOptionsAddsColumnSpanIdWithSpecifiedOptions()
512+
{
513+
// Arrange
514+
const string columnName = "TestColumnName";
515+
var dataType = SqlDbType.NVarChar;
516+
var allowNull = true;
517+
var nonClusteredIndex = true;
518+
SetupConfigurationSectionMocks();
519+
SetupColumnSectionMock("spanId", columnName, dataType, allowNull, nonClusteredIndex);
520+
var sut = new MicrosoftExtensionsColumnOptionsProvider();
521+
522+
// Act
523+
var result = sut.ConfigureColumnOptions(new Serilog.Sinks.MSSqlServer.ColumnOptions(), _configurationSectionMock.Object);
524+
525+
// Assert
526+
AssertColumnSqlOptions(columnName, dataType, allowNull, nonClusteredIndex, result.SpanId);
527+
}
528+
491529
[Fact]
492530
public void ConfigureColumnOptionsAddsColumnMessageWithSpecifiedOptions()
493531
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using System;
2+
using System.Configuration;
3+
using Serilog.Sinks.MSSqlServer.Tests.TestUtils;
4+
using Xunit;
5+
6+
namespace Serilog.Sinks.MSSqlServer.Tests.Configuration.Implementations.System.Configuration
7+
{
8+
[Trait(TestCategory.TraitName, TestCategory.Unit)]
9+
public class StandardColumnConfigSpanIdTests
10+
{
11+
[Fact]
12+
public void ClassSetsColumnNameRequiredAttributeToFalse()
13+
{
14+
var sut = typeof(StandardColumnConfigSpanId);
15+
var columNameProperty = sut.GetProperty("ColumnName");
16+
var configurationPropertyAttribute = (ConfigurationPropertyAttribute) Attribute.GetCustomAttribute(columNameProperty, typeof(ConfigurationPropertyAttribute));
17+
18+
Assert.Equal("ColumnName", configurationPropertyAttribute.Name);
19+
Assert.False(configurationPropertyAttribute.IsRequired);
20+
}
21+
22+
[Fact]
23+
public void ClassSetsColumnNameIsKeyAttributeToTrue()
24+
{
25+
var sut = typeof(StandardColumnConfigSpanId);
26+
var columNameProperty = sut.GetProperty("ColumnName");
27+
var configurationPropertyAttribute = (ConfigurationPropertyAttribute)Attribute.GetCustomAttribute(columNameProperty, typeof(ConfigurationPropertyAttribute));
28+
29+
Assert.Equal("ColumnName", configurationPropertyAttribute.Name);
30+
Assert.True(configurationPropertyAttribute.IsKey);
31+
}
32+
33+
}
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System;
2+
using System.Configuration;
3+
using Serilog.Sinks.MSSqlServer.Tests.TestUtils;
4+
using Xunit;
5+
6+
namespace Serilog.Sinks.MSSqlServer.Tests.Configuration.Implementations.System.Configuration
7+
{
8+
[Trait(TestCategory.TraitName, TestCategory.Unit)]
9+
public class StandardColumnConfigTraceIdTests
10+
{
11+
[Fact]
12+
public void ClassSetsColumnNameRequiredAttributeToFalse()
13+
{
14+
// Arrange + act
15+
var sut = typeof(StandardColumnConfigTraceId);
16+
var columNameProperty = sut.GetProperty("ColumnName");
17+
var configurationPropertyAttribute = (ConfigurationPropertyAttribute) Attribute.GetCustomAttribute(columNameProperty, typeof(ConfigurationPropertyAttribute));
18+
19+
// Assert
20+
Assert.Equal("ColumnName", configurationPropertyAttribute.Name);
21+
Assert.False(configurationPropertyAttribute.IsRequired);
22+
}
23+
24+
[Fact]
25+
public void ClassSetsColumnNameIsKeyAttributeToTrue()
26+
{
27+
// Arrange + act
28+
var sut = typeof(StandardColumnConfigTraceId);
29+
var columNameProperty = sut.GetProperty("ColumnName");
30+
var configurationPropertyAttribute = (ConfigurationPropertyAttribute)Attribute.GetCustomAttribute(columNameProperty, typeof(ConfigurationPropertyAttribute));
31+
32+
// Assert
33+
Assert.Equal("ColumnName", configurationPropertyAttribute.Name);
34+
Assert.True(configurationPropertyAttribute.IsKey);
35+
}
36+
37+
}
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
using System.Data;
2+
using Moq;
3+
using Serilog.Configuration;
4+
using Serilog.Sinks.MSSqlServer.Configuration;
5+
using Serilog.Sinks.MSSqlServer.Tests.TestUtils;
6+
using Xunit;
7+
8+
namespace Serilog.Sinks.MSSqlServer.Tests.Configuration.Implementations.System.Configuration
9+
{
10+
[Trait(TestCategory.TraitName, TestCategory.Unit)]
11+
public class SystemConfigurationColumnOptionsProviderTests
12+
{
13+
private readonly MSSqlServerConfigurationSection _configurationSection;
14+
private readonly SystemConfigurationColumnOptionsProvider _sut;
15+
16+
public SystemConfigurationColumnOptionsProviderTests()
17+
{
18+
_configurationSection = new MSSqlServerConfigurationSection();
19+
_sut = new SystemConfigurationColumnOptionsProvider();
20+
}
21+
22+
[Fact]
23+
public void ConfigureColumnOptionsReadsTraceIdColumnOptions()
24+
{
25+
// Arrange
26+
const string columnName = "TestColumnName";
27+
_configurationSection.TraceId.ColumnName = columnName;
28+
_configurationSection.TraceId.AllowNull = "false";
29+
_configurationSection.TraceId.DataType = "22"; // VarChar
30+
var columnOptions = new MSSqlServer.ColumnOptions();
31+
32+
// Act
33+
_sut.ConfigureColumnOptions(_configurationSection, columnOptions);
34+
35+
// Assert
36+
Assert.Equal(columnName, columnOptions.TraceId.ColumnName);
37+
Assert.False(columnOptions.TraceId.AllowNull);
38+
Assert.Equal(SqlDbType.VarChar, columnOptions.TraceId.DataType);
39+
}
40+
41+
[Fact]
42+
public void ConfigureColumnOptionsReadsSpanIdColumnOptions()
43+
{
44+
// Arrange
45+
const string columnName = "TestColumnName";
46+
_configurationSection.SpanId.ColumnName = columnName;
47+
_configurationSection.SpanId.AllowNull = "false";
48+
_configurationSection.SpanId.DataType = "22"; // VarChar
49+
var columnOptions = new MSSqlServer.ColumnOptions();
50+
51+
// Act
52+
_sut.ConfigureColumnOptions(_configurationSection, columnOptions);
53+
54+
// Assert
55+
Assert.Equal(columnName, columnOptions.SpanId.ColumnName);
56+
Assert.False(columnOptions.SpanId.AllowNull);
57+
Assert.Equal(SqlDbType.VarChar, columnOptions.SpanId.DataType);
58+
}
59+
}
60+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
using System.Diagnostics;
2+
using System.Globalization;
3+
using Serilog.Sinks.MSSqlServer.Tests.TestUtils;
4+
using Xunit;
5+
using Xunit.Abstractions;
6+
7+
namespace Serilog.Sinks.MSSqlServer.Tests.Misc
8+
{
9+
[Trait(TestCategory.TraitName, TestCategory.Integration)]
10+
public class OpenTelemetryColumnsTests : DatabaseTestsBase
11+
{
12+
public OpenTelemetryColumnsTests(ITestOutputHelper output) : base(output)
13+
{
14+
}
15+
16+
[Fact]
17+
public void OpenTelemetryActivityTraceIdAndSpanIdAreStoredInColumns()
18+
{
19+
// Arrange
20+
var expectedTraceId = string.Empty;
21+
var expectedSpanId = string.Empty;
22+
var columnOptions = new MSSqlServer.ColumnOptions();
23+
columnOptions.Store.Add(StandardColumn.TraceId);
24+
columnOptions.Store.Add(StandardColumn.SpanId);
25+
26+
Log.Logger = new LoggerConfiguration()
27+
.WriteTo.MSSqlServer
28+
(
29+
connectionString: DatabaseFixture.LogEventsConnectionString,
30+
new MSSqlServerSinkOptions
31+
{
32+
TableName = DatabaseFixture.LogTableName,
33+
AutoCreateSqlTable = true
34+
},
35+
columnOptions: columnOptions,
36+
formatProvider: CultureInfo.InvariantCulture
37+
)
38+
.CreateLogger();
39+
40+
// Act
41+
using (var testActivity = new Activity("OpenTelemetryColumnsTests"))
42+
{
43+
testActivity.SetIdFormat(ActivityIdFormat.W3C);
44+
testActivity.Start();
45+
expectedTraceId = testActivity.TraceId.ToString();
46+
expectedSpanId = testActivity.SpanId.ToString();
47+
48+
49+
Log.Logger.Information("Logging message");
50+
Log.CloseAndFlush();
51+
}
52+
53+
// Assert
54+
VerifyStringColumnWritten("TraceId", expectedTraceId);
55+
VerifyStringColumnWritten("SpanId", expectedSpanId);
56+
}
57+
}
58+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using Serilog.Sinks.MSSqlServer.Tests.TestUtils;
2+
using Xunit;
3+
4+
namespace Serilog.Sinks.MSSqlServer.Tests.ColumnOptions
5+
{
6+
[Trait(TestCategory.TraitName, TestCategory.Unit)]
7+
public class ColumnOptionsTests
8+
{
9+
[Fact]
10+
public void GetStandardColumnOptionsReturnsTraceIdOptions()
11+
{
12+
// Arrange
13+
var sut = new MSSqlServer.ColumnOptions();
14+
15+
// Act
16+
var result = sut.GetStandardColumnOptions(StandardColumn.TraceId);
17+
18+
// Assert
19+
Assert.Same(sut.TraceId, result);
20+
}
21+
22+
[Fact]
23+
public void GetStandardColumnOptionsReturnsSpanIdOptions()
24+
{
25+
// Arrange
26+
var sut = new MSSqlServer.ColumnOptions();
27+
28+
// Act
29+
var result = sut.GetStandardColumnOptions(StandardColumn.SpanId);
30+
31+
// Assert
32+
Assert.Same(sut.SpanId, result);
33+
}
34+
}
35+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System;
2+
using System.Data;
3+
using Serilog.Sinks.MSSqlServer.Tests.TestUtils;
4+
using Xunit;
5+
6+
namespace Serilog.Sinks.MSSqlServer.Tests.ColumnOptions
7+
{
8+
[Trait(TestCategory.TraitName, TestCategory.Unit)]
9+
public class SpanIdColumnOptionsTests
10+
{
11+
[Fact]
12+
public void CanSetDataTypeNVarChar()
13+
{
14+
// Arrange
15+
var options = new MSSqlServer.ColumnOptions();
16+
17+
// Act - should not throw
18+
options.SpanId.DataType = SqlDbType.NVarChar;
19+
}
20+
21+
[Fact]
22+
public void CanSetDataTypeVarChar()
23+
{
24+
// Arrange
25+
var options = new MSSqlServer.ColumnOptions();
26+
27+
// Act - should not throw
28+
options.SpanId.DataType = SqlDbType.VarChar;
29+
}
30+
31+
[Fact]
32+
public void CannotSetDataTypeBigInt()
33+
{
34+
// Arrange
35+
var options = new MSSqlServer.ColumnOptions();
36+
37+
// Act and assert - should throw
38+
Assert.Throws<ArgumentException>(() => options.SpanId.DataType = SqlDbType.BigInt);
39+
}
40+
41+
[Fact]
42+
public void CannotSetDataTypeNChar()
43+
{
44+
// Arrange
45+
var options = new MSSqlServer.ColumnOptions();
46+
47+
// Act and assert - should throw
48+
Assert.Throws<ArgumentException>(() => options.SpanId.DataType = SqlDbType.NChar);
49+
}
50+
}
51+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System;
2+
using System.Data;
3+
using Serilog.Sinks.MSSqlServer.Tests.TestUtils;
4+
using Xunit;
5+
6+
namespace Serilog.Sinks.MSSqlServer.Tests.ColumnOptions
7+
{
8+
[Trait(TestCategory.TraitName, TestCategory.Unit)]
9+
public class TraceIdColumnOptionsTests
10+
{
11+
[Fact]
12+
public void CanSetDataTypeNVarChar()
13+
{
14+
// Arrange
15+
var options = new MSSqlServer.ColumnOptions();
16+
17+
// Act - should not throw
18+
options.TraceId.DataType = SqlDbType.NVarChar;
19+
}
20+
21+
[Fact]
22+
public void CanSetDataTypeVarChar()
23+
{
24+
// Arrange
25+
var options = new MSSqlServer.ColumnOptions();
26+
27+
// Act - should not throw
28+
options.TraceId.DataType = SqlDbType.VarChar;
29+
}
30+
31+
[Fact]
32+
public void CannotSetDataTypeBigInt()
33+
{
34+
// Arrange
35+
var options = new MSSqlServer.ColumnOptions();
36+
37+
// Act and assert - should throw
38+
Assert.Throws<ArgumentException>(() => options.TraceId.DataType = SqlDbType.BigInt);
39+
}
40+
41+
[Fact]
42+
public void CannotSetDataTypeNChar()
43+
{
44+
// Arrange
45+
var options = new MSSqlServer.ColumnOptions();
46+
47+
// Act and assert - should throw
48+
Assert.Throws<ArgumentException>(() => options.TraceId.DataType = SqlDbType.NChar);
49+
}
50+
}
51+
}

0 commit comments

Comments
 (0)