Add test for VHOST_USER_SHARED_OBJECT

add test to trigger the VHOST_USER_SHARED_OBJECT message
on both frontend and backend.

Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
This commit is contained in:
Dorinda Bassey 2024-10-21 12:07:33 +02:00 committed by Stefano Garzarella
parent 23a4b43ac6
commit 274d4dd062
4 changed files with 51 additions and 0 deletions

View file

@ -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"

View file

@ -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<File> {
let file = tempfile::tempfile().unwrap();
Ok(file)
}
fn queues_per_thread(&self) -> Vec<u64> {
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)

View file

@ -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<File> {
let file = tempfile::tempfile().unwrap();
Ok(file)
}
fn queues_per_thread(&self) -> Vec<u64> {
vec![1, 1]
}
@ -316,6 +323,23 @@ fn vhost_user_get_inflight(path: &Path, barrier: Arc<Barrier>) {
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<Barrier>) {
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);

View file

@ -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);