diff --git a/src/postgres/mod.rs b/src/postgres/mod.rs index dd40a98..e8a1b1c 100644 --- a/src/postgres/mod.rs +++ b/src/postgres/mod.rs @@ -1,6 +1,6 @@ use std::{borrow::Cow, collections::HashMap}; -use testcontainers::{core::WaitFor, CopyDataSource, CopyToContainer, Image}; +use testcontainers::{core::{WaitFor, CmdWaitFor, ExecCommand, ContainerState}, CopyDataSource, CopyToContainer, Image}; const NAME: &str = "postgres"; const TAG: &str = "11-alpine"; @@ -125,11 +125,30 @@ impl Image for Postgres { fn ready_conditions(&self) -> Vec { vec![ - WaitFor::message_on_stderr("database system is ready to accept connections"), - WaitFor::message_on_stdout("database system is ready to accept connections"), + WaitFor::message_on_either_std("database system is ready to accept connections"), ] } + fn exec_after_start( + &self, + cs: ContainerState, + ) -> Result, testcontainers::TestcontainersError> { + let mut commands = vec![]; + let cmd = vec![ + "pg_isready".to_string(), + "--host".to_string(), + "localhost".to_string(), + "--dbname".to_string(), + self.env_vars.get("POSTGRES_DB").unwrap().to_string(), + "--username".to_string(), + self.env_vars.get("POSTGRES_USER").unwrap().to_string() + ]; + + commands.push(ExecCommand::new(cmd).with_cmd_ready_condition(CmdWaitFor::exit())); + + Ok(commands) + } + fn env_vars( &self, ) -> impl IntoIterator>, impl Into>)> {