aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel P. Berrange <berrange@redhat.com>2008-04-26 14:22:02 +0000
committerDaniel P. Berrange <berrange@redhat.com>2008-04-26 14:22:02 +0000
commite6f112381924d98d4846e4e1e79a3b1550653f3b (patch)
treebeb1bf95d5a24d98689a7a6a87f12c92b4ab6abc
parentImplement serial & parallel device support for QEMU driver (diff)
downloadlibvirt-e6f112381924d98d4846e4e1e79a3b1550653f3b.tar.gz
libvirt-e6f112381924d98d4846e4e1e79a3b1550653f3b.tar.bz2
libvirt-e6f112381924d98d4846e4e1e79a3b1550653f3b.zip
Added full support for serial and parallel devices to Xen drivers
-rw-r--r--ChangeLog10
-rw-r--r--src/internal.h2
-rw-r--r--src/xend_internal.c267
-rw-r--r--src/xend_internal.h9
-rw-r--r--src/xm_internal.c55
-rw-r--r--src/xml.c217
-rw-r--r--src/xml.h4
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-curmem.xml3
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-disk-block-shareable.xml3
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-disk-block.xml3
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-qcow.xml3
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-raw.xml3
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-disk-file.xml3
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-kernel.xml6
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-parallel-tcp.sexpr1
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-parallel-tcp.xml45
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-serial-file.sexpr1
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-serial-file.xml48
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-serial-null.sexpr1
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-serial-null.xml46
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-serial-pipe.sexpr1
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-serial-pipe.xml48
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-serial-pty.sexpr1
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-serial-pty.xml46
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-serial-stdio.sexpr1
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-serial-stdio.xml46
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp-telnet.sexpr1
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp-telnet.xml50
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp.sexpr1
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp.xml50
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-serial-udp.sexpr1
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-serial-udp.xml50
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-serial-unix.sexpr1
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-fv-serial-unix.xml48
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-net-bridged.xml3
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-net-routed.xml3
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-no-source-cdrom.xml6
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-pv-bootloader.xml3
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-pv-vfb-new.xml3
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-pv-vfb-orig.xml3
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-pv.xml3
-rw-r--r--tests/sexpr2xmltest.c317
-rwxr-xr-xtests/xmconfigdata/test-fullvirt-localtime.cfg2
-rwxr-xr-xtests/xmconfigdata/test-fullvirt-new-cdrom.cfg2
-rwxr-xr-xtests/xmconfigdata/test-fullvirt-old-cdrom.cfg2
-rwxr-xr-xtests/xmconfigdata/test-fullvirt-parallel-tcp.cfg25
-rw-r--r--tests/xmconfigdata/test-fullvirt-parallel-tcp.xml46
-rwxr-xr-xtests/xmconfigdata/test-fullvirt-serial-file.cfg25
-rw-r--r--tests/xmconfigdata/test-fullvirt-serial-file.xml49
-rwxr-xr-xtests/xmconfigdata/test-fullvirt-serial-null.cfg25
-rw-r--r--tests/xmconfigdata/test-fullvirt-serial-null.xml47
-rwxr-xr-xtests/xmconfigdata/test-fullvirt-serial-pipe.cfg25
-rw-r--r--tests/xmconfigdata/test-fullvirt-serial-pipe.xml49
-rwxr-xr-xtests/xmconfigdata/test-fullvirt-serial-pty.cfg25
-rw-r--r--tests/xmconfigdata/test-fullvirt-serial-pty.xml47
-rwxr-xr-xtests/xmconfigdata/test-fullvirt-serial-stdio.cfg25
-rw-r--r--tests/xmconfigdata/test-fullvirt-serial-stdio.xml47
-rwxr-xr-xtests/xmconfigdata/test-fullvirt-serial-tcp-telnet.cfg25
-rw-r--r--tests/xmconfigdata/test-fullvirt-serial-tcp-telnet.xml51
-rwxr-xr-xtests/xmconfigdata/test-fullvirt-serial-tcp.cfg25
-rw-r--r--tests/xmconfigdata/test-fullvirt-serial-tcp.xml51
-rwxr-xr-xtests/xmconfigdata/test-fullvirt-serial-udp.cfg25
-rw-r--r--tests/xmconfigdata/test-fullvirt-serial-udp.xml51
-rwxr-xr-xtests/xmconfigdata/test-fullvirt-serial-unix.cfg25
-rw-r--r--tests/xmconfigdata/test-fullvirt-serial-unix.xml49
-rwxr-xr-xtests/xmconfigdata/test-fullvirt-usbmouse.cfg2
-rwxr-xr-xtests/xmconfigdata/test-fullvirt-usbtablet.cfg2
-rwxr-xr-xtests/xmconfigdata/test-fullvirt-utc.cfg2
-rw-r--r--tests/xmconfigdata/test-paravirt-new-pvfb.xml4
-rw-r--r--tests/xmconfigdata/test-paravirt-old-pvfb.xml4
-rw-r--r--tests/xmconfigtest.c18
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-kernel.sexpr2
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-localtime.sexpr2
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-parallel-tcp.sexpr1
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-parallel-tcp.xml40
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-serial-file.sexpr1
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-serial-file.xml40
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-serial-null.sexpr1
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-serial-null.xml39
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-serial-pipe.sexpr1
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-serial-pipe.xml40
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-serial-pty.sexpr1
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-serial-pty.xml39
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-serial-stdio.sexpr1
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-serial-stdio.xml39
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-serial-tcp-telnet.sexpr1
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-serial-tcp-telnet.xml41
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-serial-tcp.sexpr1
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-serial-tcp.xml40
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-serial-udp.sexpr1
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-serial-udp.xml41
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-serial-unix.sexpr1
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-serial-unix.xml40
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-usbmouse.sexpr2
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-usbtablet.sexpr2
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-utc.sexpr2
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-v2.sexpr2
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv-vncunused.sexpr2
-rw-r--r--tests/xml2sexprdata/xml2sexpr-fv.sexpr2
-rw-r--r--tests/xml2sexprdata/xml2sexpr-no-source-cdrom.sexpr2
-rw-r--r--tests/xml2sexprtest.c362
101 files changed, 2411 insertions, 569 deletions
diff --git a/ChangeLog b/ChangeLog
index 7247f9a6a..0bf674c3d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Sat Apr 26 10:21:28 EST 2008 Daniel P. Berrange <berrange@redhat.com>
+
+ * src/xm_internal.c, src/xml.c, src/xml.h, src/xend_internal.c,
+ src/xend_internal.h: Added support for serial and parallel
+ devices
+ * tests/sexpr2xmltest.c, tests/xml2sexprtest.c, tests/xmconfigtest.c:
+ added tests for serial and parallel devices
+ * tests/sexpr2xmldata/*, tests/xml2sexprdata/*, tests/xmconfigdata/*:
+ updated for new test cases
+
Fri Apr 25 16:45:28 EST 2008 Daniel P. Berrange <berrange@redhat.com>
* src/internal.c: Convenience macros for fixed arrays
diff --git a/src/internal.h b/src/internal.h
index 67d31b363..02cd3584a 100644
--- a/src/internal.h
+++ b/src/internal.h
@@ -65,7 +65,7 @@ extern "C" {
#define STRCASEEQLEN(a,b,n) (strncasecmp((a),(b),(n)) == 0)
#define STRNEQLEN(a,b,n) (strncmp((a),(b),(n)) != 0)
#define STRCASENEQLEN(a,b,n) (strncasecmp((a),(b),(n)) != 0)
-
+#define STRPREFIX(a,b) (strncmp((a),(b),strlen((b))) == 0)
#define NUL_TERMINATE(buf) do { (buf)[sizeof(buf)-1] = '\0'; } while (0)
#define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array))
diff --git a/src/xend_internal.c b/src/xend_internal.c
index 6ba4571db..7eb4877e1 100644
--- a/src/xend_internal.c
+++ b/src/xend_internal.c
@@ -1376,6 +1376,244 @@ xend_parse_sexp_desc_os(virConnectPtr xend, struct sexpr *node, virBufferPtr buf
return(0);
}
+
+int
+xend_parse_sexp_desc_char(virConnectPtr conn,
+ virBufferPtr buf,
+ const char *devtype,
+ int portNum,
+ const char *value,
+ const char *tty)
+{
+ const char *type;
+ int telnet = 0;
+ char *bindPort = NULL;
+ char *bindHost = NULL;
+ char *connectPort = NULL;
+ char *connectHost = NULL;
+ char *path = NULL;
+ int ret = -1;
+
+ if (value[0] == '/') {
+ type = "dev";
+ } else if (STRPREFIX(value, "null")) {
+ type = "null";
+ value = NULL;
+ } else if (STRPREFIX(value, "vc")) {
+ type = "vc";
+ value = NULL;
+ } else if (STRPREFIX(value, "pty")) {
+ type = "pty";
+ value = NULL;
+ } else if (STRPREFIX(value, "stdio")) {
+ type = "stdio";
+ value = NULL;
+ } else if (STRPREFIX(value, "file:")) {
+ type = "file";
+ value += sizeof("file:")-1;
+ } else if (STRPREFIX(value, "pipe:")) {
+ type = "pipe";
+ value += sizeof("pipe:")-1;
+ } else if (STRPREFIX(value, "tcp:")) {
+ type = "tcp";
+ value += sizeof("tcp:")-1;
+ } else if (STRPREFIX(value, "telnet:")) {
+ type = "tcp";
+ value += sizeof("telnet:")-1;
+ telnet = 1;
+ } else if (STRPREFIX(value, "udp:")) {
+ type = "udp";
+ value += sizeof("udp:")-1;
+ } else if (STRPREFIX(value, "unix:")) {
+ type = "unix";
+ value += sizeof("unix:")-1;
+ } else {
+ virXendError(conn, VIR_ERR_INTERNAL_ERROR,
+ _("Unknown char device type"));
+ return -1;
+ }
+
+ /* Compat with legacy <console tty='/dev/pts/5'/> syntax */
+ if (STREQ(devtype, "console") &&
+ STREQ(type, "pty") &&
+ tty != NULL) {
+ if (virBufferVSprintf(buf, " <%s type='%s' tty='%s'>\n",
+ devtype, type, tty) < 0)
+ goto no_memory;
+ } else {
+ if (virBufferVSprintf(buf, " <%s type='%s'>\n",
+ devtype, type) < 0)
+ goto no_memory;
+ }
+
+ if (STREQ(type, "null") ||
+ STREQ(type, "vc") ||
+ STREQ(type, "stdio")) {
+ /* no source needed */
+ } else if (STREQ(type, "pty")) {
+ if (tty &&
+ virBufferVSprintf(buf, " <source path='%s'/>\n",
+ tty) < 0)
+ goto no_memory;
+ } else if (STREQ(type, "file") ||
+ STREQ(type, "pipe")) {
+ if (virBufferVSprintf(buf, " <source path='%s'/>\n",
+ value) < 0)
+ goto no_memory;
+ } else if (STREQ(type, "tcp")) {
+ const char *offset = strchr(value, ':');
+ const char *offset2;
+ const char *mode, *protocol;
+
+ if (offset == NULL) {
+ virXendError(conn, VIR_ERR_INTERNAL_ERROR,
+ _("malformed char device string"));
+ goto error;
+ }
+
+ if (offset != value &&
+ (bindHost = strndup(value, offset - value)) == NULL)
+ goto no_memory;
+
+ offset2 = strchr(offset, ',');
+ if (offset2 == NULL)
+ bindPort = strdup(offset+1);
+ else
+ bindPort = strndup(offset+1, offset2-(offset+1));
+ if (bindPort == NULL)
+ goto no_memory;
+
+ if (offset2 && strstr(offset2, ",listen"))
+ mode = "bind";
+ else
+ mode = "connect";
+ protocol = telnet ? "telnet":"raw";
+
+ if (bindHost) {
+ if (virBufferVSprintf(buf,
+ " <source mode='%s' host='%s' service='%s'/>\n",
+ mode, bindHost, bindPort) < 0)
+ goto no_memory;
+ } else {
+ if (virBufferVSprintf(buf,
+ " <source mode='%s' service='%s'/>\n",
+ mode, bindPort) < 0)
+ goto no_memory;
+ }
+ if (virBufferVSprintf(buf,
+ " <protocol type='%s'/>\n",
+ protocol) < 0)
+ goto no_memory;
+ } else if (STREQ(type, "udp")) {
+ const char *offset = strchr(value, ':');
+ const char *offset2, *offset3;
+
+ if (offset == NULL) {
+ virXendError(conn, VIR_ERR_INTERNAL_ERROR,
+ _("malformed char device string"));
+ goto error;
+ }
+
+ if (offset != value &&
+ (connectHost = strndup(value, offset - value)) == NULL)
+ goto no_memory;
+
+ offset2 = strchr(offset, '@');
+ if (offset2 != NULL) {
+ if ((connectPort = strndup(offset + 1, offset2-(offset+1))) == NULL)
+ goto no_memory;
+
+ offset3 = strchr(offset2, ':');
+ if (offset3 == NULL) {
+ virXendError(conn, VIR_ERR_INTERNAL_ERROR,
+ _("malformed char device string"));
+ goto error;
+ }
+
+ if (offset3 > (offset2 + 1) &&
+ (bindHost = strndup(offset2 + 1, offset3 - (offset2+1))) == NULL)
+ goto no_memory;
+
+ if ((bindPort = strdup(offset3 + 1)) == NULL)
+ goto no_memory;
+ } else {
+ if ((connectPort = strdup(offset + 1)) == NULL)
+ goto no_memory;
+ }
+
+ if (connectPort) {
+ if (connectHost) {
+ if (virBufferVSprintf(buf,
+ " <source mode='connect' host='%s' service='%s'/>\n",
+ connectHost, connectPort) < 0)
+ goto no_memory;
+ } else {
+ if (virBufferVSprintf(buf,
+ " <source mode='connect' service='%s'/>\n",
+ connectPort) < 0)
+ goto no_memory;
+ }
+ }
+ if (bindPort) {
+ if (bindHost) {
+ if (virBufferVSprintf(buf,
+ " <source mode='bind' host='%s' service='%s'/>\n",
+ bindHost, bindPort) < 0)
+ goto no_memory;
+ } else {
+ if (virBufferVSprintf(buf,
+ " <source mode='bind' service='%s'/>\n",
+ bindPort) < 0)
+ goto no_memory;
+ }
+ }
+
+ } else if (STREQ(type, "unix")) {
+ const char *offset = strchr(value, ',');
+ int dolisten = 0;
+ if (offset)
+ path = strndup(value, (offset - value));
+ else
+ path = strdup(value);
+ if (path == NULL)
+ goto no_memory;
+
+ if (offset != NULL &&
+ strstr(offset, ",listen") != NULL)
+ dolisten = 1;
+
+ if (virBufferVSprintf(buf, " <source mode='%s' path='%s'/>\n",
+ dolisten ? "bind" : "connect", path) < 0)
+ goto no_memory;
+ }
+
+ if (virBufferVSprintf(buf, " <target port='%d'/>\n",
+ portNum) < 0)
+ goto no_memory;
+
+ if (virBufferVSprintf(buf, " </%s>\n",
+ devtype) < 0)
+ goto no_memory;
+
+ ret = 0;
+
+ if (ret == -1) {
+no_memory:
+ virXendError(conn, VIR_ERR_NO_MEMORY,
+ _("no memory for char device config"));
+ }
+
+error:
+
+ free(path);
+ free(bindHost);
+ free(bindPort);
+ free(connectHost);
+ free(connectPort);
+
+ return ret;
+}
+
/**
* xend_parse_sexp_desc:
* @conn: the connection associated with the XML
@@ -1828,10 +2066,33 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root,
}
tty = xenStoreDomainGetConsolePath(conn, domid);
- if (tty) {
- virBufferVSprintf(&buf, " <console tty='%s'/>\n", tty);
- free(tty);
+ if (hvm) {
+ tmp = sexpr_node(root, "domain/image/hvm/serial");
+ if (tmp && STRNEQ(tmp, "none")) {
+ if (xend_parse_sexp_desc_char(conn, &buf, "serial", 0, tmp, tty) < 0)
+ goto error;
+ /* Add back-compat <console/> tag for primary console */
+ if (xend_parse_sexp_desc_char(conn, &buf, "console", 0, tmp, tty) < 0)
+ goto error;
+ }
+ tmp = sexpr_node(root, "domain/image/hvm/parallel");
+ if (tmp && STRNEQ(tmp, "none")) {
+ /* XXX does XenD stuff parallel port tty info into xenstore somewhere ? */
+ if (xend_parse_sexp_desc_char(conn, &buf, "parallel", 0, tmp, NULL) < 0)
+ goto error;
+ }
+ } else {
+ /* Paravirt always has a console */
+ if (tty) {
+ virBufferVSprintf(&buf, " <console type='pty' tty='%s'>\n", tty);
+ virBufferVSprintf(&buf, " <source path='%s'/>\n", tty);
+ } else {
+ virBufferAddLit(&buf, " <console type='pty'>\n");
+ }
+ virBufferAddLit(&buf, " <target port='0'/>\n");
+ virBufferAddLit(&buf, " </console>\n");
}
+ free(tty);
virBufferAddLit(&buf, " </devices>\n");
virBufferAddLit(&buf, "</domain>\n");
diff --git a/src/xend_internal.h b/src/xend_internal.h
index e157e88b5..d56d73d60 100644
--- a/src/xend_internal.h
+++ b/src/xend_internal.h
@@ -20,12 +20,12 @@
#include "libvirt/libvirt.h"
#include "capabilities.h"
+#include "buf.h"
#ifdef __cplusplus
extern "C" {
#endif
-
/**
* \brief Setup the connection to a xend instance via TCP
* \param host The host name to connect to
@@ -180,6 +180,13 @@ char *xenDaemonDomainDumpXMLByName(virConnectPtr xend,
*/
int xend_log(virConnectPtr xend, char *buffer, size_t n_buffer);
+ int xend_parse_sexp_desc_char(virConnectPtr conn,
+ virBufferPtr buf,
+ const char *devtype,
+ int portNum,
+ const char *value,
+ const char *tty);
+
char *xend_parse_domain_sexp(virConnectPtr conn, char *root, int xendConfigVersion);
/* refactored ones */
diff --git a/src/xm_internal.c b/src/xm_internal.c
index 3d845dcd5..811a62bde 100644
--- a/src/xm_internal.c
+++ b/src/xm_internal.c
@@ -1025,11 +1025,22 @@ char *xenXMDomainFormatXML(virConnectPtr conn, virConfPtr conf) {
}
if (hvm) {
- if (xenXMConfigGetString(conf, "serial", &str) == 0 && !strcmp(str, "pty")) {
- virBufferAddLit(buf, " <console/>\n");
+ if (xenXMConfigGetString(conf, "parallel", &str) == 0) {
+ if (STRNEQ(str, "none"))
+ xend_parse_sexp_desc_char(conn, buf, "parallel", 0, str, NULL);
}
- } else { /* Paravirt implicitly always has a console */
- virBufferAddLit(buf, " <console/>\n");
+ if (xenXMConfigGetString(conf, "serial", &str) == 0) {
+ if (STRNEQ(str, "none")) {
+ xend_parse_sexp_desc_char(conn, buf, "serial", 0, str, NULL);
+ /* Add back-compat console tag for primary console */
+ xend_parse_sexp_desc_char(conn, buf, "console", 0, str, NULL);
+ }
+ }
+ } else {
+ /* Paravirt implicitly always has a single console */
+ virBufferAddLit(buf, " <console type='pty'>\n");
+ virBufferAddLit(buf, " <target port='0'/>\n");
+ virBufferAddLit(buf, " </console>\n");
}
virBufferAddLit(buf, " </devices>\n");
@@ -2267,14 +2278,38 @@ virConfPtr xenXMParseXMLToConfig(virConnectPtr conn, const char *xml) {
obj = NULL;
if (hvm) {
- obj = xmlXPathEval(BAD_CAST "count(/domain/devices/console) > 0", ctxt);
- if ((obj != NULL) && (obj->type == XPATH_BOOLEAN) &&
- (obj->boolval)) {
- if (xenXMConfigSetString(conf, "serial", "pty") < 0)
+ xmlNodePtr cur;
+ cur = virXPathNode("/domain/devices/parallel[1]", ctxt);
+ if (cur != NULL) {
+ char scratch[PATH_MAX];
+
+ if (virDomainParseXMLOSDescHVMChar(conn, scratch, sizeof(scratch), cur) < 0) {
+ goto error;
+ }
+
+ if (xenXMConfigSetString(conf, "parallel", scratch) < 0)
+ goto error;
+ } else {
+ if (xenXMConfigSetString(conf, "parallel", "none") < 0)
goto error;
}
- xmlXPathFreeObject(obj);
- obj = NULL;
+
+ cur = virXPathNode("/domain/devices/serial[1]", ctxt);
+ if (cur != NULL) {
+ char scratch[PATH_MAX];
+ if (virDomainParseXMLOSDescHVMChar(conn, scratch, sizeof(scratch), cur) < 0)
+ goto error;
+ if (xenXMConfigSetString(conf, "serial", scratch) < 0)
+ goto error;
+ } else {
+ if (virXPathBoolean("count(/domain/devices/console) > 0", ctxt)) {
+ if (xenXMConfigSetString(conf, "serial", "pty") < 0)
+ goto error;
+ } else {
+ if (xenXMConfigSetString(conf, "serial", "none") < 0)
+ goto error;
+ }
+ }
}
xmlFreeDoc(doc);
diff --git a/src/xml.c b/src/xml.c
index 8e95103b1..ceea98721 100644
--- a/src/xml.c
+++ b/src/xml.c
@@ -673,6 +673,178 @@ virDomainParseXMLGraphicsDescVFB(virConnectPtr conn ATTRIBUTE_UNUSED,
}
+int
+virDomainParseXMLOSDescHVMChar(virConnectPtr conn,
+ char *buf,
+ size_t buflen,
+ xmlNodePtr node)
+{
+ xmlChar *type = NULL;
+ xmlChar *path = NULL;
+ xmlChar *bindHost = NULL;
+ xmlChar *bindService = NULL;
+ xmlChar *connectHost = NULL;
+ xmlChar *connectService = NULL;
+ xmlChar *mode = NULL;
+ xmlChar *protocol = NULL;
+ xmlNodePtr cur;
+
+ type = xmlGetProp(node, BAD_CAST "type");
+
+ if (type != NULL) {
+ cur = node->children;
+ while (cur != NULL) {
+ if (cur->type == XML_ELEMENT_NODE) {
+ if (xmlStrEqual(cur->name, BAD_CAST "source")) {
+ if (mode == NULL)
+ mode = xmlGetProp(cur, BAD_CAST "mode");
+
+ if (STREQ((const char *)type, "dev") ||
+ STREQ((const char *)type, "file") ||
+ STREQ((const char *)type, "pipe") ||
+ STREQ((const char *)type, "unix")) {
+ if (path == NULL)
+ path = xmlGetProp(cur, BAD_CAST "path");
+
+ } else if (STREQ((const char *)type, "udp") ||
+ STREQ((const char *)type, "tcp")) {
+ if (mode == NULL ||
+ STREQ((const char *)mode, "connect")) {
+
+ if (connectHost == NULL)
+ connectHost = xmlGetProp(cur, BAD_CAST "host");
+ if (connectService == NULL)
+ connectService = xmlGetProp(cur, BAD_CAST "service");
+ } else {
+ if (bindHost == NULL)
+ bindHost = xmlGetProp(cur, BAD_CAST "host");
+ if (bindService == NULL)
+ bindService = xmlGetProp(cur, BAD_CAST "service");
+ }
+
+ if (STREQ((const char*)type, "udp")) {
+ xmlFree(mode);
+ mode = NULL;
+ }
+ }
+ } else if (xmlStrEqual(cur->name, BAD_CAST "protocol")) {
+ if (protocol == NULL)
+ protocol = xmlGetProp(cur, BAD_CAST "type");
+ }
+ }
+ cur = cur->next;
+ }
+ }
+
+ if (type == NULL ||
+ STREQ((const char *)type, "pty")) {
+ strncpy(buf, "pty", buflen);
+ } else if (STREQ((const char *)type, "null") ||
+ STREQ((const char *)type, "stdio") ||
+ STREQ((const char *)type, "vc")) {
+ snprintf(buf, buflen, "%s", type);
+ } else if (STREQ((const char *)type, "file") ||
+ STREQ((const char *)type, "dev") ||
+ STREQ((const char *)type, "pipe")) {
+ if (path == NULL) {
+ virXMLError(conn, VIR_ERR_XML_ERROR,
+ _("Missing source path attribute for char device"), 0);
+ goto cleanup;
+ }
+
+ if (STREQ((const char *)type, "dev"))
+ strncpy(buf, (const char *)path, buflen);
+ else
+ snprintf(buf, buflen, "%s:%s", type, path);
+ } else if (STREQ((const char *)type, "tcp")) {
+ int telnet = 0;
+ if (protocol != NULL &&
+ STREQ((const char *)protocol, "telnet"))
+ telnet = 1;
+
+ if (mode == NULL ||
+ STREQ((const char *)mode, "connect")) {
+ if (connectHost == NULL) {
+ virXMLError(conn, VIR_ERR_INTERNAL_ERROR,
+ _("Missing source host attribute for char device"), 0);
+ goto cleanup;
+ }
+ if (connectService == NULL) {
+ virXMLError(conn, VIR_ERR_INTERNAL_ERROR,
+ _("Missing source service attribute for char device"), 0);
+ goto cleanup;
+ }
+
+ snprintf(buf, buflen, "%s:%s:%s",
+ (telnet ? "telnet" : "tcp"),
+ connectHost, connectService);
+ } else {
+ if (bindHost == NULL) {
+ virXMLError(conn, VIR_ERR_INTERNAL_ERROR,
+ _("Missing source host attribute for char device"), 0);
+ goto cleanup;
+ }
+ if (bindService == NULL) {
+ virXMLError(conn, VIR_ERR_INTERNAL_ERROR,
+ _("Missing source service attribute for char device"), 0);
+ goto cleanup;
+ }
+
+ snprintf(buf, buflen, "%s:%s:%s,listen",
+ (telnet ? "telnet" : "tcp"),
+ bindHost, bindService);
+ }
+ } else if (STREQ((const char *)type, "udp")) {
+ if (connectService == NULL) {
+ virXMLError(conn, VIR_ERR_XML_ERROR,
+ _("Missing source service attribute for char device"), 0);
+ goto cleanup;
+ }
+
+ snprintf(buf, buflen, "udp:%s:%s@%s:%s",
+ connectHost ? (const char *)connectHost : "",
+ connectService,
+ bindHost ? (const char *)bindHost : "",
+ bindService ? (const char *)bindService : "");
+ } else if (STREQ((const char *)type, "unix")) {
+ if (path == NULL) {
+ virXMLError(conn, VIR_ERR_XML_ERROR,
+ _("Missing source path attribute for char device"), 0);
+ goto cleanup;
+ }
+
+ if (mode == NULL ||
+ STREQ((const char *)mode, "connect")) {
+ snprintf(buf, buflen, "%s:%s", type, path);
+ } else {
+ snprintf(buf, buflen, "%s:%s,listen", type, path);
+ }
+ }
+ buf[buflen-1] = '\0';
+
+ xmlFree(mode);
+ xmlFree(protocol);
+ xmlFree(type);
+ xmlFree(bindHost);
+ xmlFree(bindService);
+ xmlFree(connectHost);
+ xmlFree(connectService);
+ xmlFree(path);
+
+ return 0;
+
+cleanup:
+ xmlFree(mode);
+ xmlFree(protocol);
+ xmlFree(type);
+ xmlFree(bindHost);
+ xmlFree(bindService);
+ xmlFree(connectHost);
+ xmlFree(connectService);
+ xmlFree(path);
+ return -1;
+}
+
/**
* virDomainParseXMLOSDescHVM:
* @conn: pointer to the hypervisor connection
@@ -877,24 +1049,53 @@ virDomainParseXMLOSDescHVM(virConnectPtr conn, xmlNodePtr node,
nodes = NULL;
}
-
- res = virXPathBoolean("count(domain/devices/console) > 0", ctxt);
- if (res < 0) {
- virXMLError(conn, VIR_ERR_XML_ERROR, NULL, 0);
- goto error;
+ cur = virXPathNode("/domain/devices/parallel[1]", ctxt);
+ if (cur != NULL) {
+ char scratch[PATH_MAX];
+ if (virDomainParseXMLOSDescHVMChar(conn, scratch, sizeof(scratch), cur) < 0)
+ goto error;
+ if (virBufferVSprintf(buf, "(parallel %s)", scratch) < 0)
+ goto no_memory;
+ } else {
+ if (virBufferAddLit(buf, "(parallel none)") < 0)
+ goto no_memory;
}
- if (res) {
- virBufferAddLit(buf, "(serial pty)");
+
+ cur = virXPathNode("/domain/devices/serial[1]", ctxt);
+ if (cur != NULL) {
+ char scratch[PATH_MAX];
+ if (virDomainParseXMLOSDescHVMChar(conn, scratch, sizeof(scratch), cur) < 0)
+ goto error;
+ if (virBufferVSprintf(buf, "(serial %s)", scratch) < 0)
+ goto no_memory;
+ } else {
+ res = virXPathBoolean("count(domain/devices/console) > 0", ctxt);
+ if (res < 0) {
+ virXMLError(conn, VIR_ERR_XML_ERROR, NULL, 0);
+ goto error;
+ }
+ if (res) {
+ if (virBufferAddLit(buf, "(serial pty)") < 0)
+ goto no_memory;
+ } else {
+ if (virBufferAddLit(buf, "(serial none)") < 0)
+ goto no_memory;
+ }
}
str = virXPathString("string(/domain/clock/@offset)", ctxt);
if (str != NULL && !strcmp(str, "localtime")) {
- virBufferAddLit(buf, "(localtime 1)");
+ if (virBufferAddLit(buf, "(localtime 1)") < 0)
+ goto no_memory;
}
free(str);
return (0);
+no_memory:
+ virXMLError(conn, VIR_ERR_XML_ERROR,
+ _("cannot allocate memory for buffer"), 0);
+
error:
free(nodes);
return (-1);
diff --git a/src/xml.h b/src/xml.h
index 2d30b6576..d91a1b0e7 100644
--- a/src/xml.h
+++ b/src/xml.h
@@ -44,6 +44,10 @@ char * virSaveCpuSet (virConnectPtr conn,
char * virConvertCpuSet(virConnectPtr conn,
const char *str,
int maxcpu);
+int virDomainParseXMLOSDescHVMChar(virConnectPtr conn,
+ char *buf,
+ size_t buflen,
+ xmlNodePtr node);
char * virDomainParseXMLDesc(virConnectPtr conn,
const char *xmldesc,
char **name,
diff --git a/tests/sexpr2xmldata/sexpr2xml-curmem.xml b/tests/sexpr2xmldata/sexpr2xml-curmem.xml
index 15853cd82..a609f97e8 100644
--- a/tests/sexpr2xmldata/sexpr2xml-curmem.xml
+++ b/tests/sexpr2xmldata/sexpr2xml-curmem.xml
@@ -28,5 +28,8 @@
</disk>
<input type='mouse' bus='xen'/>
<graphics type='vnc' port='5905'/>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
</devices>
</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-disk-block-shareable.xml b/tests/sexpr2xmldata/sexpr2xml-disk-block-shareable.xml
index 9c2f19dcc..35735399f 100644
--- a/tests/sexpr2xmldata/sexpr2xml-disk-block-shareable.xml
+++ b/tests/sexpr2xmldata/sexpr2xml-disk-block-shareable.xml
@@ -21,5 +21,8 @@
<mac address='00:16:3e:23:9e:eb'/>
<script path='vif-bridge'/>
</interface>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
</devices>
</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-disk-block.xml b/tests/sexpr2xmldata/sexpr2xml-disk-block.xml
index a6d54661a..0bcf58390 100644
--- a/tests/sexpr2xmldata/sexpr2xml-disk-block.xml
+++ b/tests/sexpr2xmldata/sexpr2xml-disk-block.xml
@@ -18,5 +18,8 @@
<source dev='/dev/MainVG/GuestVG'/>
<target dev='xvda'/>
</disk>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
</devices>
</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-qcow.xml b/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-qcow.xml
index af2ae7b25..a0e139587 100644
--- a/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-qcow.xml
+++ b/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-qcow.xml
@@ -18,5 +18,8 @@
<source file='/root/some.img'/>
<target dev='xvda'/>
</disk>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
</devices>
</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-raw.xml b/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-raw.xml
index 1cb4a3978..f16f1cc8d 100644
--- a/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-raw.xml
+++ b/tests/sexpr2xmldata/sexpr2xml-disk-drv-blktap-raw.xml
@@ -18,5 +18,8 @@
<source file='/root/some.img'/>
<target dev='xvda'/>
</disk>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
</devices>
</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-disk-file.xml b/tests/sexpr2xmldata/sexpr2xml-disk-file.xml
index 8c3603647..e0841aa8b 100644
--- a/tests/sexpr2xmldata/sexpr2xml-disk-file.xml
+++ b/tests/sexpr2xmldata/sexpr2xml-disk-file.xml
@@ -18,5 +18,8 @@
<source file='/root/some.img'/>
<target dev='xvda'/>
</disk>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
</devices>
</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-kernel.xml b/tests/sexpr2xmldata/sexpr2xml-fv-kernel.xml
index 7faeeff82..96ce59d16 100644
--- a/tests/sexpr2xmldata/sexpr2xml-fv-kernel.xml
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-kernel.xml
@@ -22,5 +22,11 @@
<source file='/root/some.img'/>
<target dev='xvda'/>
</disk>
+ <serial type='pty'>
+ <target port='0'/>
+ </serial>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
</devices>
</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-parallel-tcp.sexpr b/tests/sexpr2xmldata/sexpr2xml-fv-parallel-tcp.sexpr
new file mode 100644
index 000000000..104f9790d
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-parallel-tcp.sexpr
@@ -0,0 +1 @@
+(domain (domid 1)(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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel tcp:localhost:9999)(serial none)(device_model '/usr/lib64/xen/bin/qemu-dm')(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/sexpr2xmldata/sexpr2xml-fv-parallel-tcp.xml b/tests/sexpr2xmldata/sexpr2xml-fv-parallel-tcp.xml
new file mode 100644
index 000000000..7bab9c679
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-parallel-tcp.xml
@@ -0,0 +1,45 @@
+<domain type='xen' id='1'>
+ <name>fvtest</name>
+ <uuid>b5d70dd2-75cd-aca5-1776-9660b059d8bc</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'/>
+ <target dev='vif1.0'/>
+ <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='ps2'/>
+ <graphics type='vnc' port='5901'/>
+ <parallel type='tcp'>
+ <source mode='connect' host='localhost' service='9999'/>
+ <protocol type='raw'/>
+ <target port='0'/>
+ </parallel>
+ </devices>
+</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-file.sexpr b/tests/sexpr2xmldata/sexpr2xml-fv-serial-file.sexpr
new file mode 100644
index 000000000..28c4346a5
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-file.sexpr
@@ -0,0 +1 @@
+(domain (domid 1)(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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial file:/tmp/serial.log)(device_model '/usr/lib64/xen/bin/qemu-dm')(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/sexpr2xmldata/sexpr2xml-fv-serial-file.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-file.xml
new file mode 100644
index 000000000..2a55b2a1b
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-file.xml
@@ -0,0 +1,48 @@
+<domain type='xen' id='1'>
+ <name>fvtest</name>
+ <uuid>b5d70dd2-75cd-aca5-1776-9660b059d8bc</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'/>
+ <target dev='vif1.0'/>
+ <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='ps2'/>
+ <graphics type='vnc' port='5901'/>
+ <serial type='file'>
+ <source path='/tmp/serial.log'/>
+ <target port='0'/>
+ </serial>
+ <console type='file'>
+ <source path='/tmp/serial.log'/>
+ <target port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-null.sexpr b/tests/sexpr2xmldata/sexpr2xml-fv-serial-null.sexpr
new file mode 100644
index 000000000..a87c493ca
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-null.sexpr
@@ -0,0 +1 @@
+(domain (domid 1)(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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial null)(device_model '/usr/lib64/xen/bin/qemu-dm')(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/sexpr2xmldata/sexpr2xml-fv-serial-null.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-null.xml
new file mode 100644
index 000000000..76fa8bf3e
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-null.xml
@@ -0,0 +1,46 @@
+<domain type='xen' id='1'>
+ <name>fvtest</name>
+ <uuid>b5d70dd2-75cd-aca5-1776-9660b059d8bc</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'/>
+ <target dev='vif1.0'/>
+ <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='ps2'/>
+ <graphics type='vnc' port='5901'/>
+ <serial type='null'>
+ <target port='0'/>
+ </serial>
+ <console type='null'>
+ <target port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-pipe.sexpr b/tests/sexpr2xmldata/sexpr2xml-fv-serial-pipe.sexpr
new file mode 100644
index 000000000..11a79521f
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-pipe.sexpr
@@ -0,0 +1 @@
+(domain (domid 1)(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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial pipe:/tmp/serial.pipe)(device_model '/usr/lib64/xen/bin/qemu-dm')(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/sexpr2xmldata/sexpr2xml-fv-serial-pipe.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-pipe.xml
new file mode 100644
index 000000000..e2dbd14d5
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-pipe.xml
@@ -0,0 +1,48 @@
+<domain type='xen' id='1'>
+ <name>fvtest</name>
+ <uuid>b5d70dd2-75cd-aca5-1776-9660b059d8bc</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'/>
+ <target dev='vif1.0'/>
+ <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='ps2'/>
+ <graphics type='vnc' port='5901'/>
+ <serial type='pipe'>
+ <source path='/tmp/serial.pipe'/>
+ <target port='0'/>
+ </serial>
+ <console type='pipe'>
+ <source path='/tmp/serial.pipe'/>
+ <target port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-pty.sexpr b/tests/sexpr2xmldata/sexpr2xml-fv-serial-pty.sexpr
new file mode 100644
index 000000000..0ef057682
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-pty.sexpr
@@ -0,0 +1 @@
+(domain (domid 1)(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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial pty)(device_model '/usr/lib64/xen/bin/qemu-dm')(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/sexpr2xmldata/sexpr2xml-fv-serial-pty.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-pty.xml
new file mode 100644
index 000000000..34b948858
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-pty.xml
@@ -0,0 +1,46 @@
+<domain type='xen' id='1'>
+ <name>fvtest</name>
+ <uuid>b5d70dd2-75cd-aca5-1776-9660b059d8bc</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'/>
+ <target dev='vif1.0'/>
+ <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='ps2'/>
+ <graphics type='vnc' port='5901'/>
+ <serial type='pty'>
+ <target port='0'/>
+ </serial>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-stdio.sexpr b/tests/sexpr2xmldata/sexpr2xml-fv-serial-stdio.sexpr
new file mode 100644
index 000000000..58e223ce7
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-stdio.sexpr
@@ -0,0 +1 @@
+(domain (domid 1)(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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial stdio)(device_model '/usr/lib64/xen/bin/qemu-dm')(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/sexpr2xmldata/sexpr2xml-fv-serial-stdio.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-stdio.xml
new file mode 100644
index 000000000..1ed205eeb
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-stdio.xml
@@ -0,0 +1,46 @@
+<domain type='xen' id='1'>
+ <name>fvtest</name>
+ <uuid>b5d70dd2-75cd-aca5-1776-9660b059d8bc</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'/>
+ <target dev='vif1.0'/>
+ <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='ps2'/>
+ <graphics type='vnc' port='5901'/>
+ <serial type='stdio'>
+ <target port='0'/>
+ </serial>
+ <console type='stdio'>
+ <target port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp-telnet.sexpr b/tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp-telnet.sexpr
new file mode 100644
index 000000000..605f3c811
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp-telnet.sexpr
@@ -0,0 +1 @@
+(domain (domid 1)(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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial telnet:localhost:9999,listen)(device_model '/usr/lib64/xen/bin/qemu-dm')(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/sexpr2xmldata/sexpr2xml-fv-serial-tcp-telnet.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp-telnet.xml
new file mode 100644
index 000000000..764ec82bf
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp-telnet.xml
@@ -0,0 +1,50 @@
+<domain type='xen' id='1'>
+ <name>fvtest</name>
+ <uuid>b5d70dd2-75cd-aca5-1776-9660b059d8bc</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'/>
+ <target dev='vif1.0'/>
+ <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='ps2'/>
+ <graphics type='vnc' port='5901'/>
+ <serial type='tcp'>
+ <source mode='bind' host='localhost' service='9999'/>
+ <protocol type='telnet'/>
+ <target port='0'/>
+ </serial>
+ <console type='tcp'>
+ <source mode='bind' host='localhost' service='9999'/>
+ <protocol type='telnet'/>
+ <target port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp.sexpr b/tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp.sexpr
new file mode 100644
index 000000000..aa20310b6
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp.sexpr
@@ -0,0 +1 @@
+(domain (domid 1)(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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial tcp:localhost:9999,listen)(device_model '/usr/lib64/xen/bin/qemu-dm')(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/sexpr2xmldata/sexpr2xml-fv-serial-tcp.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp.xml
new file mode 100644
index 000000000..940092f9c
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp.xml
@@ -0,0 +1,50 @@
+<domain type='xen' id='1'>
+ <name>fvtest</name>
+ <uuid>b5d70dd2-75cd-aca5-1776-9660b059d8bc</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'/>
+ <target dev='vif1.0'/>
+ <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='ps2'/>
+ <graphics type='vnc' port='5901'/>
+ <serial type='tcp'>
+ <source mode='bind' host='localhost' service='9999'/>
+ <protocol type='raw'/>
+ <target port='0'/>
+ </serial>
+ <console type='tcp'>
+ <source mode='bind' host='localhost' service='9999'/>
+ <protocol type='raw'/>
+ <target port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-udp.sexpr b/tests/sexpr2xmldata/sexpr2xml-fv-serial-udp.sexpr
new file mode 100644
index 000000000..f07dc4e09
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-udp.sexpr
@@ -0,0 +1 @@
+(domain (domid 1)(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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial udp:localhost:9998@localhost:9999)(device_model '/usr/lib64/xen/bin/qemu-dm')(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/sexpr2xmldata/sexpr2xml-fv-serial-udp.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-udp.xml
new file mode 100644
index 000000000..672892a60
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-udp.xml
@@ -0,0 +1,50 @@
+<domain type='xen' id='1'>
+ <name>fvtest</name>
+ <uuid>b5d70dd2-75cd-aca5-1776-9660b059d8bc</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'/>
+ <target dev='vif1.0'/>
+ <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='ps2'/>
+ <graphics type='vnc' port='5901'/>
+ <serial type='udp'>
+ <source mode='connect' host='localhost' service='9998'/>
+ <source mode='bind' host='localhost' service='9999'/>
+ <target port='0'/>
+ </serial>
+ <console type='udp'>
+ <source mode='connect' host='localhost' service='9998'/>
+ <source mode='bind' host='localhost' service='9999'/>
+ <target port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-unix.sexpr b/tests/sexpr2xmldata/sexpr2xml-fv-serial-unix.sexpr
new file mode 100644
index 000000000..3825ab7a2
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-unix.sexpr
@@ -0,0 +1 @@
+(domain (domid 1)(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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial unix:/tmp/serial.sock,listen)(device_model '/usr/lib64/xen/bin/qemu-dm')(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/sexpr2xmldata/sexpr2xml-fv-serial-unix.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-unix.xml
new file mode 100644
index 000000000..ea6b10fec
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-unix.xml
@@ -0,0 +1,48 @@
+<domain type='xen' id='1'>
+ <name>fvtest</name>
+ <uuid>b5d70dd2-75cd-aca5-1776-9660b059d8bc</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'/>
+ <target dev='vif1.0'/>
+ <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='ps2'/>
+ <graphics type='vnc' port='5901'/>
+ <serial type='unix'>
+ <source mode='bind' path='/tmp/serial.sock'/>
+ <target port='0'/>
+ </serial>
+ <console type='unix'>
+ <source mode='bind' path='/tmp/serial.sock'/>
+ <target port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-net-bridged.xml b/tests/sexpr2xmldata/sexpr2xml-net-bridged.xml
index 26d7badb0..d4a5db74e 100644
--- a/tests/sexpr2xmldata/sexpr2xml-net-bridged.xml
+++ b/tests/sexpr2xmldata/sexpr2xml-net-bridged.xml
@@ -24,5 +24,8 @@
<mac address='00:11:22:33:44:55'/>
<script path='vif-bridge'/>
</interface>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
</devices>
</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-net-routed.xml b/tests/sexpr2xmldata/sexpr2xml-net-routed.xml
index 74dad9f53..6f5c6b6e3 100644
--- a/tests/sexpr2xmldata/sexpr2xml-net-routed.xml
+++ b/tests/sexpr2xmldata/sexpr2xml-net-routed.xml
@@ -24,5 +24,8 @@
<ip address='172.14.5.6'/>
<script path='vif-routed'/>
</interface>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
</devices>
</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-no-source-cdrom.xml b/tests/sexpr2xmldata/sexpr2xml-no-source-cdrom.xml
index 429474aff..bc4f2eab2 100644
--- a/tests/sexpr2xmldata/sexpr2xml-no-source-cdrom.xml
+++ b/tests/sexpr2xmldata/sexpr2xml-no-source-cdrom.xml
@@ -36,5 +36,11 @@
</disk>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='5906'/>
+ <serial type='pty'>
+ <target port='0'/>
+ </serial>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
</devices>
</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-pv-bootloader.xml b/tests/sexpr2xmldata/sexpr2xml-pv-bootloader.xml
index 9ee542dd4..7bf319052 100644
--- a/tests/sexpr2xmldata/sexpr2xml-pv-bootloader.xml
+++ b/tests/sexpr2xmldata/sexpr2xml-pv-bootloader.xml
@@ -14,5 +14,8 @@
<source file='/root/some.img'/>
<target dev='xvda'/>
</disk>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
</devices>
</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-pv-vfb-new.xml b/tests/sexpr2xmldata/sexpr2xml-pv-vfb-new.xml
index a8b61eb5c..cd9da037d 100644
--- a/tests/sexpr2xmldata/sexpr2xml-pv-vfb-new.xml
+++ b/tests/sexpr2xmldata/sexpr2xml-pv-vfb-new.xml
@@ -20,5 +20,8 @@
</disk>
<input type='mouse' bus='xen'/>
<graphics type='vnc' port='-1' listen='0.0.0.0' keymap='ja'/>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
</devices>
</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-pv-vfb-orig.xml b/tests/sexpr2xmldata/sexpr2xml-pv-vfb-orig.xml
index a8b61eb5c..cd9da037d 100644
--- a/tests/sexpr2xmldata/sexpr2xml-pv-vfb-orig.xml
+++ b/tests/sexpr2xmldata/sexpr2xml-pv-vfb-orig.xml
@@ -20,5 +20,8 @@
</disk>
<input type='mouse' bus='xen'/>
<graphics type='vnc' port='-1' listen='0.0.0.0' keymap='ja'/>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
</devices>
</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-pv.xml b/tests/sexpr2xmldata/sexpr2xml-pv.xml
index 8c3603647..e0841aa8b 100644
--- a/tests/sexpr2xmldata/sexpr2xml-pv.xml
+++ b/tests/sexpr2xmldata/sexpr2xml-pv.xml
@@ -18,5 +18,8 @@
<source file='/root/some.img'/>
<target dev='xvda'/>
</disk>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
</devices>
</domain>
diff --git a/tests/sexpr2xmltest.c b/tests/sexpr2xmltest.c
index 576ea9880..0ec315532 100644
--- a/tests/sexpr2xmltest.c
+++ b/tests/sexpr2xmltest.c
@@ -2,6 +2,7 @@
#include <stdio.h>
#include <string.h>
+#include <unistd.h>
#ifdef WITH_XEN
@@ -11,11 +12,11 @@
#include "testutils.h"
static char *progname;
-static char *abs_top_srcdir;
+static char *abs_srcdir;
#define MAX_FILE 4096
-static int testCompareFiles(const char *xml_rel, const char *sexpr_rel,
+static int testCompareFiles(const char *xml, const char *sexpr,
int xendConfigVersion) {
char xmlData[MAX_FILE];
char sexprData[MAX_FILE];
@@ -23,28 +24,23 @@ static int testCompareFiles(const char *xml_rel, const char *sexpr_rel,
char *xmlPtr = &(xmlData[0]);
char *sexprPtr = &(sexprData[0]);
int ret = -1;
- char xml[PATH_MAX];
- char sexpr[PATH_MAX];
- snprintf(xml, sizeof xml - 1, "%s/tests/%s", abs_top_srcdir, xml_rel);
- snprintf(sexpr, sizeof sexpr - 1, "%s/tests/%s", abs_top_srcdir, sexpr_rel);
-
- if (virtTestLoadFile(xml, &xmlPtr, MAX_FILE) < 0)
- goto fail;
+ if (virtTestLoadFile(xml, &xmlPtr, MAX_FILE) < 0) {
+ printf("Missing %s\n", xml);
+ goto fail;
+ }
- if (virtTestLoadFile(sexpr, &sexprPtr, MAX_FILE) < 0)
- goto fail;
+ if (virtTestLoadFile(sexpr, &sexprPtr, MAX_FILE) < 0) {
+ printf("Missing %s\n", sexpr);
+ goto fail;
+ }
if (!(gotxml = xend_parse_domain_sexp(NULL, sexprData, xendConfigVersion)))
goto fail;
- if (strcmp(xmlData, gotxml)) {
- if (getenv("DEBUG_TESTS")) {
- printf("In test file %s -> %s:\n", sexpr, xml);
- printf("Expect %d '%s'\n", (int)strlen(xmlData), xmlData);
- printf("Actual %d '%s'\n", (int)strlen(gotxml), gotxml);
- }
- goto fail;
+ if (STRNEQ(xmlData, gotxml)) {
+ virtTestDifference(stderr, xmlData, gotxml);
+ goto fail;
}
ret = 0;
@@ -55,139 +51,21 @@ static int testCompareFiles(const char *xml_rel, const char *sexpr_rel,
return ret;
}
-static int testComparePVversion1(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("sexpr2xmldata/sexpr2xml-pv.xml",
- "sexpr2xmldata/sexpr2xml-pv.sexpr",
- 1);
-}
-
-static int testCompareFVversion1(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("sexpr2xmldata/sexpr2xml-fv.xml",
- "sexpr2xmldata/sexpr2xml-fv.sexpr",
- 1);
-}
-
-static int testComparePVversion2(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("sexpr2xmldata/sexpr2xml-pv.xml",
- "sexpr2xmldata/sexpr2xml-pv.sexpr",
- 2);
-}
-
-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(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("sexpr2xmldata/sexpr2xml-pv-vfb-new.xml",
- "sexpr2xmldata/sexpr2xml-pv-vfb-new.sexpr",
- 3);
-}
-
-
-static int testCompareFVversion2(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("sexpr2xmldata/sexpr2xml-fv-v2.xml",
- "sexpr2xmldata/sexpr2xml-fv-v2.sexpr",
- 2);
-}
-
-static int testComparePVBootloader(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("sexpr2xmldata/sexpr2xml-pv-bootloader.xml",
- "sexpr2xmldata/sexpr2xml-pv-bootloader.sexpr",
- 2);
-}
-
-static int testCompareDiskFile(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("sexpr2xmldata/sexpr2xml-disk-file.xml",
- "sexpr2xmldata/sexpr2xml-disk-file.sexpr",
- 1);
-}
-
-static int testCompareDiskBlock(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("sexpr2xmldata/sexpr2xml-disk-block.xml",
- "sexpr2xmldata/sexpr2xml-disk-block.sexpr",
- 1);
-}
-
-static int testCompareDiskShareable(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("sexpr2xmldata/sexpr2xml-disk-block-shareable.xml",
- "sexpr2xmldata/sexpr2xml-disk-block-shareable.sexpr",
- 1);
-}
-
-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(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(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("sexpr2xmldata/sexpr2xml-curmem.xml",
- "sexpr2xmldata/sexpr2xml-curmem.sexpr",
- 1);
-}
-
-
-static int testCompareNetRouted(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("sexpr2xmldata/sexpr2xml-net-routed.xml",
- "sexpr2xmldata/sexpr2xml-net-routed.sexpr",
- 1);
-}
-
-static int testCompareNetBridged(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("sexpr2xmldata/sexpr2xml-net-bridged.xml",
- "sexpr2xmldata/sexpr2xml-net-bridged.sexpr",
- 1);
-}
-
-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 testCompareFVInputUSBMouse(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("sexpr2xmldata/sexpr2xml-fv-usbmouse.xml",
- "sexpr2xmldata/sexpr2xml-fv-usbmouse.sexpr",
- 1);
-}
+struct testInfo {
+ const char *input;
+ const char *output;
+ int version;
+};
-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(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("sexpr2xmldata/sexpr2xml-fv-localtime.xml",
- "sexpr2xmldata/sexpr2xml-fv-localtime.sexpr",
- 1);
-}
-
-static int testCompareFVKernel(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("sexpr2xmldata/sexpr2xml-fv-kernel.xml",
- "sexpr2xmldata/sexpr2xml-fv-kernel.sexpr",
- 1);
-}
-
-static int testCompareFVLegacyVFB(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("sexpr2xmldata/sexpr2xml-fv-legacy-vfb.xml",
- "sexpr2xmldata/sexpr2xml-fv-legacy-vfb.sexpr",
- 4);
+static int testCompareHelper(const void *data) {
+ const struct testInfo *info = data;
+ char xml[PATH_MAX];
+ char args[PATH_MAX];
+ snprintf(xml, PATH_MAX, "%s/sexpr2xmldata/sexpr2xml-%s.xml",
+ abs_srcdir, info->input);
+ snprintf(args, PATH_MAX, "%s/sexpr2xmldata/sexpr2xml-%s.sexpr",
+ abs_srcdir, info->output);
+ return testCompareFiles(xml, args, info->version);
}
@@ -195,6 +73,7 @@ int
main(int argc, char **argv)
{
int ret = 0;
+ char cwd[PATH_MAX];
progname = argv[0];
@@ -203,98 +82,58 @@ main(int argc, char **argv)
exit(EXIT_FAILURE);
}
- abs_top_srcdir = getenv("abs_top_srcdir");
- if (!abs_top_srcdir) {
- fprintf(stderr, "missing enviroment variable abs_top_srcdir\n");
+ abs_srcdir = getenv("abs_srcdir");
+ if (!abs_srcdir)
+ abs_srcdir = getcwd(cwd, sizeof(cwd));
+
+ if (argc > 1) {
+ fprintf(stderr, "Usage: %s\n", progname);
exit(EXIT_FAILURE);
}
- if (virtTestRun("SEXPR-2-XML PV config (version 1)",
- 1, testComparePVversion1, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("SEXPR-2-XML FV config (version 1)",
- 1, testCompareFVversion1, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("SEXPR-2-XML PV config (version 2)",
- 1, testComparePVversion2, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("SEXPR-2-XML PV config (Orig VFB)",
- 1, testComparePVOrigVFB, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("SEXPR-2-XML PV config (New VFB)",
- 1, testComparePVNewVFB, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("SEXPR-2-XML FV config (version 2)",
- 1, testCompareFVversion2, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("SEXPR-2-XML PV config bootloader",
- 1, testComparePVBootloader, NULL) != 0)
- 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 Block shareable",
- 1, testCompareDiskShareable, 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;
-
- if (virtTestRun("SEXPR-2-XML Resized memory config",
- 1, testCompareResizedMemory, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("SEXPR-2-XML net routed",
- 1, testCompareNetRouted, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("SEXPR-2-XML net bridged",
- 1, testCompareNetBridged, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("SEXPR-2-XML no source CDRom",
- 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;
-
- if (virtTestRun("SEXPR-2-XML clock Localtime",
- 1, testCompareFVclockLocaltime, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("SEXPR-2-XML FV kernel",
- 1, testCompareFVKernel, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("SEXPR-2-XML FV legacy VFB",
- 1, testCompareFVLegacyVFB, NULL) != 0)
- ret = -1;
+#define DO_TEST(in, out, version) \
+ do { \
+ struct testInfo info = { in, out, version }; \
+ if (virtTestRun("Xen SEXPR-2-XML " in " -> " out, \
+ 1, testCompareHelper, &info) < 0) \
+ ret = -1; \
+ } while (0)
+
+ DO_TEST("pv", "pv", 1);
+ DO_TEST("fv", "fv", 1);
+ DO_TEST("pv", "pv", 2);
+ DO_TEST("fv-v2", "fv-v2", 2);
+ DO_TEST("pv-vfb-orig", "pv-vfb-orig", 2);
+ DO_TEST("pv-vfb-new", "pv-vfb-new", 3);
+ DO_TEST("pv-bootloader", "pv-bootloader", 1);
+
+ DO_TEST("disk-file", "disk-file", 2);
+ DO_TEST("disk-block", "disk-block", 2);
+ DO_TEST("disk-block-shareable", "disk-block-shareable", 2);
+ DO_TEST("disk-drv-blktap-raw", "disk-drv-blktap-raw", 2);
+ DO_TEST("disk-drv-blktap-qcow", "disk-drv-blktap-qcow", 2);
+
+ DO_TEST("curmem", "curmem", 1);
+ DO_TEST("net-routed", "net-routed", 2);
+ DO_TEST("net-bridged", "net-bridged", 2);
+ DO_TEST("no-source-cdrom", "no-source-cdrom", 1);
+
+ DO_TEST("fv-utc", "fv-utc", 1);
+ DO_TEST("fv-localtime", "fv-localtime", 1);
+ DO_TEST("fv-usbmouse", "fv-usbmouse", 1);
+ DO_TEST("fv-usbmouse", "fv-usbmouse", 1);
+ DO_TEST("fv-kernel", "fv-kernel", 1);
+
+ DO_TEST("fv-serial-null", "fv-serial-null", 1);
+ DO_TEST("fv-serial-file", "fv-serial-file", 1);
+ DO_TEST("fv-serial-stdio", "fv-serial-stdio", 1);
+ DO_TEST("fv-serial-pty", "fv-serial-pty", 1);
+ DO_TEST("fv-serial-pipe", "fv-serial-pipe", 1);
+ DO_TEST("fv-serial-tcp", "fv-serial-tcp", 1);
+ DO_TEST("fv-serial-udp", "fv-serial-udp", 1);
+ DO_TEST("fv-serial-tcp-telnet", "fv-serial-tcp-telnet", 1);
+ DO_TEST("fv-serial-unix", "fv-serial-unix", 1);
+ DO_TEST("fv-parallel-tcp", "fv-parallel-tcp", 1);
exit(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
diff --git a/tests/xmconfigdata/test-fullvirt-localtime.cfg b/tests/xmconfigdata/test-fullvirt-localtime.cfg
index 18165a542..f0acaf652 100755
--- a/tests/xmconfigdata/test-fullvirt-localtime.cfg
+++ b/tests/xmconfigdata/test-fullvirt-localtime.cfg
@@ -21,3 +21,5 @@ 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" ]
+parallel = "none"
+serial = "none"
diff --git a/tests/xmconfigdata/test-fullvirt-new-cdrom.cfg b/tests/xmconfigdata/test-fullvirt-new-cdrom.cfg
index 2777535d1..01bb7cc52 100755
--- a/tests/xmconfigdata/test-fullvirt-new-cdrom.cfg
+++ b/tests/xmconfigdata/test-fullvirt-new-cdrom.cfg
@@ -21,3 +21,5 @@ 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" ]
+parallel = "none"
+serial = "none"
diff --git a/tests/xmconfigdata/test-fullvirt-old-cdrom.cfg b/tests/xmconfigdata/test-fullvirt-old-cdrom.cfg
index 2f2cc361f..c6eee8fa4 100755
--- a/tests/xmconfigdata/test-fullvirt-old-cdrom.cfg
+++ b/tests/xmconfigdata/test-fullvirt-old-cdrom.cfg
@@ -22,3 +22,5 @@ vnclisten = "127.0.0.1"
vncpasswd = "123poi"
disk = [ "phy:/dev/HostVG/XenGuest2,ioemu:hda,w" ]
vif = [ "mac=00:16:3E:66:92:9C,bridge=xenbr0,type=ioemu" ]
+parallel = "none"
+serial = "none"
diff --git a/tests/xmconfigdata/test-fullvirt-parallel-tcp.cfg b/tests/xmconfigdata/test-fullvirt-parallel-tcp.cfg
new file mode 100755
index 000000000..a03fdc7fc
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-parallel-tcp.cfg
@@ -0,0 +1,25 @@
+name = "XenGuest2"
+uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809"
+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"
+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" ]
+parallel = "tcp:127.0.0.1:7777"
+serial = "none"
diff --git a/tests/xmconfigdata/test-fullvirt-parallel-tcp.xml b/tests/xmconfigdata/test-fullvirt-parallel-tcp.xml
new file mode 100644
index 000000000..b2eb903a4
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-parallel-tcp.xml
@@ -0,0 +1,46 @@
+<domain type='xen'>
+ <name>XenGuest2</name>
+ <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</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='ps2'/>
+ <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
+ <parallel type='tcp'>
+ <source mode='connect' host='127.0.0.1' service='7777'/>
+ <protocol type='raw'/>
+ <target port='0'/>
+ </parallel>
+ </devices>
+</domain>
diff --git a/tests/xmconfigdata/test-fullvirt-serial-file.cfg b/tests/xmconfigdata/test-fullvirt-serial-file.cfg
new file mode 100755
index 000000000..aed248153
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-serial-file.cfg
@@ -0,0 +1,25 @@
+name = "XenGuest2"
+uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809"
+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"
+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" ]
+parallel = "none"
+serial = "file:/tmp/serial.log"
diff --git a/tests/xmconfigdata/test-fullvirt-serial-file.xml b/tests/xmconfigdata/test-fullvirt-serial-file.xml
new file mode 100644
index 000000000..dadfe3977
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-serial-file.xml
@@ -0,0 +1,49 @@
+<domain type='xen'>
+ <name>XenGuest2</name>
+ <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</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='ps2'/>
+ <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
+ <serial type='file'>
+ <source path='/tmp/serial.log'/>
+ <target port='0'/>
+ </serial>
+ <console type='file'>
+ <source path='/tmp/serial.log'/>
+ <target port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/xmconfigdata/test-fullvirt-serial-null.cfg b/tests/xmconfigdata/test-fullvirt-serial-null.cfg
new file mode 100755
index 000000000..eb3747142
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-serial-null.cfg
@@ -0,0 +1,25 @@
+name = "XenGuest2"
+uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809"
+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"
+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" ]
+parallel = "none"
+serial = "null"
diff --git a/tests/xmconfigdata/test-fullvirt-serial-null.xml b/tests/xmconfigdata/test-fullvirt-serial-null.xml
new file mode 100644
index 000000000..0ce1d56e9
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-serial-null.xml
@@ -0,0 +1,47 @@
+<domain type='xen'>
+ <name>XenGuest2</name>
+ <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</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='ps2'/>
+ <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
+ <serial type='null'>
+ <target port='0'/>
+ </serial>
+ <console type='null'>
+ <target port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/xmconfigdata/test-fullvirt-serial-pipe.cfg b/tests/xmconfigdata/test-fullvirt-serial-pipe.cfg
new file mode 100755
index 000000000..2d50feea3
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-serial-pipe.cfg
@@ -0,0 +1,25 @@
+name = "XenGuest2"
+uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809"
+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"
+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" ]
+parallel = "none"
+serial = "pipe:/tmp/serial.pipe"
diff --git a/tests/xmconfigdata/test-fullvirt-serial-pipe.xml b/tests/xmconfigdata/test-fullvirt-serial-pipe.xml
new file mode 100644
index 000000000..20198927e
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-serial-pipe.xml
@@ -0,0 +1,49 @@
+<domain type='xen'>
+ <name>XenGuest2</name>
+ <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</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='ps2'/>
+ <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
+ <serial type='pipe'>
+ <source path='/tmp/serial.pipe'/>
+ <target port='0'/>
+ </serial>
+ <console type='pipe'>
+ <source path='/tmp/serial.pipe'/>
+ <target port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/xmconfigdata/test-fullvirt-serial-pty.cfg b/tests/xmconfigdata/test-fullvirt-serial-pty.cfg
new file mode 100755
index 000000000..509a7f2f4
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-serial-pty.cfg
@@ -0,0 +1,25 @@
+name = "XenGuest2"
+uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809"
+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"
+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" ]
+parallel = "none"
+serial = "pty"
diff --git a/tests/xmconfigdata/test-fullvirt-serial-pty.xml b/tests/xmconfigdata/test-fullvirt-serial-pty.xml
new file mode 100644
index 000000000..602a2c180
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-serial-pty.xml
@@ -0,0 +1,47 @@
+<domain type='xen'>
+ <name>XenGuest2</name>
+ <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</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='ps2'/>
+ <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
+ <serial type='pty'>
+ <target port='0'/>
+ </serial>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/xmconfigdata/test-fullvirt-serial-stdio.cfg b/tests/xmconfigdata/test-fullvirt-serial-stdio.cfg
new file mode 100755
index 000000000..3bab00a48
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-serial-stdio.cfg
@@ -0,0 +1,25 @@
+name = "XenGuest2"
+uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809"
+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"
+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" ]
+parallel = "none"
+serial = "stdio"
diff --git a/tests/xmconfigdata/test-fullvirt-serial-stdio.xml b/tests/xmconfigdata/test-fullvirt-serial-stdio.xml
new file mode 100644
index 000000000..30ec87a14
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-serial-stdio.xml
@@ -0,0 +1,47 @@
+<domain type='xen'>
+ <name>XenGuest2</name>
+ <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</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='ps2'/>
+ <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
+ <serial type='stdio'>
+ <target port='0'/>
+ </serial>
+ <console type='stdio'>
+ <target port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/xmconfigdata/test-fullvirt-serial-tcp-telnet.cfg b/tests/xmconfigdata/test-fullvirt-serial-tcp-telnet.cfg
new file mode 100755
index 000000000..ffe7f1515
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-serial-tcp-telnet.cfg
@@ -0,0 +1,25 @@
+name = "XenGuest2"
+uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809"
+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"
+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" ]
+parallel = "none"
+serial = "telnet:127.0.0.1:9999,listen"
diff --git a/tests/xmconfigdata/test-fullvirt-serial-tcp-telnet.xml b/tests/xmconfigdata/test-fullvirt-serial-tcp-telnet.xml
new file mode 100644
index 000000000..fb1de8829
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-serial-tcp-telnet.xml
@@ -0,0 +1,51 @@
+<domain type='xen'>
+ <name>XenGuest2</name>
+ <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</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='ps2'/>
+ <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
+ <serial type='tcp'>
+ <source mode='bind' host='127.0.0.1' service='9999'/>
+ <protocol type='telnet'/>
+ <target port='0'/>
+ </serial>
+ <console type='tcp'>
+ <source mode='bind' host='127.0.0.1' service='9999'/>
+ <protocol type='telnet'/>
+ <target port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/xmconfigdata/test-fullvirt-serial-tcp.cfg b/tests/xmconfigdata/test-fullvirt-serial-tcp.cfg
new file mode 100755
index 000000000..00a4cfdfe
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-serial-tcp.cfg
@@ -0,0 +1,25 @@
+name = "XenGuest2"
+uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809"
+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"
+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" ]
+parallel = "none"
+serial = "tcp:127.0.0.1:7777"
diff --git a/tests/xmconfigdata/test-fullvirt-serial-tcp.xml b/tests/xmconfigdata/test-fullvirt-serial-tcp.xml
new file mode 100644
index 000000000..48682cb93
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-serial-tcp.xml
@@ -0,0 +1,51 @@
+<domain type='xen'>
+ <name>XenGuest2</name>
+ <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</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='ps2'/>
+ <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
+ <serial type='tcp'>
+ <source mode='connect' host='127.0.0.1' service='7777'/>
+ <protocol type='raw'/>
+ <target port='0'/>
+ </serial>
+ <console type='tcp'>
+ <source mode='connect' host='127.0.0.1' service='7777'/>
+ <protocol type='raw'/>
+ <target port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/xmconfigdata/test-fullvirt-serial-udp.cfg b/tests/xmconfigdata/test-fullvirt-serial-udp.cfg
new file mode 100755
index 000000000..8110e8698
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-serial-udp.cfg
@@ -0,0 +1,25 @@
+name = "XenGuest2"
+uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809"
+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"
+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" ]
+parallel = "none"
+serial = "udp:127.0.0.1:9999@0.0.0.0:99998"
diff --git a/tests/xmconfigdata/test-fullvirt-serial-udp.xml b/tests/xmconfigdata/test-fullvirt-serial-udp.xml
new file mode 100644
index 000000000..2148d3d9d
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-serial-udp.xml
@@ -0,0 +1,51 @@
+<domain type='xen'>
+ <name>XenGuest2</name>
+ <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</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='ps2'/>
+ <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
+ <serial type='udp'>
+ <source mode='connect' host='127.0.0.1' service='9999'/>
+ <source mode='bind' host='0.0.0.0' service='99998'/>
+ <target port='0'/>
+ </serial>
+ <console type='udp'>
+ <source mode='connect' host='127.0.0.1' service='9999'/>
+ <source mode='bind' host='0.0.0.0' service='99998'/>
+ <target port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/xmconfigdata/test-fullvirt-serial-unix.cfg b/tests/xmconfigdata/test-fullvirt-serial-unix.cfg
new file mode 100755
index 000000000..17cb62831
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-serial-unix.cfg
@@ -0,0 +1,25 @@
+name = "XenGuest2"
+uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809"
+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"
+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" ]
+parallel = "none"
+serial = "unix:/tmp/serial.sock,listen"
diff --git a/tests/xmconfigdata/test-fullvirt-serial-unix.xml b/tests/xmconfigdata/test-fullvirt-serial-unix.xml
new file mode 100644
index 000000000..b34dfbfce
--- /dev/null
+++ b/tests/xmconfigdata/test-fullvirt-serial-unix.xml
@@ -0,0 +1,49 @@
+<domain type='xen'>
+ <name>XenGuest2</name>
+ <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</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='ps2'/>
+ <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
+ <serial type='unix'>
+ <source mode='bind' path='/tmp/serial.sock'/>
+ <target port='0'/>
+ </serial>
+ <console type='unix'>
+ <source mode='bind' path='/tmp/serial.sock'/>
+ <target port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/xmconfigdata/test-fullvirt-usbmouse.cfg b/tests/xmconfigdata/test-fullvirt-usbmouse.cfg
index b4e5f9b60..96bba6edc 100755
--- a/tests/xmconfigdata/test-fullvirt-usbmouse.cfg
+++ b/tests/xmconfigdata/test-fullvirt-usbmouse.cfg
@@ -22,3 +22,5 @@ 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" ]
+parallel = "none"
+serial = "none"
diff --git a/tests/xmconfigdata/test-fullvirt-usbtablet.cfg b/tests/xmconfigdata/test-fullvirt-usbtablet.cfg
index fa10c9aa8..ed90a04ff 100755
--- a/tests/xmconfigdata/test-fullvirt-usbtablet.cfg
+++ b/tests/xmconfigdata/test-fullvirt-usbtablet.cfg
@@ -22,3 +22,5 @@ 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" ]
+parallel = "none"
+serial = "none"
diff --git a/tests/xmconfigdata/test-fullvirt-utc.cfg b/tests/xmconfigdata/test-fullvirt-utc.cfg
index 2777535d1..01bb7cc52 100755
--- a/tests/xmconfigdata/test-fullvirt-utc.cfg
+++ b/tests/xmconfigdata/test-fullvirt-utc.cfg
@@ -21,3 +21,5 @@ 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" ]
+parallel = "none"
+serial = "none"
diff --git a/tests/xmconfigdata/test-paravirt-new-pvfb.xml b/tests/xmconfigdata/test-paravirt-new-pvfb.xml
index 72a07f56a..c114a4188 100644
--- a/tests/xmconfigdata/test-paravirt-new-pvfb.xml
+++ b/tests/xmconfigdata/test-paravirt-new-pvfb.xml
@@ -20,6 +20,8 @@
</interface>
<input type='mouse' bus='xen'/>
<graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
- <console/>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
</devices>
</domain>
diff --git a/tests/xmconfigdata/test-paravirt-old-pvfb.xml b/tests/xmconfigdata/test-paravirt-old-pvfb.xml
index 72a07f56a..c114a4188 100644
--- a/tests/xmconfigdata/test-paravirt-old-pvfb.xml
+++ b/tests/xmconfigdata/test-paravirt-old-pvfb.xml
@@ -20,6 +20,8 @@
</interface>
<input type='mouse' bus='xen'/>
<graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
- <console/>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
</devices>
</domain>
diff --git a/tests/xmconfigtest.c b/tests/xmconfigtest.c
index 569bc336e..71b6830d5 100644
--- a/tests/xmconfigtest.c
+++ b/tests/xmconfigtest.c
@@ -128,11 +128,8 @@ static int testCompareFormatXML(const char *xmcfg, const char *xml,
if (!(gotxml = xenXMDomainFormatXML(conn, conf)))
goto fail;
- if (strcmp(xmlData, gotxml)) {
- if (getenv("DEBUG_TESTS")) {
- printf("Expect %d '%s'\n", (int)strlen(xmlData), xmlData);
- printf("Actual %d '%s'\n", (int)strlen(gotxml), gotxml);
- }
+ if (STRNEQ(xmlData, gotxml)) {
+ virtTestDifference(stderr, xmlData, gotxml);
goto fail;
}
@@ -211,6 +208,17 @@ main(int argc, char **argv)
DO_TEST("fullvirt-localtime", 2);
DO_TEST("fullvirt-usbtablet", 2);
DO_TEST("fullvirt-usbmouse", 2);
+ DO_TEST("fullvirt-serial-file", 2);
+ DO_TEST("fullvirt-serial-null", 2);
+ DO_TEST("fullvirt-serial-pipe", 2);
+ DO_TEST("fullvirt-serial-pty", 2);
+ DO_TEST("fullvirt-serial-stdio", 2);
+ DO_TEST("fullvirt-serial-tcp", 2);
+ DO_TEST("fullvirt-serial-tcp-telnet", 2);
+ DO_TEST("fullvirt-serial-udp", 2);
+ DO_TEST("fullvirt-serial-unix", 2);
+
+ DO_TEST("fullvirt-parallel-tcp", 2);
exit(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-kernel.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-kernel.sexpr
index b42361f15..bcb1816c7 100644
--- a/tests/xml2sexprdata/xml2sexpr-fv-kernel.sexpr
+++ b/tests/xml2sexprdata/xml2sexpr-fv-kernel.sexpr
@@ -1 +1 @@
-(vm (name 'fvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (hvm (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 ')(loader '/usr/lib/xen/boot/hvmloader')(vcpus 2)(boot c)(usb 1)(serial pty)))(device (vbd (dev 'ioemu:xvda')(uname 'file:/root/some.img')(mode 'w')))) \ No newline at end of file
+(vm (name 'fvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (hvm (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 ')(loader '/usr/lib/xen/boot/hvmloader')(vcpus 2)(boot c)(usb 1)(parallel none)(serial pty)))(device (vbd (dev 'ioemu:xvda')(uname 'file:/root/some.img')(mode 'w')))) \ No newline at end of file
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-localtime.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-localtime.sexpr
index a2f170ebe..01c911c35 100644
--- a/tests/xml2sexprdata/xml2sexpr-fv-localtime.sexpr
+++ b/tests/xml2sexprdata/xml2sexpr-fv-localtime.sexpr
@@ -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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(localtime 1)(device_model '/usr/lib64/xen/bin/qemu-dm')(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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial none)(localtime 1)(device_model '/usr/lib64/xen/bin/qemu-dm')(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-parallel-tcp.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-parallel-tcp.sexpr
new file mode 100644
index 000000000..6bc6524b2
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-parallel-tcp.sexpr
@@ -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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel tcp:localhost:9999)(serial none)(device_model '/usr/lib64/xen/bin/qemu-dm')(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-parallel-tcp.xml b/tests/xml2sexprdata/xml2sexpr-fv-parallel-tcp.xml
new file mode 100644
index 000000000..7b1370ec1
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-parallel-tcp.xml
@@ -0,0 +1,40 @@
+<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>
+ <parallel type='tcp'>
+ <source mode='connect' host='localhost' service='9999' wiremode='raw'/>
+ <target port='0'/>
+ </parallel>
+ <graphics type='vnc' port='5917' keymap='ja'/>
+ </devices>
+</domain>
+
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-serial-file.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-serial-file.sexpr
new file mode 100644
index 000000000..4a41abf81
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-serial-file.sexpr
@@ -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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial file:/tmp/serial.log)(device_model '/usr/lib64/xen/bin/qemu-dm')(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-serial-file.xml b/tests/xml2sexprdata/xml2sexpr-fv-serial-file.xml
new file mode 100644
index 000000000..77874ac35
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-serial-file.xml
@@ -0,0 +1,40 @@
+<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>
+ <serial type='file'>
+ <source path='/tmp/serial.log'/>
+ <target port='0'/>
+ </serial>
+ <graphics type='vnc' port='5917' keymap='ja'/>
+ </devices>
+</domain>
+
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-serial-null.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-serial-null.sexpr
new file mode 100644
index 000000000..36563e166
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-serial-null.sexpr
@@ -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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial null)(device_model '/usr/lib64/xen/bin/qemu-dm')(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-serial-null.xml b/tests/xml2sexprdata/xml2sexpr-fv-serial-null.xml
new file mode 100644
index 000000000..d3ce7e23e
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-serial-null.xml
@@ -0,0 +1,39 @@
+<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>
+ <serial type='null'>
+ <target port='0'/>
+ </serial>
+ <graphics type='vnc' port='5917' keymap='ja'/>
+ </devices>
+</domain>
+
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-serial-pipe.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-serial-pipe.sexpr
new file mode 100644
index 000000000..4ae8b7e13
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-serial-pipe.sexpr
@@ -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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial pipe:/tmp/serial.pipe)(device_model '/usr/lib64/xen/bin/qemu-dm')(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-serial-pipe.xml b/tests/xml2sexprdata/xml2sexpr-fv-serial-pipe.xml
new file mode 100644
index 000000000..6fcac8bed
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-serial-pipe.xml
@@ -0,0 +1,40 @@
+<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>
+ <serial type='pipe'>
+ <source path='/tmp/serial.pipe'/>
+ <target port='0'/>
+ </serial>
+ <graphics type='vnc' port='5917' keymap='ja'/>
+ </devices>
+</domain>
+
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-serial-pty.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-serial-pty.sexpr
new file mode 100644
index 000000000..da50ac6d0
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-serial-pty.sexpr
@@ -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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial pty)(device_model '/usr/lib64/xen/bin/qemu-dm')(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-serial-pty.xml b/tests/xml2sexprdata/xml2sexpr-fv-serial-pty.xml
new file mode 100644
index 000000000..8f7dbef28
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-serial-pty.xml
@@ -0,0 +1,39 @@
+<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>
+ <serial type='pty'>
+ <target port='0'/>
+ </serial>
+ <graphics type='vnc' port='5917' keymap='ja'/>
+ </devices>
+</domain>
+
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-serial-stdio.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-serial-stdio.sexpr
new file mode 100644
index 000000000..0e6cc44b1
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-serial-stdio.sexpr
@@ -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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial stdio)(device_model '/usr/lib64/xen/bin/qemu-dm')(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-serial-stdio.xml b/tests/xml2sexprdata/xml2sexpr-fv-serial-stdio.xml
new file mode 100644
index 000000000..5d6d8ddf5
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-serial-stdio.xml
@@ -0,0 +1,39 @@
+<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>
+ <serial type='stdio'>
+ <target port='0'/>
+ </serial>
+ <graphics type='vnc' port='5917' keymap='ja'/>
+ </devices>
+</domain>
+
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-serial-tcp-telnet.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-serial-tcp-telnet.sexpr
new file mode 100644
index 000000000..4a033f786
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-serial-tcp-telnet.sexpr
@@ -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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial telnet:localhost:9999,listen)(device_model '/usr/lib64/xen/bin/qemu-dm')(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-serial-tcp-telnet.xml b/tests/xml2sexprdata/xml2sexpr-fv-serial-tcp-telnet.xml
new file mode 100644
index 000000000..f08c0d8df
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-serial-tcp-telnet.xml
@@ -0,0 +1,41 @@
+<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>
+ <serial type='tcp'>
+ <source mode='bind' host='localhost' service='9999'/>
+ <protocol type='telnet'/>
+ <target port='0'/>
+ </serial>
+ <graphics type='vnc' port='5917' keymap='ja'/>
+ </devices>
+</domain>
+
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-serial-tcp.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-serial-tcp.sexpr
new file mode 100644
index 000000000..c24ecddfa
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-serial-tcp.sexpr
@@ -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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial tcp:localhost:9999,listen)(device_model '/usr/lib64/xen/bin/qemu-dm')(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-serial-tcp.xml b/tests/xml2sexprdata/xml2sexpr-fv-serial-tcp.xml
new file mode 100644
index 000000000..3d9baae31
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-serial-tcp.xml
@@ -0,0 +1,40 @@
+<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>
+ <serial type='tcp'>
+ <source mode='bind' host='localhost' service='9999' wiremode='raw'/>
+ <target port='0'/>
+ </serial>
+ <graphics type='vnc' port='5917' keymap='ja'/>
+ </devices>
+</domain>
+
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-serial-udp.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-serial-udp.sexpr
new file mode 100644
index 000000000..399404d64
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-serial-udp.sexpr
@@ -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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial udp:localhost:9998@localhost:9999)(device_model '/usr/lib64/xen/bin/qemu-dm')(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-serial-udp.xml b/tests/xml2sexprdata/xml2sexpr-fv-serial-udp.xml
new file mode 100644
index 000000000..1ff745706
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-serial-udp.xml
@@ -0,0 +1,41 @@
+<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>
+ <serial type='udp'>
+ <source mode='connect' host='localhost' service='9998'/>
+ <source mode='bind' host='localhost' service='9999'/>
+ <target port='0'/>
+ </serial>
+ <graphics type='vnc' port='5917' keymap='ja'/>
+ </devices>
+</domain>
+
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-serial-unix.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-serial-unix.sexpr
new file mode 100644
index 000000000..cacdbf37b
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-serial-unix.sexpr
@@ -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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial unix:/tmp/serial.sock,listen)(device_model '/usr/lib64/xen/bin/qemu-dm')(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-serial-unix.xml b/tests/xml2sexprdata/xml2sexpr-fv-serial-unix.xml
new file mode 100644
index 000000000..608c21d66
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-fv-serial-unix.xml
@@ -0,0 +1,40 @@
+<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>
+ <serial type='unix'>
+ <source mode='bind' path='/tmp/serial.sock'/>
+ <target port='0'/>
+ </serial>
+ <graphics type='vnc' port='5917' keymap='ja'/>
+ </devices>
+</domain>
+
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-usbmouse.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-usbmouse.sexpr
index 8915d4066..59bc2a17c 100644
--- a/tests/xml2sexprdata/xml2sexpr-fv-usbmouse.sexpr
+++ b/tests/xml2sexprdata/xml2sexpr-fv-usbmouse.sexpr
@@ -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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(usbdevice mouse)(device_model '/usr/lib64/xen/bin/qemu-dm')(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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(usbdevice mouse)(parallel none)(serial none)(device_model '/usr/lib64/xen/bin/qemu-dm')(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.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-usbtablet.sexpr
index 4299891a4..dde463747 100644
--- a/tests/xml2sexprdata/xml2sexpr-fv-usbtablet.sexpr
+++ b/tests/xml2sexprdata/xml2sexpr-fv-usbtablet.sexpr
@@ -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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(usbdevice tablet)(device_model '/usr/lib64/xen/bin/qemu-dm')(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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(usbdevice tablet)(parallel none)(serial none)(device_model '/usr/lib64/xen/bin/qemu-dm')(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-utc.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-utc.sexpr
index db8b3ff2a..2e871b361 100644
--- a/tests/xml2sexprdata/xml2sexpr-fv-utc.sexpr
+++ b/tests/xml2sexprdata/xml2sexpr-fv-utc.sexpr
@@ -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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(device_model '/usr/lib64/xen/bin/qemu-dm')(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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial none)(device_model '/usr/lib64/xen/bin/qemu-dm')(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-v2.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-v2.sexpr
index 5f07066b4..42e82b7fc 100644
--- a/tests/xml2sexprdata/xml2sexpr-fv-v2.sexpr
+++ b/tests/xml2sexprdata/xml2sexpr-fv-v2.sexpr
@@ -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')(vcpus 1)(boot c)(acpi 1)(usb 1)(device_model '/usr/lib64/xen/bin/qemu-dm')(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')(vcpus 1)(boot c)(acpi 1)(usb 1)(parallel none)(serial none)(device_model '/usr/lib64/xen/bin/qemu-dm')(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
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-vncunused.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-vncunused.sexpr
index a0264577f..422145ab1 100644
--- a/tests/xml2sexprdata/xml2sexpr-fv-vncunused.sexpr
+++ b/tests/xml2sexprdata/xml2sexpr-fv-vncunused.sexpr
@@ -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')(vcpus 1)(boot c)(acpi 1)(usb 1)(device_model '/usr/lib64/xen/bin/qemu-dm')(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')(vcpus 1)(boot c)(acpi 1)(usb 1)(parallel none)(serial none)(device_model '/usr/lib64/xen/bin/qemu-dm')(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
diff --git a/tests/xml2sexprdata/xml2sexpr-fv.sexpr b/tests/xml2sexprdata/xml2sexpr-fv.sexpr
index db8b3ff2a..2e871b361 100644
--- a/tests/xml2sexprdata/xml2sexpr-fv.sexpr
+++ b/tests/xml2sexprdata/xml2sexpr-fv.sexpr
@@ -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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(device_model '/usr/lib64/xen/bin/qemu-dm')(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')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial none)(device_model '/usr/lib64/xen/bin/qemu-dm')(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-no-source-cdrom.sexpr b/tests/xml2sexprdata/xml2sexpr-no-source-cdrom.sexpr
index 50e893cbb..b9979a30b 100644
--- a/tests/xml2sexprdata/xml2sexpr-no-source-cdrom.sexpr
+++ b/tests/xml2sexprdata/xml2sexpr-no-source-cdrom.sexpr
@@ -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')(vcpus 1)(boot c)(acpi 1)(apic 1)(pae 1)(usb 1)(device_model '/usr/lib/xen/bin/qemu-dm')(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')(vcpus 1)(boot c)(acpi 1)(apic 1)(pae 1)(usb 1)(parallel none)(serial none)(device_model '/usr/lib/xen/bin/qemu-dm')(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
diff --git a/tests/xml2sexprtest.c b/tests/xml2sexprtest.c
index d87a852a9..a6d402edf 100644
--- a/tests/xml2sexprtest.c
+++ b/tests/xml2sexprtest.c
@@ -6,6 +6,7 @@
#include <string.h>
#include <sys/types.h>
#include <fcntl.h>
+#include <unistd.h>
#if WITH_XEN
@@ -14,11 +15,11 @@
#include "testutils.h"
static char *progname;
-static char *abs_top_srcdir;
+static char *abs_srcdir;
#define MAX_FILE 4096
-static int testCompareFiles(const char *xml_rel, const char *sexpr_rel,
+static int testCompareFiles(const char *xml, const char *sexpr,
const char *name, int xendConfigVersion) {
char xmlData[MAX_FILE];
char sexprData[MAX_FILE];
@@ -27,11 +28,6 @@ static int testCompareFiles(const char *xml_rel, const char *sexpr_rel,
char *xmlPtr = &(xmlData[0]);
char *sexprPtr = &(sexprData[0]);
int ret = -1;
- char xml[PATH_MAX];
- char sexpr[PATH_MAX];
-
- snprintf(xml, sizeof xml - 1, "%s/tests/%s", abs_top_srcdir, xml_rel);
- snprintf(sexpr, sizeof sexpr - 1, "%s/tests/%s", abs_top_srcdir, sexpr_rel);
if (virtTestLoadFile(xml, &xmlPtr, MAX_FILE) < 0)
goto fail;
@@ -42,11 +38,8 @@ static int testCompareFiles(const char *xml_rel, const char *sexpr_rel,
if (!(gotsexpr = virDomainParseXMLDesc(NULL, xmlData, &gotname, xendConfigVersion)))
goto fail;
- 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);
- }
+ if (STRNEQ(sexprData, gotsexpr)) {
+ virtTestDifference(stderr, sexprData, gotsexpr);
goto fail;
}
@@ -65,302 +58,89 @@ static int testCompareFiles(const char *xml_rel, const char *sexpr_rel,
return ret;
}
-static int testComparePVversion1(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-pv.xml",
- "xml2sexprdata/xml2sexpr-pv.sexpr",
- "pvtest",
- 1);
-}
-
-static int testCompareFVversion1(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-fv.xml",
- "xml2sexprdata/xml2sexpr-fv.sexpr",
- "fvtest",
- 1);
-}
-
-static int testComparePVversion2(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-pv.xml",
- "xml2sexprdata/xml2sexpr-pv.sexpr",
- "pvtest",
- 2);
-}
-
-static int testCompareFVversion2(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-fv.xml",
- "xml2sexprdata/xml2sexpr-fv-v2.sexpr",
- "fvtest",
- 2);
-}
-
-static int testCompareFVversion2VNC(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-fv-vncunused.xml",
- "xml2sexprdata/xml2sexpr-fv-vncunused.sexpr",
- "fvtest",
- 2);
-}
-
-static int testComparePVOrigVFB(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-pv-vfb-orig.xml",
- "xml2sexprdata/xml2sexpr-pv-vfb-orig.sexpr",
- "pvtest",
- 2);
-}
-
-
-static int testComparePVNewVFB(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-pv-vfb-new.xml",
- "xml2sexprdata/xml2sexpr-pv-vfb-new.sexpr",
- "pvtest",
- 3);
-}
-
-static int testComparePVBootloader(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-pv-bootloader.xml",
- "xml2sexprdata/xml2sexpr-pv-bootloader.sexpr",
- "pvtest",
- 1);
-}
+struct testInfo {
+ const char *input;
+ const char *output;
+ const char *name;
+ int version;
+};
-static int testCompareDiskFile(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-disk-file.xml",
- "xml2sexprdata/xml2sexpr-disk-file.sexpr",
- "pvtest",
- 2);
+static int testCompareHelper(const void *data) {
+ const struct testInfo *info = data;
+ char xml[PATH_MAX];
+ char args[PATH_MAX];
+ snprintf(xml, PATH_MAX, "%s/xml2sexprdata/xml2sexpr-%s.xml",
+ abs_srcdir, info->input);
+ snprintf(args, PATH_MAX, "%s/xml2sexprdata/xml2sexpr-%s.sexpr",
+ abs_srcdir, info->output);
+ return testCompareFiles(xml, args, info->name, info->version);
}
-static int testCompareDiskBlock(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-disk-block.xml",
- "xml2sexprdata/xml2sexpr-disk-block.sexpr",
- "pvtest",
- 2);
-}
-
-static int testCompareDiskShareable(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-disk-block-shareable.xml",
- "xml2sexprdata/xml2sexpr-disk-block-shareable.sexpr",
- "pvtest",
- 2);
-}
-
-static int testCompareDiskDrvLoop(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-disk-drv-loop.xml",
- "xml2sexprdata/xml2sexpr-disk-drv-loop.sexpr",
- "pvtest",
- 2);
-}
-
-static int testCompareDiskDrvBlkback(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-disk-drv-blkback.xml",
- "xml2sexprdata/xml2sexpr-disk-drv-blkback.sexpr",
- "pvtest",
- 2);
-}
-
-static int testCompareDiskDrvBlktap(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-disk-drv-blktap.xml",
- "xml2sexprdata/xml2sexpr-disk-drv-blktap.sexpr",
- "pvtest",
- 2);
-}
-
-static int testCompareDiskDrvBlktapQcow(const 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(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-disk-drv-blktap-raw.xml",
- "xml2sexprdata/xml2sexpr-disk-drv-blktap-raw.sexpr",
- "pvtest",
- 2);
-}
-
-static int testCompareMemoryResize(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-curmem.xml",
- "xml2sexprdata/xml2sexpr-curmem.sexpr",
- "rhel5",
- 2);
-}
-
-static int testCompareNetRouted(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-net-routed.xml",
- "xml2sexprdata/xml2sexpr-net-routed.sexpr",
- "pvtest",
- 2);
-}
-
-static int testCompareNetBridged(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-net-bridged.xml",
- "xml2sexprdata/xml2sexpr-net-bridged.sexpr",
- "pvtest",
- 2);
-}
-
-static int testCompareNoSourceCDRom(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-no-source-cdrom.xml",
- "xml2sexprdata/xml2sexpr-no-source-cdrom.sexpr",
- "test",
- 2);
-}
-
-static int testCompareFVclockUTC(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-fv-utc.xml",
- "xml2sexprdata/xml2sexpr-fv-utc.sexpr",
- "fvtest",
- 1);
-}
-
-static int testCompareFVclockLocaltime(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-fv-localtime.xml",
- "xml2sexprdata/xml2sexpr-fv-localtime.sexpr",
- "fvtest",
- 1);
-}
-
-
-static int testCompareFVInputUSBMouse(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-fv-usbmouse.xml",
- "xml2sexprdata/xml2sexpr-fv-usbmouse.sexpr",
- "fvtest",
- 1);
-}
-
-static int testCompareFVInputUSBTablet(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-fv-usbtablet.xml",
- "xml2sexprdata/xml2sexpr-fv-usbtablet.sexpr",
- "fvtest",
- 1);
-}
-
-static int testCompareFVKernel(const void *data ATTRIBUTE_UNUSED) {
- return testCompareFiles("xml2sexprdata/xml2sexpr-fv-kernel.xml",
- "xml2sexprdata/xml2sexpr-fv-kernel.sexpr",
- "fvtest",
- 1);
-}
-
-
int
main(int argc, char **argv)
{
int ret = 0;
+ char cwd[PATH_MAX];
progname = argv[0];
- abs_top_srcdir = getenv("abs_top_srcdir");
- if (!abs_top_srcdir) {
- fprintf(stderr, "missing enviroment variable abs_top_srcdir\n");
- exit(EXIT_FAILURE);
- }
-
+ abs_srcdir = getenv("abs_srcdir");
+ if (!abs_srcdir)
+ abs_srcdir = getcwd(cwd, sizeof(cwd));
if (argc > 1) {
fprintf(stderr, "Usage: %s\n", progname);
exit(EXIT_FAILURE);
}
- if (virtTestRun("XML-2-SEXPR PV config (format 1)",
- 1, testComparePVversion1, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("XML-2-SEXPR FV config (format 1)",
- 1, testCompareFVversion1, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("XML-2-SEXPR PV config (format 2)",
- 1, testComparePVversion2, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("XML-2-SEXPR FV config (format 2)",
- 1, testCompareFVversion2, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("XML-2-SEXPR FV config (format 2, VNC unused)",
- 1, testCompareFVversion2VNC, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("XML-2-SEXPR PV config (Orig VFB)",
- 1, testComparePVOrigVFB, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("XML-2-SEXPR PV config (New VFB)",
- 1, testComparePVNewVFB, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("XML-2-SEXPR PV config with bootloader",
- 1, testComparePVBootloader, 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 Shareable",
- 1, testCompareDiskShareable, 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;
-
- if (virtTestRun("XML-2-SEXPR Memory Resize",
- 1, testCompareMemoryResize, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("XML-2-SEXPR Net Routed",
- 1, testCompareNetRouted, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("XML-2-SEXPR Net Bridged",
- 1, testCompareNetBridged, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("XML-2-SEXPR No Source CDRom",
- 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;
-
- if (virtTestRun("XML-2-SEXPR clock Localtime",
- 1, testCompareFVclockLocaltime, NULL) != 0)
- ret = -1;
-
- if (virtTestRun("XML-2-SEXPR FV kernel",
- 1, testCompareFVKernel, NULL) != 0)
- ret = -1;
+#define DO_TEST(in, out, name, version) \
+ do { \
+ struct testInfo info = { in, out, name, version }; \
+ if (virtTestRun("Xen XML-2-SEXPR " in " -> " out, \
+ 1, testCompareHelper, &info) < 0) \
+ ret = -1; \
+ } while (0)
+
+ DO_TEST("pv", "pv", "pvtest", 1);
+ DO_TEST("fv", "fv", "fvtest", 1);
+ DO_TEST("pv", "pv", "pvtest", 2);
+ DO_TEST("fv", "fv-v2", "fvtest", 2);
+ DO_TEST("fv-vncunused", "fv-vncunused", "fvtest", 2);
+ DO_TEST("pv-vfb-orig", "pv-vfb-orig", "pvtest", 2);
+ DO_TEST("pv-vfb-new", "pv-vfb-new", "pvtest", 3);
+ DO_TEST("pv-bootloader", "pv-bootloader", "pvtest", 1);
+
+ DO_TEST("disk-file", "disk-file", "pvtest", 2);
+ DO_TEST("disk-block", "disk-block", "pvtest", 2);
+ DO_TEST("disk-block-shareable", "disk-block-shareable", "pvtest", 2);
+ DO_TEST("disk-drv-loop", "disk-drv-loop", "pvtest", 2);
+ DO_TEST("disk-drv-blkback", "disk-drv-blkback", "pvtest", 2);
+ DO_TEST("disk-drv-blktap", "disk-drv-blktap", "pvtest", 2);
+ DO_TEST("disk-drv-blktap-raw", "disk-drv-blktap-raw", "pvtest", 2);
+ DO_TEST("disk-drv-blktap-qcow", "disk-drv-blktap-qcow", "pvtest", 2);
+
+ DO_TEST("curmem", "curmem", "rhel5", 2);
+ DO_TEST("net-routed", "net-routed", "pvtest", 2);
+ DO_TEST("net-bridged", "net-bridged", "pvtest", 2);
+ DO_TEST("no-source-cdrom", "no-source-cdrom", "test", 2);
+
+ DO_TEST("fv-utc", "fv-utc", "fvtest", 1);
+ DO_TEST("fv-localtime", "fv-localtime", "fvtest", 1);
+ DO_TEST("fv-usbmouse", "fv-usbmouse", "fvtest", 1);
+ DO_TEST("fv-usbmouse", "fv-usbmouse", "fvtest", 1);
+ DO_TEST("fv-kernel", "fv-kernel", "fvtest", 1);
+
+ DO_TEST("fv-serial-null", "fv-serial-null", "fvtest", 1);
+ DO_TEST("fv-serial-file", "fv-serial-file", "fvtest", 1);
+ DO_TEST("fv-serial-stdio", "fv-serial-stdio", "fvtest", 1);
+ DO_TEST("fv-serial-pty", "fv-serial-pty", "fvtest", 1);
+ DO_TEST("fv-serial-pipe", "fv-serial-pipe", "fvtest", 1);
+ DO_TEST("fv-serial-tcp", "fv-serial-tcp", "fvtest", 1);
+ DO_TEST("fv-serial-udp", "fv-serial-udp", "fvtest", 1);
+ DO_TEST("fv-serial-tcp-telnet", "fv-serial-tcp-telnet", "fvtest", 1);
+ DO_TEST("fv-serial-unix", "fv-serial-unix", "fvtest", 1);
+ DO_TEST("fv-parallel-tcp", "fv-parallel-tcp", "fvtest", 1);
exit(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
}