#![allow(clippy::unwrap_in_result)]
use std::time::Duration;
use color_eyre::eyre::Result;
use zakura_chain::{block::Height, chain_tip::mock::MockChainTip, parameters::Network};
use zakurad::components::sync::end_of_support::{
self, EOS_PANIC_AFTER, EOS_WARN_AFTER, EOS_WARN_MESSAGE_HEADER, ESTIMATED_RELEASE_HEIGHT,
};
const ESTIMATED_BLOCKS_PER_DAY: u32 = 1152;
#[test]
#[should_panic(expected = "Zakura refuses to run if the release date is older than")]
fn end_of_support_panic() {
let panic = ESTIMATED_RELEASE_HEIGHT + (EOS_PANIC_AFTER * ESTIMATED_BLOCKS_PER_DAY) + 1;
end_of_support::check(Height(panic), &Network::Mainnet);
}
#[test]
#[tracing_test::traced_test]
fn end_of_support_function() {
let no_warn = ESTIMATED_RELEASE_HEIGHT + (EOS_PANIC_AFTER * ESTIMATED_BLOCKS_PER_DAY)
- (30 * ESTIMATED_BLOCKS_PER_DAY);
end_of_support::check(Height(no_warn), &Network::Mainnet);
assert!(logs_contain(
"Checking if Zakura release is inside support range ..."
));
assert!(logs_contain("Zakura release is supported"));
let warn = ESTIMATED_RELEASE_HEIGHT + (EOS_WARN_AFTER * ESTIMATED_BLOCKS_PER_DAY) + 1;
end_of_support::check(Height(warn), &Network::Mainnet);
assert!(logs_contain(
"Checking if Zakura release is inside support range ..."
));
assert!(logs_contain(
"Your Zakura release is too old and it will stop running at block"
));
}
#[test]
#[tracing_test::traced_test]
fn end_of_support_date() {
let list = Network::Mainnet.checkpoint_list();
let higher_checkpoint = list.max_height();
end_of_support::check(higher_checkpoint, &Network::Mainnet);
assert!(logs_contain(
"Checking if Zakura release is inside support range ..."
));
assert!(!logs_contain(EOS_WARN_MESSAGE_HEADER));
}
#[tokio::test(start_paused = true)]
#[tracing_test::traced_test]
async fn end_of_support_task() -> Result<()> {
let (latest_chain_tip, latest_chain_tip_sender) = MockChainTip::new();
latest_chain_tip_sender.send_best_tip_height(Height(10));
let eos_future = end_of_support::start(Network::Mainnet, latest_chain_tip);
tokio::time::timeout(Duration::from_secs(15), eos_future)
.await
.expect_err(
"end of support task unexpectedly exited: it should keep running until Zakura exits",
);
assert!(logs_contain(
"Checking if Zakura release is inside support range ..."
));
assert!(logs_contain("Zakura release is supported"));
Ok(())
}