Skip to content

Commit 100ed01

Browse files
authored
Merge branch 'master' into feature/migrate-consul-tests-to-testcontainers
2 parents a944113 + 846fbc9 commit 100ed01

12 files changed

Lines changed: 139 additions & 147 deletions

.editorconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ dotnet_style_predefined_type_for_member_access = true:error
5252

5353
# .NET code style settings - Modifier preferences
5454
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019#normalize-modifiers
55-
dotnet_style_require_accessibility_modifiers = always:warning
55+
dotnet_style_require_accessibility_modifiers = for_non_interface_members:warning
5656
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:warning
5757
dotnet_style_readonly_field = true:warning
5858

.github/workflows/healthchecks_clickhouse_ci.yml

Lines changed: 5 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -29,49 +29,8 @@ on:
2929

3030
jobs:
3131
build:
32-
runs-on: ubuntu-latest
33-
services:
34-
clickhouse:
35-
image: clickhouse/clickhouse-server:24-alpine
36-
ports:
37-
- 8123:8123
38-
env:
39-
CLICKHOUSE_DB: default
40-
CLICKHOUSE_USER: default
41-
CLICKHOUSE_PASSWORD: "Password12!"
42-
CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: "1"
43-
steps:
44-
- uses: actions/checkout@v3
45-
- name: Setup .NET
46-
uses: actions/setup-dotnet@v4
47-
with:
48-
dotnet-version: |
49-
8.0.x
50-
9.0.x
51-
- name: Restore
52-
run: |
53-
dotnet restore ./src/HealthChecks.ClickHouse/HealthChecks.ClickHouse.csproj &&
54-
dotnet restore ./test/HealthChecks.ClickHouse.Tests/HealthChecks.ClickHouse.Tests.csproj
55-
- name: Check formatting
56-
run: |
57-
dotnet format --no-restore --verify-no-changes --severity warn ./src/HealthChecks.ClickHouse/HealthChecks.ClickHouse.csproj || (echo "Run 'dotnet format' to fix issues" && exit 1) &&
58-
dotnet format --no-restore --verify-no-changes --severity warn ./test/HealthChecks.ClickHouse.Tests/HealthChecks.ClickHouse.Tests.csproj || (echo "Run 'dotnet format' to fix issues" && exit 1)
59-
- name: Build
60-
run: |
61-
dotnet build --no-restore ./src/HealthChecks.ClickHouse/HealthChecks.ClickHouse.csproj &&
62-
dotnet build --no-restore ./test/HealthChecks.ClickHouse.Tests/HealthChecks.ClickHouse.Tests.csproj
63-
- name: Test
64-
run: >
65-
dotnet test
66-
./test/HealthChecks.ClickHouse.Tests/HealthChecks.ClickHouse.Tests.csproj
67-
--no-restore
68-
--no-build
69-
--collect "XPlat Code Coverage"
70-
--results-directory .coverage
71-
--
72-
DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover
73-
- name: Upload Coverage
74-
uses: codecov/codecov-action@v5
75-
with:
76-
flags: ClickHouse
77-
directory: .coverage
32+
uses: ./.github/workflows/reusable_ci_workflow.yml
33+
with:
34+
PROJECT_PATH: ./src/HealthChecks.ClickHouse/HealthChecks.ClickHouse.csproj
35+
TEST_PROJECT_PATH: ./test/HealthChecks.ClickHouse.Tests/HealthChecks.ClickHouse.Tests.csproj
36+
CODECOV_FLAGS: ClickHouse

.github/workflows/healthchecks_ravendb_ci.yml

Lines changed: 5 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -29,46 +29,8 @@ on:
2929

