@@ -581,3 +581,68 @@ impl<'a, M: GuestMemory> MockSplitQueue<'a, M> {
581581 Ok ( ( ) )
582582 }
583583}
584+
585+ #[ cfg( test) ]
586+ mod tests {
587+ use super :: * ;
588+ use vm_memory:: { GuestAddress , GuestMemoryMmap } ;
589+
590+ // SplitQueueRing load/store API coverage for AvailRing (u16)
591+ #[ test]
592+ fn test_avail_ring_load_store ( ) {
593+ let mem = & GuestMemoryMmap :: < ( ) > :: from_ranges ( & [ ( GuestAddress ( 0 ) , 0x10000 ) ] ) . unwrap ( ) ;
594+ let len = 8u16 ;
595+ let base = GuestAddress ( 0x1000 ) ;
596+ let ring: AvailRing < _ > = AvailRing :: new ( mem, base, len) ;
597+
598+ // flags
599+ ring. store_flags ( 0x55aa ) ;
600+ assert_eq ! ( ring. load_flags( ) , 0x55aa ) ;
601+
602+ // idx
603+ ring. store_idx ( 7 ) ;
604+ assert_eq ! ( ring. load_idx( ) , 7 ) ;
605+
606+ // ring entry
607+ ring. store_ring_entry ( 3 , 0xbeef ) . unwrap ( ) ;
608+ assert_eq ! ( ring. load_ring_entry( 3 ) . unwrap( ) , 0xbeef ) ;
609+
610+ // event field
611+ ring. store_event ( 0x1234 ) ;
612+ assert_eq ! ( ring. load_event( ) , 0x1234 ) ;
613+
614+ // out-of-bounds must error
615+ assert ! ( matches!(
616+ ring. store_ring_entry( len as usize , 0 ) . unwrap_err( ) ,
617+ MockError :: InvalidIndex
618+ ) ) ;
619+ }
620+
621+ // SplitQueueRing load/store API coverage for UsedRing (VirtqUsedElem)
622+ #[ test]
623+ fn test_used_ring_load_store ( ) {
624+ let mem = & GuestMemoryMmap :: < ( ) > :: from_ranges ( & [ ( GuestAddress ( 0 ) , 0x20000 ) ] ) . unwrap ( ) ;
625+ let len = 8u16 ;
626+ let base = GuestAddress ( 0x3000 ) ;
627+ let ring: UsedRing < _ > = UsedRing :: new ( mem, base, len) ;
628+
629+ // flags
630+ ring. store_flags ( 0xccdd ) ;
631+ assert_eq ! ( ring. load_flags( ) , 0xccdd ) ;
632+
633+ // idx
634+ ring. store_idx ( 2 ) ;
635+ assert_eq ! ( ring. load_idx( ) , 2 ) ;
636+
637+ // ring entry
638+ let elem = VirtqUsedElem :: new ( 42 , 0x1000 ) ;
639+ ring. store_ring_entry ( 0 , elem) . unwrap ( ) ;
640+ let read = ring. load_ring_entry ( 0 ) . unwrap ( ) ;
641+ assert_eq ! ( read. id( ) , 42 ) ;
642+ assert_eq ! ( read. len( ) , 0x1000 ) ;
643+
644+ // event field
645+ ring. store_event ( 0xdead ) ;
646+ assert_eq ! ( ring. load_event( ) , 0xdead ) ;
647+ }
648+ }
0 commit comments