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;