Skip to content

Commit

Permalink
Force nonhierachical property: tests
Browse files Browse the repository at this point in the history
Added unit and integration tests for new functionality.

Issue serilog-mssql#542
  • Loading branch information
ckadluba committed Nov 20, 2024
1 parent 8a32830 commit 2d037df
Show file tree
Hide file tree
Showing 3 changed files with 152 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.Data;
using Moq;
using System.Linq;
using FluentAssertions;
using Serilog.Configuration;
using Serilog.Sinks.MSSqlServer.Configuration;
using Serilog.Sinks.MSSqlServer.Tests.TestUtils;
Expand Down Expand Up @@ -28,7 +29,7 @@ public void ConfigureColumnOptionsReadsTraceIdColumnOptions()
_configurationSection.TraceId.AllowNull = "false";
_configurationSection.TraceId.DataType = "22"; // VarChar
var columnOptions = new MSSqlServer.ColumnOptions();

// Act
_sut.ConfigureColumnOptions(_configurationSection, columnOptions);

Expand Down Expand Up @@ -56,5 +57,48 @@ public void ConfigureColumnOptionsReadsSpanIdColumnOptions()
Assert.False(columnOptions.SpanId.AllowNull);
Assert.Equal(SqlDbType.VarChar, columnOptions.SpanId.DataType);
}

[Fact]
public void ConfigureColumnOptionsReadsAdditionalColumnsResolveHierarchicalPropertyName()
{
// Arrange
const string columnName = "AdditionalColumn1";
var columnConfig = new ColumnConfig
{
ColumnName = columnName,
ResolveHierarchicalPropertyName = "false"
};
_configurationSection.Columns.Add(columnConfig);
var columnOptions = new MSSqlServer.ColumnOptions();

// Act
_sut.ConfigureColumnOptions(_configurationSection, columnOptions);

// Assert
var additionalColumn1 = columnOptions.AdditionalColumns.SingleOrDefault(c => c.ColumnName == columnName);
additionalColumn1.Should().NotBeNull();
additionalColumn1.ResolveHierarchicalPropertyName.Should().Be(false);
}

[Fact]
public void ConfigureColumnOptionsDefaultsAdditionalColumnsResolveHierarchicalPropertyName()
{
// Arrange
const string columnName = "AdditionalColumn1";
var columnConfig = new ColumnConfig
{
ColumnName = columnName
};
_configurationSection.Columns.Add(columnConfig);
var columnOptions = new MSSqlServer.ColumnOptions();

// Act
_sut.ConfigureColumnOptions(_configurationSection, columnOptions);

// Assert
var additionalColumn1 = columnOptions.AdditionalColumns.SingleOrDefault(c => c.ColumnName == columnName);
additionalColumn1.Should().NotBeNull();
additionalColumn1.ResolveHierarchicalPropertyName.Should().Be(true);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -239,5 +239,63 @@ public void WritesLogEventWithColumnsFromHierarchicalNamedProperties()
VerifyStringColumnWritten(additionalColumn1Name, property1Value);
VerifyIntegerColumnWritten(additionalColumn2Name, property2Value);
}

