UNPKG

testcontainers

Version:

Testcontainers is a NodeJS library that supports tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container

44 lines 2.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HealthCheckWaitStrategy = void 0; const wait_strategy_1 = require("./wait-strategy"); const common_1 = require("../common"); const container_runtime_1 = require("../container-runtime"); class HealthCheckWaitStrategy extends wait_strategy_1.AbstractWaitStrategy { async waitUntilReady(container) { common_1.log.debug(`Waiting for health check...`, { containerId: container.id }); const client = await (0, container_runtime_1.getContainerRuntimeClient)(); const containerEvents = await client.container.events(container, ["health_status"]); return new Promise((resolve, reject) => { const timeout = setTimeout(() => { const message = `Health check not healthy after ${this.startupTimeout}ms`; common_1.log.error(message, { containerId: container.id }); containerEvents.destroy(); reject(new Error(message)); }, this.startupTimeout); const onTerminalState = () => { clearTimeout(timeout); containerEvents.destroy(); common_1.log.debug(`Health check wait strategy complete`, { containerId: container.id }); }; containerEvents.on("data", (data) => { const parsedData = JSON.parse(data); const status = parsedData.status.split(":").length === 2 ? parsedData.status.split(":")[1].trim() // Docker : parsedData.HealthStatus; // Podman if (status === "healthy") { resolve(); onTerminalState(); } else if (status === "unhealthy") { const message = `Health check failed: ${status}`; common_1.log.error(message, { containerId: container.id }); reject(new Error(message)); onTerminalState(); } }); }); } } exports.HealthCheckWaitStrategy = HealthCheckWaitStrategy; //# sourceMappingURL=health-check-wait-strategy.js.map