Skip to content

Commit e693055

Browse files
authored
Migrate HealthChecks.MongoDb tests to Testcontainers (#2351)
1 parent 2b47b15 commit e693055

5 files changed

Lines changed: 54 additions & 47 deletions

File tree

.github/workflows/healthchecks_mongodb_ci.yml

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

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

Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
<PackageVersion Include="System.Text.RegularExpressions" Version="4.3.1" />
104104
<PackageVersion Include="System.Threading.Channels" Version="8.0.0" />
105105
<PackageVersion Include="Testcontainers.PostgreSql" Version="$(TestcontainersVersion)" />
106+
<PackageVersion Include="TestContainers.MongoDb" Version="$(TestcontainersVersion)" />
106107
<PackageVersion Include="Testcontainers.MsSql" Version="$(TestcontainersVersion)" />
107108
<PackageVersion Include="Testcontainers.Redis" Version="$(TestcontainersVersion)" />
108109
<PackageVersion Include="xunit" Version="2.9.2" />

test/HealthChecks.MongoDb.Tests/Functional/MongoDbHealthCheckTests.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33

44
namespace HealthChecks.MongoDb.Tests.Functional;
55

6-
public class mongodb_healthcheck_should
6+
public class mongodb_healthcheck_should(MongoDbContainerFixture mongoDbContainerFixture) : IClassFixture<MongoDbContainerFixture>
77
{
88
[Fact]
99
public async Task be_healthy_listing_all_databases_if_mongodb_is_available()
1010
{
11-
var connectionString = "mongodb://localhost:27017";
11+
var connectionString = mongoDbContainerFixture.GetConnectionString();
1212

1313
var webHostBuilder = new WebHostBuilder()
1414
.ConfigureServices(services =>
@@ -36,7 +36,7 @@ public async Task be_healthy_listing_all_databases_if_mongodb_is_available()
3636
[Fact]
3737
public async Task be_healthy_on_specified_database_if_mongodb_is_available_and_database_exist()
3838
{
39-
var connectionString = "mongodb://localhost:27017";
39+
var connectionString = mongoDbContainerFixture.GetConnectionString();
4040

4141
var webHostBuilder = new WebHostBuilder()
4242
.ConfigureServices(services =>
@@ -64,7 +64,7 @@ public async Task be_healthy_on_specified_database_if_mongodb_is_available_and_d
6464
[Fact]
6565
public async Task be_healthy_on_connectionstring_specified_database_if_mongodb_is_available_and_database_exist()
6666
{
67-
var connectionString = "mongodb://localhost:27017/local";
67+
var connectionString = $"{mongoDbContainerFixture.GetConnectionString()}local";
6868

6969
var webHostBuilder = new WebHostBuilder()
7070
.ConfigureServices(services =>
@@ -92,11 +92,13 @@ public async Task be_healthy_on_connectionstring_specified_database_if_mongodb_i
9292
[Fact]
9393
public async Task be_healthy_on_connectionstring_specified_database_if_mongodb_is_available_and_database_exist_dbFactory()
9494
{
95+
var connectionString = mongoDbContainerFixture.GetConnectionString();
96+
9597
var webHostBuilder = new WebHostBuilder()
9698
.ConfigureServices(services =>
9799
{
98100
services
99-
.AddSingleton(sp => new MongoClient("mongodb://localhost:27017").GetDatabase("namedDb"))
101+
.AddSingleton(sp => new MongoClient(connectionString).GetDatabase("namedDb"))
100102
.AddHealthChecks()
101103
.AddMongoDb(dbFactory: sp => sp.GetRequiredService<IMongoDatabase>(), tags: ["mongodb"]);
102104
})
@@ -119,7 +121,7 @@ public async Task be_healthy_on_connectionstring_specified_database_if_mongodb_i
119121
public async Task be_healthy_on_connectionstring_specified_database_if_mongodb_is_available_and_database_not_exist()
120122
{
121123
// NOTE: with mongodb the database is created automatically the first time something is written to it
122-
var connectionString = "mongodb://localhost:27017/nonexisting";
124+
var connectionString = $"{mongoDbContainerFixture.GetConnectionString()}nonexisting";
123125

124126
var webHostBuilder = new WebHostBuilder()
125127
.ConfigureServices(services =>

test/HealthChecks.MongoDb.Tests/HealthChecks.MongoDb.Tests.csproj

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

7+
<ItemGroup>
8+
<PackageReference Include="TestContainers.MongoDb" />
9+
</ItemGroup>
710
</Project>
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using Testcontainers.MongoDb;
2+
3+
namespace HealthChecks.MongoDb.Tests;
4+
5+
public sealed class MongoDbContainerFixture : IAsyncLifetime
6+
{
7+
public const string Registry = "docker.io";
8+
9+
public const string Image = "library/mongo";
10+
11+
public const string Tag = "8.0";
12+
13+
public MongoDbContainer? Container { get; private set; }
14+
15+
public string GetConnectionString() => Container?.GetConnectionString() ??
16+
throw new InvalidOperationException("The test container was not initialized.");
17+
18+
public async Task InitializeAsync() => Container = await CreateContainerAsync();
19+
20+
public async Task DisposeAsync()
21+
{
22+
if (Container is not null)
23+
await Container.DisposeAsync();
24+
}
25+
26+
public static async Task<MongoDbContainer> CreateContainerAsync()
27+
{
28+
var container = new MongoDbBuilder()
29+
.WithImage($"{Registry}/{Image}:{Tag}")
30+
.WithUsername(null)
31+
.WithPassword(null)
32+
.Build();
33+
await container.StartAsync();
34+
35+
return container;
36+
}
37+
}

0 commit comments

Comments
 (0)