diff --git a/staging/vhost-device-sound/src/audio_backends.rs b/staging/vhost-device-sound/src/audio_backends.rs index 1592285..05c0048 100644 --- a/staging/vhost-device-sound/src/audio_backends.rs +++ b/staging/vhost-device-sound/src/audio_backends.rs @@ -41,6 +41,9 @@ pub trait AudioBackend { fn stop(&self, _stream_id: u32) -> Result<()> { Ok(()) } + + #[cfg(test)] + fn as_any(&self) -> &dyn std::any::Any; } pub fn alloc_audio_backend( @@ -56,3 +59,35 @@ pub fn alloc_audio_backend( BackendType::Alsa => Ok(Box::new(AlsaBackend::new(streams))), } } + +#[cfg(test)] +mod tests { + use std::any::TypeId; + + use super::*; + + #[test] + fn test_alloc_audio_backend() { + crate::init_logger(); + { + let v = BackendType::Null; + let value = alloc_audio_backend(v, Default::default()).unwrap(); + assert_eq!(TypeId::of::(), value.as_any().type_id()); + } + #[cfg(feature = "pw-backend")] + { + use pipewire::{test_utils::PipewireTestHarness, *}; + + let _test_harness = PipewireTestHarness::new(); + let v = BackendType::Pipewire; + let value = alloc_audio_backend(v, Default::default()).unwrap(); + assert_eq!(TypeId::of::(), value.as_any().type_id()); + } + #[cfg(feature = "alsa-backend")] + { + let v = BackendType::Alsa; + let value = alloc_audio_backend(v, Default::default()).unwrap(); + assert_eq!(TypeId::of::(), value.as_any().type_id()); + } + } +} diff --git a/staging/vhost-device-sound/src/audio_backends/alsa.rs b/staging/vhost-device-sound/src/audio_backends/alsa.rs index 410972e..8b779ed 100644 --- a/staging/vhost-device-sound/src/audio_backends/alsa.rs +++ b/staging/vhost-device-sound/src/audio_backends/alsa.rs @@ -718,4 +718,9 @@ impl AudioBackend for AlsaBackend { std::mem::take(&mut streams[stream_id as usize].buffers); Ok(()) } + + #[cfg(test)] + fn as_any(&self) -> &dyn std::any::Any { + self + } } diff --git a/staging/vhost-device-sound/src/audio_backends/null.rs b/staging/vhost-device-sound/src/audio_backends/null.rs index 3101e9b..05175f9 100644 --- a/staging/vhost-device-sound/src/audio_backends/null.rs +++ b/staging/vhost-device-sound/src/audio_backends/null.rs @@ -26,6 +26,11 @@ impl AudioBackend for NullBackend { log::trace!("NullBackend read stream_id {}", _id); Ok(()) } + + #[cfg(test)] + fn as_any(&self) -> &dyn std::any::Any { + self + } } #[cfg(test)] diff --git a/staging/vhost-device-sound/src/audio_backends/pipewire.rs b/staging/vhost-device-sound/src/audio_backends/pipewire.rs index 4528689..3cabbd2 100644 --- a/staging/vhost-device-sound/src/audio_backends/pipewire.rs +++ b/staging/vhost-device-sound/src/audio_backends/pipewire.rs @@ -562,12 +562,17 @@ impl AudioBackend for PwBackend { lock_guard.unlock(); Ok(()) } + + #[cfg(test)] + fn as_any(&self) -> &dyn std::any::Any { + self + } } #[cfg(test)] /// Utilities for building a temporary Dbus session and a pipewire instance for /// testing. -mod test_utils; +pub mod test_utils; #[cfg(test)] mod tests {