Skip to content

Commit 1fb2a7b

Browse files
authored
Remove SQL dependencies from common test project. (#141)
Remove SQL dependencies from common test project.
1 parent 2329166 commit 1fb2a7b

File tree

11 files changed

+115
-156
lines changed

11 files changed

+115
-156
lines changed

samples/WebApi/WebApi.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
</PropertyGroup>
88

99
<ItemGroup>
10-
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.8"/>
10+
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.*"/>
1111
<PackageReference Include="Microsoft.Data.SqlClient" Version="5.2.1"/>
1212
<PackageReference Include="Serilog.Enrichers.Environment" Version="3.0.1"/>
13-
<PackageReference Include="Serilog.Extensions.Hosting" Version="8.0.0"/>
13+
<PackageReference Include="Serilog.Extensions.Hosting" Version="8.0.*"/>
1414
<PackageReference Include="Serilog.Sinks.Map" Version="2.0.0"/>
1515
<PackageReference Include="Serilog.Sinks.MSSqlServer" Version="6.6.0"/>
1616
<PackageReference Include="Serilog.Sinks.Elasticsearch" Version="10.0.0"/>

samples/WebApp/WebApp.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk.Web">
1+
<Project Sdk="Microsoft.NET.Sdk.Web">
22

33
<PropertyGroup>
44
<TargetFrameworks>net6.0;net7.0;net8.0</TargetFrameworks>
@@ -24,15 +24,15 @@
2424
</ItemGroup>
2525

2626
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0'">
27-
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.33"/>
27+
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.3*"/>
2828
</ItemGroup>
2929

3030
<ItemGroup Condition="'$(TargetFramework)' == 'net7.0'">
31-
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.20"/>
31+
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.*"/>
3232
</ItemGroup>
3333

3434
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
35-
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.8"/>
35+
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.*"/>
3636
</ItemGroup>
3737

3838
<!-- Serilog UI packages -->

tests/Serilog.Ui.Common.Tests/DataSamples/PropertiesFaker.cs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,13 @@
33
using Microsoft.Extensions.Logging;
44
using Serilog.Ui.Common.Tests.FakeObjectModels;
55

6-
namespace Serilog.Ui.Common.Tests.DataSamples
6+
namespace Serilog.Ui.Common.Tests.DataSamples;
7+
8+
public static class PropertiesFaker
79
{
8-
internal static class PropertiesFaker
9-
{
10-
private static readonly Faker<Properties> Properties = new Faker<Properties>()
11-
.RuleFor(p => p.EventId, f => new EventId(f.Random.Int(), f.Hacker.Noun()))
12-
.RuleForType(typeof(string), p => p.System.Random.Words(3));
10+
public static readonly Faker<Properties> Properties = new Faker<Properties>()
11+
.RuleFor(p => p.EventId, f => new EventId(f.Random.Int(), f.Hacker.Noun()))
12+
.RuleForType(typeof(string), p => p.System.Random.Words(3));
1313

14-
internal static readonly string SerializedProperties = JsonSerializer.Serialize(Properties.Generate());
15-
}
16-
}
14+
internal static readonly string SerializedProperties = JsonSerializer.Serialize(Properties.Generate());
15+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System;
2+
using System.Text.Json;
3+
using System.Text.Json.Nodes;
4+
using System.Text.Json.Serialization;
5+
using Microsoft.Extensions.Logging;
6+
7+
namespace Serilog.Ui.Common.Tests.FakeObjectModels;
8+
9+
/// <summary>
10+
/// A custom converter for the <see cref="EventId"/> class, since constructing an immutable struct type is not supported when [JsonConstructor] is not used.
11+
/// See: <see href="https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/immutability"/>
12+
/// </summary>
13+
public class EventIdConverter : JsonConverter<EventId>
14+
{
15+
public override EventId Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
16+
{
17+
var obj = (JsonObject)JsonNode.Parse(ref reader)! ?? throw new JsonException();
18+
19+
var id = (obj[nameof(EventId.Id)] ?? throw new JsonException()).GetValue<int>();
20+
var name = (obj[nameof(EventId.Name)] ?? throw new JsonException()).GetValue<string>();
21+
return new EventId(id, name);
22+
}
23+
24+
public override void Write(Utf8JsonWriter writer, EventId value, JsonSerializerOptions options)
25+
{
26+
// STJ handles writing fine, so we just delegate to the default implementation.
27+
((JsonConverter<EventId>)JsonSerializerOptions.Default.GetConverter(typeof(EventId))).Write(writer, value, options);
28+
}
29+
}
Lines changed: 10 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,16 @@
1-
using System;
2-
using System.Text.Json;
3-
using System.Text.Json.Nodes;
4-
using System.Text.Json.Serialization;
1+
using System.Text.Json.Serialization;
52
using Microsoft.Extensions.Logging;
63

7-
namespace Serilog.Ui.Common.Tests.FakeObjectModels
8-
{
9-
internal class Properties
10-
{
11-
public string SourceContext { get; set; } = string.Empty;
12-
13-
[JsonConverter(typeof(EventIdConverter))]
14-
public EventId EventId { get; set; }
4+
namespace Serilog.Ui.Common.Tests.FakeObjectModels;
155

16-
public string Protocol { get; set; } = string.Empty;
17-
18-
public string Host { get; set; } = string.Empty;
19-
}
6+
public class Properties
7+
{
8+
public string SourceContext { get; set; } = string.Empty;
209

21-
/// <summary>
22-
/// A custom converter for the <see cref="EventId"/> class, since constructing an immutable struct type is not supported when [JsonConstructor] is not used.
23-
/// See: <see href="https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/immutability"/>
24-
/// </summary>
25-
internal class EventIdConverter : JsonConverter<EventId>
26-
{
27-
public override EventId Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
28-
{
29-
var obj = (JsonObject)JsonNode.Parse(ref reader)! ?? throw new JsonException();
10+
[JsonConverter(typeof(EventIdConverter))]
11+
public EventId EventId { get; set; }
3012

31-
var id = (obj[nameof(EventId.Id)] ?? throw new JsonException()).GetValue<int>();
32-
var name = (obj[nameof(EventId.Name)] ?? throw new JsonException()).GetValue<string>();
33-
return new EventId(id, name);
34-
}
13+
public string Protocol { get; set; } = string.Empty;
3514

36-
public override void Write(Utf8JsonWriter writer, EventId value, JsonSerializerOptions options)
37-
{
38-
// STJ handles writing fine, so we just delegate to the default implementation.
39-
((JsonConverter<EventId>)JsonSerializerOptions.Default.GetConverter(typeof(EventId))).Write(writer, value, options);
40-
}
41-
}
42-
}
15+
public string Host { get; set; } = string.Empty;
16+
}
Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,17 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<IsTestProject>false</IsTestProject>
55
</PropertyGroup>
66

77
<ItemGroup>
88
<PackageReference Include="Bogus" Version="35.6.0"/>
9-
<PackageReference Include="Microsoft.Data.SqlClient" Version="5.2.1"/>
10-
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.1" />
11-
<PackageReference Include="MySqlConnector" Version="2.3.7" />
12-
<PackageReference Include="Npgsql" Version="8.0.3" />
139
<PackageReference Include="Serilog" Version="4.0.1" />
1410
<PackageReference Include="Serilog.Enrichers.Environment" Version="3.0.1"/>
1511
</ItemGroup>
1612

1713
<ItemGroup>
1814
<ProjectReference Include="..\..\src\Serilog.Ui.Core\Serilog.Ui.Core.csproj" />
19-
<ProjectReference Include="..\..\src\Serilog.Ui.MongoDbProvider\Serilog.Ui.MongoDbProvider.csproj" />
2015
</ItemGroup>
2116

2217
</Project>
Lines changed: 54 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -1,112 +1,74 @@
11
using System;
2-
using System.Threading;
32
using System.Threading.Tasks;
43
using Ardalis.GuardClauses;
54
using DotNet.Testcontainers.Containers;
6-
using Microsoft.Data.SqlClient;
7-
using MySqlConnector;
8-
using Npgsql;
95
using Serilog.Ui.Common.Tests.DataSamples;
106
using Serilog.Ui.Common.Tests.TestSuites;
117
using Serilog.Ui.Core;
128

13-
namespace Serilog.Ui.Common.Tests.SqlUtil
14-
{
15-
public abstract class DatabaseInstance : IIntegrationRunner
16-
{
17-
private bool _disposedValue;
18-
19-
protected virtual string Name { get; } = nameof(IContainer);
20-
21-
/// <summary>
22-
/// Gets or sets the TestContainers container.
23-
/// </summary>
24-
protected virtual IContainer? Container { get; set; }
25-
26-
/// <summary>
27-
/// Gets or sets the IDataProvider.
28-
/// </summary>
29-
protected IDataProvider? Provider { get; set; }
30-
31-
protected LogModelPropsCollector? Collector { get; set; }
32-
33-
public IDataProvider GetDataProvider() => Guard.Against.Null(Provider);
34-
35-
public LogModelPropsCollector GetPropsCollector() => Guard.Against.Null(Collector);
9+
namespace Serilog.Ui.Common.Tests.SqlUtil;
3610

37-
public async Task InitializeAsync()
38-
{
39-
await Container!.StartAsync();
40-
await GetDbContextInstanceAsync();
41-
}
11+
public abstract class DatabaseInstance : IIntegrationRunner
12+
{
13+
protected abstract string Name { get; }
4214

43-
/// <summary>
44-
/// Register an operation to check for db readiness.
45-
/// You can access the container connection string from this point onwards.
46-
/// Runs before <see cref="InitializeAdditionalAsync"/>.
47-
/// </summary>
48-
/// <returns><see cref="Task"/></returns>
49-
protected abstract Task CheckDbReadinessAsync();
15+
/// <summary>
16+
/// Gets or sets the TestContainers container.
17+
/// </summary>
18+
protected virtual IContainer Container { get; set; } = null!;
5019

51-
/// <summary>
52-
/// Register operations to set up the database in a functional status.
53-
/// Runs after <see cref="CheckDbReadinessAsync"/>.
54-
/// </summary>
55-
/// <returns><see cref="Task"/></returns>
56-
protected abstract Task InitializeAdditionalAsync();
20+
/// <summary>
21+
/// Gets or sets the IDataProvider.
22+
/// </summary>
23+
protected IDataProvider? Provider { get; set; }
5724

58-
private async Task GetDbContextInstanceAsync(CancellationToken token = default)
59-
{
60-
int retry = default;
25+
protected LogModelPropsCollector? Collector { get; set; }
6126

62-
do
63-
{
64-
try
65-
{
66-
await CheckDbReadinessAsync();
67-
break;
68-
}
69-
catch (Exception ex) when (ex is SqlException or MySqlException or NpgsqlException)
70-
{
71-
retry += 1;
72-
await Task.Delay(1000 * retry, token);
73-
}
74-
} while (retry < 10);
27+
public IDataProvider GetDataProvider() => Guard.Against.Null(Provider);
7528

76-
await InitializeAdditionalAsync();
77-
}
29+
public LogModelPropsCollector GetPropsCollector() => Guard.Against.Null(Collector);
7830

79-
/// <inheritdoc/>
80-
public async Task DisposeAsync()
81-
{
82-
if (Container != null)
83-
{
84-
await Container.DisposeAsync()
85-
.ConfigureAwait(false);
86-
}
87-
}
31+
public async Task InitializeAsync()
32+
{
33+
await Container.StartAsync();
34+
await CheckDbReadinessAsync();
35+
await InitializeAdditionalAsync();
36+
}
8837

89-
/// <summary>
90-
/// Dispose any additional managed dependencies.
91-
/// </summary>
92-
/// <param name="disposing">If it's disposing.</param>
93-
protected virtual void Dispose(bool disposing)
94-
{
95-
if (_disposedValue) return;
96-
if (disposing)
97-
{
98-
// additional dispose items
99-
}
38+
/// <summary>
39+
/// Register an operation to check for db readiness.
40+
/// You can access the container connection string from this point onwards.
41+
/// Runs before <see cref="InitializeAdditionalAsync"/>.
42+
/// </summary>
43+
/// <returns><see cref="Task"/></returns>
44+
protected abstract Task CheckDbReadinessAsync();
45+
46+
/// <summary>
47+
/// Register operations to set up the database in a functional status.
48+
/// Runs after <see cref="CheckDbReadinessAsync"/>.
49+
/// </summary>
50+
/// <returns><see cref="Task"/></returns>
51+
protected abstract Task InitializeAdditionalAsync();
52+
53+
/// <inheritdoc/>
54+
public async Task DisposeAsync()
55+
{
56+
await Container.DisposeAsync().ConfigureAwait(false);
57+
}
10058

101-
_disposedValue = true;
102-
}
59+
/// <summary>
60+
/// Dispose any additional managed dependencies.
61+
/// </summary>
62+
/// <param name="disposing">If it's disposing.</param>
63+
protected virtual void Dispose(bool disposing)
64+
{
65+
}
10366

104-
/// <inheritdoc/>
105-
public void Dispose()
106-
{
107-
// Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
108-
Dispose(disposing: true);
109-
GC.SuppressFinalize(this);
110-
}
67+
/// <inheritdoc/>
68+
public void Dispose()
69+
{
70+
// Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
71+
Dispose(disposing: true);
72+
GC.SuppressFinalize(this);
11173
}
11274
}

tests/Serilog.Ui.MsSqlServerProvider.Tests/Util/MsSqlServerTestProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ protected MsSqlServerTestProvider()
2929
Container = new MsSqlBuilder().Build();
3030
}
3131

32-
private RelationalDbOptions DbOptions { get; set; } = new RelationalDbOptions("dbo").WithTable("Logs");
32+
private RelationalDbOptions DbOptions { get; } = new RelationalDbOptions("dbo").WithTable("Logs");
3333

34-
protected sealed override IContainer? Container { get; set; }
34+
protected override sealed IContainer Container { get; set; }
3535

3636
protected override string Name => nameof(MsSqlContainer);
3737

tests/Serilog.Ui.MySqlProvider.Tests/Util/MariaDbTestProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ protected MariaDbTestProvider()
3333

3434
private RelationalDbOptions DbOptions { get; set; } = new RelationalDbOptions("dbo").WithTable("Logs");
3535

36-
protected sealed override IContainer? Container { get; set; }
36+
protected override sealed IContainer Container { get; set; }
3737

3838
protected virtual Dictionary<string, string>? PropertiesToColumnsMapping => new MariaDBSinkOptions().PropertiesToColumnsMapping;
3939

tests/Serilog.Ui.PostgreSqlProvider.Tests/Util/PostgresTestProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ protected PostgresTestProvider()
3535
.WithTable("logs")
3636
.WithSinkType(PostgreSqlSinkType.SerilogSinksPostgreSQLAlternative);
3737

38-
protected sealed override IContainer? Container { get; set; }
38+
protected override sealed IContainer Container { get; set; }
3939

4040
protected virtual Dictionary<string, ColumnWriterBase>? ColumnOptions => null;
4141

tests/Serilog.Ui.Web.Tests/Serilog.Ui.Web.Tests.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@
1212
</ItemGroup>
1313

1414
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0'">
15-
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.33"/>
15+
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.*"/>
1616
</ItemGroup>
1717

1818
<ItemGroup Condition="'$(TargetFramework)' == 'net7.0'">
19-
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="7.0.20"/>
19+
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="7.0.*"/>
2020
</ItemGroup>
2121

2222
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
23-
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.8"/>
23+
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.*"/>
2424
</ItemGroup>
2525

2626
<ItemGroup>

0 commit comments

Comments
 (0)