logos-blockchain-testing/logos/examples/tests/local_deployer_restart.rs
2026-02-16 11:38:31 +01:00

91 lines
2.7 KiB
Rust

use std::time::Duration;
use anyhow::{Result, anyhow};
use lb_framework::{
CoreBuilderExt as _, DeploymentBuilder, LbcLocalDeployer, ScenarioBuilder, TopologyConfig,
};
use testing_framework_core::scenario::Deployer;
use tracing_subscriber::fmt::try_init;
#[tokio::test]
#[ignore = "requires local node binary and open ports"]
async fn local_restart_node() -> Result<()> {
let _ = try_init();
let mut scenario = ScenarioBuilder::deployment_with(|t| t.with_node_count(1))
.enable_node_control()
.with_run_duration(Duration::from_secs(1))
.build()?;
let deployer = LbcLocalDeployer::default();
let runner = deployer.deploy(&scenario).await?;
let context = runner.context();
let control = context
.node_control()
.ok_or_else(|| anyhow!("node control not available"))?;
let node_name = "node-0";
let old_pid = control
.node_pid(node_name)
.ok_or_else(|| anyhow!("missing node pid"))?;
control
.restart_node(node_name)
.await
.map_err(|error| anyhow!("failed to restart {node_name}: {error}"))?;
let new_pid = control
.node_pid(node_name)
.ok_or_else(|| anyhow!("missing node pid"))?;
assert_ne!(old_pid, new_pid, "expected a new process after restart");
control
.stop_node(node_name)
.await
.map_err(|error| anyhow!("failed to stop {node_name}: {error}"))?;
assert!(
control.node_pid(node_name).is_none(),
"expected node pid to be absent after stop"
);
let _handle = runner.run(&mut scenario).await?;
Ok(())
}
#[tokio::test]
#[ignore = "requires local node binary and open ports"]
async fn manual_cluster_restart_node() -> Result<()> {
let _ = try_init();
let deployer = LbcLocalDeployer::default();
let descriptors = DeploymentBuilder::new(TopologyConfig::with_node_numbers(1)).build()?;
let cluster = deployer.manual_cluster_from_descriptors(descriptors);
let node_name = cluster.start_node("a").await?.name;
let old_pid = cluster
.node_pid(&node_name)
.ok_or_else(|| anyhow!("missing node pid"))?;
cluster
.restart_node(&node_name)
.await
.map_err(|error| anyhow!("failed to restart {node_name}: {error}"))?;
let new_pid = cluster
.node_pid(&node_name)
.ok_or_else(|| anyhow!("missing node pid"))?;
assert_ne!(old_pid, new_pid, "expected a new process after restart");
cluster
.stop_node(&node_name)
.await
.map_err(|error| anyhow!("failed to stop {node_name}: {error}"))?;
assert!(
cluster.node_pid(&node_name).is_none(),
"expected node pid to be absent after stop"
);
Ok(())
}