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:
parent
23a4b43ac6
commit
274d4dd062
4 changed files with 51 additions and 0 deletions
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue