Added new <clock/> element in XML for choosing utc/localtime

This commit is contained in:
Daniel P. Berrange 2007-07-16 21:30:30 +00:00
parent 657b5eb50c
commit 67c346b102
30 changed files with 464 additions and 20 deletions

View File

@ -1,3 +1,16 @@
Mon Jul 16 16:59:24 EST 2007 Daniel P. Berrange <berrange@redhat.com>
* src/qemu_conf.c, src/qemu_conf.h, src/xend_internal.c,
src/xm_internal.c, src/xml.c: Added support for the <clock/>
element to switch between UTC and localtime in guests
* tests/sexpr2xmltest.c, tests/xmconfigtest.c,
tests/xml2sexprtest.c, tests/sexpr2xmldata/*,
tests/xml2sexprdata/*, tests/xmconfigdata/*: Added test
cases for new <clock/> element, and adapted existing expected
data files where needed.
* docs/libvir.html, docs/format.html: Added docs about the
new <clock/> element
Fri Jul 13 14:25:16 CEST 2007 Daniel Veillard <veillard@redhat.com>
* src/xml.c: applied modified patch from Masayuki Sunou for

View File

@ -117,6 +117,7 @@ systems:</p><pre>&lt;domain type='xen' id='3'&gt;
&lt;acpi/&gt;
&lt;apic/&gt;</span>
&lt;/features&gt;
<span style="color: #0000E5; background-color: #FFFFFF">&lt;clock sync="localtime"/&gt;</span>
&lt;devices&gt;
<span style="color: #0000E5; background-color: #FFFFFF">&lt;emulator&gt;/usr/lib/xen/bin/qemu-dm&lt;/emulator&gt;</span>
&lt;interface type='bridge'&gt;
@ -146,6 +147,11 @@ systems:</p><pre>&lt;domain type='xen' id='3'&gt;
<li><code>apic</code> - enable IO APIC</li>
<li><code>acpi</code> - enable ACPI bios</li>
</ul></li>
<li>the optional <code>&lt;clock&gt;</code> element is used to specify
whether the emulated BIOS clock in the guest is synced to either
<code>localtime</code> or <code>utc</code>. In general Windows will
want <code>localtime</code> while all other operating systems will
want <code>utc</code>. The default is thus <code>utc</code></li>
<li>the <code>&lt;os&gt;</code> block description is very different, first
it indicates that the type is 'hvm' for hardware virtualization, then
instead of a kernel, boot and command line arguments, it points to an os
@ -194,6 +200,7 @@ XML description is quite similar, here is a simple example:</p><pre>&lt;domain <
&lt;os&gt;
&lt;type&gt;hvm&lt;/type&gt;
&lt;/os&gt;
<span style="color: #0000E5; background-color: #FFFFFF">&lt;clock sync="localtime"/&gt;</span>
&lt;devices&gt;
<span style="color: #FF0000; background-color: #FFFFFF">&lt;emulator&gt;/home/user/usr/kvm-devel/bin/qemu-system-x86_64&lt;/emulator&gt;</span>
&lt;disk type='file' device='disk'&gt;
@ -206,6 +213,7 @@ XML description is quite similar, here is a simple example:</p><pre>&lt;domain <
&lt;graphics type='vnc' port='-1'/&gt;
&lt;/devices&gt;
&lt;/domain&gt;</pre><p>The specific points to note if using KVM are:</p><ul><li>the top level domain element carries a type of 'kvm'</li>
<li>the &lt;clock&gt; optional is supported as with Xen HVM</li>
<li>the &lt;devices&gt; emulator points to the special qemu binary required
for KVM</li>
<li>networking interface definitions definitions are somewhat different due

View File

@ -738,6 +738,7 @@ systems:</p>
&lt;acpi/&gt;
&lt;apic/&gt;</span>
&lt;/features&gt;
<span style="color: #0000E5; background-color: #FFFFFF">&lt;clock sync="localtime"/&gt;</span>
&lt;devices&gt;
<span style="color: #0000E5; background-color: #FFFFFF">&lt;emulator&gt;/usr/lib/xen/bin/qemu-dm&lt;/emulator&gt;</span>
&lt;interface type='bridge'&gt;
@ -773,6 +774,11 @@ systems:</p>
<li><code>acpi</code> - enable ACPI bios</li>
</ul>
</li>
<li>the optional <code>&lt;clock&gt;</code> element is used to specify
whether the emulated BIOS clock in the guest is synced to either
<code>localtime</code> or <code>utc</code>. In general Windows will
want <code>localtime</code> while all other operating systems will
want <code>utc</code>. The default is thus <code>utc</code></li>
<li>the <code>&lt;os&gt;</code> block description is very different, first
it indicates that the type is 'hvm' for hardware virtualization, then
instead of a kernel, boot and command line arguments, it points to an os
@ -832,6 +838,7 @@ XML description is quite similar, here is a simple example:</p>
&lt;os&gt;
&lt;type&gt;hvm&lt;/type&gt;
&lt;/os&gt;
<span style="color: #0000E5; background-color: #FFFFFF">&lt;clock sync="localtime"/&gt;</span>
&lt;devices&gt;
<span style="color: #FF0000; background-color: #FFFFFF">&lt;emulator&gt;/home/user/usr/kvm-devel/bin/qemu-system-x86_64&lt;/emulator&gt;</span>
&lt;disk type='file' device='disk'&gt;
@ -848,6 +855,7 @@ XML description is quite similar, here is a simple example:</p>
<p>The specific points to note if using KVM are:</p>
<ul>
<li>the top level domain element carries a type of 'kvm'</li>
<li>the &lt;clock&gt; optional is supported as with Xen HVM</li>
<li>the &lt;devices&gt; emulator points to the special qemu binary required
for KVM</li>
<li>networking interface definitions definitions are somewhat different due

View File

@ -967,6 +967,20 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
if (obj)
xmlXPathFreeObject(obj);
/* See if we set clock to localtime */
obj = xmlXPathEval(BAD_CAST "string(/domain/clock/@offset)", ctxt);
if ((obj == NULL) || (obj->type != XPATH_STRING) ||
(obj->stringval == NULL) || (obj->stringval[0] == 0)) {
def->localtime = 0;
} else {
if (!strcmp((char*)obj->stringval, "localtime"))
def->localtime = 1;
else
def->localtime = 0;
}
if (obj)
xmlXPathFreeObject(obj);
/* Extract OS type info */
obj = xmlXPathEval(BAD_CAST "string(/domain/os/type[1])", ctxt);
@ -1338,6 +1352,7 @@ int qemudBuildCommandLine(virConnectPtr conn,
2 + /* cpus */
2 + /* boot device */
2 + /* monitor */
(vm->def->localtime ? 1 : 0) + /* localtime */
(driver->qemuCmdFlags & QEMUD_CMD_FLAG_NO_REBOOT &&
vm->def->noReboot ? 1 : 0) + /* no-reboot */
(vm->def->features & QEMUD_FEATURE_ACPI ? 0 : 1) + /* acpi */
@ -1376,6 +1391,11 @@ int qemudBuildCommandLine(virConnectPtr conn,
if (!((*argv)[++n] = strdup("pty")))
goto no_memory;
if (vm->def->localtime) {
if (!((*argv)[++n] = strdup("-localtime")))
goto no_memory;
}
if (driver->qemuCmdFlags & QEMUD_CMD_FLAG_NO_REBOOT &&
vm->def->noReboot) {
if (!((*argv)[++n] = strdup("-no-reboot")))
@ -2623,6 +2643,8 @@ char *qemudGenerateXML(virConnectPtr conn,
goto no_memory;
}
virBufferVSprintf(buf, " <clock offset='%s'/>\n", def->localtime ? "localtime" : "utc");
if (virBufferAdd(buf, " <on_poweroff>destroy</on_poweroff>\n", -1) < 0)
goto no_memory;
if (def->noReboot) {

View File

@ -164,6 +164,7 @@ struct qemud_vm_def {
struct qemud_vm_os_def os;
int localtime;
int features;
int graphicsType;
int vncPort;

View File

@ -1442,6 +1442,8 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root, int xendConfigVersi
virBufferVSprintf(&buf, " <on_crash>%s</on_crash>\n", tmp);
if (hvm) {
int clockLocal;
virBufferAdd(&buf, " <features>\n", 13);
if (sexpr_int(root, "domain/image/hvm/acpi"))
virBufferAdd(&buf, " <acpi/>\n", 12);
@ -1450,6 +1452,9 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root, int xendConfigVersi
if (sexpr_int(root, "domain/image/hvm/pae"))
virBufferAdd(&buf, " <pae/>\n", 11);
virBufferAdd(&buf, " </features>\n", 14);
clockLocal = sexpr_int(root, "domain/image/hvm/localtime");
virBufferVSprintf(&buf, " <clock offset='%s'/>\n", clockLocal ? "localtime" : "utc");
}
virBufferAdd(&buf, " <devices>\n", 12);

View File

@ -708,6 +708,10 @@ char *xenXMDomainFormatXML(virConnectPtr conn, virConfPtr conf) {
val)
virBufferAdd(buf, " <apic/>\n", -1);
virBufferAdd(buf, " </features>\n", -1);
if (xenXMConfigGetInt(conf, "localtime", &val) < 0)
val = 0;
virBufferVSprintf(buf, " <clock offset='%s'/>\n", val ? "localtime" : "utc");
}
virBufferAdd(buf, " <devices>\n", -1);
@ -1812,6 +1816,7 @@ virConfPtr xenXMParseXMLToConfig(virConnectPtr conn, const char *xml) {
if (hvm) {
const char *boot = "c";
int clockLocal = 0;
if (xenXMConfigSetString(conf, "builder", "hvm") < 0)
goto error;
@ -1845,6 +1850,16 @@ virConfPtr xenXMParseXMLToConfig(virConnectPtr conn, const char *xml) {
"cannot set the apic parameter") < 0)
goto error;
obj = xmlXPathEval(BAD_CAST "string(/domain/clock/@offset)", ctxt);
if ((obj != NULL) && (obj->type == XPATH_STRING) &&
(obj->stringval != NULL)) {
if (!strcmp((const char*)obj->stringval, "localtime"))
clockLocal = 1;
}
xmlXPathFreeObject(obj);
if (xenXMConfigSetInt(conf, "localtime", clockLocal) < 0)
goto error;
if (priv->xendConfigVersion == 1) {
if (xenXMConfigSetStringFromXPath(conn, conf, ctxt, "cdrom", "string(/domain/devices/disk[@device='cdrom']/source/@file)", 1,
"cannot set the cdrom parameter") < 0)

View File

@ -562,6 +562,11 @@ virDomainParseXMLOSDescHVM(virConnectPtr conn, xmlNodePtr node, virBufferPtr buf
}
}
str = virXPathString("string(/domain/clock/@offset)", ctxt);
if (str != NULL && !strcmp(str, "localtime")) {
virBufferAdd(buf, "(localtime 1)", 13);
}
virBufferAdd(buf, "))", 2);
return (0);

View File

@ -0,0 +1 @@
(domain (domid 3)(name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(boot c)(cdrom '/root/boot.iso')(acpi 1)(vnc 1)(keymap ja)(localtime 1)))(device (vbd (dev 'ioemu:hda')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu))))

View File

@ -0,0 +1,38 @@
<domain type='xen' id='3'>
<name>fvtest</name>
<uuid>b5d70dd275cdaca517769660b059d8bc</uuid>
<os>
<type>hvm</type>
<loader>/usr/lib/xen/boot/hvmloader</loader>
<boot dev='hd'/>
</os>
<memory>409600</memory>
<vcpu>1</vcpu>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<features>
<acpi/>
</features>
<clock offset='localtime'/>
<devices>
<emulator>/usr/lib64/xen/bin/qemu-dm</emulator>
<disk type='file' device='disk'>
<driver name='file'/>
<source file='/root/foo.img'/>
<target dev='hda'/>
</disk>
<interface type='bridge'>
<source bridge='xenbr0'/>
<mac address='00:16:3e:1b:b1:47'/>
<script path='vif-bridge'/>
</interface>
<disk type='file' device='cdrom'>
<driver name='file'/>
<source file='/root/boot.iso'/>
<target dev='hdc'/>
<readonly/>
</disk>
<graphics type='vnc' port='5903' keymap='ja'/>
</devices>
</domain>

View File

@ -0,0 +1 @@
(domain (domid 3)(name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(boot c)(cdrom '/root/boot.iso')(acpi 1)(vnc 1)(keymap ja)))(device (vbd (dev 'ioemu:hda')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu))))

View File

@ -0,0 +1,38 @@
<domain type='xen' id='3'>
<name>fvtest</name>
<uuid>b5d70dd275cdaca517769660b059d8bc</uuid>
<os>
<type>hvm</type>
<loader>/usr/lib/xen/boot/hvmloader</loader>
<boot dev='hd'/>
</os>
<memory>409600</memory>
<vcpu>1</vcpu>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<features>
<acpi/>
</features>
<clock offset='utc'/>
<devices>
<emulator>/usr/lib64/xen/bin/qemu-dm</emulator>
<disk type='file' device='disk'>
<driver name='file'/>
<source file='/root/foo.img'/>
<target dev='hda'/>
</disk>
<interface type='bridge'>
<source bridge='xenbr0'/>
<mac address='00:16:3e:1b:b1:47'/>
<script path='vif-bridge'/>
</interface>
<disk type='file' device='cdrom'>
<driver name='file'/>
<source file='/root/boot.iso'/>
<target dev='hdc'/>
<readonly/>
</disk>
<graphics type='vnc' port='5903' keymap='ja'/>
</devices>
</domain>

View File

@ -14,6 +14,7 @@
<features>
<acpi/>
</features>
<clock offset='utc'/>
<devices>
<emulator>/usr/lib64/xen/bin/qemu-dm</emulator>
<disk type='file' device='cdrom'>

View File

@ -14,6 +14,7 @@
<features>
<acpi/>
</features>
<clock offset='utc'/>
<devices>
<emulator>/usr/lib64/xen/bin/qemu-dm</emulator>
<disk type='file' device='disk'>

View File

@ -17,6 +17,7 @@
<apic/>
<pae/>
</features>
<clock offset='utc'/>
<devices>
<emulator>/usr/lib/xen/bin/qemu-dm</emulator>
<interface type='bridge'>

View File

@ -28,12 +28,13 @@ static int testCompareFiles(const char *xml, const char *sexpr, int xendConfigVe
if (!(gotxml = xend_parse_domain_sexp(NULL, sexprData, xendConfigVersion)))
goto fail;
if (getenv("DEBUG_TESTS")) {
printf("Expect %d '%s'\n", (int)strlen(xmlData), xmlData);
printf("Actual %d '%s'\n", (int)strlen(gotxml), gotxml);
}
if (strcmp(xmlData, gotxml))
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);
}
goto fail;
}
ret = 0;
@ -136,6 +137,19 @@ static int testCompareNoSourceCDRom(void *data ATTRIBUTE_UNUSED) {
1);
}
static int testCompareFVclockUTC(void *data ATTRIBUTE_UNUSED) {
return testCompareFiles("sexpr2xmldata/sexpr2xml-fv-utc.xml",
"sexpr2xmldata/sexpr2xml-fv-utc.sexpr",
1);
}
static int testCompareFVclockLocaltime(void *data ATTRIBUTE_UNUSED) {
return testCompareFiles("sexpr2xmldata/sexpr2xml-fv-localtime.xml",
"sexpr2xmldata/sexpr2xml-fv-localtime.sexpr",
1);
}
int
main(int argc, char **argv)
@ -209,6 +223,14 @@ main(int argc, char **argv)
1, testCompareNoSourceCDRom, 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;
exit(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
#else /* WITHOUT_XEN */

View File

@ -0,0 +1,23 @@
name = "XenGuest2"
uuid = "c7a5fdb2cdaf9455926ad65c16db1809"
maxmem = 579
memory = 394
vcpus = 1
builder = "hvm"
kernel = "/usr/lib/xen/boot/hvmloader"
boot = "d"
pae = 1
acpi = 1
apic = 1
localtime = 1
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" ]

View File

@ -0,0 +1,40 @@
<domain type='xen'>
<name>XenGuest2</name>
<uuid>c7a5fdb2cdaf9455926ad65c16db1809</uuid>
<os>
<type>hvm</type>
<loader>/usr/lib/xen/boot/hvmloader</loader>
<boot dev='cdrom'/>
</os>
<currentMemory>403456</currentMemory>
<memory>592896</memory>
<vcpu>1</vcpu>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<features>
<pae/>
<acpi/>
<apic/>
</features>
<clock offset='localtime'/>
<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>
<graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
</devices>
</domain>

View File

@ -9,6 +9,7 @@ boot = "d"
pae = 1
acpi = 1
apic = 1
localtime = 0
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"

View File

@ -17,6 +17,7 @@
<acpi/>
<apic/>
</features>
<clock offset='utc'/>
<devices>
<emulator>/usr/lib/xen/bin/qemu-dm</emulator>
<disk type='block' device='disk'>

View File

@ -9,6 +9,7 @@ boot = "d"
pae = 1
acpi = 1
apic = 1
localtime = 0
cdrom = "/root/boot.iso"
on_poweroff = "destroy"
on_reboot = "restart"

View File

@ -17,6 +17,7 @@
<acpi/>
<apic/>
</features>
<clock offset='utc'/>
<devices>
<emulator>/usr/lib/xen/bin/qemu-dm</emulator>
<disk type='block' device='disk'>

View File

@ -0,0 +1,23 @@
name = "XenGuest2"
uuid = "c7a5fdb2cdaf9455926ad65c16db1809"
maxmem = 579
memory = 394
vcpus = 1
builder = "hvm"
kernel = "/usr/lib/xen/boot/hvmloader"
boot = "d"
pae = 1
acpi = 1
apic = 1
localtime = 0
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
device_model = "/usr/lib/xen/bin/qemu-dm"
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" ]

View File

@ -0,0 +1,40 @@
<domain type='xen'>
<name>XenGuest2</name>
<uuid>c7a5fdb2cdaf9455926ad65c16db1809</uuid>
<os>
<type>hvm</type>
<loader>/usr/lib/xen/boot/hvmloader</loader>
<boot dev='cdrom'/>
</os>
<currentMemory>403456</currentMemory>
<memory>592896</memory>
<vcpu>1</vcpu>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<features>
<pae/>
<acpi/>
<apic/>
</features>
<clock offset='utc'/>
<devices>
<emulator>/usr/lib/xen/bin/qemu-dm</emulator>
<disk type='block' device='disk'>
<driver name='phy'/>
<source dev='/dev/HostVG/XenGuest2'/>
<target dev='hda'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='file'/>
<source file='/root/boot.iso'/>
<target dev='hdc'/>
<readonly/>
</disk>
<interface type='bridge'>
<mac address='00:16:3E:66:92:9C'/>
<source bridge='xenbr1'/>
</interface>
<graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
</devices>
</domain>

View File

@ -49,7 +49,7 @@ static int testCompareParseXML(const char *xmcfg, const char *xml, int xendConfi
void *old_priv;
struct _xenUnifiedPrivate priv;
conn = virConnectOpen("test:///default");
conn = virConnectOpenReadOnly("test:///default");
if (!conn) goto fail;
old_priv = conn->privateData;
@ -70,12 +70,13 @@ static int testCompareParseXML(const char *xmcfg, const char *xml, int xendConfi
goto fail;
gotxmcfgPtr[wrote] = '\0';
if (getenv("DEBUG_TESTS")) {
printf("Expect %d '%s'\n", (int)strlen(xmcfgData), xmcfgData);
printf("Actual %d '%s'\n", (int)strlen(gotxmcfgData), gotxmcfgData);
}
if (strcmp(xmcfgData, gotxmcfgData))
if (strcmp(xmcfgData, gotxmcfgData)) {
if (getenv("DEBUG_TESTS")) {
printf("Expect %d '%s'\n", (int)strlen(xmcfgData), xmcfgData);
printf("Actual %d '%s'\n", (int)strlen(gotxmcfgData), gotxmcfgData);
}
goto fail;
}
ret = 0;
@ -103,7 +104,7 @@ static int testCompareFormatXML(const char *xmcfg, const char *xml, int xendConf
void *old_priv;
struct _xenUnifiedPrivate priv;
conn = virConnectOpen("test:///default");
conn = virConnectOpenReadOnly("test:///default");
if (!conn) goto fail;
old_priv = conn->privateData;
@ -123,12 +124,13 @@ static int testCompareFormatXML(const char *xmcfg, const char *xml, int xendConf
if (!(gotxml = xenXMDomainFormatXML(conn, conf)))
goto fail;
if (getenv("DEBUG_TESTS")) {
printf("Expect %d '%s'\n", (int)strlen(xmlData), xmlData);
printf("Actual %d '%s'\n", (int)strlen(gotxml), gotxml);
}
if (strcmp(xmlData, gotxml))
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);
}
goto fail;
}
ret = 0;
@ -190,6 +192,29 @@ static int testCompareFullvirtNewCDROMParse(void *data ATTRIBUTE_UNUSED) {
2);
}
static int testCompareFullvirtClockUTCFormat(void *data ATTRIBUTE_UNUSED) {
return testCompareFormatXML("xmconfigdata/test-fullvirt-utc.cfg",
"xmconfigdata/test-fullvirt-utc.xml",
2);
}
static int testCompareFullvirtClockUTCParse(void *data ATTRIBUTE_UNUSED) {
return testCompareParseXML("xmconfigdata/test-fullvirt-utc.cfg",
"xmconfigdata/test-fullvirt-utc.xml",
2);
}
static int testCompareFullvirtClockLocaltimeFormat(void *data ATTRIBUTE_UNUSED) {
return testCompareFormatXML("xmconfigdata/test-fullvirt-localtime.cfg",
"xmconfigdata/test-fullvirt-localtime.xml",
2);
}
static int testCompareFullvirtClockLocaltimeParse(void *data ATTRIBUTE_UNUSED) {
return testCompareParseXML("xmconfigdata/test-fullvirt-localtime.cfg",
"xmconfigdata/test-fullvirt-localtime.xml",
2);
}
int
main(int argc, char **argv)
@ -203,22 +228,27 @@ main(int argc, char **argv)
exit(EXIT_FAILURE);
}
/* Config -> XML */
if (virtTestRun("Paravirt old PVFB (Format)",
1, testCompareParavirtOldPVFBFormat, NULL) != 0)
ret = -1;
if (virtTestRun("Paravirt new PVFB (Format)",
1, testCompareParavirtNewPVFBFormat, NULL) != 0)
ret = -1;
if (virtTestRun("Fullvirt old PVFB (Format)",
1, testCompareFullvirtOldCDROMFormat, NULL) != 0)
ret = -1;
if (virtTestRun("Fullvirt new PVFB (Format)",
1, testCompareFullvirtNewCDROMFormat, NULL) != 0)
ret = -1;
if (virtTestRun("Fullvirt clock Localtime (Format)",
1, testCompareFullvirtClockLocaltimeFormat, NULL) != 0)
ret = -1;
if (virtTestRun("Fullvirt clock UTC (Format)",
1, testCompareFullvirtClockUTCFormat, NULL) != 0)
ret = -1;
/* XML -> Config */
if (virtTestRun("Paravirt old PVFB (Parse)",
1, testCompareParavirtOldPVFBParse, NULL) != 0)
ret = -1;
@ -231,6 +261,12 @@ main(int argc, char **argv)
if (virtTestRun("Fullvirt new PVFB (Parse)",
1, testCompareFullvirtNewCDROMParse, NULL) != 0)
ret = -1;
if (virtTestRun("Fullvirt clock Localtime (Parse)",
1, testCompareFullvirtClockLocaltimeParse, NULL) != 0)
ret = -1;
if (virtTestRun("Fullvirt clock UTC (Parse)",
1, testCompareFullvirtClockUTCParse, NULL) != 0)
ret = -1;
exit(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
}

