[libvirt] [PATCH 4/2] event: add test of old-style events
John Ferlan
jferlan at redhat.com
Mon Jan 6 14:27:02 UTC 2014
On 01/03/2014 05:15 PM, Eric Blake wrote:
> Ensure our testsuite has some coverage of old-style domain
> event registration.
>
> * tests/objecteventtest.c (testDomainCreateXMLOld): New test.
> (mymain): Run it.
> (testDomainCreateXML): Check return values.
>
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
>
> I verified that this test fails until you also apply patch
> 2/2 "event: make deregister return value match docs". Should
> I squash them together or keep it as separate commits?
>
> tests/objecteventtest.c | 67 ++++++++++++++++++++++++++++++++++++++++++-------
> 1 file changed, 58 insertions(+), 9 deletions(-)
>
I've only been able to apply up thru patch 5/5a... patch 2 didn't apply
as well:
Applying: event: make deregister return value match docs
error: patch failed: src/lxc/lxc_driver.c:1
error: src/lxc/lxc_driver.c: patch does not apply
error: patch failed: src/xen/xen_driver.c:1
error: src/xen/xen_driver.c: patch does not apply
Patch failed at 0001 event: make deregister return value match docs
Skipping 2, I was able to apply 3, 4, 5, & 5a before 6 failed as well.
In any case, this patch failed to build due to an uninitialized 'dom' in
the new function and the changed one (since there's now a goto before
dom gets initialized).
After inserting a couple of dom = NULL; - I had a core, I now assume the
core had to do with patch 2.
I think perhaps it'd be better to rebase and repost 2->12.
John
> diff --git a/tests/objecteventtest.c b/tests/objecteventtest.c
> index ae29792..f7b60cd 100644
> --- a/tests/objecteventtest.c
> +++ b/tests/objecteventtest.c
> @@ -1,4 +1,5 @@
> /*
> + * Copyright (C) 2014 Red Hat, Inc.
> * Copyright (C) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
> *
> * This library is free software; you can redistribute it and/or
> @@ -126,6 +127,46 @@ networkLifecycleCb(virConnectPtr conn ATTRIBUTE_UNUSED,
>
>
> static int
> +testDomainCreateXMLOld(const void *data)
> +{
> + const objecteventTest *test = data;
> + lifecycleEventCounter counter;
> + virDomainPtr dom;
dom = NULL
> + int ret = -1;
> + bool registered = false;
> +
> + lifecycleEventCounter_reset(&counter);
> +
> + if (virConnectDomainEventRegister(test->conn,
> + domainLifecycleCb,
> + &counter, NULL) != 0)
> + goto cleanup;
> + registered = true;
> + dom = virDomainCreateXML(test->conn, domainDef, 0);
> +
> + if (dom == NULL || virEventRunDefaultImpl() < 0)
> + goto cleanup;
> +
> + if (counter.startEvents != 1 || counter.unexpectedEvents > 0)
> + goto cleanup;
> +
> + if (virConnectDomainEventDeregister(test->conn, domainLifecycleCb) != 0)
> + goto cleanup;
> + registered = false;
> + ret = 0;
> +
> +cleanup:
> + if (registered)
> + virConnectDomainEventDeregister(test->conn, domainLifecycleCb);
> + if (dom != NULL) {
> + virDomainDestroy(dom);
> + virDomainFree(dom);
> + }
> +
> + return ret;
> +}
> +
> +static int
> testDomainCreateXML(const void *data)
> {
> const objecteventTest *test = data;
> @@ -133,27 +174,31 @@ testDomainCreateXML(const void *data)
> int eventId = VIR_DOMAIN_EVENT_ID_LIFECYCLE;
> virDomainPtr dom;
dom = NULL
> int id;
> - int ret = 0;
> + int ret = -1;
>
> lifecycleEventCounter_reset(&counter);
>
> id = virConnectDomainEventRegisterAny(test->conn, NULL, eventId,
> VIR_DOMAIN_EVENT_CALLBACK(&domainLifecycleCb),
> &counter, NULL);
> + if (id < 0)
> + goto cleanup;
> dom = virDomainCreateXML(test->conn, domainDef, 0);
>
> - if (dom == NULL || virEventRunDefaultImpl() < 0) {
> - ret = -1;
> + if (dom == NULL || virEventRunDefaultImpl() < 0)
> goto cleanup;
> - }
>
> - if (counter.startEvents != 1 || counter.unexpectedEvents > 0) {
> - ret = -1;
> + if (counter.startEvents != 1 || counter.unexpectedEvents > 0)
> goto cleanup;
> - }
> +
> + if (virConnectDomainEventDeregisterAny(test->conn, id) != 0)
> + goto cleanup;
> + id = -1;
> + ret = 0;
>
> cleanup:
> - virConnectDomainEventDeregisterAny(test->conn, id);
> + if (id >= 0)
> + virConnectDomainEventDeregisterAny(test->conn, id);
> if (dom != NULL) {
> virDomainDestroy(dom);
> virDomainFree(dom);
> @@ -388,7 +433,11 @@ mymain(void)
> virtTestQuiesceLibvirtErrors(false);
>
> /* Domain event tests */
> - if (virtTestRun("Domain createXML start event ", testDomainCreateXML, &test) < 0)
> + if (virtTestRun("Domain createXML start event (old API)",
> + testDomainCreateXMLOld, &test) < 0)
> + ret = EXIT_FAILURE;
> + if (virtTestRun("Domain createXML start event (new API)",
> + testDomainCreateXML, &test) < 0)
> ret = EXIT_FAILURE;
> if (virtTestRun("Domain (un)define events", testDomainDefine, &test) < 0)
> ret = EXIT_FAILURE;
>
More information about the libvir-list
mailing list