tests: Wait explicitly for vm shutdown w/ the 'wait-timeout' crate

Instead of waiting blindly with fixed amount of sleeping time, we can
use the `wait-timeout` crate to explicitly wait VM shutdown (with a
timeout). It can reduces the execution time of some tests
substantially. Also, this patch increases the `shutdown` timeout for
'test_reboot', which should fix the recent sporadic failures on this
test.

Signed-off-by: Bo Chen <chen.bo@intel.com>
This commit is contained in:
Bo Chen 2020-10-28 16:40:50 -07:00 committed by Rob Bradford
parent cd1c2ed31e
commit 26783fea89
3 changed files with 18 additions and 6 deletions

10
Cargo.lock generated
View File

@ -234,6 +234,7 @@ dependencies = [
"vhost_user_net",
"vmm",
"vmm-sys-util",
"wait-timeout",
]
[[package]]
@ -1676,6 +1677,15 @@ dependencies = [
"serde_derive",
]
[[package]]
name = "wait-timeout"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
dependencies = [
"libc",
]
[[package]]
name = "wasi"
version = "0.9.0+wasi-snapshot-preview1"

View File

@ -28,6 +28,7 @@ vhost_user_block = { path = "vhost_user_block"}
vhost_user_net = { path = "vhost_user_net"}
vmm = { path = "vmm" }
vmm-sys-util = "0.6.1"
wait-timeout = "0.2.0"
[build-dependencies]
clap = { version = "2.33.3", features = ["wrap_help"] }

View File

@ -31,6 +31,7 @@ mod tests {
use std::thread;
use tempdir::TempDir;
use tempfile::NamedTempFile;
use wait_timeout::ChildExt;
lazy_static! {
static ref NEXT_VM_ID: Mutex<u8> = Mutex::new(1);
@ -3513,9 +3514,9 @@ mod tests {
);
guest.ssh_command("sudo shutdown -h now").unwrap();
thread::sleep(std::time::Duration::new(20, 0));
});
let _ = child.wait_timeout(std::time::Duration::from_secs(20));
let _ = child.kill();
let output = child.wait_with_output().unwrap();
handle_child_output(r, &output);
@ -3607,8 +3608,8 @@ mod tests {
thread::sleep(std::time::Duration::new(20, 0));
guest.ssh_command("sudo shutdown -h now").unwrap();
thread::sleep(std::time::Duration::new(20, 0));
let _ = child.wait_timeout(std::time::Duration::from_secs(20));
let _ = child.kill();
let output = child.wait_with_output().unwrap();
@ -3962,9 +3963,9 @@ mod tests {
guest
.ssh_command("sudo shutdown -h now")
.unwrap_or_default();
thread::sleep(std::time::Duration::new(20, 0));
});
let _ = child.wait_timeout(std::time::Duration::from_secs(40));
let _ = child.kill();
let output = child.wait_with_output().unwrap();
handle_child_output(r, &output);
@ -4026,9 +4027,9 @@ mod tests {
assert_eq!(fd_count_1, fd_count_2);
guest.ssh_command("sudo shutdown -h now").unwrap();
thread::sleep(std::time::Duration::new(20, 0));
});
let _ = child.wait_timeout(std::time::Duration::from_secs(20));
let _ = child.kill();
let output = child.wait_with_output().unwrap();
handle_child_output(r, &output);
@ -5623,9 +5624,9 @@ mod tests {
DEFAULT_SSH_TIMEOUT,
)
.unwrap();
thread::sleep(std::time::Duration::new(40, 0));
});
let _ = child.wait_timeout(std::time::Duration::from_secs(40));
let _ = child.kill();
let output = child.wait_with_output().unwrap();
@ -5720,7 +5721,7 @@ mod tests {
.unwrap();
});
thread::sleep(std::time::Duration::new(20, 0));
let _ = child.wait_timeout(std::time::Duration::from_secs(20));
let _ = child.kill();
let output = child.wait_with_output().unwrap();