fips-core 0.3.92

Reusable FIPS mesh, endpoint, transport, and protocol library
Documentation
#[test]
fn owner_tracks_inbound_activity_only_for_reserved_packets() {
    let owner = fsp_owner(75);
    let mut mover = mover();
    mover.register_owner(owner, OwnerConfig::new(1, 8));

    mover
        .submit_socket_packet(
            packet(owner, 1, 1, PacketClass::Bulk, OutputTarget::Transport)
                .with_activity_tick(ActivityTick::new(10)),
        )
        .unwrap();
    assert_eq!(dispatch_available(&mut mover, 8).len(), 1);
    assert_eq!(
        mover.owner_mut(owner).unwrap().last_rx_activity(),
        Some(ActivityTick::new(10))
    );

    mover
        .submit_socket_packet(
            packet(owner, 1, 1, PacketClass::Bulk, OutputTarget::Transport)
                .with_activity_tick(ActivityTick::new(20)),
        )
        .unwrap();
    assert!(dispatch_available(&mut mover, 8).is_empty());
    assert_eq!(
        mover.owner_mut(owner).unwrap().last_rx_activity(),
        Some(ActivityTick::new(10))
    );

    mover
        .submit_socket_packet(
            packet(owner, 0, 2, PacketClass::Bulk, OutputTarget::Transport)
                .with_activity_tick(ActivityTick::new(30)),
        )
        .unwrap();
    assert!(dispatch_available(&mut mover, 8).is_empty());
    assert_eq!(
        mover.owner_mut(owner).unwrap().last_rx_activity(),
        Some(ActivityTick::new(10))
    );

    let drops = mover.drain_drops();
    assert!(
        drops
            .iter()
            .any(|drop| drop.reason == PacketDropReason::Replay && drop.counter == Some(1))
    );
    assert!(drops.iter().any(
            |drop| drop.reason == PacketDropReason::StaleGeneration && drop.counter == Some(2)
        ));
}