[libvirt] [PATCH 31/34] Add network events unit tests

Cédric Bosdonnat cbosdonnat at suse.com
Fri Nov 29 15:19:07 UTC 2013


---
 tests/objecteventtest.c | 165 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 165 insertions(+)

diff --git a/tests/objecteventtest.c b/tests/objecteventtest.c
index 53ab642..3843821 100644
--- a/tests/objecteventtest.c
+++ b/tests/objecteventtest.c
@@ -40,6 +40,18 @@ static const char domainDef[] =
 "  </os>"
 "</domain>";
 
+static const char networkDef[] =
+"<network>\n"
+"  <name>test</name>\n"
+"  <bridge name=\"virbr0\"/>\n"
+"  <forward/>\n"
+"  <ip address=\"192.168.122.1\" netmask=\"255.255.255.0\">\n"
+"    <dhcp>\n"
+"      <range start=\"192.168.122.2\" end=\"192.168.122.254\"/>\n"
+"    </dhcp>\n"
+"  </ip>\n"
+"</network>\n";
+
 struct lifecycleEventCounter {
     int startEvents;
     int stopEvents;
@@ -57,6 +69,7 @@ static void lifecycleEventCounter_reset(struct lifecycleEventCounter* counter)
 
 struct objecteventTest {
     virConnectPtr conn;
+    virNetworkPtr net;
 };
 
 
@@ -88,6 +101,25 @@ static int domainLifecycleCb(virConnectPtr conn ATTRIBUTE_UNUSED,
     return 0;
 }
 
+static void
+networkLifecycleCb(virConnectPtr conn ATTRIBUTE_UNUSED,
+                   virNetworkPtr net ATTRIBUTE_UNUSED,
+                   int event,
+                   void* opaque)
+{
+    struct lifecycleEventCounter *counter = opaque;
+
+    if (event == VIR_NETWORK_EVENT_STARTED)
+        counter->startEvents++;
+    else if (event == VIR_NETWORK_EVENT_STOPPED)
+        counter->stopEvents++;
+    else if (event == VIR_NETWORK_EVENT_DEFINED)
+        counter->defineEvents++;
+    else if (event == VIR_NETWORK_EVENT_UNDEFINED)
+        counter->undefineEvents++;
+}
+
+
 static int
 testDomainCreateXML(const void *data)
 {
@@ -214,6 +246,124 @@ cleanup:
 }
 
 static int
+testNetworkCreateXML(const void *data)
+{
+    const struct objecteventTest *test = data;
+    struct lifecycleEventCounter counter;
+    int eventId = (VIR_EVENT_NAMESPACE_NETWORK << 8) + VIR_NETWORK_EVENT_ID_LIFECYCLE;
+    virNetworkPtr net;
+    int id;
+    int ret = 0;
+
+    lifecycleEventCounter_reset(&counter);
+
+    id = virConnectNetworkEventRegisterAny(test->conn, NULL, eventId,
+                           VIR_NETWORK_EVENT_CALLBACK(&networkLifecycleCb),
+                           &counter, NULL);
+    net = virNetworkCreateXML(test->conn, networkDef);
+
+    if (virEventRunDefaultImpl() < 0) {
+        ret = -1;
+        goto cleanup;
+    }
+
+    if (counter.startEvents != 1) {
+        ret = -1;
+        goto cleanup;
+    }
+
+cleanup:
+    virConnectNetworkEventDeregisterAny(test->conn, id);
+    virNetworkDestroy(net);
+
+    virNetworkFree(net);
+
+    return ret;
+}
+
+static int
+testNetworkDefine(const void *data)
+{
+    const struct objecteventTest *test = data;
+    struct lifecycleEventCounter counter;
+    int eventId = (VIR_EVENT_NAMESPACE_NETWORK << 8) + VIR_NETWORK_EVENT_ID_LIFECYCLE;
+    virNetworkPtr net;
+    int id;
+    int ret = 0;
+
+    lifecycleEventCounter_reset(&counter);
+
+    id = virConnectNetworkEventRegisterAny(test->conn, NULL, eventId,
+                           VIR_NETWORK_EVENT_CALLBACK(&networkLifecycleCb),
+                           &counter, NULL);
+
+    /* Make sure the define event is triggered */
+    net = virNetworkDefineXML(test->conn, networkDef);
+
+    if (virEventRunDefaultImpl() < 0) {
+        ret = -1;
+        goto cleanup;
+    }
+
+    if (counter.defineEvents != 1) {
+        ret = -1;
+        goto cleanup;
+    }
+
+    /* Make sure the undefine event is triggered */
+    virNetworkUndefine(net);
+
+    if (virEventRunDefaultImpl() < 0) {
+        ret = -1;
+        goto cleanup;
+    }
+
+    if (counter.undefineEvents != 1) {
+        ret = -1;
+        goto cleanup;
+    }
+
+
+cleanup:
+    virConnectNetworkEventDeregisterAny(test->conn, id);
+    virNetworkFree(net);
+
+    return ret;
+}
+
+static int
+testNetworkStartStopEvent(const void *data)
+{
+    const struct objecteventTest *test = data;
+    struct lifecycleEventCounter counter;
+    int eventId = (VIR_EVENT_NAMESPACE_NETWORK << 8) + VIR_NETWORK_EVENT_ID_LIFECYCLE;
+    int id;
+    int ret = 0;
+
+    lifecycleEventCounter_reset(&counter);
+
+    id = virConnectNetworkEventRegisterAny(test->conn, test->net, eventId,
+                           VIR_NETWORK_EVENT_CALLBACK(&networkLifecycleCb),
+                           &counter, NULL);
+    virNetworkCreate(test->net);
+    virNetworkDestroy(test->net);
+
+    if (virEventRunDefaultImpl() < 0) {
+        ret = -1;
+        goto cleanup;
+    }
+
+    if (counter.startEvents != 1 || counter.stopEvents != 1) {
+        ret = -1;
+        goto cleanup;
+    }
+cleanup:
+    virConnectNetworkEventDeregisterAny(test->conn, id);
+
+    return ret;
+}
+
+static int
 mymain(void)
 {
     struct objecteventTest test;
@@ -234,6 +384,21 @@ mymain(void)
     if (virtTestRun("Domain start stop events", testDomainStartStopEvent, &test) < 0)
         ret = EXIT_FAILURE;
 
+    /* Network event tests */
+    /* Tests requiring the test network not to be set up*/
+    if (virtTestRun("Network createXML start event ", testNetworkCreateXML, &test) < 0)
+        ret = EXIT_FAILURE;
+    if (virtTestRun("Network (un)define events", testNetworkDefine, &test) < 0)
+        ret = EXIT_FAILURE;
+
+    /* Define a test network */
+    test.net = virNetworkDefineXML(test.conn, networkDef);
+    if (virtTestRun("Network start stop events ", testNetworkStartStopEvent, &test) < 0)
+        ret = EXIT_FAILURE;
+
+    /* Cleanup */
+    virNetworkUndefine(test.net);
+    virNetworkFree(test.net);
     virConnectClose(test.conn);
 
     return ret;
-- 
1.8.4.2




More information about the libvir-list mailing list