diff --git a/src/Container/Container.php b/src/Container/Container.php index b3f7696..2dd943f 100644 --- a/src/Container/Container.php +++ b/src/Container/Container.php @@ -4,6 +4,8 @@ declare(strict_types=1); namespace Testcontainers\Container; +use Testcontainers\Utils\PortGenerator\FixedPortGenerator; + /** * Added for backward compatibility. * @deprecated Use GenericContainer instead. @@ -52,6 +54,7 @@ class Container extends GenericContainer */ public function withPort(string $localPort, string $containerPort): self { + $this->withPortGenerator(new FixedPortGenerator([(int)$localPort])); return $this->withExposedPorts($containerPort); } diff --git a/src/Container/GenericContainer.php b/src/Container/GenericContainer.php index 4706afc..326291b 100644 --- a/src/Container/GenericContainer.php +++ b/src/Container/GenericContainer.php @@ -123,12 +123,19 @@ class GenericContainer implements TestContainer return $this; } - public function withHealthCheckCommand(string $command, int $healthCheckIntervalInMS = 1000): static - { - $this->healthConfig = new HealthConfig([ - 'Test' => ['CMD', $command], - 'Interval' => $healthCheckIntervalInMS, - ]); + public function withHealthCheckCommand( + string $command, + int $intervalInMilliseconds = 1000, + int $timeoutInMilliseconds = 3000, + int $retries = 3, + int $startPeriodInMilliseconds = 0 + ): static { + $this->healthConfig = new HealthConfig(); + $this->healthConfig->setTest(['CMD-SHELL', $command]); + $this->healthConfig->setInterval($intervalInMilliseconds * 1_000_000); + $this->healthConfig->setTimeout($timeoutInMilliseconds * 1_000_000); + $this->healthConfig->setRetries($retries); + $this->healthConfig->setStartPeriod($startPeriodInMilliseconds * 1_000_000); return $this; } diff --git a/tests/Integration/OldTests/WaitStrategyTest.php b/tests/Integration/OldTests/WaitStrategyTest.php index 9c164e9..52a6d47 100644 --- a/tests/Integration/OldTests/WaitStrategyTest.php +++ b/tests/Integration/OldTests/WaitStrategyTest.php @@ -8,7 +8,8 @@ use PHPUnit\Framework\TestCase; use Predis\Client; use Predis\Connection\ConnectionException; use Testcontainers\Container\Container; -use Testcontainers\Exception\ContainerNotReadyException; +use Testcontainers\Container\MySQLContainer; +use Testcontainers\Container\RedisContainer; use Testcontainers\Wait\WaitForExec; use Testcontainers\Wait\WaitForHealthCheck; use Testcontainers\Wait\WaitForHttp; @@ -28,7 +29,7 @@ class WaitStrategyTest extends TestCase public function testWaitForExec(): void { - $container = Container::make('mysql') + $container = MySQLContainer::make() ->withEnvironment('MYSQL_ROOT_PASSWORD', 'root') ->withWait( new WaitForExec([ @@ -52,11 +53,13 @@ class WaitStrategyTest extends TestCase $version = $query->fetchColumn(); $this->assertNotEmpty($version); + + $container->stop(); } public function testWaitForLog(): void { - $container = Container::make('redis:6.2.5') + $container = RedisContainer::make() ->withWait(new WaitForLog('Ready to accept connections')); $container->run(); @@ -138,6 +141,7 @@ class WaitStrategyTest extends TestCase { $container = Container::make('nginx') ->withHealthCheckCommand('curl --fail http://localhost') + ->withPort('80', '80') ->withWait(new WaitForHealthCheck()); $container->run(); @@ -153,5 +157,7 @@ class WaitStrategyTest extends TestCase $this->assertIsString($response); $this->assertStringContainsString('Welcome to nginx!', $response); + + $container->stop(); } }