3030
jobs:
3131
build:
32-
runs-on: ubuntu-latest
33-
services:
34-
ravendb:
35-
image: ravendb/ravendb
36-
ports:
37-
- 9030:8080
38-
env:
39-
RAVEN_ARGS: --Setup.Mode=None
40-
steps:
41-
- uses: actions/checkout@v3
42-
- name: Setup .NET
43-
uses: actions/setup-dotnet@v4
44-
with:
45-
dotnet-version: |
46-
8.0.x
47-
9.0.x
48-
- name: Restore
49-
run: |
50-
dotnet restore ./src/HealthChecks.RavenDB/HealthChecks.RavenDB.csproj &&
51-
dotnet restore ./test/HealthChecks.RavenDb.Tests/HealthChecks.RavenDb.Tests.csproj
52-
- name: Check formatting
53-
run: |
54-
dotnet format --no-restore --verify-no-changes --severity warn ./src/HealthChecks.RavenDB/HealthChecks.RavenDB.csproj || (echo "Run 'dotnet format' to fix issues" && exit 1) &&
55-
dotnet format --no-restore --verify-no-changes --severity warn ./test/HealthChecks.RavenDb.Tests/HealthChecks.RavenDb.Tests.csproj || (echo "Run 'dotnet format' to fix issues" && exit 1)
56-
- name: Build
57-
run: |
58-
dotnet build --no-restore ./src/HealthChecks.RavenDB/HealthChecks.RavenDB.csproj &&
59-
dotnet build --no-restore ./test/HealthChecks.RavenDb.Tests/HealthChecks.RavenDb.Tests.csproj
60-
- name: Test
61-
run: >
62-
dotnet test
63-
./test/HealthChecks.RavenDb.Tests/HealthChecks.RavenDb.Tests.csproj
64-
--no-restore
65-
--no-build
66-
--collect "XPlat Code Coverage"
67-
--results-directory .coverage
68-
--
69-
DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover
70-
- name: Upload Coverage
71-
uses: codecov/codecov-action@v5
72-
with:
73-
flags: RavenDb
74-
directory: .coverage
32+
uses: ./.github/workflows/reusable_ci_workflow.yml
33+
with:
34+
PROJECT_PATH: ./src/HealthChecks.RavenDB/HealthChecks.RavenDB.csproj
35+
TEST_PROJECT_PATH: ./test/HealthChecks.RavenDb.Tests/HealthChecks.RavenDb.Tests.csproj
36+
CODECOV_FLAGS: RavenDb

Directory.Packages.props

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,15 @@
103103
<PackageVersion Include="System.Text.RegularExpressions" Version="4.3.1" />
104104
<PackageVersion Include="System.Threading.Channels" Version="8.0.0" />
105105
<PackageVersion Include="Testcontainers" Version="$(TestcontainersVersion)" />
106+
<PackageVersion Include="Testcontainers.ClickHouse" Version="$(TestcontainersVersion)" />
106107
<PackageVersion Include="Testcontainers.Consul" Version="$(TestcontainersVersion)" />
107108
<PackageVersion Include="Testcontainers.Kafka" Version="$(TestcontainersVersion)" />
108109
<PackageVersion Include="Testcontainers.Milvus" Version="$(TestcontainersVersion)" />
109110
<PackageVersion Include="Testcontainers.PostgreSql" Version="$(TestcontainersVersion)" />
110111
<PackageVersion Include="TestContainers.MongoDb" Version="$(TestcontainersVersion)" />
111112
<PackageVersion Include="Testcontainers.MsSql" Version="$(TestcontainersVersion)" />
112113
<PackageVersion Include="Testcontainers.MySql" Version="$(TestcontainersVersion)" />
114+
<PackageVersion Include="Testcontainers.RavenDb" Version="$(TestcontainersVersion)" />
113115
<PackageVersion Include="Testcontainers.Redis" Version="$(TestcontainersVersion)" />
114116
<PackageVersion Include="Testcontainers.RabbitMq" Version="$(TestcontainersVersion)" />
115117
<PackageVersion Include="xunit" Version="2.9.2" />

src/HealthChecks.UI/Core/Notifications/WebHookFailureNotifier.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ await SaveNotificationAsync(new HealthCheckFailureNotification()
6363
{
6464
_logger.LogInformation("Webhook notification will not be sent because of user configuration");
6565
continue;
66-
};
66+
}
6767

6868
if (!isHealthy)
6969
{
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using Testcontainers.ClickHouse;
2+
3+
namespace HealthChecks.ClickHouse.Tests;
4+
5+
public class ClickHouseContainerFixture : IAsyncLifetime
6+
{
7+
private const string Registry = "docker.io";
8+
9+
private const string Image = "library/clickhouse";
10+
11+
private const string Tag = "25.7.2";
12+
13+
public ClickHouseContainer? Container { get; private set; }
14+
15+
public string GetConnectionString()
16+
{
17+
if (Container is null)
18+
{
19+
throw new InvalidOperationException("The test container was not initialized.");
20+
}
21+
22+
return Container.GetConnectionString();
23+
}
24+
25+
public async Task InitializeAsync() => Container = await CreateContainerAsync();
26+
27+
public Task DisposeAsync() => Container?.DisposeAsync().AsTask() ?? Task.CompletedTask;
28+
29+
private async Task<ClickHouseContainer?> CreateContainerAsync()
30+
{
31+
var container = new ClickHouseBuilder()
32+
.WithImage($"{Registry}/{Image}:{Tag}")
33+
.Build();
34+
35+
await container.StartAsync();
36+
37+
return container;
38+
}
39+
}

test/HealthChecks.ClickHouse.Tests/Functional/ClickHouseHealthCheckTests.cs

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@ public class DBConfigSetting
1010
public string ConnectionString { get; set; } = null!;
1111
}
1212

