@@ -2381,12 +2381,8 @@ mod tests {
23812381 use crate :: scsi;
23822382 use crate :: scsidvd:: ISO_SECTOR_SIZE ;
23832383 use crate :: scsidvd:: SimpleScsiDvd ;
2384- use disk_backend:: Disk ;
2385- use disk_backend:: DiskError ;
2386- use disk_backend:: DiskIo ;
2384+ use futures:: FutureExt ;
23872385 use guestmem:: GuestMemory ;
2388- use guestmem:: MemoryWrite ;
2389- use inspect:: Inspect ;
23902386 use pal_async:: async_test;
23912387 use scsi:: AdditionalSenseCode ;
23922388 use scsi:: ScsiOp ;
@@ -2399,117 +2395,25 @@ mod tests {
23992395 use test_with_tracing:: test;
24002396 use zerocopy:: IntoBytes ;
24012397
2402- #[ derive( Debug ) ]
2403- struct TestDisk {
2404- sector_count : u64 ,
2405- sector_size : u32 ,
2406- storage : Vec < u8 > ,
2407- read_only : bool ,
2408- }
2409-
2410- impl Inspect for TestDisk {
2411- fn inspect ( & self , req : inspect:: Request < ' _ > ) {
2412- req. respond ( ) ;
2413- }
2414- }
2415-
2416- impl TestDisk {
2417- pub fn new ( sector_size : u32 , sector_count : u64 , read_only : bool ) -> TestDisk {
2418- let buffer = make_repeat_data_buffer ( sector_count as usize , sector_size as usize ) ;
2419-
2420- TestDisk {
2421- sector_count,
2422- sector_size,
2423- storage : buffer,
2424- read_only,
2425- }
2426- }
2427- }
2428-
2429- impl DiskIo for TestDisk {
2430- fn disk_type ( & self ) -> & str {
2431- "test"
2432- }
2433-
2434- fn sector_count ( & self ) -> u64 {
2435- self . sector_count
2436- }
2437-
2438- fn sector_size ( & self ) -> u32 {
2439- self . sector_size
2440- }
2441-
2442- fn is_read_only ( & self ) -> bool {
2443- self . read_only
2444- }
2445-
2446- fn disk_id ( & self ) -> Option < [ u8 ; 16 ] > {
2447- None
2448- }
2449-
2450- fn physical_sector_size ( & self ) -> u32 {
2451- self . sector_size
2452- }
2453-
2454- fn is_fua_respected ( & self ) -> bool {
2455- false
2456- }
2457-
2458- async fn eject ( & self ) -> Result < ( ) , DiskError > {
2459- Err ( DiskError :: UnsupportedEject )
2460- }
2461-
2462- async fn read_vectored (
2463- & self ,
2464- buffers : & RequestBuffers < ' _ > ,
2465- sector : u64 ,
2466- ) -> Result < ( ) , DiskError > {
2467- let offset = sector as usize * self . sector_size ( ) as usize ;
2468- let end_point = offset + buffers. len ( ) ;
2469-
2470- if self . storage . len ( ) < end_point {
2471- return Err ( DiskError :: IllegalBlock ) ;
2472- }
2473-
2474- buffers. writer ( ) . write ( & self . storage [ offset..end_point] ) ?;
2475- Ok ( ( ) )
2476- }
2477-
2478- async fn write_vectored (
2479- & self ,
2480- _buffers : & RequestBuffers < ' _ > ,
2481- _sector : u64 ,
2482- _fua : bool ,
2483- ) -> Result < ( ) , DiskError > {
2484- todo ! ( )
2485- }
2486-
2487- async fn sync_cache ( & self ) -> Result < ( ) , DiskError > {
2488- todo ! ( )
2489- }
2490-
2491- async fn unmap (
2492- & self ,
2493- _sector : u64 ,
2494- _count : u64 ,
2495- _block_level_only : bool ,
2496- ) -> Result < ( ) , DiskError > {
2497- Ok ( ( ) )
2498- }
2499-
2500- fn unmap_behavior ( & self ) -> disk_backend:: UnmapBehavior {
2501- disk_backend:: UnmapBehavior :: Ignored
2502- }
2503- }
2504-
2505- fn new_scsi_dvd ( sector_size : u32 , sector_count : u64 , read_only : bool ) -> SimpleScsiDvd {
2506- let disk = TestDisk :: new ( sector_size, sector_count, read_only) ;
2507- let scsi_dvd = SimpleScsiDvd :: new ( Some ( Disk :: new ( disk) . unwrap ( ) ) ) ;
2398+ fn new_scsi_dvd ( sector_size : u32 , sector_count : u64 ) -> SimpleScsiDvd {
2399+ let disk_size = sector_count * sector_size as u64 ;
2400+ let disk = disklayer_ram:: ram_disk_with_sector_size ( disk_size, false , sector_size) . unwrap ( ) ;
2401+
2402+ // Pre-fill the disk with the repeating pattern expected by tests.
2403+ let pattern = make_repeat_data_buffer ( sector_count as usize , sector_size as usize ) ;
2404+ let mem = GuestMemory :: allocate ( pattern. len ( ) ) ;
2405+ mem. write_at ( 0 , & pattern) . unwrap ( ) ;
2406+ let buffers = OwnedRequestBuffers :: linear ( 0 , pattern. len ( ) , false ) ;
2407+ disk. write_vectored ( & buffers. buffer ( & mem) , 0 , false )
2408+ . now_or_never ( )
2409+ . expect ( "RAM disk write should not block" )
2410+ . unwrap ( ) ;
2411+
2412+ let scsi_dvd = SimpleScsiDvd :: new ( Some ( disk) ) ;
25082413 let sector_shift = ISO_SECTOR_SIZE . trailing_zeros ( ) as u8 ;
25092414 assert_eq ! ( scsi_dvd. sector_count( ) , sector_count / scsi_dvd. balancer( ) ) ;
25102415 assert_eq ! ( scsi_dvd. sector_shift( ) , sector_shift) ;
25112416 if let Media :: Loaded ( disk) = & * scsi_dvd. media . read ( ) {
2512- assert_eq ! ( disk. is_read_only( ) , read_only) ;
25132417 assert_eq ! ( disk. sector_size( ) , sector_size) ;
25142418 } else {
25152419 panic ! ( "unexpected Media::Unloaded" ) ;
@@ -2638,14 +2542,14 @@ mod tests {
26382542
26392543 #[ test]
26402544 fn validate_new_scsi_dvd ( ) {
2641- new_scsi_dvd ( 512 , 2048 , true ) ;
2545+ new_scsi_dvd ( 512 , 2048 ) ;
26422546 }
26432547
26442548 #[ async_test]
26452549 async fn validate_read16 ( ) {
26462550 let sector_size = 512 ;
26472551 let sector_count = 2048 ;
2648- let mut scsi_dvd = new_scsi_dvd ( sector_size, sector_count, true ) ;
2552+ let mut scsi_dvd = new_scsi_dvd ( sector_size, sector_count) ;
26492553
26502554 let dvd_sector_size = ISO_SECTOR_SIZE as u64 ;
26512555 let dvd_sector_count = scsi_dvd. sector_count ( ) ;
@@ -2680,14 +2584,14 @@ mod tests {
26802584
26812585 #[ test]
26822586 fn validate_save_restore_scsi_dvd_no_change ( ) {
2683- let scsi_dvd = new_scsi_dvd ( 512 , 2048 , true ) ;
2587+ let scsi_dvd = new_scsi_dvd ( 512 , 2048 ) ;
26842588 let saved_state = save_scsi_dvd ( & scsi_dvd) ;
26852589 restore_scsi_dvd ( saved_state, & scsi_dvd) ;
26862590 }
26872591
26882592 #[ test]
26892593 fn validate_save_restore_scsi_dvd_with_sense_data ( ) {
2690- let scsi_dvd = new_scsi_dvd ( 512 , 2048 , true ) ;
2594+ let scsi_dvd = new_scsi_dvd ( 512 , 2048 ) ;
26912595 let mut saved_state = save_scsi_dvd ( & scsi_dvd) ;
26922596 saved_state. sense_data = Some ( SavedSenseData {
26932597 sense_key : SenseKey :: UNIT_ATTENTION . 0 ,
0 commit comments