liminal-server 0.23.1

Standalone server for the liminal messaging bus
Documentation
use super::fixture::{Fixture, ISSUED_AT, LIFETIME, NOW, Result};
use super::{LinkAction, LinkRights, Rights};
use crate::auth_lys::{RefusalCause, SubjectBinding};
use std::sync::atomic::Ordering;

#[derive(PartialEq, Eq)]
struct RedactedPass<'a>(&'a str);

impl std::fmt::Debug for RedactedPass<'_> {
    fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        formatter.write_str("<redacted pass>")
    }
}

#[test]
fn an_hour_old_importer_uses_its_renewed_pass_on_the_first_inbound_open() -> Result {
    let fixture = Fixture::new(true, false)?;
    const { assert!(NOW - ISSUED_AT > LIFETIME) };
    let result = fixture
        .session()?
        .open_link(&Fixture::link(), LinkAction::Export, NOW);
    assert!(
        result.is_ok(),
        "link_refused:{}",
        serde_json::to_string(&result.err().ok_or("no refusal")?.refusal)?
    );
    assert!(matches!(
        result?,
        crate::auth_lys::DeliberateDecision::Outright(_)
    ));
    assert_eq!(fixture.calls.load(Ordering::Relaxed), 1);
    assert_eq!(
        RedactedPass(fixture.authority.pass.current()?.as_str()),
        RedactedPass(fixture.renewed.as_str())
    );
    let bound = SubjectBinding::link(
        "network".to_owned(),
        super::fixture::LINK.to_owned(),
        "health".to_owned(),
    )?;
    Rights(fixture.authority.clone()).holds(LinkAction::Import, &bound, NOW)?;
    fixture.finish()
}

#[test]
fn a_renewed_importer_pass_without_the_link_grant_is_refused_by_name() -> Result {
    let fixture = Fixture::new(false, false)?;
    let refused = fixture
        .authority
        .open(&Fixture::link(), LinkAction::Export, NOW)
        .err()
        .ok_or("renewed pass without grant admitted")?;
    assert_eq!(refused.refusal.refused.action, "link_import");
    assert_eq!(refused.cause.to_string(), "renewed-without-grant");
    assert_eq!(fixture.calls.load(Ordering::Relaxed), 1);
    assert_eq!(
        RedactedPass(fixture.authority.pass.current()?.as_str()),
        RedactedPass(fixture.renewed.as_str())
    );
    fixture.finish()
}

#[test]
fn an_expired_outbound_pass_is_presented_renewed_on_the_same_open() -> Result {
    let fixture = Fixture::new(true, false)?;
    let token = fixture.authority.pass.for_open_at(NOW)?;
    assert_eq!(
        RedactedPass(token.as_str()),
        RedactedPass(fixture.renewed.as_str()),
        "open did not present the renewed token"
    );
    assert_eq!(fixture.calls.load(Ordering::Relaxed), 1);
    fixture.finish()
}

#[test]
fn a_failed_importer_renewal_keeps_the_open_refused() -> Result {
    let fixture = Fixture::new(true, true)?;
    let refused = fixture
        .authority
        .open(&Fixture::link(), LinkAction::Export, NOW)
        .err()
        .ok_or("failed renewal admitted")?;
    assert_eq!(refused.cause, RefusalCause::DeliberateUnavailable);
    assert_eq!(refused.refusal.refused.action, "link_import");
    assert_eq!(fixture.calls.load(Ordering::Relaxed), 1);
    assert_ne!(
        RedactedPass(fixture.authority.pass.current()?.as_str()),
        RedactedPass(fixture.renewed.as_str())
    );
    fixture.finish()
}