canic-core 0.26.12

Canic — a canister orchestration and management toolkit for the Internet Computer
Documentation
// Category A - Internal runtime-configured tests (ConfigTestBuilder when needed).

use crate::{
    cdk::types::Cycles,
    ops::storage::pool::PoolOps,
    storage::stable::pool::{PoolStatus, PoolStore},
    test::seams::{lock, p},
    workflow::pool::PoolWorkflow,
};

#[test]
fn pool_selection_uses_workflow_ordering() {
    let _guard = lock();

    for (pid, _) in PoolOps::data().entries {
        PoolOps::remove(&pid);
    }

    let pid_a = p(20);
    let pid_b = p(21);
    let pid_c = p(22);

    PoolStore::register(
        pid_a,
        Cycles::new(1),
        PoolStatus::Ready,
        None,
        None,
        None,
        5,
    );
    PoolStore::register(
        pid_b,
        Cycles::new(1),
        PoolStatus::Ready,
        None,
        None,
        None,
        5,
    );
    PoolStore::register(
        pid_c,
        Cycles::new(1),
        PoolStatus::Ready,
        None,
        None,
        None,
        9,
    );

    let selected = PoolWorkflow::pop_oldest_ready().expect("expected a ready entry");
    assert_eq!(selected, pid_a);
    assert!(!PoolOps::contains(&pid_a));

    let next = PoolWorkflow::pop_oldest_ready().expect("expected a second ready entry");
    assert_eq!(next, pid_b);
    assert!(!PoolOps::contains(&pid_b));
    assert!(PoolOps::contains(&pid_c));
}