diff --git a/vhost-user-backend/Cargo.toml b/vhost-user-backend/Cargo.toml index 6a8ece4..af74ca8 100644 --- a/vhost-user-backend/Cargo.toml +++ b/vhost-user-backend/Cargo.toml @@ -24,6 +24,7 @@ vmm-sys-util = { workspace = true } [dev-dependencies] nix = { version = "0.29", features = ["fs"] } +uuid = { version = "1.8.0", features=["v4"] } vhost = { path = "../vhost", version = "0.13.0", features = ["test-utils", "vhost-user-frontend", "vhost-user-backend"] } vm-memory = { workspace = true, features = ["backend-mmap", "backend-atomic"] } tempfile = "3.2.0" diff --git a/vhost-user-backend/src/backend.rs b/vhost-user-backend/src/backend.rs index 5458cd3..42c92f9 100644 --- a/vhost-user-backend/src/backend.rs +++ b/vhost-user-backend/src/backend.rs @@ -601,6 +601,7 @@ pub mod tests { use crate::VringRwLock; use libc::EFD_NONBLOCK; use std::sync::Mutex; + use uuid::Uuid; use vm_memory::{GuestAddress, GuestMemoryAtomic, GuestMemoryMmap}; pub struct MockVhostBackend { @@ -685,6 +686,11 @@ pub mod tests { fn set_backend_req_fd(&mut self, _backend: Backend) {} + fn get_shared_object(&mut self, _uuid: VhostUserSharedMsg) -> Result { + let file = tempfile::tempfile().unwrap(); + Ok(file) + } + fn queues_per_thread(&self) -> Vec { vec![1, 1] } @@ -735,6 +741,11 @@ pub mod tests { let _ = backend.exit_event(0).unwrap(); + let uuid = VhostUserSharedMsg { + uuid: Uuid::new_v4(), + }; + backend.get_shared_object(uuid).unwrap(); + let mem = GuestMemoryAtomic::new( GuestMemoryMmap::<()>::from_ranges(&[(GuestAddress(0x100000), 0x10000)]).unwrap(), ); @@ -775,6 +786,11 @@ pub mod tests { ); backend.update_memory(mem.clone()).unwrap(); + let uuid = VhostUserSharedMsg { + uuid: Uuid::new_v4(), + }; + backend.get_shared_object(uuid).unwrap(); + let vring = VringRwLock::new(mem, 0x1000).unwrap(); backend .handle_event(0x1, EventSet::IN, &[vring], 0) diff --git a/vhost-user-backend/tests/vhost-user-server.rs b/vhost-user-backend/tests/vhost-user-server.rs index bcb49d8..50b93ef 100644 --- a/vhost-user-backend/tests/vhost-user-server.rs +++ b/vhost-user-backend/tests/vhost-user-server.rs @@ -7,8 +7,10 @@ use std::path::Path; use std::sync::{Arc, Barrier, Mutex}; use std::thread; +use uuid::Uuid; use vhost::vhost_user::message::{ VhostUserConfigFlags, VhostUserHeaderFlag, VhostUserInflight, VhostUserProtocolFeatures, + VhostUserSharedMsg, }; use vhost::vhost_user::{Backend, Frontend, Listener, VhostUserFrontend}; use vhost::{VhostBackend, VhostUserMemoryRegionInfo, VringConfigData}; @@ -94,6 +96,11 @@ impl VhostUserBackendMut for MockVhostBackend { fn set_backend_req_fd(&mut self, _backend: Backend) {} + fn get_shared_object(&mut self, _uuid: VhostUserSharedMsg) -> Result { + let file = tempfile::tempfile().unwrap(); + Ok(file) + } + fn queues_per_thread(&self) -> Vec { vec![1, 1] } @@ -316,6 +323,23 @@ fn vhost_user_get_inflight(path: &Path, barrier: Arc) { assert!(frontend.get_inflight_fd(&inflight).is_err()); } +#[test] +fn test_vhost_user_get_shared_object() { + vhost_user_server(vhost_user_get_shared_object); +} + +fn vhost_user_get_shared_object(path: &Path, barrier: Arc) { + let mut frontend = setup_frontend(path, barrier); + frontend + .get_shared_object(&VhostUserSharedMsg::default()) + .unwrap_err(); + frontend + .get_shared_object(&VhostUserSharedMsg { + uuid: Uuid::new_v4(), + }) + .unwrap(); +} + #[test] fn test_vhost_user_get_inflight() { vhost_user_server(vhost_user_get_inflight); diff --git a/vhost/src/vhost_user/mod.rs b/vhost/src/vhost_user/mod.rs index fd76932..4b1ec28 100644 --- a/vhost/src/vhost_user/mod.rs +++ b/vhost/src/vhost_user/mod.rs @@ -264,11 +264,13 @@ mod dummy_backend; #[cfg(all(test, feature = "vhost-user-frontend", feature = "vhost-user-backend"))] mod tests { + use message::VhostUserSharedMsg; use std::fs::File; use std::os::unix::io::AsRawFd; use std::path::{Path, PathBuf}; use std::sync::{Arc, Barrier, Mutex}; use std::thread; + use uuid::Uuid; use vmm_sys_util::rand::rand_alphanumerics; use vmm_sys_util::tempfile::TempFile; @@ -404,6 +406,9 @@ mod tests { // set_inflight_fd() backend.handle_request().unwrap(); + // get_shared_object() + backend.handle_request().unwrap(); + // get_queue_num() backend.handle_request().unwrap(); @@ -475,6 +480,11 @@ mod tests { .set_inflight_fd(&inflight_info, inflight_file.as_raw_fd()) .unwrap(); + frontend + .get_shared_object(&VhostUserSharedMsg { + uuid: Uuid::new_v4(), + }) + .unwrap(); let num = frontend.get_queue_num().unwrap(); assert_eq!(num, 2);