From a89600aeba3bc48863d05fdd957eb218f30cafe5 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Wed, 27 May 2026 09:30:32 +0200 Subject: [PATCH] virtio-devices: Test activator success path Feed Ok into VirtioPciDeviceActivator and assert that activate returns Ok, device_activated becomes true, DEVICE_NEEDS_RESET is not set, status is otherwise unchanged, no Config interrupt is delivered, and the barrier waiter unblocks normally. Assisted-by: Claude:Opus-4.7 Signed-off-by: Anatol Belski --- virtio-devices/src/transport/pci_device.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/virtio-devices/src/transport/pci_device.rs b/virtio-devices/src/transport/pci_device.rs index 44c69d209..0ef73b464 100644 --- a/virtio-devices/src/transport/pci_device.rs +++ b/virtio-devices/src/transport/pci_device.rs @@ -1621,4 +1621,25 @@ mod unit_tests { // did not deadlock the vCPU thread. waiter.join().expect("barrier waiter deadlocked"); } + + #[test] + fn activate_success_sets_activated_and_does_not_signal_reset() { + let (activator, status, device_activated, interrupt, barrier) = make_activator(Ok(())); + let initial_status = status.load(Ordering::SeqCst); + + let waiter = std::thread::spawn(move || barrier.wait()); + + let result = activator.activate(); + + result.unwrap(); + assert!(device_activated.load(Ordering::SeqCst)); + assert_eq!( + status.load(Ordering::SeqCst) & (DEVICE_NEEDS_RESET as u8), + 0 + ); + assert_eq!(status.load(Ordering::SeqCst), initial_status); + assert!(interrupt.triggers.lock().unwrap().is_empty()); + + waiter.join().expect("barrier waiter deadlocked"); + } }