task-supervisor 0.4.1

Supervisor for long-lived tokio tasks
Documentation
mod common;

use common::HealthyTask;
use std::{sync::Arc, time::Duration};
use task_supervisor::{SupervisorBuilder, TaskStatus};
use tokio::time::{advance, pause};

#[tokio::test]
async fn test_custom_completion() {
    pause();

    let handle = SupervisorBuilder::new()
        .with_health_check_interval(std::time::Duration::from_millis(50))
        .with_max_restart_attempts(2)
        .with_base_restart_delay(std::time::Duration::from_millis(50))
        .build()
        .run();

    let task = HealthyTask {
        run_flag: Arc::new(std::sync::atomic::AtomicBool::new(false)),
    };
    handle.add_task("custom_config_task", task).unwrap();
    advance(std::time::Duration::from_millis(300)).await;

    let status = handle
        .get_task_status("custom_config_task")
        .await
        .unwrap()
        .unwrap();
    assert_eq!(status, TaskStatus::Completed);
}

#[tokio::test]
async fn test_custom_infinite() {
    pause();

    let handle = SupervisorBuilder::new()
        .with_health_check_interval(std::time::Duration::from_millis(50))
        .build()
        .run();

    let task = HealthyTask {
        run_flag: Arc::new(std::sync::atomic::AtomicBool::new(true)),
    };
    handle.add_task("custom_config_task", task).unwrap();
    tokio::time::sleep(Duration::from_millis(30)).await;

    let status = handle
        .get_task_status("custom_config_task")
        .await
        .unwrap()
        .unwrap();
    assert_eq!(status, TaskStatus::Healthy);
}