use assert_cmd::cargo::cargo_bin_cmd;
use color_eyre::Result;
use predicates::{prelude::PredicateBooleanExt, str::contains};
#[test]
fn ps_command() -> Result<()> {
cargo_bin_cmd!()
.arg("ps")
.assert()
.success()
.stdout(contains("VM ID"));
Ok(())
}
#[test]
fn exec_command_and_stop() -> Result<()> {
let detached_run_output = cargo_bin_cmd!()
.arg("run")
.arg("archlinux")
.arg("--detach")
.arg("--rm")
.arg("--disable-kvm")
.args(["--ssh-timeout", "180"])
.args(["sleep", "180"])
.assert()
.success()
.get_output()
.stdout
.clone();
let detached_run_output_str = String::from_utf8(detached_run_output)?;
let detached_vm_id = detached_run_output_str.lines().last().unwrap();
cargo_bin_cmd!()
.arg("ready")
.arg("--wait")
.args(["--timeout", "180"])
.arg(detached_vm_id)
.assert()
.success();
cargo_bin_cmd!()
.arg("ps")
.assert()
.success()
.stdout(predicates::str::contains(detached_vm_id));
cargo_bin_cmd!()
.arg("exec")
.arg(detached_vm_id)
.args(["echo", "test in running vm"])
.assert()
.success()
.stdout(contains("test in running vm"));
cargo_bin_cmd!()
.arg("stop")
.arg(detached_vm_id)
.assert()
.success();
cargo_bin_cmd!()
.arg("ps")
.arg("-a")
.assert()
.success()
.stdout(predicates::str::contains(detached_vm_id).not());
Ok(())
}
#[test]
fn run_command() -> Result<()> {
let vmid = "testcmd";
cargo_bin_cmd!()
.arg("run")
.arg("archlinux")
.args(["--vmid", vmid])
.arg("--disable-kvm")
.arg("--rm")
.args(["--ssh-timeout", "180"])
.args(["echo", "hello yes"])
.assert()
.success()
.stdout(contains("hello yes"));
cargo_bin_cmd!()
.arg("ps")
.arg("-a")
.assert()
.success()
.stdout(predicates::str::contains(vmid).not());
Ok(())
}
#[test]
fn run_command_detached() -> Result<()> {
let vmid = cargo_bin_cmd!()
.arg("run")
.arg("archlinux")
.arg("--detach")
.arg("--disable-kvm")
.arg("--rm")
.args(["--ssh-timeout", "180"])
.args(["echo", "hello yes"])
.assert()
.success()
.get_output()
.stdout
.clone();
let vmid = String::from_utf8(vmid)?;
cargo_bin_cmd!()
.arg("ps")
.arg("-a")
.assert()
.success()
.stdout(predicates::str::contains(vmid).not());
Ok(())
}