]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Added support for input devices
authorDaniel P. Berrange <berrange@redhat.com>
Wed, 18 Jul 2007 21:08:22 +0000 (21:08 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Wed, 18 Jul 2007 21:08:22 +0000 (21:08 +0000)
46 files changed:
ChangeLog
src/qemu_conf.c
src/qemu_conf.h
src/xend_internal.c
src/xm_internal.c
src/xml.c
tests/sexpr2xmldata/sexpr2xml-curmem.xml
tests/sexpr2xmldata/sexpr2xml-fv-localtime.xml
tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.sexpr [new file with mode: 0644]
tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.xml [new file with mode: 0644]
tests/sexpr2xmldata/sexpr2xml-fv-usbtablet.sexpr [new file with mode: 0644]
tests/sexpr2xmldata/sexpr2xml-fv-usbtablet.xml [new file with mode: 0644]
tests/sexpr2xmldata/sexpr2xml-fv-utc.xml
tests/sexpr2xmldata/sexpr2xml-fv-v2.xml
tests/sexpr2xmldata/sexpr2xml-fv.xml
tests/sexpr2xmldata/sexpr2xml-no-source-cdrom.xml
tests/sexpr2xmldata/sexpr2xml-pv-vfb-new.xml
tests/sexpr2xmldata/sexpr2xml-pv-vfb-orig.xml
tests/sexpr2xmltest.c
tests/testutils.c
tests/testutils.h
tests/virshtest.c
tests/xencapstest.c
tests/xmconfigdata/test-fullvirt-localtime.xml
tests/xmconfigdata/test-fullvirt-new-cdrom.xml
tests/xmconfigdata/test-fullvirt-old-cdrom.xml
tests/xmconfigdata/test-fullvirt-usbmouse.cfg [new file with mode: 0755]
tests/xmconfigdata/test-fullvirt-usbmouse.xml [new file with mode: 0644]
tests/xmconfigdata/test-fullvirt-usbtablet-no-bus.xml [new file with mode: 0644]
tests/xmconfigdata/test-fullvirt-usbtablet.cfg [new file with mode: 0755]
tests/xmconfigdata/test-fullvirt-usbtablet.xml [new file with mode: 0644]
tests/xmconfigdata/test-fullvirt-utc.xml
tests/xmconfigdata/test-paravirt-new-pvfb.xml
tests/xmconfigdata/test-paravirt-old-pvfb.xml
tests/xmconfigtest.c
tests/xml2sexprdata/xml2sexpr-fv-localtime.sexpr
tests/xml2sexprdata/xml2sexpr-fv-usbmouse.sexpr [new file with mode: 0644]
tests/xml2sexprdata/xml2sexpr-fv-usbmouse.xml [new file with mode: 0644]
tests/xml2sexprdata/xml2sexpr-fv-usbtablet.sexpr [new file with mode: 0644]
tests/xml2sexprdata/xml2sexpr-fv-usbtablet.xml [new file with mode: 0644]
tests/xml2sexprdata/xml2sexpr-fv-utc.sexpr
tests/xml2sexprdata/xml2sexpr-fv-v2.sexpr
tests/xml2sexprdata/xml2sexpr-fv-vncunused.sexpr
tests/xml2sexprdata/xml2sexpr-fv.sexpr
tests/xml2sexprdata/xml2sexpr-no-source-cdrom.sexpr
tests/xml2sexprtest.c

index 0586adb64ae15d3431aae8e8049b2fd12c8a3390..c8d3a17876e7ee84b8a6940f3cee6f8d8fb4f6c6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+Wed Jul 18 16:42:08 EST 2007 Daniel P. Berrange <berrange@redhat.com>
+
+       * src/qemu_conf.c, src/qemu_conf.h, src/xm_internal.c,
+       src/xend_internal.c, src/xml.c: Added support for input devices
+       using <input type='mouse|pointer' bus='ps2|xen|usb'/> element.
+       * tests/sexpr2xmltest.c, tests/xmconfigtest.c,
+       tests/xml2sexprtest.c: Add new tests for input devices
+       * tests/test_utils.c, src/test_utils.h: the virTestRun callback
+       uses a const void * instead of void *
+       * tests/virshtest.c, tests/xencaptest.c: Switch to const void *
+       * tests/sexpr2xmldata/*, tests/xmconfigdata/*, tests/xml2sexprdata/*
+       Updated data files to take account of new input device syntax
+
 Wed Jul 18 12:10:08 CEST 2007 Daniel Veillard <veillard@redhat.com>
 
        * src/test.c include/libvirt/libvirt.h include/libvirt/libvirt.h.in:
index 666c3aeaacdaaf09e332c25cc874d6bcc64357d3..fcedc12c0e7441e39b4c0727966c3fc46eada480 100644 (file)
@@ -806,6 +806,74 @@ static struct qemud_vm_net_def *qemudParseInterfaceXML(virConnectPtr conn,
 }
 
 
+/* Parse the XML definition for a network interface */
+static struct qemud_vm_input_def *qemudParseInputXML(virConnectPtr conn,
+                                                   struct qemud_driver *driver ATTRIBUTE_UNUSED,
+                                                   xmlNodePtr node) {
+    struct qemud_vm_input_def *input = calloc(1, sizeof(struct qemud_vm_input_def));
+    xmlChar *type = NULL;
+    xmlChar *bus = NULL;
+
+    if (!input) {
+        qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY, "input");
+        return NULL;
+    }
+
+    type = xmlGetProp(node, BAD_CAST "type");
+    bus = xmlGetProp(node, BAD_CAST "bus");
+
+    if (!type) {
+        qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, "no type provide for input device");
+        goto error;
+    }
+
+    if (!strcmp((const char *)type, "mouse")) {
+        input->type = QEMU_INPUT_TYPE_MOUSE;
+    } else if (!strcmp((const char *)type, "tablet")) {
+        input->type = QEMU_INPUT_TYPE_TABLET;
+    } else {
+        qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, "unsupported input device type %s", (const char*)type);
+        goto error;
+    }
+
+    if (bus) {
+        if (!strcmp((const char*)bus, "ps2")) { /* Only allow mouse */
+            if (input->type == QEMU_INPUT_TYPE_TABLET) {
+                qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, "ps2 bus does not support %s input device", (const char*)type);
+                goto error;
+            }
+            input->bus = QEMU_INPUT_BUS_PS2;
+        } else if (!strcmp((const char *)bus, "usb")) { /* Allow mouse & keyboard */
+            input->bus = QEMU_INPUT_BUS_USB;
+        } else {
+            qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, "unsupported input bus %s", (const char*)bus);
+            goto error;
+        }
+    } else {
+        if (input->type == QEMU_INPUT_TYPE_MOUSE)
+            input->bus = QEMU_INPUT_BUS_PS2;
+        else
+            input->bus = QEMU_INPUT_BUS_USB;
+    }
+
+    if (type)
+        xmlFree(type);
+    if (bus)
+        xmlFree(bus);
+
+    return input;
+
+ error:
+    if (type)
+        xmlFree(type);
+    if (bus)
+        xmlFree(bus);
+
+    free(input);
+    return NULL;
+}
+
+
 /*
  * Parses a libvirt XML definition of a guest, and populates the
  * the qemud_vm struct with matching data about the guests config
@@ -1193,6 +1261,61 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
         }
     }
     xmlXPathFreeObject(obj);
+
+    /* analysis of the input devices */
+    obj = xmlXPathEval(BAD_CAST "/domain/devices/input", ctxt);
+    if ((obj != NULL) && (obj->type == XPATH_NODESET) &&
+        (obj->nodesetval != NULL) && (obj->nodesetval->nodeNr >= 0)) {
+        struct qemud_vm_input_def *prev = NULL;
+        for (i = 0; i < obj->nodesetval->nodeNr; i++) {
+            struct qemud_vm_input_def *input;
+            if (!(input = qemudParseInputXML(conn, driver, obj->nodesetval->nodeTab[i]))) {
+                goto error;
+            }
+            /* Mouse + PS/2 is implicit with graphics, so don't store it */
+            if (input->bus == QEMU_INPUT_BUS_PS2 &&
+                input->type == QEMU_INPUT_TYPE_MOUSE) {
+                free(input);
+                continue;
+            }
+            def->ninputs++;
+            input->next = NULL;
+            if (i == 0) {
+                def->inputs = input;
+            } else {
+                prev->next = input;
+            }
+            prev = input;
+        }
+    }
+    xmlXPathFreeObject(obj);
+    obj = NULL;
+
+    /* If graphics are enabled, there's an implicit PS2 mouse */
+    if (def->graphicsType != QEMUD_GRAPHICS_NONE) {
+        int hasPS2mouse = 0;
+        struct qemud_vm_input_def *input = def->inputs;
+        while (input) {
+            if (input->type == QEMU_INPUT_TYPE_MOUSE &&
+                input->bus == QEMU_INPUT_BUS_PS2)
+                hasPS2mouse = 1;
+            input = input->next;
+        }
+
+        if (!hasPS2mouse) {
+            input = calloc(1, sizeof(struct qemud_vm_input_def));
+            if (!input) {
+                qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY, "input");
+                goto error;
+            }
+            input->type = QEMU_INPUT_TYPE_MOUSE;
+            input->bus = QEMU_INPUT_BUS_PS2;
+            input->next = def->inputs;
+            def->inputs = input;
+            def->ninputs++;
+        }
+    }
+
     xmlXPathFreeContext(ctxt);
 
     return def;
