62 lines
1.7 KiB
Rust
Raw Normal View History

2025-12-10 10:11:45 +01:00
use testing_framework_core::topology::generation::GeneratedTopology;
use tracing::info;
use crate::{
errors::ComposeRunnerError,
2025-12-10 15:26:34 +01:00
infrastructure::{
environment::StackEnvironment,
ports::{HostPortMapping, ensure_remote_readiness_with_ports},
},
2026-01-26 08:26:15 +01:00
lifecycle::readiness::ensure_nodes_ready_with_ports,
2025-12-10 10:11:45 +01:00
};
pub struct ReadinessChecker;
impl ReadinessChecker {
pub async fn wait_all(
descriptors: &GeneratedTopology,
host_ports: &HostPortMapping,
environment: &mut StackEnvironment,
) -> Result<(), ComposeRunnerError> {
2026-01-26 08:26:15 +01:00
let node_ports = host_ports.node_api_ports();
info!(ports = ?node_ports, "waiting for node HTTP endpoints");
if let Err(err) = ensure_nodes_ready_with_ports(&node_ports).await {
return fail_readiness_step(
environment,
2026-01-26 08:26:15 +01:00
"node readiness failed",
"node readiness failed",
err,
)
.await;
2025-12-10 10:11:45 +01:00
}
info!("waiting for remote service readiness");
if let Err(err) = ensure_remote_readiness_with_ports(descriptors, host_ports).await {
return fail_readiness_step(
environment,
"remote readiness probe failed",
"remote readiness probe failed",
err,
)
.await;
2025-12-10 10:11:45 +01:00
}
2025-12-11 09:00:14 +01:00
info!("compose readiness checks passed");
2025-12-10 10:11:45 +01:00
Ok(())
}
}
async fn fail_readiness_step<E>(
environment: &mut StackEnvironment,
reason: &str,
log_message: &str,
error: E,
) -> Result<(), ComposeRunnerError>
where
E: std::fmt::Debug + Into<ComposeRunnerError>,
{
environment.fail(reason).await;
tracing::warn!(error = ?error, "{log_message}");
Err(error.into())
}