View File

@ -0,0 +1 @@
(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(vnc 1)(localtime 1)))(device (vbd (dev 'ioemu:hda')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu))))

View File

@ -0,0 +1,37 @@
<domain type='xen'>
<name>fvtest</name>
<uuid>b5d70dd275cdaca517769660b059d8bc</uuid>
<os>
<type>hvm</type>
<loader>/usr/lib/xen/boot/hvmloader</loader>
<boot dev='hd'/>
</os>
<memory>409600</memory>
<vcpu>1</vcpu>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<features>
<acpi/>
</features>
<clock offset='localtime'/>
<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>
<graphics type='vnc' port='5917' keymap='ja'/>
</devices>
</domain>

View File

@ -0,0 +1 @@
(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(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))))

View File

@ -0,0 +1,37 @@
<domain type='xen'>
<name>fvtest</name>
<uuid>b5d70dd275cdaca517769660b059d8bc</uuid>
<os>
<type>hvm</type>
<loader>/usr/lib/xen/boot/hvmloader</loader>
<boot dev='hd'/>
</os>
<memory>409600</memory>
<vcpu>1</vcpu>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<features>
<acpi/>
</features>
<clock offset='utc'/>
<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>
<graphics type='vnc' port='5917' keymap='ja'/>
</devices>
</domain>

View File

@ -187,6 +187,20 @@ static int testCompareNoSourceCDRom(void *data ATTRIBUTE_UNUSED) {
2);
}
static int testCompareFVclockUTC(void *data ATTRIBUTE_UNUSED) {
return testCompareFiles("xml2sexprdata/xml2sexpr-fv-utc.xml",
"xml2sexprdata/xml2sexpr-fv-utc.sexpr",
"fvtest",
1);
}
static int testCompareFVclockLocaltime(void *data ATTRIBUTE_UNUSED) {
return testCompareFiles("xml2sexprdata/xml2sexpr-fv-localtime.xml",
"xml2sexprdata/xml2sexpr-fv-localtime.sexpr",
"fvtest",
1);
}
int
main(int argc, char **argv)
@ -276,5 +290,13 @@ main(int argc, char **argv)
1, testCompareNoSourceCDRom, 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;
exit(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
}