Skip to content

Commit 3f4ad9e

Browse files
authored
Migrate HealthChecks.Rabbitmq tests to Testcontainers (#2352)
1 parent e693055 commit 3f4ad9e

7 files changed

Lines changed: 82 additions & 79 deletions

File tree

.github/workflows/healthchecks_rabbitmq_ci.yml

Lines changed: 13 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ on:
66
branches: [ master ]
77
paths:
88
- src/HealthChecks.Rabbitmq/**
9+
- src/HealthChecks.Rabbitmq.v6/**
910
- test/HealthChecks.RabbitMQ.Tests/**
11+
- test/HealthChecks.RabbitMQ.v6.Tests/**
1012
- test/_SHARED/**
1113
- .github/workflows/healthchecks_rabbitmq_ci.yml
1214
- Directory.Build.props
@@ -31,60 +33,14 @@ on:
3133

3234
jobs:
3335
build:
34-
runs-on: ubuntu-latest
35-
services:
36-
rabbitmq:
37-
image: rabbitmq
38-
ports:
39-
- 5672:5672
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.Rabbitmq/HealthChecks.Rabbitmq.csproj &&
51-
dotnet restore ./src/HealthChecks.Rabbitmq.v6/HealthChecks.Rabbitmq.v6.csproj &&
52-
dotnet restore ./test/HealthChecks.RabbitMQ.Tests/HealthChecks.RabbitMQ.Tests.csproj &&
53-
dotnet restore ./test/HealthChecks.RabbitMQ.v6.Tests/HealthChecks.RabbitMQ.v6.Tests.csproj
54-
- name: Check formatting
55-
run: |
56-
dotnet format --no-restore --verify-no-changes --severity warn ./src/HealthChecks.Rabbitmq/HealthChecks.Rabbitmq.csproj || (echo "Run 'dotnet format' to fix issues" && exit 1) &&
57-
dotnet format --no-restore --verify-no-changes --severity warn ./src/HealthChecks.Rabbitmq.v6/HealthChecks.Rabbitmq.v6.csproj || (echo "Run 'dotnet format' to fix issues" && exit 1) &&
58-
dotnet format --no-restore --verify-no-changes --severity warn ./test/HealthChecks.RabbitMQ.Tests/HealthChecks.RabbitMQ.Tests.csproj || (echo "Run 'dotnet format' to fix issues" && exit 1) &&
59-
dotnet format --no-restore --verify-no-changes --severity warn ./test/HealthChecks.RabbitMQ.v6.Tests/HealthChecks.RabbitMQ.v6.Tests.csproj || (echo "Run 'dotnet format' to fix issues" && exit 1)
60-
- name: Build
61-
run: |
62-
dotnet build --no-restore ./src/HealthChecks.Rabbitmq/HealthChecks.Rabbitmq.csproj &&
63-
dotnet build --no-restore ./src/HealthChecks.Rabbitmq.v6/HealthChecks.Rabbitmq.v6.csproj &&
64-
dotnet build --no-restore ./test/HealthChecks.RabbitMQ.Tests/HealthChecks.RabbitMQ.Tests.csproj &&
65-
dotnet build --no-restore ./test/HealthChecks.RabbitMQ.v6.Tests/HealthChecks.RabbitMQ.v6.Tests.csproj
66-
- name: Test
67-
run: >
68-
dotnet test
69-
./test/HealthChecks.RabbitMQ.Tests/HealthChecks.RabbitMQ.Tests.csproj
70-
--no-restore
71-
--no-build
72-
--collect "XPlat Code Coverage"
73-
--results-directory .coverage
74-
--
75-
DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover
76-
- name: Test v6
77-
run: >
78-
dotnet test
79-
./test/HealthChecks.RabbitMQ.v6.Tests/HealthChecks.RabbitMQ.v6.Tests.csproj
80-
--no-restore
81-
--no-build
82-
--collect "XPlat Code Coverage"
83-
--results-directory .coverage
84-
--
85-
DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover
86-
- name: Upload Coverage
87-
uses: codecov/codecov-action@v5
88-
with:
89-
flags: RabbitMQ
90-
directory: .coverage
36+
uses: ./.github/workflows/reusable_ci_workflow.yml
37+
with:
38+
PROJECT_PATH: ./src/HealthChecks.Rabbitmq/HealthChecks.Rabbitmq.csproj
39+
TEST_PROJECT_PATH: ./test/HealthChecks.RabbitMQ.Tests/HealthChecks.RabbitMQ.Tests.csproj
40+
CODECOV_FLAGS: RabbitMQ
41+
build-v6:
42+
uses: ./.github/workflows/reusable_ci_workflow.yml
43+
with:
44+
PROJECT_PATH: ./src/HealthChecks.Rabbitmq.v6/HealthChecks.Rabbitmq.v6.csproj
45+
TEST_PROJECT_PATH: ./test/HealthChecks.RabbitMQ.v6.Tests/HealthChecks.RabbitMQ.v6.Tests.csproj
46+
CODECOV_FLAGS: RabbitMQ

Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@
106106
<PackageVersion Include="TestContainers.MongoDb" Version="$(TestcontainersVersion)" />
107107
<PackageVersion Include="Testcontainers.MsSql" Version="$(TestcontainersVersion)" />
108108
<PackageVersion Include="Testcontainers.Redis" Version="$(TestcontainersVersion)" />
109+
<PackageVersion Include="Testcontainers.RabbitMq" Version="$(TestcontainersVersion)" />
109110
<PackageVersion Include="xunit" Version="2.9.2" />
110111
<PackageVersion Include="xunit.runner.visualstudio" Version="2.8.2" />
111112
</ItemGroup>

test/HealthChecks.RabbitMQ.Tests/Functional/RabbitHealthCheckTests.cs

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

44
namespace HealthChecks.RabbitMQ.Tests.Functional;
55

6-
public class rabbitmq_healthcheck_should
6+
public class rabbitmq_healthcheck_should(RabbitMQContainerFixture rabbitMQContainerFixture) : IClassFixture<RabbitMQContainerFixture>
77
{
88
[Fact]
99
public async Task be_healthy_if_rabbitmq_is_available()
1010
{
11-
var connectionString = "amqp://localhost:5672";
11+
var connectionString = rabbitMQContainerFixture.GetConnectionString();
1212

1313
var webHostBuilder = new WebHostBuilder()
1414
.ConfigureServices(services =>
@@ -36,7 +36,7 @@ public async Task be_healthy_if_rabbitmq_is_available()
3636
[Fact]
3737
public async Task be_unhealthy_if_rabbitmq_is_not_available()
3838
{
39-
var connectionString = "amqp://localhost:6672";
39+
var connectionString = "amqp://invalidhost:6672";
4040

4141
var webHostBuilder = new WebHostBuilder()
4242
.ConfigureServices(services =>
@@ -64,7 +64,7 @@ public async Task be_unhealthy_if_rabbitmq_is_not_available()
6464
[Fact]
6565
public async Task be_healthy_if_rabbitmq_is_available_using_iconnection()
6666
{
67-
var connectionString = "amqp://localhost:5672";
67+
var connectionString = rabbitMQContainerFixture.GetConnectionString();
6868

6969
var factory = new ConnectionFactory()
7070
{
@@ -104,7 +104,7 @@ public async Task be_healthy_if_rabbitmq_is_available_using_iconnection()
104104
[Fact]
105105
public async Task be_healthy_if_rabbitmq_is_available_using_iconnection_in_serviceprovider()
106106
{
107-
var connectionString = "amqp://localhost:5672";
107+
var connectionString = rabbitMQContainerFixture.GetConnectionString();
108108

109109
var factory = new ConnectionFactory()
110110
{
@@ -149,9 +149,9 @@ public async Task be_not_crash_on_startup_when_rabbitmq_is_down_at_startup()
149149
{
150150
return new ConnectionFactory()
151151
{
152-
Uri = new Uri("amqp://localhost:3333"),
152+
Uri = new Uri("amqp://invalidhost:3333"),
153153
AutomaticRecoveryEnabled = true,
154-
Ssl = new SslOption(serverName: "localhost", enabled: false)
154+
Ssl = new SslOption(serverName: "invalidhost", enabled: false)
155155
};
156156
})
157157
.AddHealthChecks()
@@ -176,8 +176,8 @@ public async Task be_not_crash_on_startup_when_rabbitmq_is_down_at_startup()
176176
[Fact]
177177
public async Task two_rabbitmq_health_check()
178178
{
179-
const string connectionString1 = "amqp://localhost:5672";
180-
const string connectionString2 = "amqp://localhost:6672/";
179+
var connectionString1 = rabbitMQContainerFixture.GetConnectionString();
180+
const string connectionString2 = "amqp://invalidhost:6672/";
181181

182182
var webHostBuilder = new WebHostBuilder()
183183
.ConfigureServices(services =>
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<ItemGroup>
44
<ProjectReference Include="..\..\src\HealthChecks.Rabbitmq\HealthChecks.Rabbitmq.csproj" />
55
</ItemGroup>
66

7+
<ItemGroup>
8+
<PackageReference Include="Testcontainers.RabbitMq" />
9+
</ItemGroup>
710
</Project>
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using Testcontainers.RabbitMq;
2+
3+
namespace HealthChecks.RabbitMQ.Tests;
4+
5+
public sealed class RabbitMQContainerFixture : IAsyncLifetime
6+
{
7+
public const string Registry = "docker.io";
8+
9+
public const string Image = "library/rabbitmq";
10+
11+
public const string Tag = "4.0";
12+
13+
public RabbitMqContainer? 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<RabbitMqContainer> CreateContainerAsync()
27+
{
28+
var container = new RabbitMqBuilder()
29+
.WithImage($"{Registry}/{Image}:{Tag}")
30+
.Build();
31+
await container.StartAsync();
32+
33+
return container;
34+
}
35+
}

test/HealthChecks.RabbitMQ.v6.Tests/Functional/RabbitHealthCheckTests.cs

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

44
namespace HealthChecks.RabbitMQ.Tests.Functional;
55

6-
public class rabbitmq_healthcheck_should
6+
public class rabbitmq_healthcheck_should(RabbitMQContainerFixture rabbitMQContainerFixture) : IClassFixture<RabbitMQContainerFixture>
77
{
88
[Fact]
99
public async Task be_healthy_if_rabbitmq_is_available()
1010
{
11-
var connectionString = "amqp://localhost:5672";
11+
var connectionString = rabbitMQContainerFixture.GetConnectionString();
1212

1313
var webHostBuilder = new WebHostBuilder()
1414
.ConfigureServices(services =>
@@ -34,7 +34,7 @@ public async Task be_healthy_if_rabbitmq_is_available()
3434
[Fact]
3535
public async Task be_healthy_if_rabbitmq_is_available_using_ssloption()
3636
{
37-
var connectionString = "amqp://localhost:5672";
37+
var connectionString = rabbitMQContainerFixture.GetConnectionString();
3838

3939
var webHostBuilder = new WebHostBuilder()
4040
.ConfigureServices(services =>
@@ -64,7 +64,7 @@ public async Task be_unhealthy_if_rabbitmq_is_not_available()
6464
.ConfigureServices(services =>
6565
{
6666
services.AddHealthChecks()
67-
.AddRabbitMQ("amqp://localhost:6672", sslOption: new SslOption(serverName: "localhost", enabled: false), tags: ["rabbitmq"]);
67+
.AddRabbitMQ("amqp://invalidlocalhost:6672", sslOption: new SslOption(serverName: "invalidlocalhost", enabled: false), tags: ["rabbitmq"]);
6868
})
6969
.Configure(app =>
7070
{
@@ -84,7 +84,7 @@ public async Task be_unhealthy_if_rabbitmq_is_not_available()
8484
[Fact]
8585
public async Task be_healthy_if_rabbitmq_is_available_using_iconnectionfactory()
8686
{
87-
var connectionString = "amqp://localhost:5672";
87+
var connectionString = rabbitMQContainerFixture.GetConnectionString();
8888

8989
var factory = new ConnectionFactory()
9090
{
@@ -118,7 +118,7 @@ public async Task be_healthy_if_rabbitmq_is_available_using_iconnectionfactory()
118118
[Fact]
119119
public async Task be_healthy_if_rabbitmq_is_available_using_iconnection()
120120
{
121-
var connectionString = "amqp://localhost:5672";
121+
var connectionString = rabbitMQContainerFixture.GetConnectionString();
122122

123123
var factory = new ConnectionFactory()
124124
{
@@ -155,7 +155,7 @@ public async Task be_healthy_if_rabbitmq_is_available_using_iconnection()
155155
[Fact]
156156
public async Task be_healthy_if_rabbitmq_is_available_and_specify_default_ssloption()
157157
{
158-
var connectionString = "amqp://localhost:5672";
158+
var connectionString = rabbitMQContainerFixture.GetConnectionString();
159159

160160
var webHostBuilder = new WebHostBuilder()
161161
.ConfigureServices(services =>
@@ -189,7 +189,7 @@ public async Task be_not_crash_on_startup_when_rabbitmq_is_down_at_startup()
189189
{
190190
return new ConnectionFactory()
191191
{
192-
Uri = new Uri("amqp://localhost:3333"),
192+
Uri = new Uri("amqp://invalidlocalhost:3333"),
193193
AutomaticRecoveryEnabled = true,
194194
Ssl = new SslOption(serverName: "localhost", enabled: false)
195195
};
@@ -214,7 +214,7 @@ public async Task be_not_crash_on_startup_when_rabbitmq_is_down_at_startup()
214214
[Fact]
215215
public async Task be_healthy_if_rabbitmq_is_available_using_iServiceProvider()
216216
{
217-
var connectionString = "amqp://localhost:5672";
217+
var connectionString = rabbitMQContainerFixture.GetConnectionString();
218218

219219
var webHostBuilder = new WebHostBuilder()
220220
.ConfigureServices(services =>
@@ -242,8 +242,8 @@ public async Task be_healthy_if_rabbitmq_is_available_using_iServiceProvider()
242242
[Fact]
243243
public async Task two_rabbitmq_health_check()
244244
{
245-
const string connectionString1 = "amqp://localhost:5672";
246-
const string connectionString2 = "amqp://localhost:6672/";
245+
var connectionString1 = rabbitMQContainerFixture.GetConnectionString();
246+
const string connectionString2 = "amqp://invalidhost:6672/";
247247

248248
var webHostBuilder = new WebHostBuilder()
249249
.ConfigureServices(services =>

test/HealthChecks.RabbitMQ.v6.Tests/HealthChecks.RabbitMQ.v6.Tests.csproj

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

33
<PropertyGroup>
44
<AssemblyName>HealthChecks.RabbitMQ.Tests</AssemblyName>
@@ -8,4 +8,12 @@
88
<ProjectReference Include="..\..\src\HealthChecks.Rabbitmq.v6\HealthChecks.Rabbitmq.v6.csproj" />
99
</ItemGroup>
1010

11+
<ItemGroup>
12+
<Compile Include="..\HealthChecks.RabbitMQ.Tests\RabbitMQContainerFixture.cs"></Compile>
13+
</ItemGroup>
14+
15+
<ItemGroup>
16+
<PackageReference Include="Testcontainers.RabbitMq" />
17+
</ItemGroup>
18+
1119
</Project>

0 commit comments

Comments
 (0)