locking: Change locking order, move NAL after instances
[ganeti-local] / test / ganeti.ovf_unittest.py
old mode 100644 (file)
new mode 100755 (executable)
index ab5fc15..bc72496
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 #
 
-# Copyright (C) 2011 Google Inc.
+# Copyright (C) 2011, 2012 Google Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -41,6 +41,7 @@ from ganeti import constants
 from ganeti import errors
 from ganeti import ovf
 from ganeti import utils
+from ganeti import pathutils
 
 import testutils
 
@@ -58,6 +59,7 @@ GANETI_NETWORKS = {
   "nic0_ip": "none",
   "nic0_mac": "aa:00:00:d8:2c:1e",
   "nic0_link": "xen-br0",
+  "nic0_network": "auto",
 }
 GANETI_HYPERVISOR = {
   "hypervisor_name": "xen-pvm",
@@ -90,6 +92,7 @@ VIRTUALBOX_NETWORKS = {
   "nic0_ip": "none",
   "nic0_link": "auto",
   "nic0_mac": "auto",
+  "nic0_network": "auto",
 }
 VIRTUALBOX_HYPERVISOR = {"hypervisor_name": "auto"}
 VIRTUALBOX_OS = {"os_name": None}
@@ -129,6 +132,7 @@ CMDARGS_NETWORKS = {
   "nic0_ip": "none",
   "nic0_mac": "auto",
   "nic_count": "1",
+  "nic0_network": "auto",
 }
 CMDARGS_HYPERVISOR = {
   "hypervisor_name": "xen-pvm"
@@ -206,7 +210,8 @@ EXP_DISKS_LIST = [
   },
 ]
 EXP_NETWORKS_LIST = [
-  {"mac": "aa:00:00:d8:2c:1e", "ip":"None", "link":"br0","mode":"routed"},
+  {"mac": "aa:00:00:d8:2c:1e", "ip":"None", "link":"br0",
+   "mode":"routed", "network": "test"},
 ]
 EXP_PARTIAL_GANETI_DICT = {
   "hypervisor": {"name": "xen-kvm"},
@@ -215,16 +220,16 @@ EXP_PARTIAL_GANETI_DICT = {
   "version": "0",
 }
 EXP_GANETI_DICT = {
-  'tags': None,
-  'auto_balance': 'False',
-  'hypervisor': {
-     'root-path': '/dev/sda',
-     'name': 'xen-pvm',
-     'kernel_args': 'ro'
+  "tags": None,
+  "auto_balance": "False",
+  "hypervisor": {
+     "root-path": "/dev/sda",
+     "name": "xen-pvm",
+     "kernel_args": "ro"
    },
-  'version': '0',
-  'disk_template': None,
-  'os': {'name': 'lenny-image'}
+  "version": "0",
+  "disk_template": None,
+  "os": {"name": "lenny-image"}
 }
 EXP_NAME ="xen-dev-i1"
 EXP_VCPUS = 1
@@ -237,19 +242,22 @@ EXPORT_EMPTY = ("<Envelope xml:lang=\"en-US\" xmlns=\"http://schemas.dmtf.org/"
                 "AllocationSettingData\" xmlns:vssd=\"http://schemas.dmtf.org"
                 "/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData\""
                 " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" />")
-EXPORT_DISKS_EMPTY = "<References /><DiskSection />"
+EXPORT_DISKS_EMPTY = ("<References /><DiskSection><Info>Virtual disk"
+                      " information</Info></DiskSection>")
 EXPORT_DISKS = ("<References><File ovf:compression=\"gzip\" ovf:href=\"new_disk"
                 ".cow.gz\" ovf:id=\"file0\" ovf:size=\"203\" /><File ovf:href="
                 "\"new_disk.cow\" ovf:id=\"file1\" ovf:size=\"15\" />"
-                "</References><DiskSection><Disk ovf:capacity=\"90000\""
-                " ovf:diskId=\"disk0\" ovf:fileRef=\"file0\" ovf:format=\"http"
-                "://www.vmware.com/interfaces/specifications/vmdk.html"
-                "#monolithicSparse\" /><Disk ovf:capacity=\"15\" ovf:diskId="
-                "\"disk1\" ovf:fileRef=\"file1\" ovf:format=\"http://www.gnome"
-                ".org/~markmc/qcow-image-format.html\" /></DiskSection>")
-EXPORT_NETWORKS_EMPTY = "<NetworkSection />"
-EXPORT_NETWORKS = ("<NetworkSection><Network ovf:name=\"routed0\" />"
-                   "</NetworkSection>")
+                "</References><DiskSection><Info>Virtual disk information"
+                "</Info><Disk ovf:capacity=\"90000\" ovf:diskId=\"disk0\" ovf"
+                ":fileRef=\"file0\" ovf:format=\"http://www.vmware.com/"
+                "interfaces/specifications/vmdk.html#monolithicSparse\" /><Disk"
+                " ovf:capacity=\"15\" ovf:diskId=\"disk1\" ovf:fileRef"
+                "=\"file1\" ovf:format=\"http://www.gnome.org/~markmc/qcow"
+                "-image-format.html\" /></DiskSection>")
+EXPORT_NETWORKS_EMPTY = ("<NetworkSection><Info>List of logical networks</Info>"
+                         "</NetworkSection>")
+EXPORT_NETWORKS = ("<NetworkSection><Info>List of logical networks</Info>"
+                   "<Network ovf:name=\"routed0\" /></NetworkSection>")
 EXPORT_GANETI_INCOMPLETE = ("<gnt:GanetiSection><gnt:Version>0</gnt:Version>"
                             "<gnt:AutoBalance>True</gnt:AutoBalance><gnt:"
                             "OperatingSystem><gnt:Name>lenny-image</gnt:Name>"
@@ -259,8 +267,8 @@ EXPORT_GANETI_INCOMPLETE = ("<gnt:GanetiSection><gnt:Version>0</gnt:Version>"
                             "Nic ovf:name=\"routed0\"><gnt:Mode>routed</gnt:"
                             "Mode><gnt:MACAddress>aa:00:00:d8:2c:1e</gnt:"
                             "MACAddress><gnt:IPAddress>None</gnt:IPAddress>"
-                            "<gnt:Link>br0</gnt:Link></gnt:Nic></gnt:Network>"
-                            "</gnt:GanetiSection>")
+                            "<gnt:Link>br0</gnt:Link><gnt:Net>test</gnt:Net>"
+                            "</gnt:Nic></gnt:Network></gnt:GanetiSection>")
 EXPORT_GANETI = ("<gnt:GanetiSection><gnt:Version>0</gnt:Version><gnt:"
                  "AutoBalance>False</gnt:AutoBalance><gnt:OperatingSystem>"
                  "<gnt:Name>lenny-image</gnt:Name><gnt:Parameters /></gnt:"
@@ -270,21 +278,26 @@ EXPORT_GANETI = ("<gnt:GanetiSection><gnt:Version>0</gnt:Version><gnt:"
                  "Hypervisor><gnt:Network><gnt:Nic ovf:name=\"routed0\"><gnt:"
                  "Mode>routed</gnt:Mode><gnt:MACAddress>aa:00:00:d8:2c:1e</gnt:"
                  "MACAddress><gnt:IPAddress>None</gnt:IPAddress><gnt:Link>br0"
-                 "</gnt:Link></gnt:Nic></gnt:Network></gnt:GanetiSection>")
+                 "</gnt:Link><gnt:Net>test</gnt:Net></gnt:Nic></gnt:Network>"
+                 "</gnt:GanetiSection>")
 EXPORT_SYSTEM = ("<References><File ovf:compression=\"gzip\" ovf:href=\"new_"
                  "disk.cow.gz\" ovf:id=\"file0\" ovf:size=\"203\" /><File ovf:"
                  "href=\"new_disk.cow\" ovf:id=\"file1\" ovf:size=\"15\" />"
-                 "</References><DiskSection><Disk ovf:capacity=\"90000\" ovf:"
-                 "diskId=\"disk0\" ovf:fileRef=\"file0\" ovf:format=\"http://"
-                 "www.vmware.com/interfaces/specifications/vmdk.html#monolithic"
-                 "Sparse\" /><Disk ovf:capacity=\"15\" ovf:diskId=\"disk1\""
-                 " ovf:fileRef=\"file1\" ovf:format=\"http://www.gnome.org/"
-                 "~markmc/qcow-image-format.html\" /></DiskSection><Network"
-                 "Section><Network ovf:name=\"routed0\" /></NetworkSection>"
-                 "<VirtualSystem ovf:id=\"xen-dev-i1\"><Name>xen-dev-i1</Name>"
-                 "<OperatingSystemSection ovf:id=\"0\" /><VirtualHardware"
-                 "Section><System><vssd:ElementName>Virtual Hardware Family"
-                 "</vssd:ElementName><vssd:InstanceId>0</vssd:InstanceId><vssd:"
+                 "</References><DiskSection><Info>Virtual disk information"
+                 "</Info><Disk ovf:capacity=\"90000\" ovf:diskId=\"disk0\""
+                 " ovf:fileRef=\"file0\" ovf:format=\"http://www.vmware.com"
+                 "/interfaces/specifications/vmdk.html#monolithicSparse\" />"
+                 "<Disk ovf:capacity=\"15\" ovf:diskId=\"disk1\" ovf:fileRef"
+                 "=\"file1\" ovf:format=\"http://www.gnome.org/~markmc/qcow"
+                 "-image-format.html\" /></DiskSection><NetworkSection><Info>"
+                 "List of logical networks</Info><Network ovf:name=\"routed0\""
+                 " /></NetworkSection><VirtualSystem ovf:id=\"xen-dev-i1\">"
+                 "<Info>A virtual machine</Info><Name>xen-dev-i1</Name>"
+                 "<OperatingSystemSection ovf:id=\"0\"><Info>Installed guest"
+                 " operating system</Info></OperatingSystemSection><Virtual"
+                 "HardwareSection><Info>Virtual hardware requirements</Info>"
+                 "<System><vssd:ElementName>Virtual Hardware Family"
+                 "</vssd:ElementName><vssd:InstanceID>0</vssd:InstanceID><vssd:"
                  "VirtualSystemIdentifier>xen-dev-i1</vssd:VirtualSystem"
                  "Identifier><vssd:VirtualSystemType>ganeti-ovf</vssd:Virtual"
                  "SystemType></System><Item><rasd:ElementName>1 virtual CPU(s)"
@@ -296,20 +309,22 @@ EXPORT_SYSTEM = ("<References><File ovf:compression=\"gzip\" ovf:href=\"new_"
                  "InstanceID><rasd:ResourceType>4</rasd:ResourceType><rasd:"
                  "VirtualQuantity>512</rasd:VirtualQuantity></Item><Item>"
                  "<rasd:Address>0</rasd:Address><rasd:ElementName>scsi"
-                 "_controller0</rasd:ElementName><rasd:ResourceType>6</rasd"
-                 ":ResourceType><rasd:InstanceId>3</rasd:InstanceId></Item>"
-                 "<Item><rasd:ElementName>disk0</rasd:ElementName><rasd:"
-                 "ResourceType>17</rasd:ResourceType><rasd:HostResource>ovf:/"
-                 "disk/disk0</rasd:HostResource><rasd:Parent>3</rasd:Parent>"
-                 "<rasd:InstanceID>4</rasd:InstanceID></Item><Item><rasd:"
-                 "ElementName>disk1</rasd:ElementName><rasd:ResourceType>17"
-                 "</rasd:ResourceType><rasd:HostResource>ovf:/disk/disk1</rasd:"
-                 "HostResource><rasd:Parent>3</rasd:Parent><rasd:InstanceID>5"
-                 "</rasd:InstanceID></Item><Item><rasd:ElementName>routed0"
-                 "</rasd:ElementName><rasd:ResourceType>10</rasd:ResourceType>"
-                 "<rasd:Connection>routed0</rasd:Connection><rasd:Address>aa:00"
-                 ":00:d8:2c:1e</rasd:Address><rasd:InstanceID>6</rasd:Instance"
-                 "ID></Item></VirtualHardwareSection></VirtualSystem>")
+                 "_controller0</rasd:ElementName><rasd:InstanceID>3"
+                 "</rasd:InstanceID><rasd:ResourceSubType>lsilogic</rasd"
+                 ":ResourceSubType><rasd:ResourceType>6</rasd:ResourceType>"
+                 "</Item><Item><rasd:ElementName>disk0</rasd:ElementName><rasd"
+                 ":HostResource>ovf:/disk/disk0</rasd:HostResource><rasd"
+                 ":InstanceID>4</rasd:InstanceID><rasd:Parent>3</rasd:Parent>"
+                 "<rasd:ResourceType>17</rasd:ResourceType></Item><Item><rasd:"
+                 "ElementName>disk1</rasd:ElementName><rasd:HostResource>ovf:/"
+                 "disk/disk1</rasd:HostResource><rasd:InstanceID>5</rasd"
+                 ":InstanceID><rasd:Parent>3</rasd:Parent><rasd:ResourceType>17"
+                 "</rasd:ResourceType></Item><Item><rasd:Address>aa:00"
+                 ":00:d8:2c:1e</rasd:Address><rasd:Connection>routed0</rasd"
+                 ":Connection><rasd:ElementName>routed0</rasd:ElementName><rasd"
+                 ":InstanceID>6</rasd:InstanceID><rasd:ResourceType>10</rasd"
+                 ":ResourceType></Item></VirtualHardwareSection>"
+                 "</VirtualSystem>")
 
 
 def _GetArgs(args, with_name=False):
@@ -385,14 +400,14 @@ class TestOVFImporter(BetterUnitTest):
   def testOVAUnpackingDirectories(self):
     self.importer = ovf.OVFImporter(self.ova_package, OPTS_EMPTY)
     self.assertTrue(self.importer.input_dir != None)
-    self.assertEquals(self.importer.output_dir , constants.EXPORT_DIR)
+    self.assertEquals(self.importer.output_dir , pathutils.EXPORT_DIR)
     self.assertTrue(self.importer.temp_dir != None)
 
   def testOVFUnpackingDirectories(self):
     self.importer = ovf.OVFImporter(self.virtualbox_ovf,
       OPTS_EMPTY)
     self.assertEquals(self.importer.input_dir , _GetFullFilename(""))
-    self.assertEquals(self.importer.output_dir , constants.EXPORT_DIR)
+    self.assertEquals(self.importer.output_dir , pathutils.EXPORT_DIR)
     self.assertEquals(self.importer.temp_dir , None)
 
   def testOVFSetOutputDirDirectories(self):