diff --git a/src/Testcontainers.Milvus/MilvusBuilder.cs b/src/Testcontainers.Milvus/MilvusBuilder.cs index e87615512..0894544f2 100644 --- a/src/Testcontainers.Milvus/MilvusBuilder.cs +++ b/src/Testcontainers.Milvus/MilvusBuilder.cs @@ -71,8 +71,9 @@ protected override MilvusBuilder Init() .WithEnvironment("ETCD_CONFIG_PATH", MilvusEtcdConfigFilePath) .WithEnvironment("ETCD_DATA_DIR", "/var/lib/milvus/etcd") .WithResourceMapping(EtcdConfig, MilvusEtcdConfigFilePath) - .WithWaitStrategy(Wait.ForUnixContainer().UntilHttpRequestIsSucceeded(request => - request.ForPort(MilvusManagementPort).ForPath("/healthz"))); + .WithWaitStrategy(Wait.ForUnixContainer().UntilContainerIsHealthy()) + .WithCreateParameterModifier(parameterModifier => + parameterModifier.Healthcheck = Healthcheck.Instance); } /// @@ -92,4 +93,27 @@ protected override MilvusBuilder Merge(MilvusConfiguration oldValue, MilvusConfi { return new MilvusBuilder(new MilvusConfiguration(oldValue, newValue)); } + + /// + /// This setup mirrors the behavior of Milvus's official configuration: + /// https://github.com/milvus-io/milvus/blob/4def0255a928287f982f1d6b8c53ed32127bb84d/scripts/standalone_embed.sh#L56-L60 + /// + private sealed class Healthcheck : HealthcheckConfig + { + private Healthcheck() + { + const long ninetySeconds = 90 * 1_000_000_000L; + Test = ["CMD-SHELL", $"curl -f http://localhost:{MilvusManagementPort}/healthz"]; + Interval = TimeSpan.FromSeconds(30); + Timeout = TimeSpan.FromSeconds(20); + StartPeriod = ninetySeconds; + Retries = 3; + } + + /// + /// Gets the instance. + /// + public static HealthcheckConfig Instance { get; } + = new Healthcheck(); + } } \ No newline at end of file diff --git a/tests/Testcontainers.Milvus.Tests/MilvusContainerTest.cs b/tests/Testcontainers.Milvus.Tests/MilvusContainerTest.cs index f855fe9d5..a6ce04f42 100644 --- a/tests/Testcontainers.Milvus.Tests/MilvusContainerTest.cs +++ b/tests/Testcontainers.Milvus.Tests/MilvusContainerTest.cs @@ -2,8 +2,6 @@ namespace Testcontainers.Milvus; public abstract class MilvusContainerTest : IAsyncLifetime { - private const string MilvusVersion = "v2.3.10"; - private readonly MilvusContainer _milvusContainer; private MilvusContainerTest(MilvusContainer milvusContainer) @@ -37,7 +35,7 @@ public async Task GetVersionReturnsExpectedVersion() .ConfigureAwait(true); // Then - Assert.Equal(MilvusVersion, version); + Assert.EndsWith(version, MilvusBuilder.MilvusImage); } protected virtual ValueTask DisposeAsyncCore() @@ -49,7 +47,7 @@ protected virtual ValueTask DisposeAsyncCore() public sealed class MilvusDefaultConfiguration : MilvusContainerTest { public MilvusDefaultConfiguration() - : base(new MilvusBuilder().WithImage("milvusdb/milvus:" + MilvusVersion).Build()) + : base(new MilvusBuilder().Build()) { } } @@ -64,7 +62,6 @@ public MilvusSidecarConfiguration() private MilvusSidecarConfiguration(INetwork network) : base(new MilvusBuilder() - .WithImage("milvusdb/milvus:" + MilvusVersion) .WithEtcdEndpoint("etcd:2379") .DependsOn(new ContainerBuilder() .WithImage("quay.io/coreos/etcd:v3.5.5")