]> xenbits.xensource.com Git - libvirt.git/commitdiff
* python/tests/create.py: trying to make test more generic, but it's
authorDaniel Veillard <veillard@redhat.com>
Fri, 17 Feb 2006 13:18:57 +0000 (13:18 +0000)
committerDaniel Veillard <veillard@redhat.com>
Fri, 17 Feb 2006 13:18:57 +0000 (13:18 +0000)
  difficult since it requires a system image
* src/libvirt.c src/xend_internal.c: fixed the shutdown API which
  was broken due to a bad reason at the xend level.
Daniel

ChangeLog
python/tests/create.py
src/libvirt.c
src/xend_internal.c

index 43722f88e132fb0ec51a95b45d459fc014a070fe..bc895dd9944a4321425646589d2b51be6b539e8e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Fri Feb 17 08:17:36 EST 2006 Daniel Veillard <veillard@redhat.com>
+
+       * python/tests/create.py: trying to make test more generic, but it's
+         difficult since it requires a system image
+       * src/libvirt.c src/xend_internal.c: fixed the shutdown API which
+         was broken due to a bad reason at the xend level.
+
 Thu Feb 16 17:47:00 EST 2006 Daniel Veillard <veillard@redhat.com>
 
        * configure.in src/Makefile.am: adding dependency to libxml2
index c31eaa4831e5e538803300643ed1084f79746262..6ef415accbe24cf50a8bb4eb31bbd85dfbee96cc 100755 (executable)
@@ -1,6 +1,49 @@
 #!/usr/bin/python -u
 import libvirt
 import sys
+import os
+import time
+
+#
+# Try to provide default OS images paths here, of course non standard
+#
+osroots = [
+  "/u/fc4.img",
+]
+
+okay = 1
+
+osroot = None
+for root in osroots:
+    if os.access(root, os.R_OK):
+        osroot = root
+       break
+
+if osroot == None:
+    print "Could not find a guest OS root, edit to add the path in osroots"
+    sys.exit(1)
+
+if not os.access("/proc/xen", os.R_OK):
+    print 'System is not running a Xen kernel'
+    sys.exit(1)
+
+kernel=open("/proc/version").read().split()
+kernelOv = kernel[2]
+kernelU = "/boot/vmlinuz-" + kernelOv.replace('hypervisor', 'guest')
+initrdU = "/boot/initrd-" + kernelOv.replace('hypervisor', 'guest') + ".img"
+
+if not os.access(kernelU, os.R_OK):
+    print "Did not found the guest kernel %s" % (kernelU)
+    sys.exit(1)
+
+kernelU = "<kernel>" + kernelU + "</kernel>"
+
+if not os.access(initrdU, os.R_OK):
+    print "Did not found the guest initrd %s" % (initrdU)
+    initrdU = ""
+else:
+    initrdU = "<initrd>" + initrdU + "</initrd>"
+
 
 conn = libvirt.openReadOnly(None)
 if conn == None:
@@ -11,15 +54,14 @@ xmldesc="""<domain type='xen'>
   <name>test</name>
   <os>
     <type>linux</type>
-    <kernel>/boot/vmlinuz-2.6.15-1.43_FC5guest</kernel>
-    <initrd>/boot/initrd-2.6.15-1.43_FC5guest.img</initrd>
+""" + kernelU + initrdU + """
     <cmdline> root=/dev/sda1 ro selinux=0 3</cmdline>
   </os>
   <memory>131072</memory>
   <vcpu>1</vcpu>
   <devices>
     <disk type='file'>
-      <source file='/u/fc4.img'/>
+      <source file='%s'/>
       <target dev='sda1'/>
     </disk>
     <interface type='bridge'>
@@ -29,18 +71,62 @@ xmldesc="""<domain type='xen'>
     </interface>
   </devices>
 </domain>
-"""
+""" % (osroot)
+
 dom = conn.createLinux(xmldesc, 0)
 if dom == None:
-    print 'Failed to create a domain'
+    print 'Failed to create a test domain'
     sys.exit(1)
 
 # print dom0
 
 print "Domain: id %d running %s" % (dom.ID(), dom.OSType())
-print dom.info()
+
+print "Suspending test domain for 5 seconds"
+if dom.suspend() != 0:
+    print 'Failed to suspend domain test'
+    dom.destroy()
+    del dom
+    del conn
+    sys.exit(1)
+
+infos = dom.info()
+time.sleep(5)
+infos2 = dom.info()
+if infos[4] != infos2[4]:
+    print 'Suspended domain test got CPU cycles'
+    okay = 0
+
+print "resuming test domain for 10 seconds"
+if dom.resume() != 0:
+    print 'Failed to resume domain test'
+    dom.destroy()
+    del dom
+    del conn
+    sys.exit(1)
+
+time.sleep(10)
+print "shutdown of test domain"
+
+if dom.shutdown() != 0:
+    print 'Failed to shutdown domain test'
+
+i = 0
+while i < 30:
+    time.sleep(1)
+    i = i + 1
+    t = dom.info()[4]
+    if t == 0:
+        break
+
+if t != 0:
+    print 'Shutdown failed destroying domain test'
+    okay = 0
+    dom.destroy()
+
 del dom
 del conn
-print "OK"
+if okay == 1:
+    print "OK"
 
 sys.exit(0)
index 51f233e16cd33f38417615e2cabed4c2bbd393ea..604882cfd7304e4b31f80ee66333268d549aba05 100644 (file)
@@ -967,12 +967,10 @@ virDomainShutdown(virDomainPtr domain) {
      * try first with the xend daemon
      */
     ret = xend_shutdown(domain->conn, domain->name);
-    /* disabled as this seems to not work ...
     if (ret == 0)
         return(0);
-     */
-    /*
 
+    /*
      * this is very hackish, the domU kernel probes for a special 
      * node in the xenstore and launch the shutdown command if found.
      */
index e113338f691458c942e95e3e2b8783f2c387c63f..36045fc49244a5c15b70172fb8d3993d9f605ab2 100644 (file)
@@ -1146,7 +1146,7 @@ xend_shutdown(virConnectPtr xend, const char *name)
     if ((xend == NULL) || (name == NULL))
         return(-1);
     return xend_op(xend, name,
-                   "op", "shutdown", "reason", "shutdown", NULL);
+                   "op", "shutdown", "reason", "halt", NULL);
 }
 
 /**
@@ -2037,7 +2037,7 @@ xend_get_node(virConnectPtr xend)
 int
 xend_node_shutdown(virConnectPtr xend)
 {
-    return xend_node_op(xend, "/xend/node/", "op", "shutdown", NULL);
+    return xend_node_op(xend, "/xend/node/", "op", "halt", NULL);
 }
 
 /**