feat: add cancellation
Some checks failed
continuous-integration/drone/push Build is failing

Signed-off-by: kjuulh <contact@kjuulh.io>
This commit is contained in:
2024-08-07 11:01:04 +02:00
parent 4555ba9eb3
commit c21f9ca6be
4 changed files with 727 additions and 3 deletions

93
crates/mad/tests/mod.rs Normal file
View File

@@ -0,0 +1,93 @@
use anyhow::anyhow;
use async_trait::async_trait;
use mad::{Component, Mad};
use rand::Rng;
use tokio_util::sync::CancellationToken;
use tracing_test::traced_test;
struct NeverEndingRun {}
#[async_trait]
impl Component for NeverEndingRun {
fn name(&self) -> Option<String> {
Some("NeverEndingRun".into())
}
async fn run(&self, cancellation: CancellationToken) -> Result<(), mad::MadError> {
let millis_wait = rand::thread_rng().gen_range(50..1000);
tokio::time::sleep(std::time::Duration::from_millis(millis_wait)).await;
return Err(mad::MadError::Inner(anyhow!("failed to run stuff")));
Ok(())
}
}
#[tokio::test]
#[traced_test]
async fn test_can_run_components() -> anyhow::Result<()> {
Mad::builder()
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.add(NeverEndingRun {})
.run()
.await?;
anyhow::bail!("stuff");
Ok(())
}