liminal-server 0.23.1

Standalone server for the liminal messaging bus
Documentation
//! SRV-027 R1 pins on the directory alone; the lock-sharing pin with the
//! connection record is in `supervisor_tests.rs`.

use super::ServiceDirectory;

#[test]
fn directory_names_the_first_registration_until_it_closes() {
    let mut directory = ServiceDirectory::default();
    directory.register(7, "echo.request");
    directory.register(9, "echo.request");
    assert_eq!(directory.serving("echo.request"), Some(7));
    directory.forget(7, "echo.request");
    assert_eq!(directory.serving("echo.request"), Some(9));
    directory.forget(9, "echo.request");
    assert_eq!(directory.serving("echo.request"), None);
    assert_eq!(directory.subjects(), 0);
}

#[test]
fn directory_follows_a_replacement_registration() {
    let mut directory = ServiceDirectory::default();
    directory.register(7, "one");
    directory.forget(7, "one");
    directory.register(7, "two");
    assert_eq!(directory.serving("one"), None);
    assert_eq!(directory.serving("two"), Some(7));
    assert_eq!(directory.subjects(), 1);
}

#[test]
fn directory_lookup_is_one_keyed_read() {
    let mut directory = ServiceDirectory::default();
    for n in 0..1_000_u64 {
        directory.register(n, &format!("subject.{n}"));
    }
    let before = directory.lookups();
    assert_eq!(directory.serving("missing"), None);
    assert_eq!(directory.lookups() - before, 1);
    assert_eq!(directory.serving("subject.999"), Some(999));
    assert_eq!(directory.lookups() - before, 2);
}

#[test]
fn directory_lists_a_connection_once_per_subject() {
    let mut directory = ServiceDirectory::default();
    directory.register(7, "echo.request");
    directory.register(7, "echo.request");
    directory.forget(7, "echo.request");
    assert_eq!(directory.serving("echo.request"), None);
}