? tests/qemuxml2argvdata ? tests/qemuxml2argvtest ? tests/qemuxml2argvtest.c ? tests/qemuxml2xmltest ? tests/qemuxml2xmltest.c Index: src/qemu_conf.c =================================================================== RCS file: /data/cvs/libvirt/src/qemu_conf.c,v retrieving revision 1.3 diff -u -p -u -p -r1.3 qemu_conf.c --- src/qemu_conf.c 16 Jul 2007 21:30:30 -0000 1.3 +++ src/qemu_conf.c 17 Jul 2007 18:47:14 -0000 @@ -806,6 +806,74 @@ static struct qemud_vm_net_def *qemudPar } +/* 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 @@ -1091,7 +1159,6 @@ static struct qemud_vm_def *qemudParseXM } else if (!strcmp((char *)prop, "net")) { def->os.bootDevs[def->os.nBootDevs++] = QEMUD_BOOT_NET; } else { - xmlFree(prop); goto error; } xmlFree(prop); @@ -1193,6 +1260,61 @@ static struct qemud_vm_def *qemudParseXM } } 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 +1429,7 @@ int qemudBuildCommandLine(virConnectPtr 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 +1471,8 @@ int qemudBuildCommandLine(virConnectPtr 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 +1686,19 @@ int qemudBuildCommandLine(virConnectPtr } } + 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 +2679,7 @@ char *qemudGenerateXML(virConnectPtr con 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 +2908,19 @@ char *qemudGenerateXML(virConnectPtr con net = net->next; } + input = def->inputs; + while (input) { + if (input->bus != QEMU_INPUT_BUS_PS2 && + virBufferVSprintf(buf, " \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, " \n", -1) < 0) + goto no_memory; + switch (def->graphicsType) { case QEMUD_GRAPHICS_VNC: if (virBufferAdd(buf, " \n", hvm ? "ps2": "xen"); virBufferAdd(&buf, " \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, " \n", hvm ? "ps2": "xen"); virBufferVSprintf(&buf, " 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, " \n", 37); + else if (!strcmp(tmp, "usbmouse")) + virBufferAdd(&buf, " \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, */ if (port == -1 && xendConfigVersion < 2) port = 5900 + domid; + virBufferVSprintf(&buf, " \n", hvm ? "ps2" : "xen"); virBufferVSprintf(&buf, " \n", hvm ? "ps2" : "xen"); virBufferAdd(&buf, " \n", 27 ); + } } } Index: src/xm_internal.c =================================================================== RCS file: /data/cvs/libvirt/src/xm_internal.c,v retrieving revision 1.37 diff -u -p -u -p -r1.37 xm_internal.c --- src/xm_internal.c 16 Jul 2007 21:30:30 -0000 1.37 +++ src/xm_internal.c 17 Jul 2007 18:47:14 -0000 @@ -913,6 +913,17 @@ char *xenXMDomainFormatXML(virConnectPtr } } + if (hvm) { + if (xenXMConfigGetString(conf, "usbdevice", &str) == 0 && str) { + if (!strcmp(str, "tablet")) + virBufferAdd(buf, " \n", 37); + else if (!strcmp(str, "mouse")) + virBufferAdd(buf, " \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 } } + if (vnc || sdl) { + virBufferVSprintf(buf, " \n", hvm ? "ps2":"xen"); + } if (vnc) { virBufferVSprintf(buf, " xendConfigVersion < 3) { Index: src/xml.c =================================================================== RCS file: /data/cvs/libvirt/src/xml.c,v retrieving revision 1.84 diff -u -p -u -p -r1.84 xml.c --- src/xml.c 16 Jul 2007 21:30:30 -0000 1.84 +++ src/xml.c 17 Jul 2007 18:47:14 -0000 @@ -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 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 return (0); error: + if (nodes) + free(nodes); return(-1); } Index: tests/Makefile.am =================================================================== RCS file: /data/cvs/libvirt/tests/Makefile.am,v retrieving revision 1.20 diff -u -p -u -p -r1.20 Makefile.am --- tests/Makefile.am 4 Jul 2007 09:16:23 -0000 1.20 +++ tests/Makefile.am 17 Jul 2007 18:47:14 -0000 @@ -32,9 +32,10 @@ LDADDS = \ EXTRA_DIST = xmlrpcserver.py test_conf.sh noinst_PROGRAMS = xmlrpctest xml2sexprtest sexpr2xmltest virshtest conftest \ - reconnect xmconfigtest xencapstest + reconnect xmconfigtest xencapstest qemuxml2argvtest qemuxml2xmltest -TESTS = xml2sexprtest sexpr2xmltest virshtest test_conf.sh xmconfigtest xencapstest +TESTS = xml2sexprtest sexpr2xmltest virshtest test_conf.sh xmconfigtest \ + xencapstest qemuxml2argvtest qemuxml2xmltest if ENABLE_XEN_TESTS TESTS += reconnect endif @@ -70,6 +71,18 @@ xmconfigtest_SOURCES = \ xmconfigtest_LDFLAGS = xmconfigtest_LDADD = $(LDADDS) +qemuxml2argvtest_SOURCES = \ + qemuxml2argvtest.c \ + testutils.c testutils.h +qemuxml2argvtest_LDFLAGS = +qemuxml2argvtest_LDADD = $(LDADDS) + +qemuxml2xmltest_SOURCES = \ + qemuxml2xmltest.c \ + testutils.c testutils.h +qemuxml2xmltest_LDFLAGS = +qemuxml2xmltest_LDADD = $(LDADDS) + virshtest_SOURCES = \ virshtest.c \ testutils.c testutils.h Index: tests/sexpr2xmltest.c =================================================================== RCS file: /data/cvs/libvirt/tests/sexpr2xmltest.c,v retrieving revision 1.14 diff -u -p -u -p -r1.14 sexpr2xmltest.c --- tests/sexpr2xmltest.c 16 Jul 2007 21:30:30 -0000 1.14 +++ tests/sexpr2xmltest.c 17 Jul 2007 18:47:14 -0000 @@ -44,113 +44,124 @@ static int testCompareFiles(const char * 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: tests/testutils.c =================================================================== RCS file: /data/cvs/libvirt/tests/testutils.c,v retrieving revision 1.6 diff -u -p -u -p -r1.6 testutils.c --- tests/testutils.c 15 Jun 2007 15:24:20 -0000 1.6 +++ tests/testutils.c 17 Jul 2007 18:47:14 -0000 @@ -52,7 +52,7 @@ virtTestCountAverage(double *items, int * 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: tests/testutils.h =================================================================== RCS file: /data/cvs/libvirt/tests/testutils.h,v retrieving revision 1.3 diff -u -p -u -p -r1.3 testutils.h --- tests/testutils.h 24 Aug 2006 21:46:28 -0000 1.3 +++ tests/testutils.h 17 Jul 2007 18:47:14 -0000 @@ -17,23 +17,31 @@ 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: tests/virshtest.c =================================================================== RCS file: /data/cvs/libvirt/tests/virshtest.c,v retrieving revision 1.4 diff -u -p -u -p -r1.4 virshtest.c --- tests/virshtest.c 15 Jun 2007 15:24:20 -0000 1.4 +++ tests/virshtest.c 17 Jul 2007 18:47:15 -0000 @@ -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 * 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 *d } -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(vo 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(voi 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 * } -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 } -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 } -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 * 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 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 * } -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 * } -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 * } -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 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 } -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(voi argv); } -static int testCompareDomstateByName(void *data ATTRIBUTE_UNUSED) { +static int testCompareDomstateByName(const void *data ATTRIBUTE_UNUSED) { const char *const argv[] = { VIRSH_CUSTOM, "domstate", Index: tests/xencapstest.c =================================================================== RCS file: /data/cvs/libvirt/tests/xencapstest.c,v retrieving revision 1.2 diff -u -p -u -p -r1.2 xencapstest.c --- tests/xencapstest.c 29 May 2007 14:44:15 -0000 1.2 +++ tests/xencapstest.c 17 Jul 2007 18:47:15 -0000 @@ -60,21 +60,21 @@ static int testCompareFiles(const char * 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 /* 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 ATT } */ -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: tests/xmconfigtest.c =================================================================== RCS file: /data/cvs/libvirt/tests/xmconfigtest.c,v retrieving revision 1.5 diff -u -p -u -p -r1.5 xmconfigtest.c --- tests/xmconfigtest.c 16 Jul 2007 21:30:30 -0000 1.5 +++ tests/xmconfigtest.c 17 Jul 2007 18:47:15 -0000 @@ -148,73 +148,104 @@ static int testCompareFormatXML(const ch 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: tests/xml2sexprtest.c =================================================================== RCS file: /data/cvs/libvirt/tests/xml2sexprtest.c,v retrieving revision 1.13 diff -u -p -u -p -r1.13 xml2sexprtest.c --- tests/xml2sexprtest.c 16 Jul 2007 21:30:30 -0000 1.13 +++ tests/xml2sexprtest.c 17 Jul 2007 18:47:15 -0000 @@ -30,11 +30,11 @@ static int testCompareFiles(const char * 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(v } +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; Index: tests/sexpr2xmldata/sexpr2xml-curmem.xml =================================================================== RCS file: /data/cvs/libvirt/tests/sexpr2xmldata/sexpr2xml-curmem.xml,v retrieving revision 1.1 diff -u -p -u -p -r1.1 sexpr2xml-curmem.xml --- tests/sexpr2xmldata/sexpr2xml-curmem.xml 10 Nov 2006 11:13:01 -0000 1.1 +++ tests/sexpr2xmldata/sexpr2xml-curmem.xml 17 Jul 2007 18:47:15 -0000 @@ -25,6 +25,7 @@ + Index: tests/sexpr2xmldata/sexpr2xml-fv-localtime.xml =================================================================== RCS file: /data/cvs/libvirt/tests/sexpr2xmldata/sexpr2xml-fv-localtime.xml,v retrieving revision 1.1 diff -u -p -u -p -r1.1 sexpr2xml-fv-localtime.xml --- tests/sexpr2xmldata/sexpr2xml-fv-localtime.xml 16 Jul 2007 21:30:30 -0000 1.1 +++ tests/sexpr2xmldata/sexpr2xml-fv-localtime.xml 17 Jul 2007 18:47:15 -0000 @@ -33,6 +33,7 @@ + Index: tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.sexpr =================================================================== RCS file: tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.sexpr diff -N tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.sexpr --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.sexpr 17 Jul 2007 18:47:15 -0000 @@ -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)))) Index: tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.xml =================================================================== RCS file: tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.xml diff -N tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.xml --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.xml 17 Jul 2007 18:47:15 -0000 @@ -0,0 +1,40 @@ + + fvtest + b5d70dd275cdaca517769660b059d8bc + + hvm + /usr/lib/xen/boot/hvmloader + + + 409600 + 1 + destroy + restart + restart + + + + + + /usr/lib64/xen/bin/qemu-dm + + + + + + + + +