From f2736d5d72a0ac125408eb3b3002037b250f1fbc Mon Sep 17 00:00:00 2001
From: Andre Hofmeister <9199345+HofmeisterAn@users.noreply.github.com>
Date: Sat, 17 Jan 2026 12:38:52 +0100
Subject: [PATCH 1/2] fix(ServiceBus): Workaround health API timeout
---
.../ServiceBusBuilder.cs | 21 +++++++++++++++++--
src/Testcontainers.ServiceBus/Usings.cs | 1 +
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/src/Testcontainers.ServiceBus/ServiceBusBuilder.cs b/src/Testcontainers.ServiceBus/ServiceBusBuilder.cs
index 93d1354a9..389b26a4f 100644
--- a/src/Testcontainers.ServiceBus/ServiceBusBuilder.cs
+++ b/src/Testcontainers.ServiceBus/ServiceBusBuilder.cs
@@ -164,8 +164,10 @@ protected override ServiceBusBuilder Init()
.WithPortBinding(ServiceBusPort, true)
.WithPortBinding(ServiceBusHttpPort, true)
.WithEnvironment("SQL_WAIT_INTERVAL", "0")
- .WithWaitStrategy(Wait.ForUnixContainer().UntilHttpRequestIsSucceeded(request =>
- request.ForPort(ServiceBusHttpPort).ForPath("/health")));
+ .WithWaitStrategy(Wait.ForUnixContainer()
+ .AddCustomWaitStrategy(new WorkaroundGhIssue69())
+ .UntilHttpRequestIsSucceeded(request =>
+ request.ForPort(ServiceBusHttpPort).ForPath("/health")));
}
///
@@ -185,4 +187,19 @@ protected override ServiceBusBuilder Merge(ServiceBusConfiguration oldValue, Ser
{
return new ServiceBusBuilder(new ServiceBusConfiguration(oldValue, newValue));
}
+
+ ///
+ /// See GH issue: https://github.com/Azure/azure-event-hubs-emulator-installer/issues/69#issuecomment-3762895979.
+ ///
+ private sealed class WorkaroundGhIssue69 : IWaitUntil
+ {
+ ///
+ public async Task UntilAsync(IContainer container)
+ {
+ await Task.Delay(TimeSpan.FromSeconds(5))
+ .ConfigureAwait(false);
+
+ return true;
+ }
+ }
}
\ No newline at end of file
diff --git a/src/Testcontainers.ServiceBus/Usings.cs b/src/Testcontainers.ServiceBus/Usings.cs
index 60e2932c8..6981e2727 100644
--- a/src/Testcontainers.ServiceBus/Usings.cs
+++ b/src/Testcontainers.ServiceBus/Usings.cs
@@ -3,6 +3,7 @@
global using System.Diagnostics.CodeAnalysis;
global using System.IO;
global using System.Linq;
+global using System.Threading.Tasks;
global using Docker.DotNet.Models;
global using DotNet.Testcontainers.Builders;
global using DotNet.Testcontainers.Configurations;
From dde205fbfb719b1291c32481d5a7b8701bfd4f42 Mon Sep 17 00:00:00 2001
From: Andre Hofmeister <9199345+HofmeisterAn@users.noreply.github.com>
Date: Sat, 17 Jan 2026 13:02:10 +0100
Subject: [PATCH 2/2] fix: Check log message before calling health API
---
.../EventHubsBuilder.cs | 18 ++----------------
src/Testcontainers.EventHubs/Usings.cs | 1 -
.../ServiceBusBuilder.cs | 18 ++----------------
src/Testcontainers.ServiceBus/Usings.cs | 1 -
4 files changed, 4 insertions(+), 34 deletions(-)
diff --git a/src/Testcontainers.EventHubs/EventHubsBuilder.cs b/src/Testcontainers.EventHubs/EventHubsBuilder.cs
index 32e3c9413..0fce024f6 100644
--- a/src/Testcontainers.EventHubs/EventHubsBuilder.cs
+++ b/src/Testcontainers.EventHubs/EventHubsBuilder.cs
@@ -169,7 +169,8 @@ protected override EventHubsBuilder Init()
.WithPortBinding(EventHubsPort, true)
.WithPortBinding(EventHubsHttpPort, true)
.WithWaitStrategy(Wait.ForUnixContainer()
- .AddCustomWaitStrategy(new WorkaroundGhIssue69())
+ // https://github.com/Azure/azure-event-hubs-emulator-installer/issues/69#issuecomment-3762895979.
+ .UntilMessageIsLogged("Emulator Service is Successfully Up!")
.UntilHttpRequestIsSucceeded(request =>
request.ForPort(EventHubsHttpPort).ForPath("/health")));
}
@@ -191,19 +192,4 @@ protected override EventHubsBuilder Merge(EventHubsConfiguration oldValue, Event
{
return new EventHubsBuilder(new EventHubsConfiguration(oldValue, newValue));
}
-
- ///
- /// See GH issue: https://github.com/Azure/azure-event-hubs-emulator-installer/issues/69#issuecomment-3762895979.
- ///
- private sealed class WorkaroundGhIssue69 : IWaitUntil
- {
- ///
- public async Task UntilAsync(IContainer container)
- {
- await Task.Delay(TimeSpan.FromSeconds(5))
- .ConfigureAwait(false);
-
- return true;
- }
- }
}
\ No newline at end of file
diff --git a/src/Testcontainers.EventHubs/Usings.cs b/src/Testcontainers.EventHubs/Usings.cs
index 20239ef4f..7a143d9cb 100644
--- a/src/Testcontainers.EventHubs/Usings.cs
+++ b/src/Testcontainers.EventHubs/Usings.cs
@@ -5,7 +5,6 @@
global using System.Linq;
global using System.Text;
global using System.Text.Json;
-global using System.Threading.Tasks;
global using Docker.DotNet.Models;
global using DotNet.Testcontainers;
global using DotNet.Testcontainers.Builders;
diff --git a/src/Testcontainers.ServiceBus/ServiceBusBuilder.cs b/src/Testcontainers.ServiceBus/ServiceBusBuilder.cs
index 389b26a4f..03aa2df0f 100644
--- a/src/Testcontainers.ServiceBus/ServiceBusBuilder.cs
+++ b/src/Testcontainers.ServiceBus/ServiceBusBuilder.cs
@@ -165,7 +165,8 @@ protected override ServiceBusBuilder Init()
.WithPortBinding(ServiceBusHttpPort, true)
.WithEnvironment("SQL_WAIT_INTERVAL", "0")
.WithWaitStrategy(Wait.ForUnixContainer()
- .AddCustomWaitStrategy(new WorkaroundGhIssue69())
+ // https://github.com/Azure/azure-event-hubs-emulator-installer/issues/69#issuecomment-3762895979.
+ .UntilMessageIsLogged("Emulator Service is Successfully Up!")
.UntilHttpRequestIsSucceeded(request =>
request.ForPort(ServiceBusHttpPort).ForPath("/health")));
}
@@ -187,19 +188,4 @@ protected override ServiceBusBuilder Merge(ServiceBusConfiguration oldValue, Ser
{
return new ServiceBusBuilder(new ServiceBusConfiguration(oldValue, newValue));
}
-
- ///
- /// See GH issue: https://github.com/Azure/azure-event-hubs-emulator-installer/issues/69#issuecomment-3762895979.
- ///
- private sealed class WorkaroundGhIssue69 : IWaitUntil
- {
- ///
- public async Task UntilAsync(IContainer container)
- {
- await Task.Delay(TimeSpan.FromSeconds(5))
- .ConfigureAwait(false);
-
- return true;
- }
- }
}
\ No newline at end of file
diff --git a/src/Testcontainers.ServiceBus/Usings.cs b/src/Testcontainers.ServiceBus/Usings.cs
index 6981e2727..60e2932c8 100644
--- a/src/Testcontainers.ServiceBus/Usings.cs
+++ b/src/Testcontainers.ServiceBus/Usings.cs
@@ -3,7 +3,6 @@
global using System.Diagnostics.CodeAnalysis;
global using System.IO;
global using System.Linq;
-global using System.Threading.Tasks;
global using Docker.DotNet.Models;
global using DotNet.Testcontainers.Builders;
global using DotNet.Testcontainers.Configurations;