liminal-server 0.25.4

Standalone server for the liminal messaging bus
Documentation
//! SRV-043 R1: beamr's teardown refusal reaches the connection as the server's
//! stop; every other readiness refusal keeps today's error and message.

use beamr::scheduler::ReadinessError;

use super::readiness_refusal::{ReadinessCall, readiness_refusal};
use crate::ServerError;

const CALLS: [(ReadinessCall, &str); 2] = [
    (ReadinessCall::Register, "register"),
    (ReadinessCall::Rearm, "rearm"),
];

#[test]
fn the_teardown_refusal_names_the_servers_stop() {
    for (call, _) in CALLS {
        let mapped = readiness_refusal(7, call, &ReadinessError::TeardownInProgress);
        assert!(
            matches!(mapped, ServerError::ReadinessClosedByStop { pid: 7 }),
            "{call:?}: {mapped:?}"
        );
    }
}

#[test]
fn every_other_refusal_keeps_its_listener_accept_message() -> Result<(), String> {
    let others = [
        ReadinessError::Disabled,
        ReadinessError::Register { errno: 9 },
        ReadinessError::UnknownToken,
        ReadinessError::ServiceFailed,
    ];
    for error in others {
        for (call, verb) in CALLS {
            let ServerError::ListenerAccept { message } = readiness_refusal(7, call, &error) else {
                return Err(format!("{call:?} {error:?} left ListenerAccept"));
            };
            assert_eq!(
                message,
                format!("failed to {verb} connection readiness: {error}")
            );
        }
    }
    Ok(())
}