Skip to content

Commit f54852f

Browse files
authored
Migrate Redis tests to Testcontainers (#2345)
* Migrate Redis tests to Testcontainers * Address PR feedback
1 parent b32acbb commit f54852f

6 files changed

Lines changed: 53 additions & 10 deletions

File tree

.github/workflows/healthchecks_redis_ci.yml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,6 @@ on:
3030
jobs:
3131
build:
3232
runs-on: ubuntu-latest
33-
services:
34-
redis:
35-
image: redis:alpine
36-
ports:
37-
- 6379:6379
3833
steps:
3934
- uses: actions/checkout@v3
4035
- name: Setup .NET

Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@
102102
<PackageVersion Include="System.Text.Json" Version="8.0.5" />
103103
<PackageVersion Include="System.Text.RegularExpressions" Version="4.3.1" />
104104
<PackageVersion Include="System.Threading.Channels" Version="8.0.0" />
105+
<PackageVersion Include="Testcontainers.Redis" Version="$(TestcontainersVersion)" />
105106
<PackageVersion Include="xunit" Version="2.9.2" />
106107
<PackageVersion Include="xunit.runner.visualstudio" Version="2.8.2" />
107108
</ItemGroup>

build/versions.props

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,8 @@
7575
<HealthCheckKeyVaultSecrets>9.0.0</HealthCheckKeyVaultSecrets>
7676
</PropertyGroup>
7777

78+
<PropertyGroup>
79+
<TestcontainersVersion>4.1.0</TestcontainersVersion>
80+
</PropertyGroup>
81+
7882
</Project>

test/HealthChecks.Redis.Tests/Functional/RedisHealthCheckTests.cs

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

66
namespace HealthChecks.Redis.Tests.Functional;
77

8-
public class redis_healthcheck_should
8+
public class redis_healthcheck_should(RedisContainerFixture redisContainerFixture) : IClassFixture<RedisContainerFixture>
99
{
1010
[Fact]
1111
public async Task be_healthy_if_redis_is_available_with_connection_string()
1212
{
13-
var connectionString = "localhost:6379,allowAdmin=true";
13+
var connectionString = $"{redisContainerFixture.GetConnectionString()},allowAdmin=true";
1414

1515
var webHostBuilder = new WebHostBuilder()
1616
.ConfigureServices(services =>
@@ -36,7 +36,7 @@ public async Task be_healthy_if_redis_is_available_with_connection_string()
3636
[Fact]
3737
public async Task be_healthy_if_multiple_redis_are_available_with_connection_string()
3838
{
39-
var connectionString = "localhost:6379,allowAdmin=true";
39+
var connectionString = $"{redisContainerFixture.GetConnectionString()},allowAdmin=true";
4040

4141
var webHostBuilder = new WebHostBuilder()
4242
.ConfigureServices(services =>
@@ -63,8 +63,10 @@ public async Task be_healthy_if_multiple_redis_are_available_with_connection_str
6363
[Fact]
6464
public async Task be_healthy_if_redis_is_available_with_connection_multiplexer()
6565
{
66+
var connectionString = $"{redisContainerFixture.GetConnectionString()},allowAdmin=true";
67+
6668
var connectionMultiplexer = await ConnectionMultiplexer
67-
.ConnectAsync("localhost:6379,allowAdmin=true");
69+
.ConnectAsync(connectionString);
6870

6971
var webHostBuilder = new WebHostBuilder()
7072
.ConfigureServices(services =>
@@ -90,8 +92,10 @@ public async Task be_healthy_if_redis_is_available_with_connection_multiplexer()
9092
[Fact]
9193
public async Task be_healthy_if_multiple_redis_are_available_with_connection_multiplexer()
9294
{
95+
var connectionString = $"{redisContainerFixture.GetConnectionString()},allowAdmin=true";
96+
9397
var connectionMultiplexer = await ConnectionMultiplexer
94-
.ConnectAsync("localhost:6379,allowAdmin=true");
98+
.ConnectAsync(connectionString);
9599

96100
var webHostBuilder = new WebHostBuilder()
97101
.ConfigureServices(services =>

test/HealthChecks.Redis.Tests/HealthChecks.Redis.Tests.csproj

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

3+
<ItemGroup>
4+
<PackageReference Include="Testcontainers.Redis" />
5+
</ItemGroup>
6+
37
<ItemGroup>
48
<ProjectReference Include="..\..\src\HealthChecks.Redis\HealthChecks.Redis.csproj" />
59
</ItemGroup>
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using Testcontainers.Redis;
2+
3+
namespace HealthChecks.Redis.Tests;
4+
5+
public sealed class RedisContainerFixture : IAsyncLifetime
6+
{
7+
public const string Registry = "docker.io";
8+
9+
public const string Image = "library/redis";
10+
11+
public const string Tag = "7.4";
12+
13+
public RedisContainer? 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<RedisContainer> CreateContainerAsync()
27+
{
28+
var container = new RedisBuilder()
29+
.WithImage($"{Registry}/{Image}:{Tag}")
30+
.Build();
31+
await container.StartAsync();
32+
33+
return container;
34+
}
35+
}

0 commit comments

Comments
 (0)