]> xenbits.xensource.com Git - libvirt.git/commitdiff
Added new <clock/> element in XML for choosing utc/localtime
authorDaniel P. Berrange <berrange@redhat.com>
Mon, 16 Jul 2007 21:30:30 +0000 (21:30 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Mon, 16 Jul 2007 21:30:30 +0000 (21:30 +0000)
30 files changed:
ChangeLog
docs/format.html
docs/libvir.html
src/qemu_conf.c
src/qemu_conf.h
src/xend_internal.c
src/xm_internal.c
src/xml.c
tests/sexpr2xmldata/sexpr2xml-fv-localtime.sexpr [new file with mode: 0644]
tests/sexpr2xmldata/sexpr2xml-fv-localtime.xml [new file with mode: 0644]
tests/sexpr2xmldata/sexpr2xml-fv-utc.sexpr [new file with mode: 0644]
tests/sexpr2xmldata/sexpr2xml-fv-utc.xml [new file with mode: 0644]
tests/sexpr2xmldata/sexpr2xml-fv-v2.xml
tests/sexpr2xmldata/sexpr2xml-fv.xml
tests/sexpr2xmldata/sexpr2xml-no-source-cdrom.xml
tests/sexpr2xmltest.c
tests/xmconfigdata/test-fullvirt-localtime.cfg [new file with mode: 0755]
tests/xmconfigdata/test-fullvirt-localtime.xml [new file with mode: 0644]
tests/xmconfigdata/test-fullvirt-new-cdrom.cfg
tests/xmconfigdata/test-fullvirt-new-cdrom.xml
tests/xmconfigdata/test-fullvirt-old-cdrom.cfg
tests/xmconfigdata/test-fullvirt-old-cdrom.xml
tests/xmconfigdata/test-fullvirt-utc.cfg [new file with mode: 0755]
tests/xmconfigdata/test-fullvirt-utc.xml [new file with mode: 0644]
tests/xmconfigtest.c
tests/xml2sexprdata/xml2sexpr-fv-localtime.sexpr [new file with mode: 0644]
tests/xml2sexprdata/xml2sexpr-fv-localtime.xml [new file with mode: 0644]
tests/xml2sexprdata/xml2sexpr-fv-utc.sexpr [new file with mode: 0644]
tests/xml2sexprdata/xml2sexpr-fv-utc.xml [new file with mode: 0644]
tests/xml2sexprtest.c

index 8436b086aa9c71ccea8294429a431c491e722b37..ce32e2b8481d7f5a317a045aaed8674c9e2958ed 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
index e2f0446b25930a69a3f174cce5719b1fa06a4379..059ec7e820330e4c5d0b13c2e7d9b70e36a7f702 100644 (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
index 0a64973aa43ca3ff4aec71fbc4409ad46687574a..11b7132edd968d33cfbf44b52f11e1d96951234f 100644 (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
index 6481a4568f46c17b0945d0c22b77020850d7260b..666c3aeaacdaaf09e332c25cc874d6bcc64357d3 100644 (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) {
index 969a2f0525cff57aaf2d6765466b5c702af764a9..ed5df987be4789d8b29e470e21ab8e2f4c510e37 100644 (file)
@@ -164,6 +164,7 @@ struct qemud_vm_def {
 
     struct qemud_vm_os_def os;
 
+    int localtime;
     int features;
     int graphicsType;
     int vncPort;
index 14c6f58627554c2a0c4efe284287db76541963a0..bf9ac208d530932c7b83fe44f8e698cc4e9b7883 100644 (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);
index 803d5f893edcf39867c0ecbd584b6152a0c65663..c8fc1e35e1678964293e752d6ab8c13d12f96fa9 100644 (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)
index 5337598dcbec742f17b4af370a5014bcf54f9e8a..ae3c0cb359ad0c9d31a22957e92b9a4bafc1d0aa 100644 (file)
--- a/src/xml.c
+++ b/src/xml.c
@@ -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);
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-localtime.sexpr b/tests/sexpr2xmldata/sexpr2xml-fv-localtime.sexpr
new file mode 100644 (file)
index 0000000..1668e15
--- /dev/null
@@ -0,0 +1 @@
+(domain (domid 3)(name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(boot c)(cdrom '/root/boot.iso')(acpi 1)(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))))
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-localtime.xml b/tests/sexpr2xmldata/sexpr2xml-fv-localtime.xml
new file mode 100644 (file)
index 0000000..512580e
--- /dev/null
@@ -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>
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-utc.sexpr b/tests/sexpr2xmldata/sexpr2xml-fv-utc.sexpr
new file mode 100644 (file)
index 0000000..5d4579d
--- /dev/null
@@ -0,0 +1 @@
+(domain (domid 3)(name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(boot c)(cdrom '/root/boot.iso')(acpi 1)(vnc 1)(keymap ja)))(device (vbd (dev 'ioemu:hda')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu))))
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-utc.xml b/tests/sexpr2xmldata/sexpr2xml-fv-utc.xml
new file mode 100644 (file)
index 0000000..b2d1f15
--- /dev/null
@@ -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>
index 45476989d60e0d486c16750563a5d1a97271a7d0..43c78d6c05d363e92338e83340c20b5605b79295 100644 (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'>
index b9ebc365b04586c207a3e925192e1e3cde76323a..b2d1f1573f0fbe2e3232d8f460e49892d1d55973 100644 (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'>
index c11ee9183c0f2f7e904e67f31389337dec0060b6..dd5b8a57cf4c0555cb70c9358e9706472b81f59e 100644 (file)
@@ -17,6 +17,7 @@
     <apic/>
     <pae/>
   </features>
+  <clock offset='utc'/>
   <devices>
     <emulator>/usr/lib/xen/bin/qemu-dm</emulator>
     <interface type='bridge'>
index 1f0af7c93fd226532026a4208cc95a0622f6811a..4e385dc6e12c434044a756f3d36b5ab53796fd15 100644 (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 */
diff --git a/tests/xmconfigdata/test-fullvirt-localtime.cfg b/tests/xmconfigdata/test-fullvirt-localtime.cfg
new file mode 100755 (executable)
index 0000000..56747ce
--- /dev/null
@@ -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" ]
diff --git a/tests/xmconfigdata/test-fullvirt-localtime.xml b/tests/xmconfigdata/test-fullvirt-localtime.xml
new file mode 100644 (file)
index 0000000..a21ab11
--- /dev/null
@@ -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>
index eacb41dcf8783ed50ccd29fa05a5bb31e7b2fb96..7c158b333151be9f0274b8b1d09b0ac03a857b73 100755 (executable)
@@ -9,6 +9,7 @@ boot = "d"
 pae = 1
 acpi = 1
 apic = 1
+localtime = 0
 on_poweroff = "destroy"
 on_reboot = "restart"
 on_crash = "restart"
index a9b001001de74611c18e97a3fb61c0bf68202d8d..5b8dc34e2315ed2f3ae0a0f905cb30223d27174e 100644 (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'>
index d0c9c4945a275a16fa254214015f5826ccdb38ed..f84dab50200211a5007bcedb7ddd99665dc11705 100755 (executable)
@@ -9,6 +9,7 @@ boot = "d"
 pae = 1
 acpi = 1
 apic = 1
+localtime = 0
 cdrom = "/root/boot.iso"
 on_poweroff = "destroy"
 on_reboot = "restart"
index 8be689d27117b1c11edd3d379412e57cc1e7a320..4c9679a9bfe1b19c8163c830ed6ce6a732f451a6 100644 (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'>
diff --git a/tests/xmconfigdata/test-fullvirt-utc.cfg b/tests/xmconfigdata/test-fullvirt-utc.cfg
new file mode 100755 (executable)
index 0000000..7c158b3
--- /dev/null
@@ -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" ]
diff --git a/tests/xmconfigdata/test-fullvirt-utc.xml b/tests/xmconfigdata/test-fullvirt-utc.xml
new file mode 100644 (file)
index 0000000..5b8dc34
--- /dev/null
@@ -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>
index 683bddbc5cd340bef8f6be84eeac68bbe004dacc..3d0c7e8998ac147a360d5f80449f4df916b753c2 100644 (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);
 }
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-localtime.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-localtime.sexpr
new file mode 100644 (file)
index 0000000..c8b7543
--- /dev/null
@@ -0,0 +1 @@
+(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(vnc 1)(localtime 1)))(device (vbd (dev 'ioemu:hda')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu))))
\ No newline at end of file
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-localtime.xml b/tests/xml2sexprdata/xml2sexpr-fv-localtime.xml
new file mode 100644 (file)
index 0000000..7333b7b
--- /dev/null
@@ -0,0 +1,37 @@
+<domain type='xen'>
+  <name>fvtest</name>
+  <uuid>b5d70dd275cdaca517769660b059d8bc</uuid>
+  <os>
+    <type>hvm</type>
+    <loader>/usr/lib/xen/boot/hvmloader</loader>
+    <boot dev='hd'/>
+  </os>
+  <memory>409600</memory>
+  <vcpu>1</vcpu>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>restart</on_crash>
+  <features>
+    <acpi/>
+  </features>
+  <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>
+
diff --git a/tests/xml2sexprdata/xml2sexpr-fv-utc.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-utc.sexpr
new file mode 100644 (file)
index 0000000..8399100
--- /dev/null
@@ -0,0 +1 @@
+(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd275cdaca517769660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(device_model '/usr/lib64/xen/bin/qemu-dm')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(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.xml b/tests/xml2sexprdata/xml2sexpr-fv-utc.xml
new file mode 100644 (file)
index 0000000..7cdf011
--- /dev/null
@@ -0,0 +1,37 @@
+<domain type='xen'>
+  <name>fvtest</name>
+  <uuid>b5d70dd275cdaca517769660b059d8bc</uuid>
+  <os>
+    <type>hvm</type>
+    <loader>/usr/lib/xen/boot/hvmloader</loader>
+    <boot dev='hd'/>
+  </os>
+  <memory>409600</memory>
+  <vcpu>1</vcpu>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>restart</on_crash>
+  <features>
+    <acpi/>
+  </features>
+  <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>
+
index 7cc93a02410ad94c61f97782525089721858866a..f798995edd54c39bfd20b7c9a2bff2e059a56cb9 100644 (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);
 }