[libvirt] [libvirt-java] [PATCH 46/65] test: add unit test for domain lifecycle events

Claudio Bley cbley at av-test.de
Thu Feb 13 15:22:54 UTC 2014


Signed-off-by: Claudio Bley <cbley at av-test.de>
---
 src/test/java/org/libvirt/TestJavaBindings.java |   69 +++++++++++++++++++++++
 1 file changed, 69 insertions(+)

diff --git a/src/test/java/org/libvirt/TestJavaBindings.java b/src/test/java/org/libvirt/TestJavaBindings.java
index 5cc77e7..a73148f 100644
--- a/src/test/java/org/libvirt/TestJavaBindings.java
+++ b/src/test/java/org/libvirt/TestJavaBindings.java
@@ -1,5 +1,10 @@
 package org.libvirt;
 
+import org.libvirt.event.*;
+
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.UUID;
 
 import junit.framework.TestCase;
@@ -12,6 +17,15 @@ public final class TestJavaBindings extends TestCase {
 
     private Connect conn;
 
+    static {
+        // do this once for each JVM instance, before connecting
+        try {
+            Library.initEventLoop();
+        } catch (LibvirtException e) {
+            // XXX warn
+        }
+    }
+
     protected void setUp() throws LibvirtException {
         conn = new Connect("test:///default", false);
     }
@@ -237,4 +251,59 @@ public final class TestJavaBindings extends TestCase {
         assertTrue("pool1 should not be active", pool1.isActive() == 0);        
         assertTrue("Domain2 should be active", defaultPool.isActive() == 1);         
     }
+
+    public void testDomainEvents() throws Exception {
+        final List<DomainEventType> events = new ArrayList<DomainEventType>();
+        final Thread t = new Thread() {
+                @Override
+                public void run() {
+                    try {
+                        Library.runEventLoop();
+                    } catch (LibvirtException e) {
+                        fail("LibvirtException was thrown: " + e);
+                    } catch (InterruptedException e) {
+                    }
+                }
+            };
+        t.setDaemon(true);
+        t.start();
+
+        LifecycleListener listener = new LifecycleListener() {
+            @Override
+            public int onLifecycleChange(Domain d, DomainEvent e)
+            {
+                events.add(e.getType());
+
+                return 0;
+            }
+        };
+        try {
+            conn.addLifecycleListener(listener);
+
+            Domain dom = conn.domainDefineXML("<domain type='test' id='2'>" + "  <name>deftest</name>"
+                + "  <uuid>004b96e1-2d78-c30f-5aa5-f03c87d21e70</uuid>" + "  <memory>8388608</memory>"
+                + "  <vcpu>2</vcpu>" + "  <os><type arch='i686'>hvm</type></os>" + "  <on_reboot>restart</on_reboot>"
+                + "  <on_poweroff>destroy</on_poweroff>" + "  <on_crash>restart</on_crash>" + "</domain>");
+
+            dom.create();
+            dom.suspend();
+            dom.resume();
+            dom.destroy();
+            dom.undefine();
+
+            // wait until (presumably) all events have been processed
+            Thread.sleep(300);
+
+            assertEquals(Arrays.asList(DomainEventType.DEFINED,
+                                       DomainEventType.STARTED,
+                                       DomainEventType.SUSPENDED,
+                                       DomainEventType.RESUMED,
+                                       DomainEventType.STOPPED,
+                                       DomainEventType.UNDEFINED),
+                         events);
+        } finally {
+            conn.removeLifecycleListener(listener);
+            Library.stopEventLoop();
+        }
+    }
 }
-- 
1.7.9.5




More information about the libvir-list mailing list