13-
public class ClickHouse_healthcheck_should
13+
public class ClickHouse_healthcheck_should(ClickHouseContainerFixture clickHouseFixture) : IClassFixture<ClickHouseContainerFixture>
1414
{
15-
private const string ConnectionString = "Host=127.0.0.1;Port=8123;Database=default;Username=default;Password=Password12!;";
15+
private readonly string _connectionString = clickHouseFixture.GetConnectionString();
1616

1717
[Fact]
1818
public async Task be_healthy_if_ClickHouse_is_available()
1919
{
2020
var webHostBuilder = new WebHostBuilder()
21-
.ConfigureServices(static services =>
21+
.ConfigureServices(services =>
2222
{
2323
services.AddHealthChecks()
24-
.AddClickHouse(static _ => new ClickHouseConnection(ConnectionString), tags: new string[] { "ClickHouse" });
24+
.AddClickHouse(_ => new ClickHouseConnection(_connectionString), tags: new string[] { "ClickHouse" });
2525
})
2626
.Configure(static app =>
2727
{
@@ -42,10 +42,10 @@ public async Task be_healthy_if_ClickHouse_is_available()
4242
public async Task be_unhealthy_if_sql_query_is_not_valid()
4343
{
4444
var webHostBuilder = new WebHostBuilder()
45-
.ConfigureServices(static services =>
45+
.ConfigureServices(services =>
4646
{
4747
services.AddHealthChecks()
48-
.AddClickHouse(static _ => new ClickHouseConnection(ConnectionString), "SELECT 1 FROM InvalidDB", tags: new string[] { "ClickHouse" });
48+
.AddClickHouse(_ => new ClickHouseConnection(_connectionString), "SELECT 1 FROM InvalidDB", tags: new string[] { "ClickHouse" });
4949
})
5050
.Configure(static app =>
5151
{
@@ -68,8 +68,11 @@ public async Task be_unhealthy_if_ClickHouse_is_not_available()
6868
var webHostBuilder = new WebHostBuilder()
6969
.ConfigureServices(services =>
7070
{
71-
services.AddHealthChecks()
72-
.AddClickHouse(static _ => new ClickHouseConnection("Host=200.0.0.1;Port=8123;Database=default;Username=default;Password=Password12!;"), tags: new string[] { "ClickHouse" });
71+
services
72+
.AddHealthChecks()
73+
.AddClickHouse(static _ => new ClickHouseConnection("Host=200.0.0.1;Port=8123;Database=default;Username=default;Password=Password12!;"),
74+
tags: ["ClickHouse"],
75+
timeout: TimeSpan.FromSeconds(15));
7376
})
7477
.Configure(app =>
7578
{
@@ -94,7 +97,7 @@ public async Task be_healthy_if_ClickHouse_is_available_by_iServiceProvider_regi
9497
{
9598
services.AddSingleton(new DBConfigSetting
9699
{
97-
ConnectionString = ConnectionString
100+
ConnectionString = _connectionString
98101
});
99102

100103
services.AddHealthChecks()
@@ -126,8 +129,12 @@ public async Task be_unhealthy_if_ClickHouse_is_not_available_registered()
126129
ConnectionString = "Server=200.0.0.1;Port=8010;User ID=postgres;Password=Password12!;database=postgres"
127130
});
128131

129-
services.AddHealthChecks()
130-
.AddClickHouse(static sp => new ClickHouseConnection(sp.GetRequiredService<DBConfigSetting>().ConnectionString), tags: new string[] { "ClickHouse" });
132+
services
133+
.AddHealthChecks()
134+
.AddClickHouse(
135+
static sp => new ClickHouseConnection(sp.GetRequiredService<DBConfigSetting>().ConnectionString),
136+
tags: ["ClickHouse"],
137+
timeout: TimeSpan.FromSeconds(15));
131138
})
132139
.Configure(app =>
133140
{

test/HealthChecks.ClickHouse.Tests/HealthChecks.ClickHouse.Tests.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,8 @@
44
<ProjectReference Include="..\..\src\HealthChecks.ClickHouse\HealthChecks.ClickHouse.csproj" />
55
</ItemGroup>
66

7+
<ItemGroup>
8+
<PackageReference Include="Testcontainers.ClickHouse" />
9+
</ItemGroup>
10+
711
</Project>

test/HealthChecks.RavenDb.Tests/Functional/RavenDbHealthCheckTests.cs

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,11 @@
11
using System.Net;
22
using HealthChecks.UI.Client;
3-
using Raven.Client.Documents;
4-
using Raven.Client.ServerWide;
5-
using Raven.Client.ServerWide.Operations;
63

74
namespace HealthChecks.RavenDb.Tests.Functional;
85

9-
public class ravendb_healthcheck_should
6+
public class ravendb_healthcheck_should(RavenDbContainerFixture ravenDbFixture) : IClassFixture<RavenDbContainerFixture>
107
{
11-
private readonly string[] _urls = ["http://localhost:9030"];
12-
13-
public ravendb_healthcheck_should()
14-
{
15-
try
16-
{
17-
using var store = new DocumentStore
18-
{
19-
Urls = _urls,
20-
};
21-
22-
store.Initialize();
23-
24-
store.Maintenance.Server.Send(new CreateDatabaseOperation(new DatabaseRecord("Demo")));
25-
}
26-
catch { }
27-
}
8+
private readonly string[] _urls = [ravenDbFixture.GetConnectionString()];
289

2910
[Fact]
3011
public async Task be_healthy_if_ravendb_is_available()

test/HealthChecks.RavenDb.Tests/Functional/RavenDbHealthCheckTestsSingleConnectionString.cs

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,10 @@
11
using System.Net;
2-
using Raven.Client.Documents;
3-
using Raven.Client.ServerWide;
4-
using Raven.Client.ServerWide.Operations;
52

63
namespace HealthChecks.RavenDb.Tests.Functional;
74

8-
public class ravendb_healthcheck_should_single_connection_string
5+
public class ravendb_healthcheck_should_single_connection_string(RavenDbContainerFixture ravenDbFixture) : IClassFixture<RavenDbContainerFixture>
96
{
10-
private const string ConnectionString = "http://localhost:9030";
11-
12-
public ravendb_healthcheck_should_single_connection_string()
13-
{
14-
try
15-
{
16-
using var store = new DocumentStore
17-
{
18-
Urls = [ConnectionString],
19-
};
20-
21-
store.Initialize();
22-
23-
store.Maintenance.Server.Send(new CreateDatabaseOperation(new DatabaseRecord("Demo")));
24-
}
25-
catch { }
26-
}
7+
private readonly string _connectionString = ravenDbFixture.GetConnectionString();
278

289
[Fact]
2910
public async Task be_healthy_if_ravendb_is_available()
@@ -33,7 +14,7 @@ public async Task be_healthy_if_ravendb_is_available()
3314
{
3415
services
3516
.AddHealthChecks()
36-
.AddRavenDB(setup => setup.Urls = [ConnectionString], tags: ["ravendb"]);
17+
.AddRavenDB(setup => setup.Urls = [_connectionString], tags: ["ravendb"]);
3718
})
3819
.Configure(app =>
3920
{
@@ -58,7 +39,7 @@ public async Task be_healthy_if_ravendb_is_available_and_contains_specific_datab
5839
{
5940
services
6041
.AddHealthChecks()
61-
.AddRavenDB(setup => setup.Urls = [ConnectionString], "Demo", tags: ["ravendb"]);
42+
.AddRavenDB(setup => setup.Urls = [_connectionString], "Demo", tags: ["ravendb"]);
6243
})
6344
.Configure(app =>
6445
{
@@ -112,7 +93,7 @@ public async Task be_unhealthy_if_ravendb_is_available_but_database_doesnot_exis
11293
.AddHealthChecks()
11394
.AddRavenDB(setup =>
11495
{
115-
setup.Urls = [ConnectionString];
96+
setup.Urls = [_connectionString];
11697
setup.Database = "ThisDatabaseReallyDoesnExist";
11798
}, "ThisDatabaseReallyDoesnExist", tags: ["ravendb"]);
11899
})

0 commit comments

Comments
 (0)