liminal-server 0.25.4

Standalone server for the liminal messaging bus
Documentation
//! SRV-038 R1: the root is owed to Lys at every new ready fence, once.

use super::*;

#[test]
fn a_ready_fence_owes_the_root_question_once_and_a_new_fence_owes_it_again()
-> Result<(), Box<dyn std::error::Error>> {
    let state = StreamState::for_log(log());
    let mut engine = engine::Engine::for_tests(Arc::clone(&state))?;
    assert!(!engine.take_root_owed(), "nothing is owed before ready");
    engine.page(baseline(2))?;
    assert!(engine.take_root_owed(), "the first ready owes the question");
    assert!(!engine.take_root_owed(), "it is owed once");
    engine.lost()?;
    engine.page(ChangesPage {
        log: baseline(2).log,
        frames: vec![
            ChangeFrame::Watermark { revision: 3 },
            ChangeFrame::PlacementMark {
                revision: 3,
                placement: 0,
            },
            ChangeFrame::Ready { revision: 3 },
        ],
    })?;
    assert!(engine.take_root_owed(), "a new ready fence owes it again");
    Ok(())
}