---
tests/objecteventtest.c | 167 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 167 insertions(+)
diff --git a/tests/objecteventtest.c b/tests/objecteventtest.c
index 33e2551..ae29792 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";
+
typedef struct {
int startEvents;
int stopEvents;
@@ -60,6 +72,7 @@ lifecycleEventCounter_reset(lifecycleEventCounter *counter)
typedef struct {
virConnectPtr conn;
+ virNetworkPtr net;
} objecteventTest;
@@ -92,6 +105,26 @@ domainLifecycleCb(virConnectPtr conn ATTRIBUTE_UNUSED,
return 0;
}
+static void
+networkLifecycleCb(virConnectPtr conn ATTRIBUTE_UNUSED,
+ virNetworkPtr net ATTRIBUTE_UNUSED,
+ int event,
+ int detail ATTRIBUTE_UNUSED,
+ void* opaque)
+{
+ 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)
{
@@ -223,6 +256,125 @@ cleanup:
}
static int
+testNetworkCreateXML(const void *data)
+{
+ const objecteventTest *test = data;
+ lifecycleEventCounter counter;
+ virNetworkPtr net;
+ int id;
+ int ret = 0;
+
+ lifecycleEventCounter_reset(&counter);
+
+ id = virConnectNetworkEventRegisterAny(test->conn, NULL,
+ VIR_NETWORK_EVENT_ID_LIFECYCLE,
+ VIR_NETWORK_EVENT_CALLBACK(&networkLifecycleCb),
+ &counter, NULL);
+ net = virNetworkCreateXML(test->conn, networkDef);
+
+ if (virEventRunDefaultImpl() < 0) {
+ ret = -1;
+ goto cleanup;
+ }
+
+ if (counter.startEvents != 1 || counter.unexpectedEvents > 0) {
+ ret = -1;
+ goto cleanup;
+ }
+
+cleanup:
+ virConnectNetworkEventDeregisterAny(test->conn, id);
+ virNetworkDestroy(net);
+
+ virNetworkFree(net);
+
+ return ret;
+}
+
+static int
+testNetworkDefine(const void *data)
+{
+ const objecteventTest *test = data;
+ lifecycleEventCounter counter;
+ virNetworkPtr net;
+ int id;
+ int ret = 0;
+
+ lifecycleEventCounter_reset(&counter);
+
+ id = virConnectNetworkEventRegisterAny(test->conn, NULL,
+ VIR_NETWORK_EVENT_ID_LIFECYCLE,
+ 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 || counter.unexpectedEvents > 0) {
+ ret = -1;
+ goto cleanup;
+ }
+
+ /* Make sure the undefine event is triggered */
+ virNetworkUndefine(net);
+
+ if (virEventRunDefaultImpl() < 0) {
+ ret = -1;
+ goto cleanup;
+ }
+
+ if (counter.undefineEvents != 1 || counter.unexpectedEvents > 0) {
+ ret = -1;
+ goto cleanup;
+ }
+
+
+cleanup:
+ virConnectNetworkEventDeregisterAny(test->conn, id);
+ virNetworkFree(net);
+
+ return ret;
+}
+
+static int
+testNetworkStartStopEvent(const void *data)
+{
+ const objecteventTest *test = data;
+ lifecycleEventCounter counter;
+ int id;
+ int ret = 0;
+
+ lifecycleEventCounter_reset(&counter);
+
+ id = virConnectNetworkEventRegisterAny(test->conn, test->net,
+ VIR_NETWORK_EVENT_ID_LIFECYCLE,
+ 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 ||
+ counter.unexpectedEvents > 0) {
+ ret = -1;
+ goto cleanup;
+ }
+cleanup:
+ virConnectNetworkEventDeregisterAny(test->conn, id);
+
+ return ret;
+}
+
+static int
mymain(void)
{
objecteventTest test;
@@ -243,6 +395,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.4