diff --git a/docs/api/create_docker_container.md b/docs/api/create_docker_container.md index 24a885c80..d85f36f51 100644 --- a/docs/api/create_docker_container.md +++ b/docs/api/create_docker_container.md @@ -76,7 +76,8 @@ Starting a container or creating a resource (such as a network or a volume) can ```csharp title="Canceling container start after one minute" using var timeoutCts = new CancellationTokenSource(TimeSpan.FromMinutes(1)); -await _container.StartAsync(timeoutCts.Token); +await _container.StartAsync(timeoutCts.Token) + .ConfigureAwait(false); ``` ## Getting log messages @@ -86,7 +87,8 @@ Testcontainers for .NET provides two approaches for retrieving log messages from The `GetLogsAsync` method is available through the `IContainer` interface. It allows you to fetch logs from a container for a specific time range or from the beginning until the present. This approach is useful for retrieving logs after a test has run, especially when troubleshooting issues or failures. ```csharp title="Getting all log messages" -var (stdout, stderr) = await _container.GetLogsAsync(); +var (stdout, stderr) = await _container.GetLogsAsync() + .ConfigureAwait(false); ``` The `WithOutputConsumer` method is part of the `ContainerBuilder` class and is used to continuously forward container log messages to a specified output consumer. This approach provides real-time access to logs as the container runs. diff --git a/examples/Flyway/Directory.Packages.props b/examples/Flyway/Directory.Packages.props index 07fab9a1f..0d6465cd5 100644 --- a/examples/Flyway/Directory.Packages.props +++ b/examples/Flyway/Directory.Packages.props @@ -6,7 +6,7 @@ - + diff --git a/examples/Respawn/Directory.Packages.props b/examples/Respawn/Directory.Packages.props index df90779b6..76d4eec9b 100644 --- a/examples/Respawn/Directory.Packages.props +++ b/examples/Respawn/Directory.Packages.props @@ -6,7 +6,7 @@ - + diff --git a/examples/WeatherForecast/Directory.Packages.props b/examples/WeatherForecast/Directory.Packages.props index 9521eb455..cfaa30b42 100644 --- a/examples/WeatherForecast/Directory.Packages.props +++ b/examples/WeatherForecast/Directory.Packages.props @@ -10,7 +10,7 @@ - + diff --git a/examples/WeatherForecast/tests/WeatherForecast.Tests/WeatherForecastContainer.cs b/examples/WeatherForecast/tests/WeatherForecast.Tests/WeatherForecastContainer.cs index 613693737..22030a11a 100644 --- a/examples/WeatherForecast/tests/WeatherForecast.Tests/WeatherForecastContainer.cs +++ b/examples/WeatherForecast/tests/WeatherForecast.Tests/WeatherForecastContainer.cs @@ -40,7 +40,7 @@ public WeatherForecastContainer() .WithEnvironment("ASPNETCORE_Kestrel__Certificates__Default__Path", WeatherForecastImage.CertificateFilePath) .WithEnvironment("ASPNETCORE_Kestrel__Certificates__Default__Password", WeatherForecastImage.CertificatePassword) .WithEnvironment("ConnectionStrings__PostgreSQL", postgreSqlConnectionString) - .WithWaitStrategy(Wait.ForUnixContainer().UntilPortIsAvailable(WeatherForecastImage.HttpsPort)) + .WithWaitStrategy(Wait.ForUnixContainer().UntilInternalTcpPortIsAvailable(WeatherForecastImage.HttpsPort)) .Build(); } diff --git a/src/Testcontainers.Weaviate/WeaviateBuilder.cs b/src/Testcontainers.Weaviate/WeaviateBuilder.cs index 92d56dcaa..3bb6107ba 100644 --- a/src/Testcontainers.Weaviate/WeaviateBuilder.cs +++ b/src/Testcontainers.Weaviate/WeaviateBuilder.cs @@ -42,8 +42,8 @@ protected override WeaviateBuilder Init() .WithEnvironment("AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED", "true") .WithEnvironment("PERSISTENCE_DATA_PATH", "/var/lib/weaviate") .WithWaitStrategy(Wait.ForUnixContainer() - .UntilPortIsAvailable(WeaviateHttpPort) - .UntilPortIsAvailable(WeaviateGrpcPort) + .UntilInternalTcpPortIsAvailable(WeaviateHttpPort) + .UntilInternalTcpPortIsAvailable(WeaviateGrpcPort) .UntilHttpRequestIsSucceeded(request => request.ForPath("/v1/.well-known/ready").ForPort(WeaviateHttpPort))); diff --git a/src/Testcontainers/Configurations/WaitStrategies/IWaitForContainerOS.cs b/src/Testcontainers/Configurations/WaitStrategies/IWaitForContainerOS.cs index 246d008e8..f2881187c 100644 --- a/src/Testcontainers/Configurations/WaitStrategies/IWaitForContainerOS.cs +++ b/src/Testcontainers/Configurations/WaitStrategies/IWaitForContainerOS.cs @@ -58,16 +58,6 @@ public interface IWaitForContainerOS [PublicAPI] IWaitForContainerOS UntilCommandIsCompleted(IEnumerable command, Action waitStrategyModifier = null); - /// - /// Waits until the port is available. - /// - /// The port to be checked. - /// The wait strategy modifier to cancel the readiness check. - /// A configured instance of . - [PublicAPI] - [Obsolete("Use UntilInternalTcpPortIsAvailable or UntilExternalTcpPortIsAvailable instead. This method corresponds to the internal variant.")] - IWaitForContainerOS UntilPortIsAvailable(int port, Action waitStrategyModifier = null); - /// /// Waits until a TCP port is available from within the container itself. /// This verifies that a service inside the container is listening on the specified port. diff --git a/src/Testcontainers/Configurations/WaitStrategies/WaitForContainerOS.cs b/src/Testcontainers/Configurations/WaitStrategies/WaitForContainerOS.cs index f08c472a1..e388305b9 100644 --- a/src/Testcontainers/Configurations/WaitStrategies/WaitForContainerOS.cs +++ b/src/Testcontainers/Configurations/WaitStrategies/WaitForContainerOS.cs @@ -27,9 +27,6 @@ protected WaitForContainerOS() /// public abstract IWaitForContainerOS UntilCommandIsCompleted(IEnumerable command, Action waitStrategyModifier = null); - /// - public abstract IWaitForContainerOS UntilPortIsAvailable(int port, Action waitStrategyModifier = null); - /// public abstract IWaitForContainerOS UntilInternalTcpPortIsAvailable(int containerPort, Action waitStrategyModifier = null); diff --git a/src/Testcontainers/Configurations/WaitStrategies/WaitForContainerUnix.cs b/src/Testcontainers/Configurations/WaitStrategies/WaitForContainerUnix.cs index 93a9c2005..d4a56f09a 100644 --- a/src/Testcontainers/Configurations/WaitStrategies/WaitForContainerUnix.cs +++ b/src/Testcontainers/Configurations/WaitStrategies/WaitForContainerUnix.cs @@ -25,12 +25,6 @@ public override IWaitForContainerOS UntilCommandIsCompleted(IEnumerable return AddCustomWaitStrategy(new UntilUnixCommandIsCompleted(command.ToArray()), waitStrategyModifier); } - /// - public override IWaitForContainerOS UntilPortIsAvailable(int port, Action waitStrategyModifier = null) - { - return UntilInternalTcpPortIsAvailable(port, waitStrategyModifier); - } - /// public override IWaitForContainerOS UntilInternalTcpPortIsAvailable(int containerPort, Action waitStrategyModifier = null) { diff --git a/src/Testcontainers/Configurations/WaitStrategies/WaitForContainerWindows.cs b/src/Testcontainers/Configurations/WaitStrategies/WaitForContainerWindows.cs index c2ae1f95b..e94a17794 100644 --- a/src/Testcontainers/Configurations/WaitStrategies/WaitForContainerWindows.cs +++ b/src/Testcontainers/Configurations/WaitStrategies/WaitForContainerWindows.cs @@ -25,12 +25,6 @@ public override IWaitForContainerOS UntilCommandIsCompleted(IEnumerable return AddCustomWaitStrategy(new UntilWindowsCommandIsCompleted(command.ToArray()), waitStrategyModifier); } - /// - public override IWaitForContainerOS UntilPortIsAvailable(int port, Action waitStrategyModifier = null) - { - return UntilInternalTcpPortIsAvailable(port, waitStrategyModifier); - } - /// public override IWaitForContainerOS UntilInternalTcpPortIsAvailable(int containerPort, Action waitStrategyModifier = null) { diff --git a/src/Testcontainers/Containers/PortForwarding.cs b/src/Testcontainers/Containers/PortForwarding.cs index dcb768900..085225951 100644 --- a/src/Testcontainers/Containers/PortForwarding.cs +++ b/src/Testcontainers/Containers/PortForwarding.cs @@ -107,7 +107,9 @@ protected override PortForwardingBuilder Init() .WithPortBinding(SshdPort, true) .WithUsername("root") .WithPassword("root") - .WithWaitStrategy(Wait.ForUnixContainer().UntilPortIsAvailable(SshdPort)); + .WithWaitStrategy(Wait.ForUnixContainer() + .UntilInternalTcpPortIsAvailable(SshdPort) + .UntilExternalTcpPortIsAvailable(SshdPort)); } /// diff --git a/src/Testcontainers/Containers/SocatBuilder.cs b/src/Testcontainers/Containers/SocatBuilder.cs index fef22f990..91598223f 100644 --- a/src/Testcontainers/Containers/SocatBuilder.cs +++ b/src/Testcontainers/Containers/SocatBuilder.cs @@ -72,7 +72,9 @@ public override SocatContainer Build() .Select(item => string.Format(argument, item.Key, item.Value))); var waitStrategy = DockerResourceConfiguration.Targets - .Aggregate(Wait.ForUnixContainer(), (waitStrategy, item) => waitStrategy.UntilPortIsAvailable(item.Key)); + .Aggregate(Wait.ForUnixContainer(), (waitStrategy, item) => waitStrategy + .UntilInternalTcpPortIsAvailable(item.Key) + .UntilExternalTcpPortIsAvailable(item.Key)); var socatBuilder = WithCommand(command).WithWaitStrategy(waitStrategy); return new SocatContainer(socatBuilder.DockerResourceConfiguration); diff --git a/tests/Testcontainers.Platform.Windows.Tests/WindowsContainerTest.cs b/tests/Testcontainers.Platform.Windows.Tests/WindowsContainerTest.cs index 4e8300975..1b296e54b 100644 --- a/tests/Testcontainers.Platform.Windows.Tests/WindowsContainerTest.cs +++ b/tests/Testcontainers.Platform.Windows.Tests/WindowsContainerTest.cs @@ -57,7 +57,7 @@ public UntilInternalTcpPortIsAvailable() .WithImage(CommonImages.ServerCore) .WithEntrypoint("PowerShell", "-NoLogo", "-Command") .WithCommand("$tcpListener = [System.Net.Sockets.TcpListener]::new([System.Net.IPAddress]::Any, 8080); $tcpListener.Start(); Start-Sleep -Seconds 120") - .WithWaitStrategy(Wait.ForWindowsContainer().UntilPortIsAvailable(8080)) + .WithWaitStrategy(Wait.ForWindowsContainer().UntilInternalTcpPortIsAvailable(8080)) .Build()) { } diff --git a/tests/Testcontainers.Tests/Unit/Containers/Unix/GetContainerLogsTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Unix/GetContainerLogsTest.cs index 960878350..8569940ee 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Unix/GetContainerLogsTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Unix/GetContainerLogsTest.cs @@ -10,8 +10,7 @@ public sealed class GetContainerLogsTest : IAsyncLifetime { private readonly IContainer _container = new ContainerBuilder() .WithImage("amazon/dynamodb-local:1.20.0") - .WithWaitStrategy(Wait.ForUnixContainer() - .UntilPortIsAvailable(8000)) + .WithWaitStrategy(Wait.ForUnixContainer().UntilInternalTcpPortIsAvailable(8000)) .Build(); [Fact]