/*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* .
*
* Sahid Orentino Ferdjaoui
*/
//! Integration tests using a real qemu:///system connection they are
//! all ignored by default.
mod common;
use virt::connect::{Connect, ConnectAuth, ConnectCredential};
use virt::sys;
#[test]
#[ignore]
fn test_create_domain_with_flags() {
let c = common::qemu_conn();
let d = common::build_qemu_domain(&c, "create", false);
assert_eq!(Ok(0), d.create_with_flags(0));
assert_eq!(Ok((sys::VIR_DOMAIN_START_PAUSED, 1)), d.get_state());
assert_eq!(Ok(String::from("libvirt-rs-test-create")), d.get_name());
common::clean(d);
common::close(c);
}
#[test]
#[ignore]
fn test_create_storage_pool_and_vols() {
let c = common::qemu_conn();
let p = common::build_storage_pool(&c, "create", false);
assert_eq!(Ok(0), p.create(0));
assert_eq!(Ok(String::from("libvirt-rs-test-create")), p.get_name());
let v = common::build_storage_vol(&p, "vol1", 8);
assert_eq!(Ok(String::from("vol1")), v.get_name());
assert_eq!(
Ok(String::from("/var/lib/libvirt/images/vol1")),
v.get_path()
);
assert_eq!(
Ok(String::from("/var/lib/libvirt/images/vol1")),
v.get_key()
);
if let Ok(info) = v.get_info() {
assert_eq!(0, info.kind);
assert_eq!(8192, info.allocation);
assert_eq!(8192, info.capacity);
} else {
common::clean_vol(v);
common::clean_pool(p);
common::close(c);
panic!("should not be here")
}
assert_eq!(Ok(0), v.resize(10240, 0));
if let Ok(info) = v.get_info() {
assert_eq!(0, info.kind);
assert_eq!(8192, info.allocation);
assert_eq!(10240, info.capacity);
} else {
common::clean_vol(v);
common::clean_pool(p);
common::close(c);
panic!("should not be here")
}
if let Ok(info) = p.get_info() {
assert_eq!(2, info.state);
assert_eq!(0, info.capacity - (info.allocation + info.available));
} else {
common::clean_vol(v);
common::clean_pool(p);
common::close(c);
panic!("should not be here")
}
common::clean_vol(v);
common::clean_pool(p);
common::close(c);
}
#[test]
#[ignore]
fn test_connection_with_auth() {
fn callback(creds: &mut Vec) {
for cred in creds {
match cred.typed as u32 {
sys::VIR_CRED_AUTHNAME => {
cred.result = Some(String::from("user"));
}
sys::VIR_CRED_PASSPHRASE => {
cred.result = Some(String::from("pass"));
}
_ => {
panic!("Should not be here...");
}
}
}
}
let mut auth = ConnectAuth::new(
vec![sys::VIR_CRED_AUTHNAME, sys::VIR_CRED_PASSPHRASE],
callback,
);
let c = Connect::open_auth(Some("test+tcp://127.0.0.1/default"), &mut auth, 0);
assert!(c.is_ok());
common::close(c.unwrap());
}
#[test]
#[ignore]
fn test_connection_with_auth_wrong() {
fn callback(creds: &mut Vec) {
for cred in creds {
match cred.typed as u32 {
sys::VIR_CRED_AUTHNAME => {
cred.result = Some(String::from("user"));
}
sys::VIR_CRED_PASSPHRASE => {
cred.result = Some(String::from("passwrong"));
}
_ => {
panic!("Should not be here...");
}
}
}
}
let mut auth = ConnectAuth::new(
vec![sys::VIR_CRED_AUTHNAME, sys::VIR_CRED_PASSPHRASE],
callback,
);
let c = Connect::open_auth(Some("test+tcp://127.0.0.1/default"), &mut auth, 0);
assert!(c.is_err());
}
#[test]
#[ignore]
fn test_reset() {
let c = common::qemu_conn();
let d = common::build_qemu_domain(&c, "reset", false);
assert_eq!(Ok(0), d.create_with_flags(0));
assert_eq!(Ok((sys::VIR_DOMAIN_RUNNING, 1)), d.get_state());
assert_eq!(Ok(0), d.reset());
// TODO assert something showing reset has the intended side effect
common::clean(d);
common::close(c);
}
#[test]
#[ignore]
fn test_domain_memory_stats() {
let c = common::qemu_conn();
let d = common::build_qemu_domain(&c, "memory_stats", false);
assert_eq!(Ok(0), d.create_with_flags(0));
assert_eq!(
Ok(String::from("libvirt-rs-test-memory_stats")),
d.get_name()
);
for stat in d.memory_stats(0).unwrap() {
match stat.tag {
sys::VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON => assert_eq!(1024, stat.val),
sys::VIR_DOMAIN_MEMORY_STAT_LAST_UPDATE => assert_eq!(0, stat.val),
sys::VIR_DOMAIN_MEMORY_STAT_RSS => assert!(stat.val > 0),
_ => assert!(stat.tag <= sys::VIR_DOMAIN_MEMORY_STAT_NR),
}
}
common::clean(d);
common::close(c);
}