From cb447bc057fcfe10baf36a5d9a0f49fa93439360 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Onur=20=C3=96zkan?= Date: Sun, 26 Jul 2026 18:03:46 +0300 Subject: [PATCH] libs/kaptan-tx: cover critical frame admission --- libs/kaptan-tx/src/lib.rs | 55 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/libs/kaptan-tx/src/lib.rs b/libs/kaptan-tx/src/lib.rs index ba34674..48c80a1 100644 --- a/libs/kaptan-tx/src/lib.rs +++ b/libs/kaptan-tx/src/lib.rs @@ -176,6 +176,61 @@ mod tests { assert_eq!(queue.complete().unwrap().frame, 1); } + #[test] + fn critical_frame_displaces_pending_best_effort_traffic() { + let mut queue = TransmitQueue::::new(); + queue.enqueue(PendingFrame { + class: FrameClass::BestEffort, + frame: 1, + }); + queue.start_with(|_| Ok::<_, ()>(())).unwrap(); + queue.enqueue(PendingFrame { + class: FrameClass::BestEffort, + frame: 2, + }); + queue.enqueue(PendingFrame { + class: FrameClass::BestEffort, + frame: 3, + }); + + assert_eq!( + queue.enqueue(PendingFrame { + class: FrameClass::Critical, + frame: 4, + }), + EnqueueResult::ReplacedBestEffort + ); + queue.complete(); + assert_eq!( + queue.start_with(|frame| { + assert_eq!(*frame, 4); + Ok::<_, ()>(()) + }), + Ok(StartOutcome::Started) + ); + } + + #[test] + fn critical_admission_reports_when_only_critical_frames_are_pending() { + let mut queue = TransmitQueue::::new(); + queue.enqueue(PendingFrame { + class: FrameClass::Critical, + frame: 1, + }); + queue.enqueue(PendingFrame { + class: FrameClass::Critical, + frame: 2, + }); + + assert_eq!( + queue.enqueue(PendingFrame { + class: FrameClass::Critical, + frame: 3, + }), + EnqueueResult::CriticalQueueFull + ); + } + #[test] fn rejects_start_without_claiming_active_ownership() { let mut queue = TransmitQueue::::new();