[libvirt] [PATCH v2 0/3] test_driver: re-implement testDomainSetMemoryFlags
by Ilias Stamatis
Ilias Stamatis (3):
test_driver: consider flags in testDomainSetMemoryFlags
test_driver: testDomainSetMemory should forward the call with
VIR_DOMAIN_AFFECT_LIVE
test_driver: testDomainSetMaxMemory should simply forward the call
src/test/test_driver.c | 75 +++++++++++++++++++++++++++++-------------
1 file changed, 52 insertions(+), 23 deletions(-)
--
2.22.0
5 years, 5 months
[libvirt] [PATCH v2 0/2] test_driver: implement virDomainSetNumaParameters
by Ilias Stamatis
Change since v1:
* virDomainObjGetOneDefState is used instead of virDomainObjGetOneDef
I send these 2 patches together, since testConnectSupportsFeature needs
to be implemented in order for testDomainSetNumaParameters to support
string parameters.
Ilias Stamatis (2):
test_driver: implement virConnectSupportsFeature
test_driver: implement virDomainSetNumaParameters
src/test/test_driver.c | 111 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 111 insertions(+)
mode change 100644 => 100755 src/test/test_driver.c
--
2.22.0
5 years, 5 months
[libvirt] [PATCH v2] implement virDomainSetInterfaceParameters
by Ilias Stamatis
Signed-off-by: Ilias Stamatis <stamatis.iliass(a)gmail.com>
---
src/test/test_driver.c | 106 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 106 insertions(+)
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 7cf92e78a7..fce38acc17 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -3108,6 +3108,111 @@ testDomainGetNumaParameters(virDomainPtr dom,
}
+static int
+testDomainSetInterfaceParameters(virDomainPtr dom,
+ const char *device,
+ virTypedParameterPtr params,
+ int nparams,
+ unsigned int flags)
+{
+ virDomainObjPtr vm = NULL;
+ virDomainDefPtr def;
+ virDomainNetDefPtr net = NULL;
+ virNetDevBandwidthPtr bandwidth = NULL;
+ bool inboundSpecified = false;
+ bool outboundSpecified = false;
+ size_t i;
+ int ret = -1;
+
+ virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
+ VIR_DOMAIN_AFFECT_CONFIG, -1);
+
+ if (virTypedParamsValidate(params, nparams,
+ VIR_DOMAIN_BANDWIDTH_IN_AVERAGE,
+ VIR_TYPED_PARAM_UINT,
+ VIR_DOMAIN_BANDWIDTH_IN_PEAK,
+ VIR_TYPED_PARAM_UINT,
+ VIR_DOMAIN_BANDWIDTH_IN_BURST,
+ VIR_TYPED_PARAM_UINT,
+ VIR_DOMAIN_BANDWIDTH_IN_FLOOR,
+ VIR_TYPED_PARAM_UINT,
+ VIR_DOMAIN_BANDWIDTH_OUT_AVERAGE,
+ VIR_TYPED_PARAM_UINT,
+ VIR_DOMAIN_BANDWIDTH_OUT_PEAK,
+ VIR_TYPED_PARAM_UINT,
+ VIR_DOMAIN_BANDWIDTH_OUT_BURST,
+ VIR_TYPED_PARAM_UINT,
+ NULL) < 0)
+ return -1;
+
+ if (!(vm = testDomObjFromDomain(dom)))
+ return -1;
+
+ if (!(def = virDomainObjGetOneDef(vm, flags)))
+ goto cleanup;
+
+ if (!(net = virDomainNetFind(def, device)))
+ goto cleanup;
+
+ if ((VIR_ALLOC(bandwidth) < 0) ||
+ (VIR_ALLOC(bandwidth->in) < 0) ||
+ (VIR_ALLOC(bandwidth->out) < 0))
+ goto cleanup;
+
+ for (i = 0; i < nparams; i++) {
+ virTypedParameterPtr param = ¶ms[i];
+
+ if (STREQ(param->field, VIR_DOMAIN_BANDWIDTH_IN_AVERAGE)) {
+ bandwidth->in->average = param->value.ui;
+ inboundSpecified = true;
+ } else if (STREQ(param->field, VIR_DOMAIN_BANDWIDTH_IN_PEAK)) {
+ bandwidth->in->peak = param->value.ui;
+ } else if (STREQ(param->field, VIR_DOMAIN_BANDWIDTH_IN_BURST)) {
+ bandwidth->in->burst = param->value.ui;
+ } else if (STREQ(param->field, VIR_DOMAIN_BANDWIDTH_IN_FLOOR)) {
+ bandwidth->in->floor = param->value.ui;
+ inboundSpecified = true;
+ } else if (STREQ(param->field, VIR_DOMAIN_BANDWIDTH_OUT_AVERAGE)) {
+ bandwidth->out->average = param->value.ui;
+ outboundSpecified = true;
+ } else if (STREQ(param->field, VIR_DOMAIN_BANDWIDTH_OUT_PEAK)) {
+ bandwidth->out->peak = param->value.ui;
+ } else if (STREQ(param->field, VIR_DOMAIN_BANDWIDTH_OUT_BURST)) {
+ bandwidth->out->burst = param->value.ui;
+ }
+ }
+
+ /* average or floor are mandatory, peak and burst are optional */
+ if (!bandwidth->in->average && !bandwidth->in->floor)
+ VIR_FREE(bandwidth->in);
+ if (!bandwidth->out->average)
+ VIR_FREE(bandwidth->out);
+
+ if (!net->bandwidth) {
+ VIR_STEAL_PTR(net->bandwidth, bandwidth);
+ } else {
+ if (bandwidth->in) {
+ VIR_FREE(net->bandwidth->in);
+ VIR_STEAL_PTR(net->bandwidth->in, bandwidth->in);
+ } else if (inboundSpecified) {
+ VIR_FREE(net->bandwidth->in);
+ }
+ if (bandwidth->out) {
+ VIR_FREE(net->bandwidth->out);
+ VIR_STEAL_PTR(net->bandwidth->out, bandwidth->out);
+ } else if (outboundSpecified) {
+ VIR_FREE(net->bandwidth->out);
+ }
+ }
+
+ ret = 0;
+ cleanup:
+ virNetDevBandwidthFree(bandwidth);
+ virDomainObjEndAPI(&vm);
+ return ret;
+}
+
+
static int
testDomainGetInterfaceParameters(virDomainPtr dom,
const char *device,
@@ -7813,6 +7918,7 @@ static virHypervisorDriver testHypervisorDriver = {
.domainSetMemoryParameters = testDomainSetMemoryParameters, /* 5.6.0 */
.domainGetMemoryParameters = testDomainGetMemoryParameters, /* 5.6.0 */
.domainGetNumaParameters = testDomainGetNumaParameters, /* 5.6.0 */
+ .domainSetInterfaceParameters = testDomainSetInterfaceParameters, /* 5.6.0 */
.domainGetInterfaceParameters = testDomainGetInterfaceParameters, /* 5.6.0 */
.connectListDefinedDomains = testConnectListDefinedDomains, /* 0.1.11 */
.connectNumOfDefinedDomains = testConnectNumOfDefinedDomains, /* 0.1.11 */
--
2.22.0
5 years, 5 months
[libvirt] [PATCH] test_driver: implement virDomainInjectNMI
by Ilias Stamatis
Signed-off-by: Ilias Stamatis <stamatis.iliass(a)gmail.com>
---
src/test/test_driver.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 2e33a9dd55..90e1ede7c4 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -6716,6 +6716,29 @@ testDomainScreenshot(virDomainPtr dom ATTRIBUTE_UNUSED,
}
+static int
+testDomainInjectNMI(virDomainPtr domain,
+ unsigned int flags)
+{
+ virDomainObjPtr vm = NULL;
+ int ret = -1;
+
+ virCheckFlags(0, -1);
+
+ if (!(vm = testDomObjFromDomain(domain)))
+ return -1;
+
+ if (virDomainObjCheckActive(vm) < 0)
+ goto cleanup;
+
+ /* do nothing */
+ ret = 0;
+ cleanup:
+ virDomainObjEndAPI(&vm);
+ return ret;
+}
+
+
static int
testDomainSendKey(virDomainPtr domain,
unsigned int codeset,
@@ -7792,6 +7815,7 @@ static virHypervisorDriver testHypervisorDriver = {
.nodeGetCPUMap = testNodeGetCPUMap, /* 1.0.0 */
.domainRename = testDomainRename, /* 4.1.0 */
.domainScreenshot = testDomainScreenshot, /* 1.0.5 */
+ .domainInjectNMI = testDomainInjectNMI, /* 5.6.0 */
.domainSendKey = testDomainSendKey, /* 5.5.0 */
.domainGetMetadata = testDomainGetMetadata, /* 1.1.3 */
.domainSetMetadata = testDomainSetMetadata, /* 1.1.3 */
--
2.22.0
5 years, 5 months
Re: [libvirt] Problem with version 5.5.x
by Raghav Gururajan
> Unfortunately no, this will require one more fix. I managed to
> reproduce it on my gentoo testing machine.
Glad that you were able to reproduce.
> No need for the debug logs, I've tracked down the issue and working on
> a fix, thanks for reporting it.
That's great to hear. Thank you for working on this right away. :)
Pavel, could you let me know when you have patched it upstream?. So that I can notify the libvirt package maintainer of my distro to upgrade the package in the repository. Thanks!
Regards,
RG.
5 years, 5 months
[libvirt] Problem with version 5.5.x
by Raghav Gururajan
Hello Folks!
The distro I use (Guix System) has updated it's libvirt version from
5.4.x to 5.5.x, few days ago.
After the update, there is this following error:
"libvirt.libvirtError: Unable to read from
'/sys/fs/cgroup/unified/machine/cgroup.controllers': No such file or
directory".
It appears that libvirt is searching
"/sys/fs/cgroup/unified/machine/cgroup.controllers" path, instead of
"/sys/fs/cgroup/unified/cgroup.controllers" path; as the directory
"machine" does not actually exist.
The libvirt was working just fine before the update. So it seems like a
critical bug with version 5.5.x that needs to be patched ASAP.
Thank you!
Regards,
RG.
5 years, 5 months
[libvirt] [PATCH] implement virDomainSetInterfaceParameters
by Ilias Stamatis
Signed-off-by: Ilias Stamatis <stamatis.iliass(a)gmail.com>
---
src/test/test_driver.c | 97 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 97 insertions(+)
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 7dd448bb20..fd57c8c572 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -2945,6 +2945,102 @@ testDomainGetNumaParameters(virDomainPtr dom,
}
+static int
+testDomainSetInterfaceParameters(virDomainPtr dom,
+ const char *device,
+ virTypedParameterPtr params,
+ int nparams,
+ unsigned int flags)
+{
+ virDomainObjPtr vm = NULL;
+ virDomainDefPtr def;
+ virDomainNetDefPtr net = NULL;
+ virNetDevBandwidthPtr bandwidth = NULL;
+ size_t i;
+ int ret = -1;
+
+ virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
+ VIR_DOMAIN_AFFECT_CONFIG, -1);
+
+ if (virTypedParamsValidate(params, nparams,
+ VIR_DOMAIN_BANDWIDTH_IN_AVERAGE,
+ VIR_TYPED_PARAM_UINT,
+ VIR_DOMAIN_BANDWIDTH_IN_PEAK,
+ VIR_TYPED_PARAM_UINT,
+ VIR_DOMAIN_BANDWIDTH_IN_BURST,
+ VIR_TYPED_PARAM_UINT,
+ VIR_DOMAIN_BANDWIDTH_IN_FLOOR,
+ VIR_TYPED_PARAM_UINT,
+ VIR_DOMAIN_BANDWIDTH_OUT_AVERAGE,
+ VIR_TYPED_PARAM_UINT,
+ VIR_DOMAIN_BANDWIDTH_OUT_PEAK,
+ VIR_TYPED_PARAM_UINT,
+ VIR_DOMAIN_BANDWIDTH_OUT_BURST,
+ VIR_TYPED_PARAM_UINT,
+ NULL) < 0)
+ return -1;
+
+ if (!(vm = testDomObjFromDomain(dom)))
+ return -1;
+
+ if (!(def = virDomainObjGetOneDef(vm, flags)))
+ goto cleanup;
+
+ if (!(net = virDomainNetFind(def, device)))
+ goto cleanup;
+
+ if ((VIR_ALLOC(bandwidth) < 0) ||
+ (VIR_ALLOC(bandwidth->in) < 0) ||
+ (VIR_ALLOC(bandwidth->out) < 0))
+ goto cleanup;
+
+ for (i = 0; i < nparams; i++) {
+ virTypedParameterPtr param = ¶ms[i];
+
+ if (STREQ(param->field, VIR_DOMAIN_BANDWIDTH_IN_AVERAGE)) {
+ bandwidth->in->average = param->value.ui;
+ } else if (STREQ(param->field, VIR_DOMAIN_BANDWIDTH_IN_PEAK)) {
+ bandwidth->in->peak = param->value.ui;
+ } else if (STREQ(param->field, VIR_DOMAIN_BANDWIDTH_IN_BURST)) {
+ bandwidth->in->burst = param->value.ui;
+ } else if (STREQ(param->field, VIR_DOMAIN_BANDWIDTH_IN_FLOOR)) {
+ bandwidth->in->floor = param->value.ui;
+ } else if (STREQ(param->field, VIR_DOMAIN_BANDWIDTH_OUT_AVERAGE)) {
+ bandwidth->out->average = param->value.ui;
+ } else if (STREQ(param->field, VIR_DOMAIN_BANDWIDTH_OUT_PEAK)) {
+ bandwidth->out->peak = param->value.ui;
+ } else if (STREQ(param->field, VIR_DOMAIN_BANDWIDTH_OUT_BURST)) {
+ bandwidth->out->burst = param->value.ui;
+ }
+ }
+
+ /* average or floor are mandatory, peak and burst are optional */
+ if (!bandwidth->in->average && !bandwidth->in->floor)
+ VIR_FREE(bandwidth->in);
+ if (!bandwidth->out->average)
+ VIR_FREE(bandwidth->out);
+
+ if (!net->bandwidth) {
+ VIR_STEAL_PTR(net->bandwidth, bandwidth);
+ } else {
+ if (bandwidth->in) {
+ VIR_FREE(net->bandwidth->in);
+ VIR_STEAL_PTR(net->bandwidth->in, bandwidth->in);
+ }
+ if (bandwidth->out) {
+ VIR_FREE(net->bandwidth->out);
+ VIR_STEAL_PTR(net->bandwidth->out, bandwidth->out);
+ }
+ }
+
+ ret = 0;
+ cleanup:
+ virNetDevBandwidthFree(bandwidth);
+ virDomainObjEndAPI(&vm);
+ return ret;
+}
+
+
static int
testDomainGetInterfaceParameters(virDomainPtr dom,
const char *device,
@@ -7617,6 +7713,7 @@ static virHypervisorDriver testHypervisorDriver = {
.domainGetXMLDesc = testDomainGetXMLDesc, /* 0.1.4 */
.domainGetMemoryParameters = testDomainGetMemoryParameters, /* 5.6.0 */
.domainGetNumaParameters = testDomainGetNumaParameters, /* 5.6.0 */
+ .domainSetInterfaceParameters = testDomainSetInterfaceParameters, /* 5.6.0 */
.domainGetInterfaceParameters = testDomainGetInterfaceParameters, /* 5.6.0 */
.connectListDefinedDomains = testConnectListDefinedDomains, /* 0.1.11 */
.connectNumOfDefinedDomains = testConnectNumOfDefinedDomains, /* 0.1.11 */
--
2.22.0
5 years, 5 months
[libvirt] [PATCH] test_driver: implement virDomainSetMemoryStatsPeriod
by Ilias Stamatis
Signed-off-by: Ilias Stamatis <stamatis.iliass(a)gmail.com>
---
src/test/test_driver.c | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index c10344f6cd..b6394fad2b 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -2469,6 +2469,40 @@ static int testDomainSetMaxMemory(virDomainPtr domain,
return 0;
}
+
+static int testDomainSetMemoryStatsPeriod(virDomainPtr dom,
+ int period,
+ unsigned int flags)
+{
+ virDomainObjPtr vm;
+ virDomainDefPtr def;
+ int ret = -1;
+
+ virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
+ VIR_DOMAIN_AFFECT_CONFIG, -1);
+
+ if (!(vm = testDomObjFromDomain(dom)))
+ goto cleanup;
+
+ if (!(def = virDomainObjGetOneDef(vm, flags)))
+ goto cleanup;
+
+ if (!virDomainDefHasMemballoon(def)) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("No memory balloon device configured, "
+ "can not set the collection period"));
+ goto cleanup;
+ }
+
+ def->memballoon->period = period;
+
+ ret = 0;
+ cleanup:
+ virDomainObjEndAPI(&vm);
+ return ret;
+}
+
+
static int testDomainSetMemoryFlags(virDomainPtr domain,
unsigned long memory,
unsigned int flags)
@@ -7619,6 +7653,7 @@ static virHypervisorDriver testHypervisorDriver = {
.domainGetMaxMemory = testDomainGetMaxMemory, /* 0.1.4 */
.domainSetMaxMemory = testDomainSetMaxMemory, /* 0.1.1 */
.domainSetMemory = testDomainSetMemory, /* 0.1.4 */
+ .domainSetMemoryStatsPeriod = testDomainSetMemoryStatsPeriod, /* 5.6.0 */
.domainSetMemoryFlags = testDomainSetMemoryFlags, /* 5.6.0 */
.domainGetHostname = testDomainGetHostname, /* 5.5.0 */
.domainGetInfo = testDomainGetInfo, /* 0.1.1 */
--
2.22.0
5 years, 5 months
[libvirt] [PATCH Rust 1/4] connect: cleanup around Connect::open_auth()'s method
by Sahid Orentino Ferdjaoui
In this refactor we avoid to enclose all the code with unsafe tags and
just use it when necessary. Also we add annotations to explain why
it's safe to use.
The integrations tests related are also been reviewed to avoid using
panic.
Signed-off-by: Sahid Orentino Ferdjaoui <sahid.ferdjaoui(a)canonical.com>
---
src/connect.rs | 91 ++++++++++++++++++++++-----------------
tests/integration_qemu.rs | 16 +++----
2 files changed, 56 insertions(+), 51 deletions(-)
diff --git a/src/connect.rs b/src/connect.rs
index 0fa8551..108224d 100644
--- a/src/connect.rs
+++ b/src/connect.rs
@@ -240,6 +240,41 @@ extern "C" {
-> *mut libc::c_char;
}
+extern "C" fn connectCallback(ccreds: sys::virConnectCredentialPtr,
+ ncred: libc::c_uint,
+ cbdata: *mut libc::c_void)
+ -> libc::c_int {
+ let callback: ConnectAuthCallback = unsafe {
+ // Safe because connectCallback is private and only used by
+ // Connect::open_auth(). In open_auth() we transmute the
+ // callback allocate in *void.
+ mem::transmute(cbdata)
+ };
+ let mut rcreds: Vec<ConnectCredential> = Vec::new();
+ for i in 0..ncred as isize {
+ unsafe {
+ // Safe because ccreds is allocated.
+ let c = ConnectCredential::from_ptr(ccreds.offset(i));
+ rcreds.push(c);
+ }
+ }
+ callback(&mut rcreds);
+ for i in 0..ncred as isize {
+ if rcreds[i as usize].result.is_some() {
+ if let Some(ref result) = rcreds[i as usize].result {
+ unsafe {
+ // Safe because ccreds is allocated and the result
+ // is comming from Rust calls.
+ (*ccreds.offset(i)).resultlen = result.len() as libc::c_uint;
+ (*ccreds.offset(i)).result = string_to_mut_c_chars!(result.clone());
+ }
+ }
+ }
+ }
+ 0
+}
+
+
pub type ConnectFlags = self::libc::c_uint;
pub const VIR_CONNECT_RO: ConnectFlags = 1 << 0;
pub const VIR_CONNECT_NO_ALIASES: ConnectFlags = 1 << 1;
@@ -412,39 +447,6 @@ impl ConnectAuth {
callback: callback,
}
}
-
- fn to_cstruct(&mut self) -> sys::virConnectAuth {
- unsafe extern "C" fn wrapper(ccreds: sys::virConnectCredentialPtr,
- ncred: libc::c_uint,
- cbdata: *mut libc::c_void)
- -> libc::c_int {
- let callback: ConnectAuthCallback = mem::transmute(cbdata);
- let mut rcreds: Vec<ConnectCredential> = Vec::new();
- for i in 0..ncred as isize {
- let c = ConnectCredential::from_ptr(ccreds.offset(i));
- rcreds.push(c);
- }
- callback(&mut rcreds);
- for i in 0..ncred as isize {
- if rcreds[i as usize].result.is_some() {
- if let Some(ref result) = rcreds[i as usize].result {
- (*ccreds.offset(i)).resultlen = result.len() as libc::c_uint;
- (*ccreds.offset(i)).result = string_to_mut_c_chars!(result.clone());
- }
- }
- }
- 0
- }
-
- unsafe {
- sys::virConnectAuth {
- credtype: &mut self.creds[0],
- ncredtype: self.creds.len() as u32,
- cb: wrapper,
- cbdata: mem::transmute(self.callback),
- }
- }
- }
}
/// Provides APIs for the management of hosts.
@@ -554,14 +556,23 @@ impl Connect {
auth: &mut ConnectAuth,
flags: ConnectFlags)
-> Result<Connect, Error> {
- unsafe {
- let mut cauth = auth.to_cstruct();
- let c = virConnectOpenAuth(string_to_c_chars!(uri), &mut cauth, flags as libc::c_uint);
- if c.is_null() {
- return Err(Error::new());
- }
- return Ok(Connect::new(c));
+ let mut cauth = unsafe {
+ // Safe because Rust forces to allocate all attributes of
+ // the struct ConnectAuth.
+ sys::virConnectAuth {
+ credtype: &mut auth.creds[0],
+ ncredtype: auth.creds.len() as libc::c_uint,
+ cb: connectCallback,
+ cbdata: mem::transmute(auth.callback),
+ }
+ };
+ let c = unsafe {
+ virConnectOpenAuth(string_to_c_chars!(uri), &mut cauth, flags as libc::c_uint)
+ };
+ if c.is_null() {
+ return Err(Error::new());
}
+ return Ok(Connect::new(c));
}
diff --git a/tests/integration_qemu.rs b/tests/integration_qemu.rs
index 49e07c4..79aa2bd 100644
--- a/tests/integration_qemu.rs
+++ b/tests/integration_qemu.rs
@@ -108,14 +108,9 @@ fn test_connection_with_auth() {
let mut auth = ConnectAuth::new(vec![::virt::connect::VIR_CRED_AUTHNAME,
::virt::connect::VIR_CRED_PASSPHRASE],
callback);
- match Connect::open_auth("test+tcp://127.0.0.1/default", &mut auth, 0) {
- Ok(c) => common::close(c),
- Err(e) => {
- panic!("open_auth did not work: code {}, message: {}",
- e.code,
- e.message)
- }
- }
+ let c = Connect::open_auth("test+tcp://127.0.0.1/default", &mut auth, 0);
+ assert_eq!(true, c.is_ok());
+ common::close(c.unwrap());
}
@@ -141,9 +136,8 @@ fn test_connection_with_auth_wrong() {
let mut auth = ConnectAuth::new(vec![::virt::connect::VIR_CRED_AUTHNAME,
::virt::connect::VIR_CRED_PASSPHRASE],
callback);
- if Connect::open_auth("test+tcp://127.0.0.1/default", &mut auth, 0).is_ok() {
- panic!("open_auth did not work: code {}, message:");
- }
+ let c = Connect::open_auth("test+tcp://127.0.0.1/default", &mut auth, 0);
+ assert_eq!(false, c.is_ok());
}
#[test]
--
2.17.1
5 years, 5 months
[libvirt] [PATCH 0/2] test_driver: implement virDomainSetNumaParameters
by Ilias Stamatis
I send these 2 patches together, since testConnectSupportsFeature needs
to be implemented in order for testDomainSetNumaParameters to support
string parameters.
Ilias Stamatis (2):
test_driver: implement virConnectSupportsFeature
test_driver: implement virDomainSetNumaParameters
src/test/test_driver.c | 111 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 111 insertions(+)
mode change 100644 => 100755 src/test/test_driver.c
--
2.22.0
5 years, 5 months