@@ -581,3 +581,68 @@ impl<'a, M: GuestMemory> MockSplitQueue<'a, M> {
581
581
Ok ( ( ) )
582
582
}
583
583
}
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