dragonball: fix unit test failure case about Kvm.

Due to the wrong use of as_raw_fd, Kvm was dropped twice.

Signed-off-by: wllenyj <wllenyj@linux.alibaba.com>
This commit is contained in:
wllenyj 2022-05-18 18:32:33 +08:00
parent 2b02e0a9bf
commit 31591d7915
3 changed files with 3 additions and 11 deletions

View File

@ -228,7 +228,7 @@ mod tests {
assert!(c.max_memslots >= 32);
let kvm = Kvm::new().unwrap();
let f = unsafe { File::from_raw_fd(kvm.as_raw_fd()) };
let f = std::mem::ManuallyDrop::new(unsafe { File::from_raw_fd(kvm.as_raw_fd()) });
let m1 = f.metadata().unwrap();
let m2 = File::open("/dev/kvm").unwrap().metadata().unwrap();

View File

@ -758,13 +758,11 @@ impl Drop for Vcpu {
#[cfg(test)]
pub mod tests {
use std::os::unix::io::AsRawFd;
use std::sync::mpsc::{channel, Receiver};
use std::sync::Mutex;
use arc_swap::ArcSwap;
use dbs_device::device_manager::IoManager;
use kvm_ioctls::Kvm;
use lazy_static::lazy_static;
use test_utils::skip_if_not_root;
@ -812,12 +810,8 @@ pub mod tests {
#[cfg(target_arch = "x86_64")]
fn create_vcpu() -> (Vcpu, Receiver<VcpuStateEvent>) {
// Call for kvm too frequently would cause error in some host kernel.
std::thread::sleep(std::time::Duration::from_millis(5));
let kvm = Kvm::new().unwrap();
let vm = Arc::new(kvm.create_vm().unwrap());
let kvm_context = KvmContext::new(Some(kvm.as_raw_fd())).unwrap();
let kvm_context = KvmContext::new(None).unwrap();
let vm = kvm_context.kvm().create_vm().unwrap();
let vcpu_fd = Arc::new(vm.create_vcpu(0).unwrap());
let io_manager = IoManagerCached::new(Arc::new(ArcSwap::new(Arc::new(IoManager::new()))));
let supported_cpuid = kvm_context

View File

@ -1062,7 +1062,6 @@ mod tests {
fn get_vm() -> Vm {
let instance_info = Arc::new(RwLock::new(InstanceInfo::default()));
let epoll_manager = EpollManager::default();
std::thread::sleep(std::time::Duration::from_millis(200));
let mut vm = Vm::new(None, instance_info, epoll_manager).unwrap();
let vm_config = VmConfigInfo {
vcpu_count: 1,
@ -1111,7 +1110,6 @@ mod tests {
skip_if_not_root!();
let instance_info = Arc::new(RwLock::new(InstanceInfo::default()));
let epoll_manager = EpollManager::default();
std::thread::sleep(std::time::Duration::from_millis(200));
let mut vm = Vm::new(None, instance_info, epoll_manager).unwrap();
let vm_config = VmConfigInfo {
vcpu_count: 1,