diff options
author | Daniel P. Berrange <berrange@redhat.com> | 2006-10-09 14:32:07 +0000 |
---|---|---|
committer | Daniel P. Berrange <berrange@redhat.com> | 2006-10-09 14:32:07 +0000 |
commit | 16a65d1c93b9dc8eb7843ab2b9aa8aebbea54414 (patch) | |
tree | 67310269653a64d6851f1db09b2291b8869363d4 | |
parent | a98ac28b16a92fee40cd3eb913a9936bbe6a078c (diff) | |
download | libvirt-16a65d1c93b9dc8eb7843ab2b9aa8aebbea54414.tar.gz |
Added support for <driver> element and blktap
30 files changed, 618 insertions, 141 deletions
@@ -1,3 +1,13 @@ +Mon Oct 9 09:34:42 EDT 2006 Daniel P. Berrange <berrange@redhat.com> + + * src/xml.c, src/xend_internal.c: Added support for a <driver> + element in disk specification, allowing use of alternate Xen + drivers such as blktap. + * tests/xml2sexprtest.c, tests/sexpr2xmltest.c: Added tests for + new <driver> element, and blktap driver impl. + * tests/xml2sexprdata/*, tests/sexpr2xmldata/*: New / updated + data files for new <driver> element + Fri Oct 6 10:33:20 EDT 2006 Daniel P. Berrange <berrange@redhat.com> * src/xend_internal.c: Fixed memory leak in xend_get_config_version diff --git a/src/xend_internal.c b/src/xend_internal.c index 70b162fa94..bcb349119e 100644 --- a/src/xend_internal.c +++ b/src/xend_internal.c @@ -1451,7 +1451,7 @@ xend_parse_sexp_desc_os(struct sexpr *node, virBufferPtr buf, int hvm) /** * xend_parse_sexp_desc: - * @domain: the domain associated with the XML + * @conn: the connection associated with the XML * @root: the root of the parsed S-Expression * * Parse the xend sexp description and turn it into the XML format similar @@ -1487,7 +1487,7 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root, int xendConfigVersi tmp = sexpr_node(root, "domain/name"); if (tmp == NULL) { - virXendError(NULL, VIR_ERR_INTERNAL_ERROR, + virXendError(conn, VIR_ERR_INTERNAL_ERROR, _("domain information incomplete, missing name")); goto error; } @@ -1498,10 +1498,11 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root, int xendConfigVersi int i, j; for (i = 0, j = 0;(i < 32) && (tmp[j] != 0);j++) { if (((tmp[j] >= '0') && (tmp[j] <= '9')) || - ((tmp[j] >= 'a') && (tmp[j] <= 'f'))) - compact[i++] = tmp[j]; - else if ((tmp[j] >= 'A') && (tmp[j] <= 'F')) + ((tmp[j] >= 'a') && (tmp[j] <= 'f'))) { + compact[i++] = tmp[j]; + } else if ((tmp[j] >= 'A') && (tmp[j] <= 'F')) { compact[i++] = tmp[j] + 'a' - 'A'; + } } compact[i] = 0; if (i > 0) @@ -1509,7 +1510,7 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root, int xendConfigVersi } tmp = sexpr_node(root, "domain/bootloader"); if (tmp != NULL) - virBufferVSprintf(&buf, " <bootloader>%s</bootloader>\n", tmp); + virBufferVSprintf(&buf, " <bootloader>%s</bootloader>\n", tmp); if (sexpr_lookup(root, "domain/image")) { hvm = sexpr_lookup(root, "domain/image/hvm") ? 1 : 0; @@ -1522,13 +1523,13 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root, int xendConfigVersi sexpr_int(root, "domain/vcpus")); tmp = sexpr_node(root, "domain/on_poweroff"); if (tmp != NULL) - virBufferVSprintf(&buf, " <on_poweroff>%s</on_poweroff>\n", tmp); + virBufferVSprintf(&buf, " <on_poweroff>%s</on_poweroff>\n", tmp); tmp = sexpr_node(root, "domain/on_reboot"); if (tmp != NULL) - virBufferVSprintf(&buf, " <on_reboot>%s</on_reboot>\n", tmp); + virBufferVSprintf(&buf, " <on_reboot>%s</on_reboot>\n", tmp); tmp = sexpr_node(root, "domain/on_crash"); if (tmp != NULL) - virBufferVSprintf(&buf, " <on_crash>%s</on_crash>\n", tmp); + virBufferVSprintf(&buf, " <on_crash>%s</on_crash>\n", tmp); if (hvm) { virBufferAdd(&buf, " <features>\n", 13); @@ -1546,105 +1547,150 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root, int xendConfigVersi /* in case of HVM we have devices emulation */ tmp = sexpr_node(root, "domain/image/hvm/device_model"); if ((tmp != NULL) && (tmp[0] != 0)) - virBufferVSprintf(&buf, " <emulator>%s</emulator>\n", tmp); + virBufferVSprintf(&buf, " <emulator>%s</emulator>\n", tmp); for (cur = root; cur->kind == SEXPR_CONS; cur = cur->cdr) { node = cur->car; - if (sexpr_lookup(node, "device/vbd")) { - tmp = sexpr_node(node, "device/vbd/uname"); - if (tmp == NULL) - continue; - if (!memcmp(tmp, "file:", 5)) { - int cdrom = 0; - const char *src = tmp+5; - const char *dst = sexpr_node(node, "device/vbd/dev"); - - if (dst == NULL) { - virXendError(NULL, VIR_ERR_INTERNAL_ERROR, - _("domain information incomplete, vbd has no dev")); - goto error; - } + /* Normally disks are in a (device (vbd ...)) block + but blktap disks ended up in a differently named + (device (tap ....)) block.... */ + if (sexpr_lookup(node, "device/vbd") || + sexpr_lookup(node, "device/tap")) { + char *offset; + int isBlock = 0; + int cdrom = 0; + char *drvName = NULL; + char *drvType = NULL; + const char *src = NULL; + const char *dst = NULL; + const char *mode = NULL; + + /* Again dealing with (vbd...) vs (tap ...) differences */ + if (sexpr_lookup(node, "device/vbd")) { + src = sexpr_node(node, "device/vbd/uname"); + dst = sexpr_node(node, "device/vbd/dev"); + mode = sexpr_node(node, "device/vbd/mode"); + } else { + src = sexpr_node(node, "device/tap/uname"); + dst = sexpr_node(node, "device/tap/dev"); + mode = sexpr_node(node, "device/tap/mode"); + } - if (!strncmp(dst, "ioemu:", 6)) - dst += 6; - /* New style disk config from Xen >= 3.0.3 */ - if (xendConfigVersion > 1) { - char *offset = rindex(dst, ':'); - if (offset) { - if (!strcmp(offset, ":cdrom")) { - cdrom = 1; - } else if (!strcmp(offset, ":disk")) { - /* defualt anyway */ - } else { - /* Unknown, lets pretend its a disk */ - } - offset[0] = '\0'; - } + if (src == NULL) { + virXendError(conn, VIR_ERR_INTERNAL_ERROR, + _("domain information incomplete, vbd has no src")); + goto bad_parse; + } + + if (dst == NULL) { + virXendError(conn, VIR_ERR_INTERNAL_ERROR, + _("domain information incomplete, vbd has no dev")); + goto bad_parse; + } + + + offset = strchr(src, ':'); + if (!offset) { + virXendError(conn, VIR_ERR_INTERNAL_ERROR, + _("cannot parse vbd filename, missing driver name")); + goto bad_parse; + } + + drvName = malloc((offset-src)+1); + if (!drvName) { + virXendError(conn, VIR_ERR_NO_MEMORY, + _("allocate new buffer")); + goto bad_parse; + } + strncpy(drvName, src, (offset-src)); + drvName[offset-src] = '\0'; + + src = offset + 1; + + if (!strcmp(drvName, "tap")) { + offset = strchr(src, ':'); + if (!offset) { + virXendError(conn, VIR_ERR_INTERNAL_ERROR, + _("cannot parse vbd filename, missing driver type")); + goto bad_parse; } - virBufferVSprintf(&buf, " <disk type='file' device='%s'>\n", cdrom ? "cdrom" : "disk"); - virBufferVSprintf(&buf, " <source file='%s'/>\n", src); - virBufferVSprintf(&buf, " <target dev='%s'/>\n", dst); - tmp = sexpr_node(node, "device/vbd/mode"); - /* XXX should we force mode == r, if cdrom==1, or assume - xend has already done this ? */ - if ((tmp != NULL) && (!strcmp(tmp, "r"))) - virBufferVSprintf(&buf, " <readonly/>\n"); - virBufferAdd(&buf, " </disk>\n", 12); - } else if (!memcmp(tmp, "phy:", 4)) { - int cdrom = 0; - const char *src = tmp+4; - const char *dst = sexpr_node(node, "device/vbd/dev"); - - if (dst == NULL) { - virXendError(NULL, VIR_ERR_INTERNAL_ERROR, - _("domain information incomplete, vbd has no dev")); - goto error; + drvType = malloc((offset-src)+1); + if (!drvType) { + virXendError(conn, VIR_ERR_NO_MEMORY, + _("allocate new buffer")); + goto bad_parse; } + strncpy(drvType, src, (offset-src)); + drvType[offset-src] = '\0'; + src = offset + 1; + /* Its possible to use blktap driver for block devs + too, but kinda pointless because blkback is better, + so we assume common case here. If blktap becomes + omnipotent, we can revisit this, perhaps stat()'ing + the src file in question */ + isBlock = 0; + } else if (!strcmp(drvName, "phy")) { + isBlock = 1; + } else if (!strcmp(drvName, "file")) { + isBlock = 0; + } - if (!strncmp(dst, "ioemu:", 6)) - dst += 6; - /* New style cdrom config from Xen >= 3.0.3 */ - if (xendConfigVersion > 1) { - char *offset = rindex(dst, ':'); - if (offset) { - if (!strcmp(offset, ":cdrom")) { - cdrom = 1; - } else if (!strcmp(offset, ":disk")) { - /* defualt anyway */ - } else { - /* Unknown, lets pretend its a disk */ - } - offset[0] = '\0'; + if (!strncmp(dst, "ioemu:", 6)) + dst += 6; + + /* New style disk config from Xen >= 3.0.3 */ + if (xendConfigVersion > 1) { + offset = rindex(dst, ':'); + if (offset) { + if (!strcmp(offset, ":cdrom")) { + cdrom = 1; + } else if (!strcmp(offset, ":disk")) { + /* The default anyway */ + } else { + /* Unknown, lets pretend its a disk too */ } + offset[0] = '\0'; } + } - virBufferVSprintf(&buf, " <disk type='block' device='%s'>\n", cdrom ? "cdrom" : "disk"); + virBufferVSprintf(&buf, " <disk type='%s' device='%s'>\n", + isBlock ? "block" : "file", + cdrom ? "cdrom" : "disk"); + if (drvType) { + virBufferVSprintf(&buf, " <driver name='%s' type='%s'/>\n", drvName, drvType); + } else { + virBufferVSprintf(&buf, " <driver name='%s'/>\n", drvName); + } + if (isBlock) { virBufferVSprintf(&buf, " <source dev='%s'/>\n", src); - virBufferVSprintf(&buf, " <target dev='%s'/>\n", dst); - tmp = sexpr_node(node, "device/vbd/mode"); - /* XXX should we force mode == r, if cdrom==1, or assume - xend has already done this ? */ - if ((tmp != NULL) && (!strcmp(tmp, "r"))) - virBufferVSprintf(&buf, " <readonly/>\n"); - virBufferAdd(&buf, " </disk>\n", 12); } else { - char serial[1000]; + virBufferVSprintf(&buf, " <source file='%s'/>\n", src); + } + virBufferVSprintf(&buf, " <target dev='%s'/>\n", dst); - TODO sexpr2string(node, serial, 1000); - virBufferVSprintf(&buf, "<!-- Failed to parse %s -->\n", - serial); - TODO} + + /* XXX should we force mode == r, if cdrom==1, or assume + xend has already done this ? */ + if ((mode != NULL) && (!strcmp(mode, "r"))) + virBufferVSprintf(&buf, " <readonly/>\n"); + virBufferAdd(&buf, " </disk>\n", 12); + + bad_parse: + if (drvName) + free(drvName); + if (drvType) + free(drvType); } else if (sexpr_lookup(node, "device/vif")) { - const char *tmp2; + const char *tmp2; tmp = sexpr_node(node, "device/vif/bridge"); - tmp2 = sexpr_node(node, "device/vif/script"); + tmp2 = sexpr_node(node, "device/vif/script"); if ((tmp != NULL) || (strstr(tmp2, "bridge"))) { virBufferVSprintf(&buf, " <interface type='bridge'>\n"); - if (tmp != NULL) - virBufferVSprintf(&buf, " <source bridge='%s'/>\n", - tmp); + if (tmp != NULL) + virBufferVSprintf(&buf, " <source bridge='%s'/>\n", + tmp); tmp = sexpr_node(node, "device/vif/vifname"); if (tmp != NULL) virBufferVSprintf(&buf, " <target dev='%s'/>\n", @@ -1688,10 +1734,11 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root, int xendConfigVersi } /* Old style cdrom config from Xen <= 3.0.2 */ - if (xendConfigVersion == 1) { + if (xendConfigVersion == 1) { tmp = sexpr_node(root, "domain/image/hvm/cdrom"); if ((tmp != NULL) && (tmp[0] != 0)) { virBufferAdd(&buf, " <disk type='file' device='cdrom'>\n", 38); + virBufferAdd(&buf, " <driver name='file'/>\n", 28); virBufferVSprintf(&buf, " <source file='%s'/>\n", tmp); virBufferAdd(&buf, " <target dev='hdc'/>\n", 26); virBufferAdd(&buf, " <readonly/>\n", 18); @@ -1699,24 +1746,24 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root, int xendConfigVersi } } } - + /* Graphics device */ tmp = sexpr_fmt_node(root, "domain/image/%s/vnc", hvm ? "hvm" : "linux"); if (tmp != NULL) { if (tmp[0] == '1') { int port = xenStoreDomainGetVNCPort(conn, domid); - if (port == -1) + if (port == -1) port = 5900 + domid; virBufferVSprintf(&buf, " <graphics type='vnc' port='%d'/>\n", port); } } - + tmp = sexpr_fmt_node(root, "domain/image/%s/sdl", hvm ? "hvm" : "linux"); if (tmp != NULL) { if (tmp[0] == '1') virBufferAdd(&buf, " <graphics type='sdl'/>\n", 27 ); } - + tty = xenStoreDomainGetConsolePath(conn, domid); if (tty) { virBufferVSprintf(&buf, " <console tty='%s'/>\n", tty); @@ -931,6 +931,8 @@ virDomainParseXMLDiskDesc(xmlNodePtr node, virBufferPtr buf, int hvm, int xendCo xmlChar *device = NULL; xmlChar *source = NULL; xmlChar *target = NULL; + xmlChar *drvName = NULL; + xmlChar *drvType = NULL; int ro = 0; int typ = 0; int cdrom = 0; @@ -944,7 +946,7 @@ virDomainParseXMLDiskDesc(xmlNodePtr node, virBufferPtr buf, int hvm, int xendCo xmlFree(type); } device = xmlGetProp(node, BAD_CAST "device"); - + cur = node->children; while (cur != NULL) { if (cur->type == XML_ELEMENT_NODE) { @@ -958,6 +960,11 @@ virDomainParseXMLDiskDesc(xmlNodePtr node, virBufferPtr buf, int hvm, int xendCo } else if ((target == NULL) && (xmlStrEqual(cur->name, BAD_CAST "target"))) { target = xmlGetProp(cur, BAD_CAST "dev"); + } else if ((drvName == NULL) && + (xmlStrEqual(cur->name, BAD_CAST "driver"))) { + drvName = xmlGetProp(cur, BAD_CAST "name"); + if (drvName && !strcmp((const char *)drvName, "tap")) + drvType = xmlGetProp(cur, BAD_CAST "type"); } else if (xmlStrEqual(cur->name, BAD_CAST "readonly")) { ro = 1; } @@ -986,14 +993,14 @@ virDomainParseXMLDiskDesc(xmlNodePtr node, virBufferPtr buf, int hvm, int xendCo /* Xend (all versions) put the floppy device config * under the hvm (image (os)) block */ - if (hvm && + if (hvm && device && !strcmp((const char *)device, "floppy")) { goto cleanup; } /* Xend <= 3.0.2 doesn't include cdrom config here */ - if (hvm && + if (hvm && device && !strcmp((const char *)device, "cdrom")) { if (xendConfigVersion == 1) @@ -1004,7 +1011,14 @@ virDomainParseXMLDiskDesc(xmlNodePtr node, virBufferPtr buf, int hvm, int xendCo virBufferAdd(buf, "(device ", 8); - virBufferAdd(buf, "(vbd ", 5); + /* Normally disks are in a (device (vbd ...)) block + but blktap disks ended up in a differently named + (device (tap ....)) block.... */ + if (drvName && !strcmp((const char *)drvName, "tap")) { + virBufferAdd(buf, "(tap ", 5); + } else { + virBufferAdd(buf, "(vbd ", 5); + } if (hvm) { char *tmp = (char *)target; @@ -1014,19 +1028,32 @@ virDomainParseXMLDiskDesc(xmlNodePtr node, virBufferPtr buf, int hvm, int xendCo /* Xend <= 3.0.2 wants a ioemu: prefix on devices for HVM */ if (xendConfigVersion == 1) - virBufferVSprintf(buf, "(dev 'ioemu:%s')", (const char *) tmp); + virBufferVSprintf(buf, "(dev 'ioemu:%s')", (const char *)tmp); else /* But newer does not */ - virBufferVSprintf(buf, "(dev '%s%s')", (const char *) tmp, cdrom ? ":cdrom" : ":disk"); + virBufferVSprintf(buf, "(dev '%s%s')", (const char *)tmp, cdrom ? ":cdrom" : ":disk"); } else - virBufferVSprintf(buf, "(dev '%s')", (const char *) target); - - if (typ == 0) - virBufferVSprintf(buf, "(uname 'file:%s')", source); - else if (typ == 1) { - if (source[0] == '/') - virBufferVSprintf(buf, "(uname 'phy:%s')", source); - else - virBufferVSprintf(buf, "(uname 'phy:/dev/%s')", source); + virBufferVSprintf(buf, "(dev '%s')", (const char *)target); + + if (drvName) { + if (!strcmp((const char *)drvName, "tap")) { + virBufferVSprintf(buf, "(uname '%s:%s:%s')", + (const char *)drvName, + (drvType ? (const char *)drvType : "aio"), + (const char *)source); + } else { + virBufferVSprintf(buf, "(uname '%s:%s')", + (const char *)drvName, + (const char *)source); + } + } else { + if (typ == 0) + virBufferVSprintf(buf, "(uname 'file:%s')", source); + else if (typ == 1) { + if (source[0] == '/') + virBufferVSprintf(buf, "(uname 'phy:%s')", source); + else + virBufferVSprintf(buf, "(uname 'phy:/dev/%s')", source); + } } if (ro == 0) virBufferVSprintf(buf, "(mode 'w')"); @@ -1037,6 +1064,8 @@ virDomainParseXMLDiskDesc(xmlNodePtr node, virBufferPtr buf, int hvm, int xendCo virBufferAdd(buf, ")", 1); cleanup: + xmlFree(drvType); + xmlFree(drvName); xmlFree(device); xmlFree(target); xmlFree(source); diff --git a/tests/sexpr2xmldata/sexpr2xml-disk-block.sexpr b/tests/sexpr2xmldata/sexpr2xml-disk-block.sexpr new file mode 100644 index 0000000000..1bb0dcbe8f --- /dev/null +++ b/tests/sexpr2xmldata/sexpr2xml-disk-block.sexpr @@ -0,0 +1,2 @@ +(domain (domid 6)(name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os ')))(device (vbd (dev 'xvda')(uname 'phy:/dev/MainVG/GuestVG')(mode 'w')))) + diff --git a/tests/sexpr2xmldata/sexpr2xml-disk-block.xml b/tests/sexpr2xmldata/sexpr2xml-disk-block.xml new file mode 100644 index 0000000000..60cf44c45c --- /dev/null +++ b/tests/sexpr2xmldata/sexpr2xml-disk-block.xml @@ -0,0 +1,22 @@ +<domain type='xen' id='6'> + <name>pvtest</name> + <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid> + <os> + <type>linux</type> + <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel> + <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd> + <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os </cmdline> + </os> + <memory>430080</memory> + <vcpu>2</vcpu> + <on_poweroff>destroy</on_poweroff> + <on_reboot>destroy</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <disk type='block' device='disk'> + <driver name='phy'/> + <source dev='/dev/MainVG/GuestVG'/> + <target dev='xvda'/> + </disk> + </devices> +</domain> diff --git a/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-qcow.sexpr b/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-qcow.sexpr new file mode 100644 index 0000000000..c642230fbd --- /dev/null +++ b/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-qcow.sexpr @@ -0,0 +1,2 @@ +(domain (domid 6)(name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os ')))(device (tap (dev 'xvda')(uname 'tap:qcow:/root/some.img')(mode 'w')))) + diff --git a/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-qcow.xml b/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-qcow.xml new file mode 100644 index 0000000000..f0322b4379 --- /dev/null +++ b/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-qcow.xml @@ -0,0 +1,22 @@ +<domain type='xen' id='6'> + <name>pvtest</name> + <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid> + <os> + <type>linux</type> + <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel> + <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd> + <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os </cmdline> + </os> + <memory>430080</memory> + <vcpu>2</vcpu> + <on_poweroff>destroy</on_poweroff> + <on_reboot>destroy</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <disk type='file' device='disk'> + <driver name='tap' type='qcow'/> + <source file='/root/some.img'/> + <target dev='xvda'/> + </disk> + </devices> +</domain> diff --git a/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-raw.sexpr b/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-raw.sexpr new file mode 100644 index 0000000000..2852b03044 --- /dev/null +++ b/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-raw.sexpr @@ -0,0 +1,2 @@ +(domain (domid 6)(name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os ')))(device (tap (dev 'xvda')(uname 'tap:aio:/root/some.img')(mode 'w')))) + diff --git a/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-raw.xml b/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-raw.xml new file mode 100644 index 0000000000..5e8c09a469 --- /dev/null +++ b/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-raw.xml @@ -0,0 +1,22 @@ +<domain type='xen' id='6'> + <name>pvtest</name> + <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid> + <os> + <type>linux</type> + <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel> + <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd> + <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os </cmdline> + </os> + <memory>430080</memory> + <vcpu>2</vcpu> + <on_poweroff>destroy</on_poweroff> + <on_reboot>destroy</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <disk type='file' device='disk'> + <driver name='tap' type='aio'/> + <source file='/root/some.img'/> + <target dev='xvda'/> + </disk> + </devices> +</domain> diff --git a/tests/sexpr2xmldata/sexpr2xml-disk-file.sexpr b/tests/sexpr2xmldata/sexpr2xml-disk-file.sexpr new file mode 100644 index 0000000000..74c9e01bf0 --- /dev/null +++ b/tests/sexpr2xmldata/sexpr2xml-disk-file.sexpr @@ -0,0 +1,2 @@ +(domain (domid 6)(name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os ')))(device (vbd (dev 'xvda')(uname 'file:/root/some.img')(mode 'w')))) + diff --git a/tests/sexpr2xmldata/sexpr2xml-disk-file.xml b/tests/sexpr2xmldata/sexpr2xml-disk-file.xml new file mode 100644 index 0000000000..8197a8ed4e --- /dev/null +++ b/tests/sexpr2xmldata/sexpr2xml-disk-file.xml @@ -0,0 +1,22 @@ +<domain type='xen' id='6'> + <name>pvtest</name> + <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid> + <os> + <type>linux</type> + <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel> + <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd> + <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os </cmdline> + </os> + <memory>430080</memory> + <vcpu>2</vcpu> + <on_poweroff>destroy</on_poweroff> + <on_reboot>destroy</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <disk type='file' device='disk'> + <driver name='file'/> + <source file='/root/some.img'/> + <target dev='xvda'/> + </disk> + </devices> +</domain> diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-v2.xml b/tests/sexpr2xmldata/sexpr2xml-fv-v2.xml index 6ea089611c..b635b72476 100644 --- a/tests/sexpr2xmldata/sexpr2xml-fv-v2.xml +++ b/tests/sexpr2xmldata/sexpr2xml-fv-v2.xml @@ -17,11 +17,13 @@ <devices> <emulator>/usr/lib64/xen/bin/qemu-dm</emulator> <disk type='file' device='cdrom'> + <driver name='file'/> <source file='/root/boot.iso'/> <target dev='hdc'/> <readonly/> </disk> <disk type='file' device='disk'> + <driver name='file'/> <source file='/root/foo.img'/> <target dev='hda'/> </disk> diff --git a/tests/sexpr2xmldata/sexpr2xml-fv.xml b/tests/sexpr2xmldata/sexpr2xml-fv.xml index 08a5ee179a..eaa19bf09c 100644 --- a/tests/sexpr2xmldata/sexpr2xml-fv.xml +++ b/tests/sexpr2xmldata/sexpr2xml-fv.xml @@ -17,6 +17,7 @@ <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> @@ -26,6 +27,7 @@ <script path='vif-bridge'/> </interface> <disk type='file' device='cdrom'> + <driver name='file'/> <source file='/root/boot.iso'/> <target dev='hdc'/> <readonly/> diff --git a/tests/sexpr2xmldata/sexpr2xml-pv.xml b/tests/sexpr2xmldata/sexpr2xml-pv.xml index 66d6fe0e1a..8197a8ed4e 100644 --- a/tests/sexpr2xmldata/sexpr2xml-pv.xml +++ b/tests/sexpr2xmldata/sexpr2xml-pv.xml @@ -14,6 +14,7 @@ <on_crash>destroy</on_crash> <devices> <disk type='file' device='disk'> + <driver name='file'/> <source file='/root/some.img'/> <target dev='xvda'/> </disk> diff --git a/tests/sexpr2xmltest.c b/tests/sexpr2xmltest.c index 83e1ed98bb..e4925ebcb8 100644 --- a/tests/sexpr2xmltest.c +++ b/tests/sexpr2xmltest.c @@ -1,4 +1,3 @@ - #include <stdio.h> #include <string.h> @@ -67,33 +66,74 @@ static int testCompareFVversion2(void *data ATTRIBUTE_UNUSED) { 2); } +static int testCompareDiskFile(void *data ATTRIBUTE_UNUSED) { + return testCompareFiles("sexpr2xmldata/sexpr2xml-disk-file.xml", + "sexpr2xmldata/sexpr2xml-disk-file.sexpr", + 1); +} + +static int testCompareDiskBlock(void *data ATTRIBUTE_UNUSED) { + return testCompareFiles("sexpr2xmldata/sexpr2xml-disk-block.xml", + "sexpr2xmldata/sexpr2xml-disk-block.sexpr", + 1); +} + +static int testCompareDiskDrvBlktapQcow(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) { + return testCompareFiles("sexpr2xmldata/sexpr2xml-disk-drv-blktap-raw.xml", + "sexpr2xmldata/sexpr2xml-disk-drv-blktap-raw.sexpr", + 1); +} + + int main(int argc, char **argv) { int ret = 0; - + progname = argv[0]; - + if (argc > 1) { - fprintf(stderr, "Usage: %s\n", progname); - exit(EXIT_FAILURE); + fprintf(stderr, "Usage: %s\n", progname); + exit(EXIT_FAILURE); } - - if (virtTestRun("SEXPR-2-XML PV config (version 1)", + + if (virtTestRun("SEXPR-2-XML PV config (version 1)", 1, testComparePVversion1, NULL) != 0) - ret = -1; + ret = -1; - if (virtTestRun("SEXPR-2-XML FV config (version 1)", + if (virtTestRun("SEXPR-2-XML FV config (version 1)", 1, testCompareFVversion1, NULL) != 0) - ret = -1; + ret = -1; - if (virtTestRun("SEXPR-2-XML PV config (version 2)", + if (virtTestRun("SEXPR-2-XML PV config (version 2)", 1, testComparePVversion2, NULL) != 0) - ret = -1; + ret = -1; - if (virtTestRun("SEXPR-2-XML FV config (version 2)", + if (virtTestRun("SEXPR-2-XML FV config (version 2)", 1, testCompareFVversion2, NULL) != 0) - ret = -1; + ret = -1; + + if (virtTestRun("SEXPR-2-XML Disk File config", + 1, testCompareDiskFile, NULL) != 0) + ret = -1; + + if (virtTestRun("SEXPR-2-XML Disk Block config", + 1, testCompareDiskBlock, NULL) != 0) + ret = -1; + + if (virtTestRun("SEXPR-2-XML Disk Driver blktap qcow config", + 1, testCompareDiskDrvBlktapQcow, NULL) != 0) + ret = -1; + + if (virtTestRun("SEXPR-2-XML Disk Driver blktap raw config", + 1, testCompareDiskDrvBlktapRaw, NULL) != 0) + ret = -1; exit(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE); } diff --git a/tests/xml2sexprdata/xml2sexpr-disk-block.sexpr b/tests/xml2sexprdata/xml2sexpr-disk-block.sexpr new file mode 100644 index 0000000000..c6391cfe23 --- /dev/null +++ b/tests/xml2sexprdata/xml2sexpr-disk-block.sexpr @@ -0,0 +1 @@ +(vm (name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os ')))(device (vbd (dev 'xvda')(uname 'phy:/dev/MainVG/GuestLV')(mode 'w'))))
\ No newline at end of file diff --git a/tests/xml2sexprdata/xml2sexpr-disk-block.xml b/tests/xml2sexprdata/xml2sexpr-disk-block.xml new file mode 100644 index 0000000000..e862203244 --- /dev/null +++ b/tests/xml2sexprdata/xml2sexpr-disk-block.xml @@ -0,0 +1,23 @@ +<domain type='xen' id='15'> + <name>pvtest</name> + <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid> + <os> + <type>linux</type> + <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel> + <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd> + <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os </cmdline> + </os> + <memory>430080</memory> + <vcpu>2</vcpu> + <on_poweroff>destroy</on_poweroff> + <on_reboot>destroy</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <disk type='block' device='disk'> + <source dev='/dev/MainVG/GuestLV'/> + <target dev='xvda'/> + </disk> + <console tty='/dev/pts/4'/> + </devices> +</domain> + diff --git a/tests/xml2sexprdata/xml2sexpr-disk-drv-blkback.sexpr b/tests/xml2sexprdata/xml2sexpr-disk-drv-blkback.sexpr new file mode 100644 index 0000000000..c6391cfe23 --- /dev/null +++ b/tests/xml2sexprdata/xml2sexpr-disk-drv-blkback.sexpr @@ -0,0 +1 @@ +(vm (name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os ')))(device (vbd (dev 'xvda')(uname 'phy:/dev/MainVG/GuestLV')(mode 'w'))))
\ No newline at end of file diff --git a/tests/xml2sexprdata/xml2sexpr-disk-drv-blkback.xml b/tests/xml2sexprdata/xml2sexpr-disk-drv-blkback.xml new file mode 100644 index 0000000000..1000b45bb9 --- /dev/null +++ b/tests/xml2sexprdata/xml2sexpr-disk-drv-blkback.xml @@ -0,0 +1,24 @@ +<domain type='xen' id='15'> + <name>pvtest</name> + <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid> + <os> + <type>linux</type> + <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel> + <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd> + <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os </cmdline> + </os> + <memory>430080</memory> + <vcpu>2</vcpu> + <on_poweroff>destroy</on_poweroff> + <on_reboot>destroy</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <disk type='block' device='disk'> + <driver name="phy"/> + <source dev='/dev/MainVG/GuestLV'/> + <target dev='xvda'/> + </disk> + <console tty='/dev/pts/4'/> + </devices> +</domain> + diff --git a/tests/xml2sexprdata/xml2sexpr-disk-drv-blktap-qcow.sexpr b/tests/xml2sexprdata/xml2sexpr-disk-drv-blktap-qcow.sexpr new file mode 100644 index 0000000000..b7d0818853 --- /dev/null +++ b/tests/xml2sexprdata/xml2sexpr-disk-drv-blktap-qcow.sexpr @@ -0,0 +1 @@ +(vm (name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os ')))(device (tap (dev 'xvda')(uname 'tap:qcow:/root/some.img')(mode 'w'))))
\ No newline at end of file diff --git a/tests/xml2sexprdata/xml2sexpr-disk-drv-blktap-qcow.xml b/tests/xml2sexprdata/xml2sexpr-disk-drv-blktap-qcow.xml new file mode 100644 index 0000000000..05243f99cd --- /dev/null +++ b/tests/xml2sexprdata/xml2sexpr-disk-drv-blktap-qcow.xml @@ -0,0 +1,24 @@ +<domain type='xen' id='15'> + <name>pvtest</name> + <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid> + <os> + <type>linux</type> + <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel> + <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd> + <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os </cmdline> + </os> + <memory>430080</memory> + <vcpu>2</vcpu> + <on_poweroff>destroy</on_poweroff> + <on_reboot>destroy</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <disk type='file' device='disk'> + <driver name="tap" type="qcow"/> + <source file='/root/some.img'/> + <target dev='xvda'/> + </disk> + <console tty='/dev/pts/4'/> + </devices> +</domain> + diff --git a/tests/xml2sexprdata/xml2sexpr-disk-drv-blktap-raw.sexpr b/tests/xml2sexprdata/xml2sexpr-disk-drv-blktap-raw.sexpr new file mode 100644 index 0000000000..80fc1e8fc4 --- /dev/null +++ b/tests/xml2sexprdata/xml2sexpr-disk-drv-blktap-raw.sexpr @@ -0,0 +1 @@ +(vm (name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os ')))(device (tap (dev 'xvda')(uname 'tap:aio:/root/some.img')(mode 'w'))))
\ No newline at end of file diff --git a/tests/xml2sexprdata/xml2sexpr-disk-drv-blktap-raw.xml b/tests/xml2sexprdata/xml2sexpr-disk-drv-blktap-raw.xml new file mode 100644 index 0000000000..b337c37b17 --- /dev/null +++ b/tests/xml2sexprdata/xml2sexpr-disk-drv-blktap-raw.xml @@ -0,0 +1,24 @@ +<domain type='xen' id='15'> + <name>pvtest</name> + <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid> + <os> + <type>linux</type> + <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel> + <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd> + <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os </cmdline> + </os> + <memory>430080</memory> + <vcpu>2</vcpu> + <on_poweroff>destroy</on_poweroff> + <on_reboot>destroy</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <disk type='file' device='disk'> + <driver name="tap" type="aio"/> + <source file='/root/some.img'/> + <target dev='xvda'/> + </disk> + <console tty='/dev/pts/4'/> + </devices> +</domain> + diff --git a/tests/xml2sexprdata/xml2sexpr-disk-drv-blktap.sexpr b/tests/xml2sexprdata/xml2sexpr-disk-drv-blktap.sexpr new file mode 100644 index 0000000000..80fc1e8fc4 --- /dev/null +++ b/tests/xml2sexprdata/xml2sexpr-disk-drv-blktap.sexpr @@ -0,0 +1 @@ +(vm (name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os ')))(device (tap (dev 'xvda')(uname 'tap:aio:/root/some.img')(mode 'w'))))
\ No newline at end of file diff --git a/tests/xml2sexprdata/xml2sexpr-disk-drv-blktap.xml b/tests/xml2sexprdata/xml2sexpr-disk-drv-blktap.xml new file mode 100644 index 0000000000..8c97cb18d9 --- /dev/null +++ b/tests/xml2sexprdata/xml2sexpr-disk-drv-blktap.xml @@ -0,0 +1,24 @@ +<domain type='xen' id='15'> + <name>pvtest</name> + <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid> + <os> + <type>linux</type> + <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel> + <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd> + <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os </cmdline> + </os> + <memory>430080</memory> + <vcpu>2</vcpu> + <on_poweroff>destroy</on_poweroff> + <on_reboot>destroy</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <disk type='file' device='disk'> + <driver name="tap"/> + <source file='/root/some.img'/> + <target dev='xvda'/> + </disk> + <console tty='/dev/pts/4'/> + </devices> +</domain> + diff --git a/tests/xml2sexprdata/xml2sexpr-disk-drv-loop.sexpr b/tests/xml2sexprdata/xml2sexpr-disk-drv-loop.sexpr new file mode 100644 index 0000000000..3ab1a83b56 --- /dev/null +++ b/tests/xml2sexprdata/xml2sexpr-disk-drv-loop.sexpr @@ -0,0 +1 @@ +(vm (name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os ')))(device (vbd (dev 'xvda')(uname 'file:/root/some.img')(mode 'w'))))
\ No newline at end of file diff --git a/tests/xml2sexprdata/xml2sexpr-disk-drv-loop.xml b/tests/xml2sexprdata/xml2sexpr-disk-drv-loop.xml new file mode 100644 index 0000000000..86e4eac6d8 --- /dev/null +++ b/tests/xml2sexprdata/xml2sexpr-disk-drv-loop.xml @@ -0,0 +1,24 @@ +<domain type='xen' id='15'> + <name>pvtest</name> + <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid> + <os> + <type>linux</type> + <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel> + <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd> + <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os </cmdline> + </os> + <memory>430080</memory> + <vcpu>2</vcpu> + <on_poweroff>destroy</on_poweroff> + <on_reboot>destroy</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <disk type='file' device='disk'> + <driver name="file"/> + <source file='/root/some.img'/> + <target dev='xvda'/> + </disk> + <console tty='/dev/pts/4'/> + </devices> +</domain> + diff --git a/tests/xml2sexprdata/xml2sexpr-disk-file.sexpr b/tests/xml2sexprdata/xml2sexpr-disk-file.sexpr new file mode 100644 index 0000000000..3ab1a83b56 --- /dev/null +++ b/tests/xml2sexprdata/xml2sexpr-disk-file.sexpr @@ -0,0 +1 @@ +(vm (name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os ')))(device (vbd (dev 'xvda')(uname 'file:/root/some.img')(mode 'w'))))
\ No newline at end of file diff --git a/tests/xml2sexprdata/xml2sexpr-disk-file.xml b/tests/xml2sexprdata/xml2sexpr-disk-file.xml new file mode 100644 index 0000000000..938682b20a --- /dev/null +++ b/tests/xml2sexprdata/xml2sexpr-disk-file.xml @@ -0,0 +1,23 @@ +<domain type='xen' id='15'> + <name>pvtest</name> + <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid> + <os> + <type>linux</type> + <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel> + <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd> + <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os </cmdline> + </os> + <memory>430080</memory> + <vcpu>2</vcpu> + <on_poweroff>destroy</on_poweroff> + <on_reboot>destroy</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <disk type='file' device='disk'> + <source file='/root/some.img'/> + <target dev='xvda'/> + </disk> + <console tty='/dev/pts/4'/> + </devices> +</domain> + diff --git a/tests/xml2sexprtest.c b/tests/xml2sexprtest.c index c23b3d5004..6174a56ca1 100644 --- a/tests/xml2sexprtest.c +++ b/tests/xml2sexprtest.c @@ -1,4 +1,3 @@ - #include <stdio.h> #include <string.h> @@ -78,42 +77,120 @@ static int testCompareFVversion2(void *data ATTRIBUTE_UNUSED) { static int testCompareFVversion2VNC(void *data ATTRIBUTE_UNUSED) { return testCompareFiles("xml2sexprdata/xml2sexpr-fv-vncunused.xml", - "xml2sexprdata/xml2sexpr-fv-vncunused.sexpr", - "fvtest", - 2); + "xml2sexprdata/xml2sexpr-fv-vncunused.sexpr", + "fvtest", + 2); +} + +static int testCompareDiskFile(void *data ATTRIBUTE_UNUSED) { + return testCompareFiles("xml2sexprdata/xml2sexpr-disk-file.xml", + "xml2sexprdata/xml2sexpr-disk-file.sexpr", + "pvtest", + 2); +} + +static int testCompareDiskBlock(void *data ATTRIBUTE_UNUSED) { + return testCompareFiles("xml2sexprdata/xml2sexpr-disk-block.xml", + "xml2sexprdata/xml2sexpr-disk-block.sexpr", + "pvtest", + 2); +} + +static int testCompareDiskDrvLoop(void *data ATTRIBUTE_UNUSED) { + return testCompareFiles("xml2sexprdata/xml2sexpr-disk-drv-loop.xml", + "xml2sexprdata/xml2sexpr-disk-drv-loop.sexpr", + "pvtest", + 2); +} + +static int testCompareDiskDrvBlkback(void *data ATTRIBUTE_UNUSED) { + return testCompareFiles("xml2sexprdata/xml2sexpr-disk-drv-blkback.xml", + "xml2sexprdata/xml2sexpr-disk-drv-blkback.sexpr", + "pvtest", + 2); +} + +static int testCompareDiskDrvBlktap(void *data ATTRIBUTE_UNUSED) { + return testCompareFiles("xml2sexprdata/xml2sexpr-disk-drv-blktap.xml", + "xml2sexprdata/xml2sexpr-disk-drv-blktap.sexpr", + "pvtest", + 2); +} + +static int testCompareDiskDrvBlktapQcow(void *data ATTRIBUTE_UNUSED) { + return testCompareFiles("xml2sexprdata/xml2sexpr-disk-drv-blktap-qcow.xml", + "xml2sexprdata/xml2sexpr-disk-drv-blktap-qcow.sexpr", + "pvtest", + 2); +} + +static int testCompareDiskDrvBlktapRaw(void *data ATTRIBUTE_UNUSED) { + return testCompareFiles("xml2sexprdata/xml2sexpr-disk-drv-blktap-raw.xml", + "xml2sexprdata/xml2sexpr-disk-drv-blktap-raw.sexpr", + "pvtest", + 2); } int main(int argc, char **argv) { int ret = 0; - + progname = argv[0]; - + if (argc > 1) { - fprintf(stderr, "Usage: %s\n", progname); - exit(EXIT_FAILURE); + fprintf(stderr, "Usage: %s\n", progname); + exit(EXIT_FAILURE); } - - if (virtTestRun("XML-2-SEXPR PV config (format 1)", + + if (virtTestRun("XML-2-SEXPR PV config (format 1)", 1, testComparePVversion1, NULL) != 0) - ret = -1; + ret = -1; - if (virtTestRun("XML-2-SEXPR FV config (format 1)", + if (virtTestRun("XML-2-SEXPR FV config (format 1)", 1, testCompareFVversion1, NULL) != 0) - ret = -1; + ret = -1; if (virtTestRun("XML-2-SEXPR PV config (format 2)", 1, testComparePVversion2, NULL) != 0) - ret = -1; + ret = -1; - if (virtTestRun("XML-2-SEXPR FV config (format 2)", + if (virtTestRun("XML-2-SEXPR FV config (format 2)", 1, testCompareFVversion2, NULL) != 0) - ret = -1; + ret = -1; if (virtTestRun("XML-2-SEXPR FV config (format 2, VNC unused)", - 1, testCompareFVversion2VNC, NULL) != 0) - ret = -1; + 1, testCompareFVversion2VNC, NULL) != 0) + ret = -1; + + if (virtTestRun("XML-2-SEXPR Disk File", + 1, testCompareDiskFile, NULL) != 0) + ret = -1; + + if (virtTestRun("XML-2-SEXPR Disk Block", + 1, testCompareDiskBlock, NULL) != 0) + ret = -1; + + if (virtTestRun("XML-2-SEXPR Disk Drv Loop", + 1, testCompareDiskDrvLoop, NULL) != 0) + ret = -1; + + if (virtTestRun("XML-2-SEXPR Disk Drv Blkback", + 1, testCompareDiskDrvBlkback, NULL) != 0) + ret = -1; + + if (virtTestRun("XML-2-SEXPR Disk Drv Blktap", + 1, testCompareDiskDrvBlktap, NULL) != 0) + ret = -1; + + if (virtTestRun("XML-2-SEXPR Disk Drv Blktap QCow", + 1, testCompareDiskDrvBlktapQcow, NULL) != 0) + ret = -1; + + if (virtTestRun("XML-2-SEXPR Disk Drv Blktap Raw", + 1, testCompareDiskDrvBlktapRaw, NULL) != 0) + ret = -1; + exit(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE); } |