export interface DockerContainerStatus { isRunning: boolean; state?: string; health?: string; exitCode?: number; } export interface DockerContainer { id: string; name: string; image: string; port?: number; host: string; ports: Map; environment: Record; labels: Record; networks: string[]; createdAt: Date; internalIp?: string; cleanup: () => Promise; getStatus: () => Promise; isHealthy: () => Promise; } export interface DockerTestManagerOptions { dockerPath?: string; basePort?: number; maxRetries?: number; startupTimeout?: number; cleanup?: boolean; verbose?: boolean; network?: string; gracefulShutdownTimeout?: number; maxCleanupRetries?: number; } export interface ContainerOptions { name?: string; image: string; command?: string; ports?: Record; environment?: Record; labels?: Record; volumes?: string[]; networks?: string[]; healthcheck?: { test: string[]; interval?: string; timeout?: string; retries?: number; startPeriod?: string; }; waitFor?: { port?: number; timeout?: number; healthcheck?: boolean; }; } export interface RedisContainerOptions { name?: string; port?: number | 'auto'; password?: string; database?: number; maxMemory?: string; requirePass?: boolean; } export interface RedisClusterOptions { masterCount?: number; replicasPerMaster?: number; basePort?: number; password?: string; network?: string; readyTimeout?: number; preInitDelay?: number; } export interface RedisClusterContainers { masters: DockerContainer[]; replicas: DockerContainer[]; network: string; nodes: Array<{ host: string; port: number; }>; natMap?: Record; cleanup: () => Promise; } export interface RedisSentinelOptions { masterName?: string; replicaCount?: number; sentinelCount?: number; basePort?: number; password?: string; network?: string; } export interface RedisSentinelContainers { master: DockerContainer; replicas: DockerContainer[]; sentinels: DockerContainer[]; network: string; masterName: string; sentinelPorts: number[]; cleanup: () => Promise; }