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")