@@ -1307,6 +1430,7 @@ int qemudBuildCommandLine(virConnectPtr conn,
     struct stat sb;
     struct qemud_vm_disk_def *disk = vm->def->disks;
     struct qemud_vm_net_def *net = vm->def->nets;
+    struct qemud_vm_input_def *input = vm->def->inputs;
     struct utsname ut;
     int disableKQEMU = 0;
 
@@ -1348,6 +1472,8 @@ int qemudBuildCommandLine(virConnectPtr conn,
         disableKQEMU + /* Disable kqemu */
         2 * vm->def->ndisks + /* disks*/
         (vm->def->nnets > 0 ? (4 * vm->def->nnets) : 2) + /* networks */
+        1 + /* usb */
+        2 * vm->def->ninputs + /* input devices */
         2 + /* memory*/
         2 + /* cpus */
         2 + /* boot device */
@@ -1561,6 +1687,19 @@ int qemudBuildCommandLine(virConnectPtr conn,
         }
     }
 
+    if (!((*argv)[++n] = strdup("-usb")))
+        goto no_memory;
+    while (input) {
+        if (input->bus == QEMU_INPUT_BUS_USB) {
+            if (!((*argv)[++n] = strdup("-usbdevice")))
+                goto no_memory;
+            if (!((*argv)[++n] = strdup(input->type == QEMU_INPUT_TYPE_MOUSE ? "mouse" : "tablet")))
+                goto no_memory;
+        }
+
+        input = input->next;
+    }
+
     if (vm->def->graphicsType == QEMUD_GRAPHICS_VNC) {
         char port[10];
         int ret;
@@ -2541,6 +2680,7 @@ char *qemudGenerateXML(virConnectPtr conn,
     unsigned char *uuid;
     struct qemud_vm_disk_def *disk;
     struct qemud_vm_net_def *net;
+    struct qemud_vm_input_def *input;
     const char *type = NULL;
     int n;
 
@@ -2769,6 +2909,19 @@ char *qemudGenerateXML(virConnectPtr conn,
         net = net->next;
     }
 
+    input = def->inputs;
+    while (input) {
+        if (input->bus != QEMU_INPUT_BUS_PS2 &&
+            virBufferVSprintf(buf, "    <input type='%s' bus='usb'/>\n",
+                              input->type == QEMU_INPUT_TYPE_MOUSE ? "mouse" : "tablet") < 0)
+            goto no_memory;
+        input = input->next;
+    }
+    /* If graphics is enable, add implicit mouse */
+    if (def->graphicsType != QEMUD_GRAPHICS_NONE)
+        if (virBufferAdd(buf, "    <input type='mouse' bus='ps2'/>\n", -1) < 0)
+            goto no_memory;
+
     switch (def->graphicsType) {
     case QEMUD_GRAPHICS_VNC:
         if (virBufferAdd(buf, "    <graphics type='vnc'", -1) < 0)
index ed5df987be4789d8b29e470e21ab8e2f4c510e37..3beb9aa433053f0e7958d7d8c5c8d615951f8aa1 100644 (file)
@@ -109,6 +109,23 @@ struct qemud_vm_net_def {
     struct qemud_vm_net_def *next;
 };
 
+
+enum qemu_vm_input_type {
+    QEMU_INPUT_TYPE_MOUSE,
+    QEMU_INPUT_TYPE_TABLET,
+};
+
+enum qemu_vm_input_bus {
+    QEMU_INPUT_BUS_PS2,
+    QEMU_INPUT_BUS_USB,
+};
+
+struct qemud_vm_input_def {
+    int type;
+    int bus;
+    struct qemud_vm_input_def *next;
+};
+
 #define QEMUD_MAX_BOOT_DEVS 4
 
 /* 3 possible boot devices */
@@ -119,7 +136,7 @@ enum qemud_vm_boot_order {
     QEMUD_BOOT_NET,
 };
 /* 3 possible graphics console modes */
-enum qemud_vm_grapics_type {
+enum qemud_vm_graphics_type {
     QEMUD_GRAPHICS_NONE,
     QEMUD_GRAPHICS_SDL,
     QEMUD_GRAPHICS_VNC,
@@ -175,6 +192,9 @@ struct qemud_vm_def {
 
     int nnets;
     struct qemud_vm_net_def *nets;
+
+    int ninputs;
+    struct qemud_vm_input_def *inputs;
 };
 
 /* Guest VM runtime state */
index bf9ac208d530932c7b83fe44f8e698cc4e9b7883..2603f208ab61b8e538a23ce1fa43228a13f16869 100644 (file)
@@ -1651,11 +1651,13 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root, int xendConfigVersi
             tmp = sexpr_node(node, "device/vfb/type");
 
             if (tmp && !strcmp(tmp, "sdl")) {
+                virBufferVSprintf(&buf, "    <input type='mouse' bus='%s'/>\n", hvm ? "ps2": "xen");
                 virBufferAdd(&buf, "    <graphics type='sdl'/>\n", 27);
             } else if (tmp && !strcmp(tmp, "vnc")) {
                 int port = xenStoreDomainGetVNCPort(conn, domid);
                 const char *listenAddr = sexpr_node(node, "device/vfb/vnclisten");
                 const char *keymap = sexpr_node(node, "device/vfb/keymap");
+                virBufferVSprintf(&buf, "    <input type='mouse' bus='%s'/>\n", hvm ? "ps2": "xen");
                 virBufferVSprintf(&buf, "    <graphics type='vnc' port='%d'", port);
                 if (listenAddr)
                     virBufferVSprintf(&buf, " listen='%s'", listenAddr);
@@ -1696,6 +1698,22 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root, int xendConfigVersi
         }
     }
 
+    /* in case of HVM we have devices emulation */
+    if (hvm) {
+        for (cur = sexpr_lookup(root, "domain/image/hvm"); cur && cur->kind == SEXPR_CONS; cur = cur->cdr) {
+            node = cur->car;
+            if (sexpr_lookup(node, "usbdevice")) {
+                tmp = sexpr_node(node, "usbdevice");
+                if (tmp && *tmp) {
+                    if (!strcmp(tmp, "usbtablet"))
+                        virBufferAdd(&buf, "    <input type='tablet' bus='usb'/>\n", 37);
+                    else if (!strcmp(tmp, "usbmouse"))
+                        virBufferAdd(&buf, "    <input type='mouse' bus='usb'/>\n", 36);
+                }
+            }
+        }
+    }
+
     /* Graphics device (HVM <= 3.0.4, or PV <= 3.0.3) vnc config */
     if ((hvm && xendConfigVersion < 4) ||
         (!hvm && xendConfigVersion < 3)) {
@@ -1713,6 +1731,7 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root, int xendConfigVersi
                  */
                 if (port == -1 && xendConfigVersion < 2)
                     port = 5900 + domid;
+                virBufferVSprintf(&buf, "    <input type='mouse' bus='%s'/>\n", hvm ? "ps2" : "xen");
                 virBufferVSprintf(&buf, "    <graphics type='vnc' port='%d'", port);
                 if (listenAddr)
                     virBufferVSprintf(&buf, " listen='%s'", listenAddr);
@@ -1725,8 +1744,10 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root, int xendConfigVersi
         /* Graphics device (HVM, or old (pre-3.0.4) style PV sdl config) */
         tmp = sexpr_fmt_node(root, "domain/image/%s/sdl", hvm ? "hvm" : "linux");
         if (tmp != NULL) {
-            if (tmp[0] == '1')
+            if (tmp[0] == '1') {
+                virBufferVSprintf(&buf, "    <input type='mouse' bus='%s'/>\n", hvm ? "ps2" : "xen");
                 virBufferAdd(&buf, "    <graphics type='sdl'/>\n", 27 );
+            }
         }
     }
 
index c8fc1e35e1678964293e752d6ab8c13d12f96fa9..e559e4e47d833fd267c3e2860b6fd755df4c5217 100644 (file)
@@ -913,6 +913,17 @@ char *xenXMDomainFormatXML(virConnectPtr conn, virConfPtr conf) {
         }
     }
 
+    if (hvm) {
+        if (xenXMConfigGetString(conf, "usbdevice", &str) == 0 && str) {
+            if (!strcmp(str, "tablet"))
+                virBufferAdd(buf, "    <input type='tablet' bus='usb'/>\n", 37);
+            else if (!strcmp(str, "mouse"))
+                virBufferAdd(buf, "    <input type='mouse' bus='usb'/>\n", 36);
+            /* Ignore else branch - probably some other non-input device we don't
+               support in libvirt yet */
+        }
+    }
+
     /* HVM guests, or old PV guests use this config format */
     if (hvm || priv->xendConfigVersion < 3) {
         if (xenXMConfigGetInt(conf, "vnc", &val) == 0 && val) {
@@ -980,6 +991,9 @@ char *xenXMDomainFormatXML(virConnectPtr conn, virConfPtr conf) {
         }
     }
 
+    if (vnc || sdl) {
+        virBufferVSprintf(buf, "    <input type='mouse' bus='%s'/>\n", hvm ? "ps2":"xen");
+    }
     if (vnc) {
         virBufferVSprintf(buf,
                           "    <graphics type='vnc' port='%ld'",
@@ -1902,6 +1916,9 @@ virConfPtr xenXMParseXMLToConfig(virConnectPtr conn, const char *xml) {
                                           "cannot set the device_model parameter") < 0)
             goto error;
 
+        if (xenXMConfigSetStringFromXPath(conn, conf, ctxt, "usbdevice", "string(/domain/devices/input[@bus='usb' or (not(@bus) and @type='tablet')]/@type)", 1,
+                                          "cannot set the usbdevice parameter") < 0)
+            goto error;
     }
 
     if (hvm || priv->xendConfigVersion < 3) {
index ae3c0cb359ad0c9d31a22957e92b9a4bafc1d0aa..d202d502f7b18eba9fa0fe7da1504d8b01c1d084 100644 (file)
--- a/src/xml.c
+++ b/src/xml.c
@@ -416,11 +416,12 @@ static int
 virDomainParseXMLOSDescHVM(virConnectPtr conn, xmlNodePtr node, virBufferPtr buf, xmlXPathContextPtr ctxt, int vcpus, int xendConfigVersion)
 {
     xmlNodePtr cur, txt;
+    xmlNodePtr *nodes = NULL;
     xmlChar *type = NULL;
     xmlChar *loader = NULL;
     char bootorder[5];
     int nbootorder = 0;
-    int res;
+    int res, nb_nodes;
     char *str;
 
     cur = node->children;
@@ -540,6 +541,57 @@ virDomainParseXMLOSDescHVM(virConnectPtr conn, xmlNodePtr node, virBufferPtr buf
     if (virXPathNode("/domain/features/pae", ctxt) != NULL)
         virBufferAdd(buf, "(pae 1)", 7);
 
+    virBufferAdd(buf, "(usb 1)", 7);
+    nb_nodes = virXPathNodeSet("/domain/devices/input", ctxt, &nodes);
+    if (nb_nodes > 0) {
+        int i;
+        for (i = 0; i < nb_nodes; i++) {
+            xmlChar *itype = NULL, *bus = NULL;
+            int isMouse = 1;
+
+            itype = xmlGetProp(nodes[i], (xmlChar *)"type");
+
+            if (!itype) {
+                goto error;
+            }
+            if (!strcmp((const char *)itype, "tablet"))
+                isMouse = 0;
+            else if (strcmp((const char*)itype, "mouse")) {
+                xmlFree(itype);
+                virXMLError(conn, VIR_ERR_XML_ERROR, "input", 0);
+                goto error;
+            }
+            xmlFree(itype);
+
+            bus = xmlGetProp(nodes[i], (xmlChar *)"bus");
+            if (!bus) {
+                if (!isMouse) {
+                    /* Nothing - implicit ps2 */
+                } else {
+                    virBufferAdd(buf, "(usbdevice tablet)", 13);
+                }
+            } else {
+                if (!strcmp((const char*)bus, "ps2")) {
+                    if (!isMouse) {
+                        xmlFree(bus);
+                        virXMLError(conn, VIR_ERR_XML_ERROR, "input", 0);
+                        goto error;
+                    }
+                    /* Nothing - implicit ps2 */
+                } else if (!strcmp((const char*)bus, "usb")) {
+                    if (isMouse)
+                        virBufferAdd(buf, "(usbdevice mouse)", 17);
+                    else
+                        virBufferAdd(buf, "(usbdevice tablet)", 18);
+                }
+            }
+            xmlFree(bus);
+        }
+        free(nodes);
+        nodes = NULL;
+    }
+
+
     res = virXPathBoolean("count(domain/devices/console) > 0", ctxt);
     if (res < 0) {
         virXMLError(conn, VIR_ERR_XML_ERROR, NULL, 0);
@@ -572,6 +624,8 @@ virDomainParseXMLOSDescHVM(virConnectPtr conn, xmlNodePtr node, virBufferPtr buf
     return (0);
 
  error:
+    if (nodes)
+        free(nodes);
     return(-1);
 }
 
index 55d49d32eb4919f4ddd6ef2f30a31843b7e8a20b..d8f662d49dbe30368c9c2e9675a4c750261a99d5 100644 (file)
@@ -25,6 +25,7 @@
       <source file='/xen/rhel5.img'/>
       <target dev='xvda:disk'/>
     </disk>
+    <input type='mouse' bus='xen'/>
     <graphics type='vnc' port='5905'/>
   </devices>
 </domain>
index 512580eb6a481add69bfe70111a918a760067546..4b58de74ec1d4a3b1ca2ef5705fb6d3bb7069085 100644 (file)
@@ -33,6 +33,7 @@
       <target dev='hdc'/>
       <readonly/>
     </disk>
+    <input type='mouse' bus='ps2'/>
     <graphics type='vnc' port='5903' keymap='ja'/>
   </devices>
 </domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.sexpr b/tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.sexpr
new file mode 100644 (file)
index 0000000..a93488f
--- /dev/null
@@ -0,0 +1 @@
+(domain (domid 3)(name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(boot c)(cdrom '/root/boot.iso')(acpi 1)(usbdevice usbmouse)(vnc 1)(keymap ja)))(device (vbd (dev 'ioemu:hda')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu))))
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.xml b/tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.xml
new file mode 100644 (file)
index 0000000..e96ecfa
--- /dev/null
@@ -0,0 +1,40 @@
+<domain type='xen' id='3'>
+  <name>fvtest</name>
+  <uuid>b5d70dd275cdaca517769660b059d8bc</uuid>
+  <os>
+    <type>hvm</type>
+    <loader>/usr/lib/xen/boot/hvmloader</loader>
+    <boot dev='hd'/>
+  </os>
+  <memory>409600</memory>
+  <vcpu>1</vcpu>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>restart</on_crash>
+  <features>
+    <acpi/>
+  </features>
+  <clock offset='utc'/>
+  <devices>
+    <emulator>/usr/lib64/xen/bin/qemu-dm</emulator>
+    <disk type='file' device='disk'>
+      <driver name='file'/>
+      <source file='/root/foo.img'/>
+      <target dev='hda'/>
+    </disk>
+    <interface type='bridge'>
+      <source bridge='xenbr0'/>
+      <mac address='00:16:3e:1b:b1:47'/>
+      <script path='vif-bridge'/>
+    </interface>
+    <disk type='file' device='cdrom'>
+      <driver name='file'/>
+      <source file='/root/boot.iso'/>
+      <target dev='hdc'/>
+      <readonly/>
+    </disk>
+    <input type='mouse' bus='usb'/>
+    <input type='mouse' bus='ps2'/>
+    <graphics type='vnc' port='5903' keymap='ja'/>
+  </devices>
+</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-usbtablet.sexpr b/tests/sexpr2xmldata/sexpr2xml-fv-usbtablet.sexpr
new file mode 100644 (file)
index 0000000..002103c
--- /dev/null
@@ -0,0 +1 @@
+(domain (domid 3)(name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(usbdevice usbtablet)(vnc 1)(keymap ja)))(device (vbd (dev 'ioemu:hda')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu))))
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-usbtablet.xml b/tests/sexpr2xmldata/sexpr2xml-fv-usbtablet.xml
new file mode 100644 (file)
index 0000000..235583c
--- /dev/null
@@ -0,0 +1,40 @@
+<domain type='xen' id='3'>
+  <name>fvtest</name>
+  <uuid>b5d70dd275cdaca517769660b059d8bc</uuid>
+  <os>
+    <type>hvm</type>
+    <loader>/usr/lib/xen/boot/hvmloader</loader>
+    <boot dev='hd'/>
+  </os>
+  <memory>409600</memory>
+  <vcpu>1</vcpu>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>restart</on_crash>
+  <features>
+    <acpi/>
+  </features>
+  <clock offset='utc'/>
+  <devices>
+    <emulator>/usr/lib64/xen/bin/qemu-dm</emulator>
+    <disk type='file' device='disk'>
+      <driver name='file'/>
+      <source file='/root/foo.img'/>
+      <target dev='hda'/>
+    </disk>
+    <interface type='bridge'>
+      <source bridge='xenbr0'/>
+      <mac address='00:16:3e:1b:b1:47'/>
+      <script path='vif-bridge'/>
+    </interface>
+    <disk type='file' device='cdrom'>
+      <driver name='file'/>
+      <source file='/root/boot.iso'/>
+      <target dev='hdc'/>
+      <readonly/>
+    </disk>
+    <input type='tablet' bus='usb'/>
+    <input type='mouse' bus='ps2'/>
+    <graphics type='vnc' port='5903' keymap='ja'/>
+  </devices>
+</domain>
index b2d1f1573f0fbe2e3232d8f460e49892d1d55973..700c957c8aec54e4fab48e5ef8b98db233e390f6 100644 (file)
@@ -33,6 +33,7 @@
       <target dev='hdc'/>
       <readonly/>
     </disk>
+    <input type='mouse' bus='ps2'/>
     <graphics type='vnc' port='5903' keymap='ja'/>
   </devices>
 </domain>
index 43c78d6c05d363e92338e83340c20b5605b79295..b9a873fe655bd7fe43ac0b05fde49d569a897ca0 100644 (file)
@@ -33,6 +33,7 @@
       <mac address='00:16:3e:1b:b1:47'/>
       <script path='vif-bridge'/>
     </interface>
+    <input type='mouse' bus='ps2'/>
     <graphics type='vnc' port='-1' keymap='ja'/>
   </devices>
 </domain>
index b2d1f1573f0fbe2e3232d8f460e49892d1d55973..700c957c8aec54e4fab48e5ef8b98db233e390f6 100644 (file)
@@ -33,6 +33,7 @@
       <target dev='hdc'/>
       <readonly/>
     </disk>
+    <input type='mouse' bus='ps2'/>
     <graphics type='vnc' port='5903' keymap='ja'/>
   </devices>
 </domain>
index dd5b8a57cf4c0555cb70c9358e9706472b81f59e..e51311a1898b7617291d743fa4e8de304583db87 100644 (file)
@@ -33,6 +33,7 @@
       <target dev='hdc'/>
       <readonly/>
     </disk>
+    <input type='mouse' bus='ps2'/>
     <graphics type='vnc' port='5906'/>
   </devices>
 </domain>
index 12da7028aafe7bc7df8595f9a2bc4f9da9f00c74..2fae25f864da41aeaed6b1a02c92dceef24a16cd 100644 (file)
@@ -18,6 +18,7 @@
       <source file='/root/some.img'/>
       <target dev='xvda'/>
     </disk>
+    <input type='mouse' bus='xen'/>
     <graphics type='vnc' port='-1' listen='0.0.0.0' keymap='ja'/>
   </devices>
 </domain>
index 12da7028aafe7bc7df8595f9a2bc4f9da9f00c74..2fae25f864da41aeaed6b1a02c92dceef24a16cd 100644 (file)
@@ -18,6 +18,7 @@
       <source file='/root/some.img'/>
       <target dev='xvda'/>
     </disk>
+    <input type='mouse' bus='xen'/>
     <graphics type='vnc' port='-1' listen='0.0.0.0' keymap='ja'/>
   </devices>
 </domain>
index 4e385dc6e12c434044a756f3d36b5ab53796fd15..26f4f0bb11f7ac4073432917e8672bc16bd36494 100644 (file)
@@ -44,113 +44,124 @@ static int testCompareFiles(const char *xml, const char *sexpr, int xendConfigVe
   return ret;
 }
 
-static int testComparePVversion1(void *data ATTRIBUTE_UNUSED) {
+static int testComparePVversion1(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("sexpr2xmldata/sexpr2xml-pv.xml",
                          "sexpr2xmldata/sexpr2xml-pv.sexpr",
                          1);
 }
 
-static int testCompareFVversion1(void *data ATTRIBUTE_UNUSED) {
+static int testCompareFVversion1(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("sexpr2xmldata/sexpr2xml-fv.xml",
                          "sexpr2xmldata/sexpr2xml-fv.sexpr",
                          1);
 }
 
-static int testComparePVversion2(void *data ATTRIBUTE_UNUSED) {
+static int testComparePVversion2(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("sexpr2xmldata/sexpr2xml-pv.xml",
                          "sexpr2xmldata/sexpr2xml-pv.sexpr",
                          2);
 }
 
-static int testComparePVOrigVFB(void *data ATTRIBUTE_UNUSED) {
+static int testComparePVOrigVFB(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("sexpr2xmldata/sexpr2xml-pv-vfb-orig.xml",
                           "sexpr2xmldata/sexpr2xml-pv-vfb-orig.sexpr",
                           2);
 }
 
 
-static int testComparePVNewVFB(void *data ATTRIBUTE_UNUSED) {
+static int testComparePVNewVFB(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("sexpr2xmldata/sexpr2xml-pv-vfb-new.xml",
                           "sexpr2xmldata/sexpr2xml-pv-vfb-new.sexpr",
                           3);
 }
 
 
-static int testCompareFVversion2(void *data ATTRIBUTE_UNUSED) {
+static int testCompareFVversion2(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("sexpr2xmldata/sexpr2xml-fv-v2.xml",
                          "sexpr2xmldata/sexpr2xml-fv-v2.sexpr",
                          2);
 }
 
-static int testComparePVBootloader(void *data ATTRIBUTE_UNUSED) {
+static int testComparePVBootloader(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("sexpr2xmldata/sexpr2xml-pv-bootloader.xml",
                          "sexpr2xmldata/sexpr2xml-pv-bootloader.sexpr",
                          2);
 }
 
-static int testCompareDiskFile(void *data ATTRIBUTE_UNUSED) {
+static int testCompareDiskFile(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("sexpr2xmldata/sexpr2xml-disk-file.xml",
                          "sexpr2xmldata/sexpr2xml-disk-file.sexpr",
                          1);
 }
 
-static int testCompareDiskBlock(void *data ATTRIBUTE_UNUSED) {
+static int testCompareDiskBlock(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("sexpr2xmldata/sexpr2xml-disk-block.xml",
                          "sexpr2xmldata/sexpr2xml-disk-block.sexpr",
                          1);
 }
 
-static int testCompareDiskDrvBlktapQcow(void *data ATTRIBUTE_UNUSED) {
+static int testCompareDiskDrvBlktapQcow(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("sexpr2xmldata/sexpr2xml-disk-drv-blktap-qcow.xml",
                          "sexpr2xmldata/sexpr2xml-disk-drv-blktap-qcow.sexpr",
                          1);
 }
 
-static int testCompareDiskDrvBlktapRaw(void *data ATTRIBUTE_UNUSED) {
+static int testCompareDiskDrvBlktapRaw(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("sexpr2xmldata/sexpr2xml-disk-drv-blktap-raw.xml",
                          "sexpr2xmldata/sexpr2xml-disk-drv-blktap-raw.sexpr",
                          1);
 }
 
-static int testCompareResizedMemory(void *data ATTRIBUTE_UNUSED) {
+static int testCompareResizedMemory(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("sexpr2xmldata/sexpr2xml-curmem.xml",
                          "sexpr2xmldata/sexpr2xml-curmem.sexpr",
                          1);
 }
 
 
-static int testCompareNetRouted(void *data ATTRIBUTE_UNUSED) {
+static int testCompareNetRouted(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("sexpr2xmldata/sexpr2xml-net-routed.xml",
                          "sexpr2xmldata/sexpr2xml-net-routed.sexpr",
                          1);
 }
 
-static int testCompareNetBridged(void *data ATTRIBUTE_UNUSED) {
+static int testCompareNetBridged(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("sexpr2xmldata/sexpr2xml-net-bridged.xml",
                          "sexpr2xmldata/sexpr2xml-net-bridged.sexpr",
                          1);
 }
 
-static int testCompareNoSourceCDRom(void *data ATTRIBUTE_UNUSED) {
+static int testCompareNoSourceCDRom(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("sexpr2xmldata/sexpr2xml-no-source-cdrom.xml",
                          "sexpr2xmldata/sexpr2xml-no-source-cdrom.sexpr",
                          1);
 }
 
-static int testCompareFVclockUTC(void *data ATTRIBUTE_UNUSED) {
+static int testCompareFVInputUSBMouse(const void *data ATTRIBUTE_UNUSED) {
+  return testCompareFiles("sexpr2xmldata/sexpr2xml-fv-usbmouse.xml",
+                         "sexpr2xmldata/sexpr2xml-fv-usbmouse.sexpr",
+                         1);
+}
+
+static int testCompareFVInputUSBTablet(const void *data ATTRIBUTE_UNUSED) {
+  return testCompareFiles("sexpr2xmldata/sexpr2xml-fv-usbtablet.xml",
+                         "sexpr2xmldata/sexpr2xml-fv-usbtablet.sexpr",
+                         1);
+}
+
+static int testCompareFVclockUTC(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("sexpr2xmldata/sexpr2xml-fv-utc.xml",
                          "sexpr2xmldata/sexpr2xml-fv-utc.sexpr",
                          1);
 }
 
-static int testCompareFVclockLocaltime(void *data ATTRIBUTE_UNUSED) {
+static int testCompareFVclockLocaltime(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("sexpr2xmldata/sexpr2xml-fv-localtime.xml",
                          "sexpr2xmldata/sexpr2xml-fv-localtime.sexpr",
                          1);
 }
 
 
-
 int
 main(int argc, char **argv)
 {
@@ -223,6 +234,13 @@ main(int argc, char **argv)
                    1, testCompareNoSourceCDRom, NULL) != 0)
        ret = -1;
 
+    if (virtTestRun("SEXPR-2-XML USB Mouse",
+                   1, testCompareFVInputUSBMouse, NULL) != 0)
+       ret = -1;
+    if (virtTestRun("SEXPR-2-XML USB Tablet",
+                   1, testCompareFVInputUSBTablet, NULL) != 0)
+       ret = -1;
+
     if (virtTestRun("SEXPR-2-XML clock UTC",
                    1, testCompareFVclockUTC, NULL) != 0)
        ret = -1;
index 76fe4d84aafda66c76eb75dc179ac7d27f15fc59..6121785ee5b2ddb711af29cbceea810e70fd7220 100644 (file)
@@ -52,7 +52,7 @@ virtTestCountAverage(double *items, int nitems)
  * returns: -1 = error, 0 = success
  */
 int
-virtTestRun(const char *title, int nloops, int (*body)(void *data), void *data)
+virtTestRun(const char *title, int nloops, int (*body)(const void *data), const void *data)
 {
     int i, ret = 0;
     double *ts = NULL;
index fd29ed6853928c4e066a58a35ed36ad23266e17b..9fbcabd3c3b0bb0cfe52b9fdd09b4ab662c345eb 100644 (file)
 extern "C" {
 #endif
 
+  
+    double virtTestCountAverage(double *items,
+                                int nitems);
 
-double virtTestCountAverage    (double *items, 
-                                int nitems);
-
-int    virtTestRun             (const char *title, 
-                                int nloops, 
-                                int (*body)(void *data), 
-                                void *data);
-int virtTestLoadFile(const char *name,
-                    char **buf,
-                    int buflen);
-int virtTestCaptureProgramOutput(const char *const argv[],
-                                char **buf,
-                                int buflen);
+    int        virtTestRun(const char *title,
+                    int nloops,
+                    int (*body)(const void *data),
+                    const void *data);
+    int virtTestLoadFile(const char *name,
+                         char **buf,
+                         int buflen);
+    int virtTestCaptureProgramOutput(const char *const argv[],
+                                     char **buf,
+                                     int buflen);
 
 #ifdef __cplusplus
 }
 #endif
 #endif /* __VIT_TEST_UTILS_H__ */
 
+/*
+ * Local variables:
+ *  indent-tabs-mode: nil
+ *  c-indent-level: 4
+ *  c-basic-offset: 4
+ *  tab-width: 4
+ * End:
+ */
index cc2a02230173bc828a074a95a4e26299a31fe1da..dc33c27da6e2ff4cad2a68c74db02007032f78e7 100644 (file)
@@ -66,7 +66,7 @@ static char *custom_uri;
 
 
 
-static int testCompareListDefault(void *data ATTRIBUTE_UNUSED) {
+static int testCompareListDefault(const void *data ATTRIBUTE_UNUSED) {
   const char *const argv[] = {
     VIRSH_DEFAULT,
     "list",
@@ -77,7 +77,7 @@ static int testCompareListDefault(void *data ATTRIBUTE_UNUSED) {
                           argv);
 }
 
-static int testCompareListCustom(void *data ATTRIBUTE_UNUSED) {
+static int testCompareListCustom(const void *data ATTRIBUTE_UNUSED) {
   const char *const argv[] = {
     VIRSH_CUSTOM,
     "list",
@@ -89,7 +89,7 @@ static int testCompareListCustom(void *data ATTRIBUTE_UNUSED) {
 }
 
 
-static int testCompareNodeinfoDefault(void *data ATTRIBUTE_UNUSED) {
+static int testCompareNodeinfoDefault(const void *data ATTRIBUTE_UNUSED) {
   const char *const argv[] = {
     VIRSH_DEFAULT,
     "nodeinfo",
@@ -100,7 +100,7 @@ static int testCompareNodeinfoDefault(void *data ATTRIBUTE_UNUSED) {
                           argv);
 }
 
-static int testCompareNodeinfoCustom(void *data ATTRIBUTE_UNUSED) {
+static int testCompareNodeinfoCustom(const void *data ATTRIBUTE_UNUSED) {
   const char *const argv[] = {
     VIRSH_CUSTOM,
     "nodeinfo",
@@ -111,7 +111,7 @@ static int testCompareNodeinfoCustom(void *data ATTRIBUTE_UNUSED) {
                           argv);
 }
 
-static int testCompareDominfoByID(void *data ATTRIBUTE_UNUSED) {
+static int testCompareDominfoByID(const void *data ATTRIBUTE_UNUSED) {
   const char *const argv[] = {
     VIRSH_CUSTOM,
     "dominfo",
@@ -124,7 +124,7 @@ static int testCompareDominfoByID(void *data ATTRIBUTE_UNUSED) {
 }
 
 
-static int testCompareDominfoByUUID(void *data ATTRIBUTE_UNUSED) {
+static int testCompareDominfoByUUID(const void *data ATTRIBUTE_UNUSED) {
   const char *const argv[] = {
     VIRSH_CUSTOM,
     "dominfo",
@@ -137,7 +137,7 @@ static int testCompareDominfoByUUID(void *data ATTRIBUTE_UNUSED) {
 }
 
 
-static int testCompareDominfoByName(void *data ATTRIBUTE_UNUSED) {
+static int testCompareDominfoByName(const void *data ATTRIBUTE_UNUSED) {
   const char *const argv[] = {
     VIRSH_CUSTOM,
     "dominfo",
@@ -150,7 +150,7 @@ static int testCompareDominfoByName(void *data ATTRIBUTE_UNUSED) {
 }
 
 
-static int testCompareDomuuidByID(void *data ATTRIBUTE_UNUSED) {
+static int testCompareDomuuidByID(const void *data ATTRIBUTE_UNUSED) {
   const char *const argv[] = {
     VIRSH_CUSTOM,
     "domuuid",
@@ -162,7 +162,7 @@ static int testCompareDomuuidByID(void *data ATTRIBUTE_UNUSED) {
                           argv);
 }
 
-static int testCompareDomuuidByName(void *data ATTRIBUTE_UNUSED) {
+static int testCompareDomuuidByName(const void *data ATTRIBUTE_UNUSED) {
   const char *const argv[] = {
     VIRSH_CUSTOM,
     "domuuid",
@@ -174,7 +174,7 @@ static int testCompareDomuuidByName(void *data ATTRIBUTE_UNUSED) {
                           argv);
 }
 
-static int testCompareDomidByName(void *data ATTRIBUTE_UNUSED) {
+static int testCompareDomidByName(const void *data ATTRIBUTE_UNUSED) {
   const char *const argv[] = {
     VIRSH_CUSTOM,
     "domid",
@@ -187,7 +187,7 @@ static int testCompareDomidByName(void *data ATTRIBUTE_UNUSED) {
 }
 
 
-static int testCompareDomidByUUID(void *data ATTRIBUTE_UNUSED) {
+static int testCompareDomidByUUID(const void *data ATTRIBUTE_UNUSED) {
   const char *const argv[] = {
     VIRSH_CUSTOM,
     "domid",
@@ -200,7 +200,7 @@ static int testCompareDomidByUUID(void *data ATTRIBUTE_UNUSED) {
 }
 
 
-static int testCompareDomnameByID(void *data ATTRIBUTE_UNUSED) {
+static int testCompareDomnameByID(const void *data ATTRIBUTE_UNUSED) {
   const char *const argv[] = {
     VIRSH_CUSTOM,
     "domname",
@@ -213,7 +213,7 @@ static int testCompareDomnameByID(void *data ATTRIBUTE_UNUSED) {
 }
 
 
-static int testCompareDomnameByUUID(void *data ATTRIBUTE_UNUSED) {
+static int testCompareDomnameByUUID(const void *data ATTRIBUTE_UNUSED) {
   const char *const argv[] = {
     VIRSH_CUSTOM,
     "domname",
@@ -225,7 +225,7 @@ static int testCompareDomnameByUUID(void *data ATTRIBUTE_UNUSED) {
                           argv);
 }
 
-static int testCompareDomstateByID(void *data ATTRIBUTE_UNUSED) {
+static int testCompareDomstateByID(const void *data ATTRIBUTE_UNUSED) {
   const char *const argv[] = {
     VIRSH_CUSTOM,
     "domstate",
@@ -238,7 +238,7 @@ static int testCompareDomstateByID(void *data ATTRIBUTE_UNUSED) {
 }
 
 
-static int testCompareDomstateByUUID(void *data ATTRIBUTE_UNUSED) {
+static int testCompareDomstateByUUID(const void *data ATTRIBUTE_UNUSED) {
   const char *const argv[] = {
     VIRSH_CUSTOM,
     "domstate",
@@ -250,7 +250,7 @@ static int testCompareDomstateByUUID(void *data ATTRIBUTE_UNUSED) {
                           argv);
 }
 
-static int testCompareDomstateByName(void *data ATTRIBUTE_UNUSED) {
+static int testCompareDomstateByName(const void *data ATTRIBUTE_UNUSED) {
   const char *const argv[] = {
     VIRSH_CUSTOM,
     "domstate",
index ab106e7f35afeb602ecbfe11d59a9635c5c158ef..b81db9c3d62995dc684042387265988d5105c563 100644 (file)
@@ -60,21 +60,21 @@ static int testCompareFiles(const char *hostmachine,
   return ret;
 }
 
-static int testXeni686(void *data ATTRIBUTE_UNUSED) {
+static int testXeni686(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("i686",
                          "xencapsdata/xen-i686.xml",
                          "xencapsdata/xen-i686.cpuinfo",
                          "xencapsdata/xen-i686.caps");
 }
 
-static int testXeni686PAE(void *data ATTRIBUTE_UNUSED) {
+static int testXeni686PAE(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("i686",
                          "xencapsdata/xen-i686-pae.xml",
                          "xencapsdata/xen-i686-pae.cpuinfo",
                          "xencapsdata/xen-i686-pae.caps");
 }
 
-static int testXeni686PAEHVM(void *data ATTRIBUTE_UNUSED) {
+static int testXeni686PAEHVM(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("i686",
                          "xencapsdata/xen-i686-pae-hvm.xml",
                          "xencapsdata/xen-i686-pae-hvm.cpuinfo",
@@ -84,7 +84,7 @@ static int testXeni686PAEHVM(void *data ATTRIBUTE_UNUSED) {
 /* No PAE + HVM is non-sensical - all VMX capable
    CPUs have PAE */
 /*
-static int testXeni686HVM(void *data ATTRIBUTE_UNUSED) {
+static int testXeni686HVM(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("i686",
                          "xencapsdata/xen-i686-hvm.xml",
                          "xencapsdata/xen-i686.cpuinfo",
@@ -92,46 +92,46 @@ static int testXeni686HVM(void *data ATTRIBUTE_UNUSED) {
 }
 */
 
-static int testXenx86_64(void *data ATTRIBUTE_UNUSED) {
+static int testXenx86_64(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("x86_64",
                          "xencapsdata/xen-x86_64.xml",
                          "xencapsdata/xen-x86_64.cpuinfo",
                          "xencapsdata/xen-x86_64.caps");
 }
-static int testXenx86_64HVM(void *data ATTRIBUTE_UNUSED) {
+static int testXenx86_64HVM(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("x86_64",
                          "xencapsdata/xen-x86_64-hvm.xml",
                          "xencapsdata/xen-x86_64-hvm.cpuinfo",
                          "xencapsdata/xen-x86_64-hvm.caps");
 }
 
-static int testXenia64(void *data ATTRIBUTE_UNUSED) {
+static int testXenia64(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("ia64",
                          "xencapsdata/xen-ia64.xml",
                          "xencapsdata/xen-ia64.cpuinfo",
                          "xencapsdata/xen-ia64.caps");
 }
-static int testXenia64BE(void *data ATTRIBUTE_UNUSED) {
+static int testXenia64BE(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("ia64",
                          "xencapsdata/xen-ia64-be.xml",
                          "xencapsdata/xen-ia64-be.cpuinfo",
                          "xencapsdata/xen-ia64-be.caps");
 }
 
-static int testXenia64HVM(void *data ATTRIBUTE_UNUSED) {
+static int testXenia64HVM(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("ia64",
                          "xencapsdata/xen-ia64-hvm.xml",
                          "xencapsdata/xen-ia64-hvm.cpuinfo",
                          "xencapsdata/xen-ia64-hvm.caps");
 }
-static int testXenia64BEHVM(void *data ATTRIBUTE_UNUSED) {
+static int testXenia64BEHVM(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("ia64",
                          "xencapsdata/xen-ia64-be-hvm.xml",
                          "xencapsdata/xen-ia64-be-hvm.cpuinfo",
                          "xencapsdata/xen-ia64-be-hvm.caps");
 }
 
-static int testXenppc64(void *data ATTRIBUTE_UNUSED) {
+static int testXenppc64(const void *data ATTRIBUTE_UNUSED) {
   return testCompareFiles("ppc64",
                          "xencapsdata/xen-ppc64.xml",
                          "xencapsdata/xen-ppc64.cpuinfo",
index a21ab1149fe27ad578133e2aa4204714b1a76514..211f29f09820343d2ea36058e076730fc133223f 100644 (file)
@@ -35,6 +35,7 @@
       <mac address='00:16:3E:66:92:9C'/>
       <source bridge='xenbr1'/>
     </interface>
+    <input type='mouse' bus='ps2'/>
     <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
   </devices>
 </domain>
index 5b8dc34e2315ed2f3ae0a0f905cb30223d27174e..836ee4532b3f7beea7514bf29075ca3b162fc93a 100644 (file)
@@ -35,6 +35,7 @@
       <mac address='00:16:3E:66:92:9C'/>
       <source bridge='xenbr1'/>
     </interface>
+    <input type='mouse' bus='ps2'/>
     <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
   </devices>
 </domain>
index 4c9679a9bfe1b19c8163c830ed6ce6a732f451a6..36b98a06b61a1bc5e1845d3f70e35a7213b05ea9 100644 (file)
@@ -35,6 +35,7 @@
       <mac address='00:16:3E:66:92:9C'/>
       <source bridge='xenbr0'/>
     </interface>
+    <input type='mouse' bus='ps2'/>
     <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
   </devices>
 </domain>
diff --git a/tests/xmconfigdata/test-fullvirt-usbmouse.cfg b/tests/xmconfigdata/test-fullvirt-usbmouse.cfg
new file mode 100755 (executable)
index 0000000..abbef2b
--- /dev/null
@@ -0,0 +1,24 @@
+name = "XenGuest2"
+uuid = "c7a5fdb2cdaf9455926ad65c16db1809"
+maxmem = 579
+memory = 394
+vcpus = 1
+builder = "hvm"
+kernel = "/usr/lib/xen/boot/hvmloader"
+boot = "d"
+pae = 1
+acpi = 1
+apic = 1
+localtime = 0
+on_poweroff = "destroy"
+on_reboot = "restart"
+on_crash = "restart"
+device_model = "/usr/lib/xen/bin/qemu-dm"
+usbdevice = "mouse"
+sdl = 0
+vnc = 1
+vncunused = 1
+vnclisten = "127.0.0.1"
+vncpasswd = "123poi"
+disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ]
+vif = [ "mac=00:16:3E:66:92:9C,bridge=xenbr1,type=ioemu" ]
diff --git a/tests/xmconfigdata/test-fullvirt-usbmouse.xml b/tests/xmconfigdata/test-fullvirt-usbmouse.xml
new file mode 100644 (file)
index 0000000..0433a95
--- /dev/null
@@ -0,0 +1,42 @@
+<domain type='xen'>
+  <name>XenGuest2</name>
+  <uuid>c7a5fdb2cdaf9455926ad65c16db1809</uuid>
+  <os>
+    <type>hvm</type>
+    <loader>/usr/lib/xen/boot/hvmloader</loader>
+    <boot dev='cdrom'/>
+  </os>
+  <currentMemory>403456</currentMemory>
+  <memory>592896</memory>
+  <vcpu>1</vcpu>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>restart</on_crash>
+  <features>
+    <pae/>
+    <acpi/>
+    <apic/>
+  </features>
+  <clock offset='utc'/>
+  <devices>
+    <emulator>/usr/lib/xen/bin/qemu-dm</emulator>
+    <disk type='block' device='disk'>
+      <driver name='phy'/>
+      <source dev='/dev/HostVG/XenGuest2'/>
+      <target dev='hda'/>
+    </disk>
+    <disk type='file' device='cdrom'>
+      <driver name='file'/>
+      <source file='/root/boot.iso'/>
+      <target dev='hdc'/>
+      <readonly/>
+    </disk>
+    <interface type='bridge'>
+      <mac address='00:16:3E:66:92:9C'/>
+      <source bridge='xenbr1'/>
+    </interface>
+    <input type='mouse' bus='usb'/>
+    <input type='mouse' bus='ps2'/>
+    <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
+  </devices>
+</domain>
diff --git a/tests/xmconfigdata/test-fullvirt-usbtablet-no-bus.xml b/tests/xmconfigdata/test-fullvirt-usbtablet-no-bus.xml
new file mode 100644 (file)
index 0000000..99e17b8
--- /dev/null
@@ -0,0 +1,42 @@
+<domain type='xen'>
+  <name>XenGuest2</name>
+  <uuid>c7a5fdb2cdaf9455926ad65c16db1809</uuid>
+  <os>
+    <type>hvm</type>
+    <loader>/usr/lib/xen/boot/hvmloader</loader>
+    <boot dev='cdrom'/>
+  </os>
+  <currentMemory>403456</currentMemory>
+  <memory>592896</memory>
+  <vcpu>1</vcpu>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>restart</on_crash>
+  <features>
+    <pae/>
+    <acpi/>
+    <apic/>
+  </features>
+  <clock offset='utc'/>
+  <devices>
+    <emulator>/usr/lib/xen/bin/qemu-dm</emulator>
+    <disk type='block' device='disk'>
+      <driver name='phy'/>
+      <source dev='/dev/HostVG/XenGuest2'/>
+      <target dev='hda'/>
+    </disk>
+    <disk type='file' device='cdrom'>
+      <driver name='file'/>
+      <source file='/root/boot.iso'/>
+      <target dev='hdc'/>
+      <readonly/>
+    </disk>
+    <interface type='bridge'>
+      <mac address='00:16:3E:66:92:9C'/>
+      <source bridge='xenbr1'/>
+    </interface>
+    <input type='tablet'/>
+    <input type='mouse' bus='ps2'/>
+    <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
+  </devices>
+</domain>
diff --git a/tests/xmconfigdata/test-fullvirt-usbtablet.cfg b/tests/xmconfigdata/test-fullvirt-usbtablet.cfg
new file mode 100755 (executable)
index 0000000..e29507b
--- /dev/null
@@ -0,0 +1,24 @@
+name = "XenGuest2"
+uuid = "c7a5fdb2cdaf9455926ad65c16db1809"
+maxmem = 579
+memory = 394
+vcpus = 1
+builder = "hvm"
+kernel = "/usr/lib/xen/boot/hvmloader"
+boot = "d"
+pae = 1
+acpi = 1
+apic = 1
+localtime = 0
+on_poweroff = "destroy"
+on_reboot = "restart"
+on_crash = "restart"
+device_model = "/usr/lib/xen/bin/qemu-dm"
+usbdevice = "tablet"
+sdl = 0
+vnc = 1
+vncunused = 1
+vnclisten = "127.0.0.1"
+vncpasswd = "123poi"
+disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ]
+vif = [ "mac=00:16:3E:66:92:9C,bridge=xenbr1,type=ioemu" ]
diff --git a/tests/xmconfigdata/test-fullvirt-usbtablet.xml b/tests/xmconfigdata/test-fullvirt-usbtablet.xml
new file mode 100644 (file)
index 0000000..7513935
--- /dev/null
@@ -0,0 +1,42 @@
+<domain type='xen'>
+  <name>XenGuest2</name>
+  <uuid>c7a5fdb2cdaf9455926ad65c16db1809</uuid>
+  <os>
+    <type>hvm</type>
+    <loader>/usr/lib/xen/boot/hvmloader</loader>
+    <boot dev='cdrom'/>
+  </os>
+  <currentMemory>403456</currentMemory>
+  <memory>592896</memory>
+  <vcpu>1</vcpu>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>restart</on_crash>
+  <features>
+    <pae/>
+    <acpi/>
+    <apic/>
+  </features>
+  <clock offset='utc'/>
+  <devices>
+    <emulator>/usr/lib/xen/bin/qemu-dm</emulator>
+    <disk type='block' device='disk'>
+      <driver name='phy'/>
+      <source dev='/dev/HostVG/XenGuest2'/>
+      <target dev='hda'/>
+    </disk>
+    <disk type='file' device='cdrom'>
+      <driver name='file'/>
+      <source file='/root/boot.iso'/>
+      <target dev='hdc'/>
+      <readonly/>
+    </disk>
+    <interface type='bridge'>
+      <mac address='00:16:3E:66:92:9C'/>
+      <source bridge='xenbr1'/>
+    </interface>
+    <input type='tablet' bus='usb'/>
+    <input type='mouse' bus='ps2'/>
+    <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
+  </devices>
+</domain>
index 5b8dc34e2315ed2f3ae0a0f905cb30223d27174e..836ee4532b3f7beea7514bf29075ca3b162fc93a 100644 (file)
@@ -35,6 +35,7 @@
       <mac address='00:16:3E:66:92:9C'/>
       <source bridge='xenbr1'/>
     </interface>
+    <input type='mouse' bus='ps2'/>
     <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
   </devices>
 </domain>
index ba768adf0e0606e87034fd6607a1695392958c70..4774cb337c27253ab84402aa5401826e88f5be89 100644 (file)
@@ -18,6 +18,7 @@
       <mac address='00:16:3E:66:94:9C'/>
       <ip address='192.168.0.9'/>
     </interface>
+    <input type='mouse' bus='xen'/>
     <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
     <console/>
   </devices>
index ba768adf0e0606e87034fd6607a1695392958c70..4774cb337c27253ab84402aa5401826e88f5be89 100644 (file)
@@ -18,6 +18,7 @@
       <mac address='00:16:3E:66:94:9C'/>
       <ip address='192.168.0.9'/>
     </interface>
+    <input type='mouse' bus='xen'/>
     <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
     <console/>
   </devices>
index 3d0c7e8998ac147a360d5f80449f4df916b753c2..524ef52f7f645078f64d8e620f7a996b38496a1f 100644 (file)
@@ -148,73 +148,104 @@ static int testCompareFormatXML(const char *xmcfg, const char *xml, int xendConf
     return ret;
 }
 
-static int testCompareParavirtOldPVFBFormat(void *data ATTRIBUTE_UNUSED) {
+static int testCompareParavirtOldPVFBFormat(const void *data ATTRIBUTE_UNUSED) {
     return testCompareFormatXML("xmconfigdata/test-paravirt-old-pvfb.cfg",
                                 "xmconfigdata/test-paravirt-old-pvfb.xml",
                                 2);
 }
-static int testCompareParavirtOldPVFBParse(void *data ATTRIBUTE_UNUSED) {
+static int testCompareParavirtOldPVFBParse(const void *data ATTRIBUTE_UNUSED) {
     return testCompareParseXML("xmconfigdata/test-paravirt-old-pvfb.cfg",
                                "xmconfigdata/test-paravirt-old-pvfb.xml",
                                2);
 }
 
-static int testCompareParavirtNewPVFBFormat(void *data ATTRIBUTE_UNUSED) {
+static int testCompareParavirtNewPVFBFormat(const void *data ATTRIBUTE_UNUSED) {
     return testCompareFormatXML("xmconfigdata/test-paravirt-new-pvfb.cfg",
                                 "xmconfigdata/test-paravirt-new-pvfb.xml",
                                 3);
 }
-static int testCompareParavirtNewPVFBParse(void *data ATTRIBUTE_UNUSED) {
+static int testCompareParavirtNewPVFBParse(const void *data ATTRIBUTE_UNUSED) {
     return testCompareParseXML("xmconfigdata/test-paravirt-new-pvfb.cfg",
                                "xmconfigdata/test-paravirt-new-pvfb.xml",
                                3);
 }
 
-static int testCompareFullvirtOldCDROMFormat(void *data ATTRIBUTE_UNUSED) {
+static int testCompareFullvirtOldCDROMFormat(const void *data ATTRIBUTE_UNUSED) {
     return testCompareFormatXML("xmconfigdata/test-fullvirt-old-cdrom.cfg",
                                 "xmconfigdata/test-fullvirt-old-cdrom.xml",
                                 1);
 }
-static int testCompareFullvirtOldCDROMParse(void *data ATTRIBUTE_UNUSED) {
+static int testCompareFullvirtOldCDROMParse(const void *data ATTRIBUTE_UNUSED) {
     return testCompareParseXML("xmconfigdata/test-fullvirt-old-cdrom.cfg",
                                "xmconfigdata/test-fullvirt-old-cdrom.xml",
                                1);
 }
 
-static int testCompareFullvirtNewCDROMFormat(void *data ATTRIBUTE_UNUSED) {
+static int testCompareFullvirtNewCDROMFormat(const void *data ATTRIBUTE_UNUSED) {
     return testCompareFormatXML("xmconfigdata/test-fullvirt-new-cdrom.cfg",
                                 "xmconfigdata/test-fullvirt-new-cdrom.xml",
                                 2);
 }
-static int testCompareFullvirtNewCDROMParse(void *data ATTRIBUTE_UNUSED) {
+static int testCompareFullvirtNewCDROMParse(const void *data ATTRIBUTE_UNUSED) {
     return testCompareParseXML("xmconfigdata/test-fullvirt-new-cdrom.cfg",
                                "xmconfigdata/test-fullvirt-new-cdrom.xml",
                                2);
 }
 
-static int testCompareFullvirtClockUTCFormat(void *data ATTRIBUTE_UNUSED) {
+static int testCompareFullvirtClockUTCFormat(const void *data ATTRIBUTE_UNUSED) {
     return testCompareFormatXML("xmconfigdata/test-fullvirt-utc.cfg",
                                 "xmconfigdata/test-fullvirt-utc.xml",
                                 2);
 }
 
-static int testCompareFullvirtClockUTCParse(void *data ATTRIBUTE_UNUSED) {
+static int testCompareFullvirtClockUTCParse(const void *data ATTRIBUTE_UNUSED) {
     return testCompareParseXML("xmconfigdata/test-fullvirt-utc.cfg",
                                "xmconfigdata/test-fullvirt-utc.xml",
                                2);
 }
 
-static int testCompareFullvirtClockLocaltimeFormat(void *data ATTRIBUTE_UNUSED) {
+static int testCompareFullvirtClockLocaltimeFormat(const void *data ATTRIBUTE_UNUSED) {
     return testCompareFormatXML("xmconfigdata/test-fullvirt-localtime.cfg",
                                 "xmconfigdata/test-fullvirt-localtime.xml",
                                 2);
 }
-static int testCompareFullvirtClockLocaltimeParse(void *data ATTRIBUTE_UNUSED) {
+
+static int testCompareFullvirtClockLocaltimeParse(const void *data ATTRIBUTE_UNUSED) {
     return testCompareParseXML("xmconfigdata/test-fullvirt-localtime.cfg",
                                "xmconfigdata/test-fullvirt-localtime.xml",
                                2);
 }
 
+static int testCompareFullvirtInputUSBTabletFormat(const void *data ATTRIBUTE_UNUSED) {
+    return testCompareFormatXML("xmconfigdata/test-fullvirt-usbtablet.cfg",
+                               "xmconfigdata/test-fullvirt-usbtablet.xml",
+                               2);
+}
+
+static int testCompareFullvirtInputUSBTabletParse(const void *data ATTRIBUTE_UNUSED) {
+    return testCompareParseXML("xmconfigdata/test-fullvirt-usbtablet.cfg",
+                               "xmconfigdata/test-fullvirt-usbtablet.xml",
+                               2);
+}
+
+static int testCompareFullvirtInputUSBTabletNoBusParse(const void *data ATTRIBUTE_UNUSED) {
+    return testCompareParseXML("xmconfigdata/test-fullvirt-usbtablet.cfg",
+                               "xmconfigdata/test-fullvirt-usbtablet-no-bus.xml",
+                               2);
+}
+
+static int testCompareFullvirtInputUSBMouseFormat(const void *data ATTRIBUTE_UNUSED) {
+    return testCompareParseXML("xmconfigdata/test-fullvirt-usbmouse.cfg",
+                               "xmconfigdata/test-fullvirt-usbmouse.xml",
+                               2);
+}
+
+static int testCompareFullvirtInputUSBMouseParse(const void *data ATTRIBUTE_UNUSED) {
+    return testCompareParseXML("xmconfigdata/test-fullvirt-usbmouse.cfg",
+                               "xmconfigdata/test-fullvirt-usbmouse.xml",
+                               2);
+}
+
 
 int
 main(int argc, char **argv)
@@ -247,6 +278,12 @@ main(int argc, char **argv)
     if (virtTestRun("Fullvirt clock UTC (Format)",
                     1, testCompareFullvirtClockUTCFormat, NULL) != 0)
         ret = -1;
+    if (virtTestRun("Fullvirt USB mouse (Format)",
+                    1, testCompareFullvirtInputUSBMouseFormat, NULL) != 0)
+        ret = -1;
+    if (virtTestRun("Fullvirt USB tablet (Format)",
+                    1, testCompareFullvirtInputUSBTabletFormat, NULL) != 0)
+        ret = -1;
 
     /* XML -> Config */
     if (virtTestRun("Paravirt old PVFB (Parse)",
@@ -267,6 +304,16 @@ main(int argc, char **argv)
     if (virtTestRun("Fullvirt clock UTC (Parse)",
                     1, testCompareFullvirtClockUTCParse, NULL) != 0)
         ret = -1;
+    if (virtTestRun("Fullvirt USB mouse (Parse)",
+                    1, testCompareFullvirtInputUSBMouseParse, NULL) != 0)
+        ret = -1;
+    if (virtTestRun("Fullvirt USB tablet (Parse)",
+                    1, testCompareFullvirtInputUSBTabletParse, NULL) != 0)
+        ret = -1;
+    if (virtTestRun("Fullvirt USB tablet no bus (Parse)",
+                    1, testCompareFullvirtInputUSBTabletNoBusParse, NULL) != 0)
+        ret = -1;
+
 
     exit(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
 }
index c8b7543f01088f51359e256b33ba5e72c29357ed..92e6f20f6e3a6a4348a503c4c72b0ca9bb392389 100644 (file)
@@ -1 +1 @@
-(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(vnc 1)(localtime 1)))(device (vbd (dev 'ioemu:hda')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu))))
\ No newline at end of file
+(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(vnc 1)(localtime 1)))(device (vbd (dev 'ioemu:hda')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu))))
\ No newline at end of file
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-usbmouse.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-usbmouse.sexpr
new file mode 100644 (file)
index 0000000..f565d76
--- /dev/null
@@ -0,0 +1 @@
+(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(usbdevice mouse)(vnc 1)))(device (vbd (dev 'ioemu:hda')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu))))
\ No newline at end of file
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-usbmouse.xml b/tests/xml2sexprdata/xml2sexpr-fv-usbmouse.xml
new file mode 100644 (file)
index 0000000..354152e
--- /dev/null
@@ -0,0 +1,37 @@
+<domain type='xen'>
+  <name>fvtest</name>
+  <uuid>b5d70dd275cdaca517769660b059d8bc</uuid>
+  <os>
+    <type>hvm</type>
+    <loader>/usr/lib/xen/boot/hvmloader</loader>
+    <boot dev='hd'/>
+  </os>
+  <memory>409600</memory>
+  <vcpu>1</vcpu>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>restart</on_crash>
+  <features>
+    <acpi/>
+  </features>
+  <devices>
+    <emulator>/usr/lib64/xen/bin/qemu-dm</emulator>
+    <interface type='bridge'>
+      <source bridge='xenbr0'/>
+      <mac address='00:16:3e:1b:b1:47'/>
+      <script path='vif-bridge'/>
+    </interface>
+    <disk type='file' device='cdrom'>
+      <source file='/root/boot.iso'/>
+      <target dev='hdc'/>
+      <readonly/>
+    </disk>
+    <disk type='file'>
+      <source file='/root/foo.img'/>
+      <target dev='ioemu:hda'/>
+    </disk>
+    <input type='mouse' bus='usb'/>
+    <graphics type='vnc' port='5917' keymap='ja'/>
+  </devices>
+</domain>
+
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-usbtablet.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-usbtablet.sexpr
new file mode 100644 (file)
index 0000000..617f2d8
--- /dev/null
@@ -0,0 +1 @@
+(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(usbdevice tablet)(vnc 1)))(device (vbd (dev 'ioemu:hda')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu))))
\ No newline at end of file
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-usbtablet.xml b/tests/xml2sexprdata/xml2sexpr-fv-usbtablet.xml
new file mode 100644 (file)
index 0000000..0c4a26c
--- /dev/null
@@ -0,0 +1,37 @@
+<domain type='xen'>
+  <name>fvtest</name>
+  <uuid>b5d70dd275cdaca517769660b059d8bc</uuid>
+  <os>
+    <type>hvm</type>
+    <loader>/usr/lib/xen/boot/hvmloader</loader>
+    <boot dev='hd'/>
+  </os>
+  <memory>409600</memory>
+  <vcpu>1</vcpu>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>restart</on_crash>
+  <features>
+    <acpi/>
+  </features>
+  <devices>
+    <emulator>/usr/lib64/xen/bin/qemu-dm</emulator>
+    <interface type='bridge'>
+      <source bridge='xenbr0'/>
+      <mac address='00:16:3e:1b:b1:47'/>
+      <script path='vif-bridge'/>
+    </interface>
+    <disk type='file' device='cdrom'>
+      <source file='/root/boot.iso'/>
+      <target dev='hdc'/>
+      <readonly/>
+    </disk>
+    <disk type='file'>
+      <source file='/root/foo.img'/>
+      <target dev='ioemu:hda'/>
+    </disk>
+    <input type='tablet' bus='usb'/>
+    <graphics type='vnc' port='5917' keymap='ja'/>
+  </devices>
+</domain>
+
index 839910035b228b6e0fbb5e2047de2b3a081514a0..26d4b824100e90c8c84700ca821a49b57e9c3299 100644 (file)
@@ -1 +1 @@
-(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(vnc 1)))(device (vbd (dev 'ioemu:hda')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu))))
\ No newline at end of file
+(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(vnc 1)))(device (vbd (dev 'ioemu:hda')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu))))
\ No newline at end of file
index 28f31d2308b8764448931304421c526a58e93fc0..8b465ee40932b28502ff776c8cfb35d8ebc27904 100644 (file)
@@ -1 +1 @@
-(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(vcpus 1)(boot c)(acpi 1)(vnc 1)(vncdisplay 17)(keymap ja)))(device (vbd (dev 'hdc:cdrom')(uname 'file:/root/boot.iso')(mode 'r')))(device (vbd (dev 'hda:disk')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu))))
\ No newline at end of file
+(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(vcpus 1)(boot c)(acpi 1)(usb 1)(vnc 1)(vncdisplay 17)(keymap ja)))(device (vbd (dev 'hdc:cdrom')(uname 'file:/root/boot.iso')(mode 'r')))(device (vbd (dev 'hda:disk')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu))))
\ No newline at end of file
index c7946ee4d42a51468b06a67a78726b19b909a9f7..282538dd11b0a7dda4d461593c262362233c7821 100644 (file)
@@ -1 +1 @@
-(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(vcpus 1)(boot c)(acpi 1)(vnc 1)(vncunused 1)(keymap ja)))(device (vbd (dev 'hdc:cdrom')(uname 'file:/root/boot.iso')(mode 'r')))(device (vbd (dev 'hda:disk')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu))))
\ No newline at end of file
+(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(vcpus 1)(boot c)(acpi 1)(usb 1)(vnc 1)(vncunused 1)(keymap ja)))(device (vbd (dev 'hdc:cdrom')(uname 'file:/root/boot.iso')(mode 'r')))(device (vbd (dev 'hda:disk')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu))))
\ No newline at end of file
index 839910035b228b6e0fbb5e2047de2b3a081514a0..26d4b824100e90c8c84700ca821a49b57e9c3299 100644 (file)
@@ -1 +1 @@
-(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(vnc 1)))(device (vbd (dev 'ioemu:hda')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu))))
\ No newline at end of file
+(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(vnc 1)))(device (vbd (dev 'ioemu:hda')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu))))
\ No newline at end of file
index a027cd02edfb54b41459885d50ddac76769f57e1..8c9af2745a5270aa2d5083dd7d282f376c276d2d 100644 (file)
@@ -1 +1 @@
-(vm (name 'test')(memory 350)(maxmem 382)(vcpus 1)(uuid 'cc2315e7d26a307a438c6d188ec4c09c')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib/xen/bin/qemu-dm')(vcpus 1)(boot c)(acpi 1)(apic 1)(pae 1)(vnc 1)(vncdisplay 6)))(device (vbd (dev 'hda:disk:disk')(uname 'phy:/dev/sda8')(mode 'w')))(device (vbd (dev 'hdc:cdrom')(mode 'r')))(device (vif (mac '00:16:3e:0a:7b:39')(type ioemu))))
\ No newline at end of file
+(vm (name 'test')(memory 350)(maxmem 382)(vcpus 1)(uuid 'cc2315e7d26a307a438c6d188ec4c09c')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib/xen/bin/qemu-dm')(vcpus 1)(boot c)(acpi 1)(apic 1)(pae 1)(usb 1)(vnc 1)(vncdisplay 6)))(device (vbd (dev 'hda:disk:disk')(uname 'phy:/dev/sda8')(mode 'w')))(device (vbd (dev 'hdc:cdrom')(mode 'r')))(device (vif (mac '00:16:3e:0a:7b:39')(type ioemu))))
\ No newline at end of file
index f798995edd54c39bfd20b7c9a2bff2e059a56cb9..6c4cf1f36ce34b6c5bd813d7669d3bfec748162a 100644 (file)
@@ -30,11 +30,11 @@ static int testCompareFiles(const char *xml, const char *sexpr, const char *name
   if (!(gotsexpr = virDomainParseXMLDesc(NULL, xmlData, &gotname, xendConfigVersion)))
     goto fail;
 
-  if (getenv("DEBUG_TESTS")) {
-      printf("Expect %d '%s'\n", (int)strlen(sexprData), sexprData);
-      printf("Actual %d '%s'\n", (int)strlen(gotsexpr), gotsexpr);
-  }
   if (strcmp(sexprData, gotsexpr)) {
+      if (getenv("DEBUG_TESTS")) {
+       printf("Expect %d '%s'\n", (int)strlen(sexprData), sexprData);
+       printf("Actual %d '%s'\n", (int)strlen(gotsexpr), gotsexpr);
+      }
       goto fail;
   }
 
@@ -202,6 +202,22 @@ static int testCompareFVclockLocaltime(void *data ATTRIBUTE_UNUSED) {
 }
 
 
+static int testCompareFVInputUSBMouse(void *data ATTRIBUTE_UNUSED) {
+  return testCompareFiles("xml2sexprdata/xml2sexpr-fv-usbmouse.xml",
+                         "xml2sexprdata/xml2sexpr-fv-usbmouse.sexpr",
+                         "fvtest",
+                         1);
+}
+
+static int testCompareFVInputUSBTablet(void *data ATTRIBUTE_UNUSED) {
+  return testCompareFiles("xml2sexprdata/xml2sexpr-fv-usbtablet.xml",
+                         "xml2sexprdata/xml2sexpr-fv-usbtablet.sexpr",
+                         "fvtest",
+                         1);
+}
+
+
+
 int
 main(int argc, char **argv)
 {
@@ -290,6 +306,13 @@ main(int argc, char **argv)
                    1, testCompareNoSourceCDRom, NULL) != 0)
        ret = -1;
 
+    if (virtTestRun("XML-2-SEXPR FV usb mouse)",
+                   1, testCompareFVInputUSBMouse, NULL) != 0)
+       ret = -1;
+    if (virtTestRun("XML-2-SEXPR FV usb tablet)",
+                   1, testCompareFVInputUSBTablet, NULL) != 0)
+       ret = -1;
+
     if (virtTestRun("XML-2-SEXPR clock UTC",
                    1, testCompareFVclockUTC, NULL) != 0)
        ret = -1;