[Fact]
public void WritesLogEventIgnoringHierarchicalNamedPropertiesWhenResolveHierarchicalPropertyNameIsFalse()
{
// Arrange
const string additionalColumn1Name = "AdditionalColumn1";
const string additionalProperty1Name = "AdditionalProperty1.SubProperty1";
const string additionalColumn2Name = "AdditionalColumn2";
const string additionalProperty2Name = "AdditionalProperty2.SubProperty2.SubSubProperty1";
var columnOptions = new MSSqlServer.ColumnOptions
{
AdditionalColumns = new List<SqlColumn>
{
new SqlColumn
{
ColumnName = additionalColumn1Name,
PropertyName = additionalProperty1Name,
ResolveHierarchicalPropertyName = false,
DataType = SqlDbType.NVarChar,
AllowNull = true,
DataLength = 100
},
new SqlColumn
{
ColumnName = additionalColumn2Name,
PropertyName = additionalProperty2Name,
ResolveHierarchicalPropertyName = false,
DataType = SqlDbType.Int,
AllowNull = true
}
}
};
var property1Value = "PropertyValue1";
var property2Value = 2;

// Act
Log.Logger = new LoggerConfiguration()
.WriteTo.MSSqlServer(
DatabaseFixture.LogEventsConnectionString,
sinkOptions: new MSSqlServerSinkOptions
{
TableName = DatabaseFixture.LogTableName,
AutoCreateSqlTable = true
},
columnOptions: columnOptions,
formatProvider: CultureInfo.InvariantCulture)
.CreateLogger();
// Log event properties with names containing dots can be created using ForContext()
Log.ForContext(additionalProperty1Name, property1Value)
.ForContext(additionalProperty2Name, property2Value)
.Information("Hello {@AdditionalProperty1.SubProperty1} from thread {@AdditionalProperty2.SubProperty2.SubSubProperty1}");
Log.CloseAndFlush();

// Assert
VerifyDatabaseColumnsWereCreated(columnOptions.AdditionalColumns);
VerifyStringColumnWritten(additionalColumn1Name, property1Value);
VerifyIntegerColumnWritten(additionalColumn2Name, property2Value);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
namespace Serilog.Sinks.MSSqlServer.Tests
{
[Trait(TestCategory.TraitName, TestCategory.Unit)]
public class SqlServerColumnTests
public class SqlColumnTests
{
[Fact]
public void DefaultsPropertyNameToColumnName()
Expand Down Expand Up @@ -39,7 +39,7 @@ public void StoresPropertyName()
}

[Fact]
public void StoresHierachicalPropertyName()
public void StoresHierarchicalPropertyName()
{
// Arrange
const string propertyName1 = "TestPropertyName";
Expand All @@ -61,5 +61,51 @@ public void StoresHierachicalPropertyName()
Assert.Equal(propertyName3, sut.PropertyNameHierarchy[2]);
Assert.True(sut.HasHierarchicalPropertyName);
}

[Fact]
public void WhenResolveHierarchicalPropertyNameSetFalseDoesNotStoreHierarchicalPropertyName()
{
// Arrange
const string propertyName1 = "TestPropertyName";
const string propertyName2 = "SubPropertyName";
const string propertyName3 = "SubSubPropertyName";
var propertyName = Invariant($"{propertyName1}.{propertyName2}.{propertyName3}");

// Act
var sut = new SqlColumn("TestColumnName", SqlDbType.Int)
{
PropertyName = propertyName,
ResolveHierarchicalPropertyName = false
};

// Assert
Assert.Equal(propertyName, sut.PropertyName);
Assert.Single(sut.PropertyNameHierarchy);
Assert.Equal(propertyName, sut.PropertyNameHierarchy[0]);
Assert.False(sut.HasHierarchicalPropertyName);
}

[Fact]
public void WhenResolveHierarchicalPropertyNameSetFalseAfterPropertyNameDoesNotStoreHierarchicalPropertyName()
{
// Arrange
const string propertyName1 = "TestPropertyName";
const string propertyName2 = "SubPropertyName";
const string propertyName3 = "SubSubPropertyName";
var propertyName = Invariant($"{propertyName1}.{propertyName2}.{propertyName3}");

// Act
var sut = new SqlColumn("TestColumnName", SqlDbType.Int)
{
PropertyName = propertyName,
};
sut.ResolveHierarchicalPropertyName = false;

// Assert
Assert.Equal(propertyName, sut.PropertyName);
Assert.Single(sut.PropertyNameHierarchy);
Assert.Equal(propertyName, sut.PropertyNameHierarchy[0]);
Assert.False(sut.HasHierarchicalPropertyName);
}
}
}

0 comments on commit 2d037df

Please sign in to comment.